TCP的三次握手和四次挥手
1、TCP头部的规范定义
1 | 0 15|16 31 |
2、TCP的三次握手:
1 | Client(SYN_SENT) --> SYN=1,seq=k --> Server(SYN_RCVD) |
为什么需要三次握手:
能够避免server端资源的浪费。
1、当Client端发送连接请求并没有丢失,而是在某个网络接点上滞留了,以至于延迟到连接释放以后的某个节点才到达Server;
2、本来只是一个早已失效的报文段,Server端接收到之后误认为这是Client端的一个新的请求,于是发送了连接确认报文;
3、如果不采用”三次握手”,只要等Server发送确认,新的连接就已经建立了;
4、等待Client端发送数据,但是此时Client不会理睬Server端的确认,也不会向Server端发送数据;
5、但是Server端认为连接已经建立还在等着Client的数据,此时就会存在Server端资源的浪费;
3、TCP的四次挥手
1 | Client(FIN_WAIT_1) --> FIN=1,seq=k --> Server(CLOSE_WAIT) |
4、为什么需要四次挥手
首先TCP是一种面向连接的、可靠的、基于字节流的运输层通讯协议,TCP是全双工模式
建立连接时,通过SYN+ACK能够确定双方均在线即可正常收发报文;
由于双工模式,假设Client端没有需要发送的报文了,于是发送FIN报文,Server端收到后给出了ACK确认报文;
但是有可能Server端还存在需要发送的报文,这个时候就需要Server端发送一次FIN报文,让Client端来确认
5、为什么需要等待2MSL?
MSL:报文段最大生存时间,它是任何报文在丢弃前在网络内的最长时间。
第一点:保证TCP全双工能够正常可靠关闭;
第二点:保证这次连续的重复数据段从网络中消失;