TCP协议的三次握手和四次挥手

TCP建立连接三次握手:

PC1 向PC2发送数据时

第一次握手pc1向PC2发送请求建立连接的请求报文(SYN报文),此时seq=x  SYN=1 

第二次握手PC2收到PC1的请求报文做出回应,向pc1发送回应报文(ACK+SYN报文)此时seq=y  ACK=x+1(确认序号)  SYN=1  ACK=1

第三次握PC1收到PC2的回应报文再次确认并向PC2发送确认报文(ACK报文)此时seq=x+1  ACK=y+1  ACK=1

TCP三次握手:

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP断开连接四次挥手:

主动方与被动方断开连接时

第一次挥手主动方向被动方发送断开连接的请求报文此(FIN/ACK报文),此时FIN=1  ACK=1

此时主动方进入半关闭状态,但是仍然可以传输数据。

第二次挥手被动方收到主动方的请求断开连接的报文做出回应,向主动方发送回应报文(ACK报文)此时ACK=1

第三次挥手被动方向主动方发送断开连接的报文FIN/ACK报文,此时FIN=1  ACK=1

第四次挥手主动方收到被动方要断开的报文做好回应向被动方发出要关闭的报文ACK报文,此时ACK=1

此时主动方进入全关闭状态(在这个关闭状态下持续时间为2个最长报文周期——周期长短可以人为调节),但仍然可以接受被动方

TCP四次挥手:

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

URG:紧急指针   SYN:同步序号位   PSH:推送指针  ACK:确认序号位   RST:复位指针  SYN:同步指针   seq:序列号

SYN=1 ACK=0 时连接为请求报文;SYN=1 ACK=1时连接为响应报文

原文地址:https://www.cnblogs.com/XXXX001/p/11191418.html