综合解读TCP为什么三次握手

TCP为什么三次握手

首先可以先参考下面这篇文章。
TCP 为什么三次握手而不是两次握手(正解版)

以下都为个人理解。

结论先行:
三次握手本质目的是同步连接双方的序列号(seq)和确认号(ack)并交换 TCP窗口大小信息。

也可以理解为文章TCP 为什么三次握手而不是两次握手(正解版)中的结论

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

首先关于计算机网络书上对于为何需要第三次握手的解释肯定是正确的理解
其中原文:

为什么A最后还要发送一次确认呢?这主要是防止已失效的连接请求报文突然又传送到了B,因而产生错误。

然后对于“已失效的连接请求报文”,原文中是这样定义的:

先假定一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同一建立连接。假定不采用报文握手,那么只要B发出确认,新的连接就建立了。
由于现在A没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却认为新的运输连接已经建立了,并一致等待A发送来数据。B的资源就这样白白浪费了。

根据原文中可以得出:造成这种情况的本质就是B在没有收到A对B刚刚发送的报文段进行回应的情况下就建立了连接。

也就是说作者的假设是建立在不需要对第二次握手的报文段进行回应的情况上,这种情况就会导致B的资源白白浪费,所以需要第三次确认,也就是说本质上就是需要第三次握手,才不会导致错误情况。

那么对于TCP 为什么三次握手而不是两次握手(正解版)文章中的解释,其实和教科书上的解释都是在解释一个事情,我给你发送了信息,你不给我回应,我就不知道你是否收到信息,那么我就不应该继续给你发消息。

而TCP实现可靠的方式之一就是通过同步ack和seq来确保报文段的收发。

猜你喜欢

转载自blog.csdn.net/TheCarol/article/details/109702573
今日推荐