「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」。
TCP三次握手概念
TCP即是传输层控制协议,TCP是主机对主机层的传输控制层协议,提供可靠的连接服务,采用三次握手确认建立一个连接。
TCP连接6种标识
SYN(synchronous):建立连接
ACK(acknowledgement):确认
PSH(push):传送
FIN(finish):结束
RST(reset):重置
URG(urgent):紧急
Sequence number:顺序号码
数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。
Acknowledge number:确认号码,代表下一个数据包编号
三次握手过程
-
第一次握手:主机A向主机B发送位码SYN=1,以及发送随机的顺序号码seq,B主机接收到SYN知道A请求建立链接
-
第二次握手:主机B要确认连接信息,向主机A发送SYN=1,ACK=1,ack number确认号码(seq+1),以及随机产生的seq
-
第三次握手:主机A收到后检查ack_number是否正确,以及位码 ACK是否为1,如果信息正确,主机A向主机B发送ack_number(主机B的seq+1),ack=1,主机B收到后确认ACK以及ack_number,信息正确则连接建立成功
为什么需要三次握手
如果只有两次请求,服务端不确定客户端是否收到确认请求,有可能这个确认消息由于某些原因丢失。第三次握手,客户端收到确认请求,再发出一个确认(ACK)消息,意思是告诉服务端客户端是通的,然后客户端和服务端就可以建立连接通信了。
TCP四次挥手
四次挥手过程
-
第一次挥手:当客户端主动要求断开连接时,客户端会向服务端发送标识位 FIN=1,以及随机seq=u,此时客户端进入FIN-WAIT-1状态(不能发送数据,但可以接收数据,应答数据)
-
第二次挥手:当服务端接收到客户端的断开请求FIN时,并不会立即断开连接,而是先向客户端回复客户端的断开请求,表示已经接收到,会向客户端发送ACK=1,随机v,以及ack_number=u+1,于此同时服务端会进入close-wait状态,客户端接收到服务器请求进入FIN-WAIT-2状态
-
第三次握手
服务端确认传输到客户端的数据已经结束后,就会向客户端请求断开连接,向客户端发送标识位FIN=1,ACK=1,ack_number=u+1,seq=z,服务端状态变为LAST-ACK
- 第四次握手
客户端接收到服务端断开请求后,会回复服务端断开请求,FIN=1,ACK=1,ack_number=z+1,seq=h,h为客户端随机生成,此时客户端会进入TIME-WAIT状态,要经过2MSL时间才能真正释放。服务端在接到客户端断开请求回复后立即释放
为什么需要四次挥手
因为TCP连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免client数据发送完毕,向server发送FIN关闭连接,而server还有发送到client的数据没有发送完毕的情况。所以关闭TCP连接需要进行四次握手,每次关闭一个方向上的连接需要FIN和ACK两次握手