为什么Tcp连接的创立需要三次握手 ,而断开需要四次挥手

为什么Tcp连接的创立需要三次握手 ,而断开需要四次挥手_第1张图片
这是经典的三次握手,为啥是3次?
刚开始不明白,后来读了一些书,看了一些资料,了解了基于TCP协议传递信息流的通信方式。
发送方以确定SYN标志,同时生成一个ISN(初始序列号),也就是消息序号来发送信息(消息字节数n)。接收方如果收到了信息,会以ACK标志和下次需要对方传递的序号值发送给对方,ack标志告诉对方我已经收到了信息,传递序号ISN+n告诉对方下次从这个序号的地方开始发送。
两次消息的传递,意味着一次通信的完成。后面消息的序号都是基于ISN和传递消息的字节数逐渐累加计算得来。
TCP协议的通信方式规定是这样的。同时,基于tcp协议的双方是双全工的,也就是说通信双方都可以向对方发送消息,也都可以独立关闭自己一方的通信通道。
基于通信方式和双全工的特性,所以在tcp连接建立时
client需要将自己的ISN序号告知对方,同时需要对方的确定。
server也需要将自己的ISN序号告知对方,同时也要对方的确定。
在上图中,server将自己的ack和发出的syn标志的告知对方ISN的合并在一次传递中,这样子节省流量。所以三次握手很合理。

为什么Tcp连接的创立需要三次握手 ,而断开需要四次挥手_第2张图片
至于四次挥手,同样也是基于以上的原理。尤其是通信双方都可以独立关闭自己的通信通道,也就是半关闭。
client先发送FIN告知对方我已经完成数据发送了,server回复ack来确定我知道了。这样一个流程,就关闭了client的发送信息通道。但是还可以接收来自server方的数据。
server此时已经知道接收不到client的数据了,但是还可以给它发送数据。如果server也没有啥数据要发送给对方了,server也会以FIN标志位发送一个信息给client,client接到后,也会传递一个ack表示知道了。这样子,双方都完成了关闭。

你可能感兴趣的:(网络编程)