为什么不是两次握手?为什么不是三次挥手?(个人理解)
(1) 为什么不是两次握手?
TCP三次握手的目的是为了建立可靠链接,至于三次握手过程如下图,
总结一句话代表三次握手:“请让我知道你知道了我”
备注:上图来源于https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
之所以是三次握手,是因为TCP协议初衷就是要设计出一个可靠的链接服务,而为了满足建立可靠链接这个需求,设计人员设计了两个标志性参数作为可靠的保证:seq和ack确认。只有双方都收到自己的seq被对方确认,才会认为这条链接是可靠的。
如果只是两次握手, 那么至多只有链接发起方的起始***能被确认, 另一方的***则得不到确认。换句话说,如果是两次握手建立链接,第二次握手时发生丢包,那么客户端就无法与服务器建立链接。
(2) 为什么不是三次挥手?
四次挥手的过程如下:
第一次挥手:客户端主动请求关闭,表明客户端没有数据发送,但可以接收收据。
第二次挥手:服务器给客户端确认,表明收到客户端的关闭请求,但服务器还有数据要发送,让客户端等等。
第三次挥手:服务器没有数据发送了,也请求关闭连接,但仍然接收数据。
第四次挥手:服务器必须要等待客户端一个确认,才会关闭连接。之后客户端经过一段超时等待(即确认服务器已经断开)也关闭连接。
备注:上图来源于https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
为什么不是三次挥手?
如果是三次挥手。那么情况挥手情况就会如下:
第一次挥手:客户端主动请求关闭,表明客户端没有数据发送,但可以接收收据。
第二次挥手:服务器也向客户端发起关闭连接请求,并确认客户端的关闭链接。
第三次挥手:客户端回复ACK确认,双方链接关闭。
那么问题来了,如果在第三次挥手中客户端回复ACK后,服务器的数据还没发完,但只有三挥手,服务器只能选择关闭连接,这样客户端的数据就会不完整,与TCP可靠链接初衷相违背