We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
目录
关于 TCP 为什么需要三次握手建立连接、四次挥手断开连接,网上有很多标准的答案,很多讲的都非常不错。这里总结一下三次握手四次挥手中我认为最能帮助理解的原因分析。
先看一下三次握手建立连接的图示:
为什么需要三次握手呢?关键的原因是 通信双方为了相互确认对方收发信息的能力都是正常的。这也是 TCP 建立连接的目的。具体而言:
所以,经过以上三步,客户端和服务器都完全确认对方收发信息的能力都是正常的,连接建立成功,可以正常传输数据了。
先看一下四次挥手断开连接的图示:
需要四次挥手断开连接的关键原因是,通信双方为了相互确认对方不再发送数据给自己了。为什么只需要确认不再发送信息而不需要确认接收信息呢?因为接收信息是对方自己可以完全处理的事情,不需要自己关心,而对方如果还需要发送信息,那必须等待对方发完,否则最终自己接收到的信息可能就是不完整的。
具体而言:
<FIN_WAIT1>
<FIN_WAIT2>
<LAST_ACK>
<TIME_WAIT>
<CLOSE>
为什么客户端最后需要在 <TIME_WAIT> 状态等待 2MSL 的时间呢?因为网络是不可靠的,最后一个 ACK 报文可能丢失到不了服务器。服务器在发送完最后一个 FIN 之后,如果在超时时间内没有收到客户端的 ACK,会重发一次 FIN 给客户端,客户端会再重发一个 ACK 报文并重新计时。如果客户端不等待 2MSL 直接进入关闭状态,那么服务器可能永远收不到最后的 ACK 报文了,也就无法进入关闭状态了。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
目录
1 三次握手建立连接[Top]
关于 TCP 为什么需要三次握手建立连接、四次挥手断开连接,网上有很多标准的答案,很多讲的都非常不错。这里总结一下三次握手四次挥手中我认为最能帮助理解的原因分析。
先看一下三次握手建立连接的图示:
为什么需要三次握手呢?关键的原因是 通信双方为了相互确认对方收发信息的能力都是正常的。这也是 TCP 建立连接的目的。具体而言:
所以,经过以上三步,客户端和服务器都完全确认对方收发信息的能力都是正常的,连接建立成功,可以正常传输数据了。
2 四次挥手断开连接[Top]
先看一下四次挥手断开连接的图示:
需要四次挥手断开连接的关键原因是,通信双方为了相互确认对方不再发送数据给自己了。为什么只需要确认不再发送信息而不需要确认接收信息呢?因为接收信息是对方自己可以完全处理的事情,不需要自己关心,而对方如果还需要发送信息,那必须等待对方发完,否则最终自己接收到的信息可能就是不完整的。
具体而言:
<FIN_WAIT1>
状态。<FIN_WAIT2>
状态,即等待服务器 FIN 报文过来的第二个阶段。<LAST_ACK>
状态,即等待最后确认状态。<TIME_WAIT>
状态,在这个状态下,需要等待 2MSL 时间(2个最大报文生存时间)后最终进入<CLOSE>
状态。同时向服务器发送最后一个 ACK 确认报文。为什么客户端最后需要在
<TIME_WAIT>
状态等待 2MSL 的时间呢?因为网络是不可靠的,最后一个 ACK 报文可能丢失到不了服务器。服务器在发送完最后一个 FIN 之后,如果在超时时间内没有收到客户端的 ACK,会重发一次 FIN 给客户端,客户端会再重发一个 ACK 报文并重新计时。如果客户端不等待 2MSL 直接进入关闭状态,那么服务器可能永远收不到最后的 ACK 报文了,也就无法进入关闭状态了。The text was updated successfully, but these errors were encountered: