TCP、UDP的区别
TCP需要先建立连接,而UDP不需要。所以TCP是可靠的,通过确认重发机制去保证数据的可靠传输,UDP是不可靠的,数据包可能会丢失重复乱序。
TCP适用于对数据准确性要求高的场合,例如网页浏览,电子邮件,文件传输。
UDP适合对于速度要求高可以容忍一定丢失的场合,例如抖音直播。
HTTP和HTTPS的区别
- HTTPS是HTTP的增强版,在HTTP的基础上加入了SSL/TSL协议,确保数据在传输过程中是加密的。SSL/TLS需要向CA申请数字证书,用于验证服务器的身份。
- HTTP默认端口号是80,HTTPS默认端口号是443。
- 客户端请求服务端后,服务端确定加密和hash算法,返回证书和公钥,客户端生成随机密钥,发送密钥,服务端用私钥解密,获取会话密钥,使用会话密钥加密解密。
Cookie和Session的区别
Cookie是保存在客户端的一小块文本串的数据。客户端向服务器发起请求时,服务端会向客户端发送一个cookie,客户端就把cookie保存起来,下一次请求可以携带cookie请求,服务端根据cookie判断用户的身份和状态。
Session指的是服务器和客户端一次会话的过程。它是另一种记录客户状态的机制,session保存在服务器上。
OSI网络七层协议模型
OSI是理论上的网络通信模型,分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP四层模型是实际应用层面上的网络模型,分为网络接口层、网络层、传输层、应用层。
应用层:直接面向用户和应用程序提供网络服务,例如HTTP。
传输层:负责端到端的传输,确保数据可靠传输,常见的传输层协议有TCP和UDP。
网络层:负责多个网络之间的数据传输功能,常见协议是IP协议。
网络接口层:负责数据帧的传输,定义了网络在链路上如何传输数据。
TCP三次握手,四次挥手
- 第一次握手:SYN
发起连接:客户端发送一个TCP报文到服务器,在报文的头部中,SYN位被设置为1,表明是一个连接请求。同时客户端会随机一个seq序列号,假设为x发送给服务器。
- 第二次握手:SYN+ACK
确认并应答:服务器收到客户端的请求连接之后,如果同意建立连接,他会发送一个应答的TCP报文段,在这个报文段中,SYN和ACK位置都被设置为1。服务器也会选择自己的一个随机序列号假设为y,并将确认号设置为x+1。
- 第三次握手:ACK
最终确认:服务端收到服务器的应答后,还需要向服务器发送一个ACK,确认号被设置为y+1,自己的序列号是x+1。
三次握手需要双方都确认收发功能,所以不能是两次,而且两次会有历史请求突然传到服务端的问题。四次的话因为三次已经完整确认了收发功能所以不需要四次。
- 第一次挥手:FIN
客户端向服务端发送一个FIN报文,表示客户端没有数据要发送了,但仍然可以接受数据。
- 第二次挥手:ACK
服务端收到FIN报文之后,向客户端发送一个ACK报文,表示确认收到客户端的FIN请求。
- 第三次挥手:FIN
服务器向客户端发送一个FIN报文,表示服务器也没有数据要发送了。
- 第四次挥手:
客户端收到FIN报文之后,向服务器发送一个ACK报文,确认已经接收到服务器的FIN请求,会等待一段时间进入closed状态确保服务端收到ACK报文。
浏览器输入URL到页面展现的整个过程
- DNS解析:浏览器发起一个DNS请求到DNS服务器,将域名解析为服务器的IP地址。
- TCP链接:在获得IP地址后,需要与服务端建立TCP连接才能通信,也就是要经历TCP三次握手。
- 发送HTTP请求:在建立连接之后,我们就可以和服务端进行通信了,我们浏览器会构建HTTP请求,包含请求行、请求头、请求体,然后发送HTTP请求。
- 服务器收到HTTP请求:服务器在收到HTTP请求之后,会根据请求的资源路径,经过后端处理返回HTTP响应。
- 浏览器接收到HTTP响应:解析响应体中的数据,渲染页面。
- 断开链接:TCP四次挥手,连接结束。
常见状态码以及它们的含义
101 切换请求协议
200 请求成功
301 永久重定向
302 临时重定向
400 请求的语法错误
401 当前请求需要认证
403 服务器拒绝执行
404 服务器找不到资源
500 服务器内部错误