tcp 3次握手和4次挥手

TCP标志位

(参考来源:https://blog.csdn.net/ltstud/article/details/73995933和 https://blog.csdn.net/weixin_30832351/article/details/96823895)

6个标志位

SYN:(synchronous同步,建立联机)

ACK:(acknowledgement 确认)

PSH:(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

 

3次握手

主机A->主机B(第一次握手):  (可以建立连接吗?)           syn=1,seq number=1234567(随机产生);主机B收到  syn=1后知道是a要建立连接;

主机B->主机A(第二次握手):(可以建立连接。)              ack number=(主机A的seq+1), syn=1, ack=1,seq=7654321(随机产生);

主机A->主机B(第三次握手):(确认中,开始连接-->连接成功)  (检查ack number?= (第一次握手seq)seq+1,ack?=1),若等于,发送ack number=(主机B(第二次握手)的seq+1),ack=1;主机B收到后确认(检查ack number?= (第二次握手seq)seq+1,ack?=1)后连接建立成功

四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

但某一方的数据发送任务完后,给另一方发送一个FIN(我这边数据发完的,我要关闭我的发送通道),(收到fin后还是可以继续发,但关闭此次连接的自己的收,不会在收到数据);收到fin后返回确定。(FIN标识是通过发送  最后一块数据时  设置的FIN标识是通过发送最后一块数据时设置的)

 

a->b:(a: 嘿,我的数据包发完了200。发完告诉我500)  fin:200,ack:500(sign:ACK=1,FIN=1)

b->a:(b:  额,你发完了呀201。b关闭此连接的收,a关闭此连接的发)  ack:201(ACK=1)

b->a:(b: 嘿,我的数据包发完了500。)fin:500,ack:201(sign:ACK=1,FIN=1)

a->b: (a:额,你发完了呀501。a关闭此连接的收,b关闭此连接的发) ack:501(ACK=1)

从建立连接到断开连接状态变化

client:

 server:

原文地址:https://www.cnblogs.com/baixinL/p/11967112.html