网络体系结构(OSI七层,TCP/IP四层,折中五层)
- 应用层:对应OSI的应用层7、表示层6、会话层5,应用层协议如TELNET、FTP、SMTP、DNS、HTTP
- 运输层:两主机应用进程利用运输层协议传送应用层报文。数据单位:TCP/UDP报文。
- 网络层:选择合适的网络路由和交换节点。数据单位:IP报文。
- 数据链路层:将IP报文组成帧(包含同步信息,地址信息,差错控制等)。数据单位:帧。 – ARP协议:根据ip地址解析mac地址。在OSI七层模型中属于链路层,在TCP/IP四层模型中属于网络层。
- 物理层:数据单位:比特。
三次握手 & 四次挥手
三次握手
1. 第一次握手:客户端向服务端发起连接请求SYN。
第一次握手:服务端收到连接请求,确认客户端发送正常,服务端接受正常。
2. 第二次握手:服务端向客户端回复确认ACK,并发送请求SYN。
第二次握手:客户端收到ACK和SYN,确认客户端发送正常,服务端接受正常(服务端有收到自己的请求);服务端发送正常,客户端接受正常(自己有收到服务端回复)
3. 第三次握手:客户端向服务端发送确认ACK。
第三次握手:服务端收到确认ACK,确认客户端接受正常,服务端发送正常(客户端有收到自己的请求)
Q: 为什么需要第三次握手?
A: 防止失效的报文突然传到服务器。场景:假如遇到网络阻塞,客户端的请求迟迟没有到达服务端。突然网络通畅,服务端收到了请求,并给出回复。假如只有2次握手,客户端知道请求失效,却不能传达给服务端;服务端误以为请求生效,建立连接。
四次挥手
1. 第一次挥手:客户端向服务端发起释放请求FIN,停止发送数据,状态变为FIN-WAIT-1。
2. 第二次挥手:服务端TCP回复ACK,通知高层应用进程客户端连接释放了,不会再收到数据,状态变为CLOSE-WAIT。此时客户端处于半关闭状态,状态变为FIN-WAIT-2,服务端仍可以发送数据。
3. 第三次挥手:服务端向客户端发送释放请求FIN,并停止发送数据,状态变为LAST-ACK。
4. 第四次挥手:客户端发送回复ACK,服务端收到回复后变为CLOSED,客户端状态变为TIME-WAIT,等待2MSL后变为CLOSE
Q: 为什么第四次挥手时,客户端要等待2MSL才关闭?
A: MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。
第一,防止ACK报文丢失。假如服务端长时间没收到ACK(报文丢失),会重新发送一次FIN,此时客户端在TIME-WAIT状态就可以继续响应,如果直接CLOSED将无法完成重试。
第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。
为什么建立连接是三次握手,断开连接是四次挥手
A: 建立连接的第二次握手合并了ACK和SYN,相当于第二次挥手和第三次挥手。在断开连接过程中,服务端回复客户端释放请求和服务端发送释放请求之间,服务端有发送数据报文的场景,所以第二、第三次挥手要分开。建立连接时,服务端响应客户端SYN和服务端发送SYN之间没有其他事要做,所以可以合并成一次握手。
TCP、UDP区别
TCP可靠性
- 数据切割(成数据块)
- 数据包编号(有序传输)
- 校验和(差错校验)
- 发送方超时重试
- TCP接收方丢弃重复(发送方重试)
- 流量控制(滑动窗口):防止发送的数据超出接收方缓存空间(处理能力)。
- 拥塞控制:网络拥塞,减少发送。
- ARQ协议:确认分组被接受后再发送下一个分组。
ARQ协议
自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之⼀。它通过使⽤确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送⽅在发送后⼀段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停⽌等待ARQ协议和连续ARQ协议。
流量控制和拥塞控制
- 解决的问题
流量控制:发送的数据超出接收方数据处理能力。
拥塞控制:网络上对于资源的请求(同一时间发送的所有数据)超出网络中所有涉及的主机、路由、链路的数据处理能力。 - 解决的方法 流量控制:TCP接受方在确认报文中发送一个窗口字段,通知发送方允许的最大窗口大小,限制发送方的发送速率(滑动窗口)。 拥塞控制:TCP发送方维持⼀个 拥塞窗⼝(cwnd) 的状态变量,根据网络拥塞情况动态变化。发送方发送的窗口大小取决于拥塞窗口和接受方窗口字段的最小值。
长连接&短连接
短连接:HTTP/1.0 默认短连接,每一次HTTP操作就建立一次连接,任务结束就中断。 长连接:HTTP/1.1以上 默认长连接,页面打开后,客户端和服务器之间的TCP连接不会关闭,会维持一段时间。在这个时间内连接可以复用。 标志:长连接的标志是 Response Headers 中加入代码 Connection:keep-alive。 本质:HTTP长短连接的本质是TCP长短连接。
cookie、session、token
HTTP和HTTPS
- 端口:http://默认端口80,https://默认端口443
- 安全性:HTTP->TCP明文传输。HTTPS->SSL/TLS->TCP,传输内容对称加密,对称密钥用服务器证书非对称加密。