创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡><)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多计算机网络知识专栏:计算机网络
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
CLOSE
状态LISTEN
seq
SYN置为1
,然后客户端处于SYN_SEND
状态seq
包,ack
为客户端的seq+1
,ACK置为1
,然后服务端处于SYN_RCVD
状态seq
为客户端初始seq+1
,ack
为服务端seq+1
的包,然后处于ESTABILSHED
状态,服务端收到这个ack
包后也处于ESTABLISHED
状态,可以开始收发数据在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费
服务端需要接收到发送端ACK的ACK才能建立连接,也确保了客户端拥有接收的能力
服务端在发送ACK包的同时也可以发送SYN包,三次握⼿就已经理论上最少可靠连接建⽴,所以不需要使⽤更多的通信次数。
ESTABLISHED
状态,其中一方发起关闭连接请求,称为主动方,另一方为被动方seq
为上一个数据包中ack
,ack
为上一数据包seq+1
,FIN置为1
的报文,代表想要关闭连接,之后主动方处于FIN_WAIT_1
状态seq
为这个FIN报文中ack
,ack为这个FIN报文中seq+1
,FIN为1
的报文,然后被动方处于CLOSE_WAIT
状态FIN_WAIT_2
状态seq
为上一seq+1
,ack
为最初主动方发出的FIN报文中seq+1
,FIN置为1
的报文,然后被动方处于LAST_ACK
状态,等待接收最后一个ACKseq
为上一ack
,ack为上一seq+1
,然后主动方处于TIME_WAIT
状态于CLOSE
状态,代表已经关闭连接2MSL
时间后,置为CLOSE
状态,自动关闭连接FIN
报文时,先回一个ACK
应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接从上⾯过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN ⼀般都会分开发送,从⽽⽐三次握⼿导致多了⼀次。
MSL(Maximum Segment Lifetime)是报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃
2MSL 的时间是从主动方接收到 FIN 后发送 ACK 开始计时,一来一回需要等待 2 倍的时间即2MSL
如果在 TIME-WAIT
时间内,主动方的最后一个ACK没有传输到被动方,被动方没有收到ACK应答,就会重发FIN 报⽂,那么 2MSL 时间将重新计时
** **
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |