可以只看这一篇:https://mp.weixin.qq.com/s/NIjxgx4NPn7FC4PfkHBAAQ
一句话概括,TCP连接握手,握的是啥?
通信双方数据原点的序列号!
Why do we need a 3-way handshake? Why not just 2-way?
why not just use a two-way handshake? The short answer is because a two way handshake would only allow one party to establish an ISN, and the other party to acknowledge it. Which means only one party can send data.
But TCP is a bi-directional communication protocol, which means either end ought to be able to send data reliably. Both parties need to establish an ISN, and both parties need to acknowledge the other's ISN.
为什么不只是使用双向握手? 简短的回答是因为双向握手只允许一方建立ISN,而另一方则承认它。 这意味着只有一方可以发送数据。
但TCP是一种双向通信协议,这意味着任何一端都应该能够可靠地发送数据。 双方都需要建立一个ISN,双方都需要承认对方的ISN。
四次挥手:
TCP连接是双向传输的对等的模式,就是说双方都可以同时向对方发送或接收数据。当有一方要关闭连接时,会发送指令Fin告知对方,我要关闭连接了。这时对方会回一个ACK,此时一个方向的连接关闭。
但是另一个方向(假设A)仍然可以继续传输数据,等到发送完了所有的数据后,会发送一个FIN段来关闭此方向(A)上的连接。
接收方发送ACK确认关闭连接。注意,接收到FIN报文的一方只能回复一个ACK, 它是无法马上返回对方一个FIN报文段的,因为结束数据传输的“指令”是上层应用层给出的,我只是一个“搬运工”,我无法了解“上层的意志”
。
比较三次握手与四次挥手,其实是把三次握手中的第二次握手 ACK+SYN 拆分发送。