【计算机网络】详解TCP协议(中) 三次握手与四次挥手

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡><)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多计算机网络知识专栏:计算机网络
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ


目录

  • 一、建立TCP连接——三次握手
    • 为什么不是两次握手或四次握手
  • 二、TCP连接断开——四次挥手
    • 为什么挥手需要四次?
    • 2MSL时间

一、建立TCP连接——三次握手

【计算机网络】详解TCP协议(中) 三次握手与四次挥手_第1张图片

  • 1.客户端和服务端都处于CLOSE状态
  • 2.服务端监听状态LISTEN
  • 3.客户端发起连接,发送一个随机数起始的seq SYN置为1,然后客户端处于SYN_SEND状态
  • 4.服务端收到seq包后,向客户端发送服务端初始的seq包,ack为客户端的seq+1,ACK置为1,然后服务端处于SYN_RCVD状态
  • 5.客户端收到服务端的seq包后,向服务端发送seq为客户端初始seq+1ack为服务端seq+1的包,然后处于ESTABILSHED状态,服务端收到这个ack包后也处于ESTABLISHED状态,可以开始收发数据

为什么不是两次握手或四次握手

  • 两次握手:服务端未接收到客户端的ACK就建立连接:

【计算机网络】详解TCP协议(中) 三次握手与四次挥手_第2张图片

在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费

服务端需要接收到发送端ACK的ACK才能建立连接,也确保了客户端拥有接收的能力

  • 四次握手:

服务端在发送ACK包的同时也可以发送SYN包,三次握⼿就已经理论上最少可靠连接建⽴,所以不需要使⽤更多的通信次数。
【计算机网络】详解TCP协议(中) 三次握手与四次挥手_第3张图片

二、TCP连接断开——四次挥手

【计算机网络】详解TCP协议(中) 三次握手与四次挥手_第4张图片

  • 1.客户端和服务端发送接收数据,都处于ESTABLISHED状态,其中一方发起关闭连接请求,称为主动方,另一方为被动方
  • 2.主动方被动方发出seq为上一个数据包中ackack为上一数据包seq+1,FIN置为1的报文,代表想要关闭连接,之后主动方处于FIN_WAIT_1状态
  • 3.被动方收到这个FIN报文后,向主动方发送一个seq为这个FIN报文中ack,ack为这个FIN报文中seq+1,FIN为1的报文,然后被动方处于CLOSE_WAIT状态
  • 4.当主动方收到这个报文后,主动方处于FIN_WAIT_2状态
  • 5.等待被动方处理完数据,向主动方发送seq为上一seq+1ack为最初主动方发出的FIN报文中seq+1,FIN置为1的报文,然后被动方处于LAST_ACK状态,等待接收最后一个ACK
  • 6.当主动方收到报文后,向被动方发送seq为上一ack,ack为上一seq+1,然后主动方处于TIME_WAIT状态
  • 7.当被动方收到这个报文后,被动方**不会再发送包,处于CLOSE状态,代表已经关闭连接
  • 8.在主动方超过2MSL时间后,置为CLOSE状态,自动关闭连接

为什么挥手需要四次?

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据
  • 服务端收到客户端的 FIN 报文时,先回一个ACK应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接

从上⾯过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN ⼀般都会分开发送,从⽽⽐三次握⼿导致多了⼀次。

2MSL时间

MSL(Maximum Segment Lifetime)是报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃

2MSL 的时间是从主动方接收到 FIN 后发送 ACK 开始计时,一来一回需要等待 2 倍的时间即2MSL

如果在 TIME-WAIT 时间内,主动方的最后一个ACK没有传输到被动方,被动方没有收到ACK应答,就会重发FIN 报⽂,那么 2MSL 时间将重新计时

** **


大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

你可能感兴趣的:(【计算机网络】,计算机网络,tcp/ip,网络,笔记,学习,网络协议)