TCP协议的三次握手和四次挥手过程?
所谓三次握手,是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息,在socket编程中,客户端执行connect()时。将触发三次握手。
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户端打算连接的服务器的端口,以及初始序列号X,保存在包头的序列号字段中
(syn=1,ack=0,seq=x)
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认号(ACK)设置为客户端的初始序列号加一,即X+1
(syn=1,ack=x+1,seq=y)
第三次握手:
客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1,并且把服务器发来ACK的序号字段+1
(syn=0,seq=x+1,ack=y+1)
TCP四次挥手:
TCP的连接的拆除需要发送四个包,因此称为四次挥手,客户端和服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
第一次挥手:client发送一个FIN,用来关闭Client到server的数据传送,然后等待服务器确认,其中终止标志位FIN=1
(fin=1,ACK=z,SEQ=x)
第2次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1
(ACK=X+1,SEQ=Z)
第3次挥手:
Server发送一个fin,用来关闭Server到client的数据传送
(fin=1,ack=x,seq=y)
第4次挥手:
client收到FIN后,client接着发送一个ack给server,确认序号为收到序号加一,client和server关闭连接
(ack=y+1)