你的位置:开元ky888棋牌app网页版官网入口 > 集团文化 > 回覆了个千赞成就:TCP为何需求三次握手?
回覆了个千赞成就:TCP为何需求三次握手?
发布日期:2022-08-06 20:25    点击次数:149

巨匠好,我是小林。

从前我在图解网络 PDF 里写「TCP 为何需求三次握手?」,给出了三个启事:

三次握手才可以或许阻止历史跟尾的初始化(次要启事); 三次握手才可以或许同步单方的初始序列号; 三次握手才可以或许防止资源糟践;

同时,这个内容也在知乎失去了 1000 多赞。

个中,在讲第一个启事的岁月,提到「三次握手可以或许通太凹凸文鉴定今后跟尾是不是历史跟尾,而两次握手没法鉴定」。

因为事先没有详细说为何两次握手没法鉴定历史跟尾,导致有良多读者私信我这个成就。

所以,此次详细说一下,顺便给巨匠复习下,这个笔试被问到发霉的成就。

TCP 两次握手为何没法阻止历史跟尾?

我从前的图解网络 PDF 里写的是,两次握手没法鉴定历史跟尾。

着实这句话,不太正确,因为就像读者问的那样,第二次握手的岁月,客户端也可以痛处他的序列号和收到的报文中切实认号举行相比。

所以,该当改为「TCP 两次握手没法阻止历史跟尾」。

那为何 TCP 两次握手为何没法阻止历史跟尾呢?

我先间接说结论,主若是因为在两次握手的环境下,「主动发起方」没有中央形态给「主动发起方」来阻止历史跟尾,导致「主动发起方」可以或许直立一个历史跟尾,构成资源糟践。

你想一想,两次握手的环境下,「主动发起方」在收到 SYN 报文后,就进入 ESTABLISHED 形态,意味着这时候可以或许给对方发送数据给,然则「主动发」起方此时尚未进入 ESTABLISHED 形态,假设此次是历史跟尾,主动发起方鉴定到此次跟尾为历史跟尾,那末就会回 RST 报文来断开跟尾,而「主动发起方」在第一次握手的岁月就进入 ESTABLISHED 形态,所以它可以或许发送数据的,然则它着实不晓得这个是历史跟尾,它只要在收到 RST 报文后,才会断开跟尾。

可以或许看到,上面这类场景下,「主动发起方」在向「主动发起方」发送数据前,并无阻止掉历史跟尾,导致「主动发起方」直立了一个历史跟尾,又白白发送了数据,妥妥地糟践了「主动发起方」的资源。

因而,要经管这类景象,最佳就是在「主动发起方」发送数据前,也就是直立跟尾从前,要阻止掉历史跟尾,这样就不会构成资源糟践,而要完成这个功用,就需求三次握手。

三次握手阻止历史跟尾的进程以下图,留心图中的两个跟尾的序列号是不一样的,因而新旧 SYN 报文着实不是发生了超时重传,两个都是独立的跟尾。

客户端间断发送屡次 SYN 直立跟尾的报文,在网络拥堵环境下:

一个「旧 SYN 报文」比「最新的 SYN 」 报文早抵达了服务端; 那末此时服务端就会回一个 SYN + ACK 报文给客户端; 客户端收到后可以或许痛处本人的凹凸文,鉴定这是一个历史跟尾(序列号过期),那末客户端就会发送 RST 报文给服务端,默示中止这一次跟尾。

可以或许看到,在三次握手的环境下, 可以或许在服务端直立跟尾从前,可以或许阻止掉了历史跟尾,从而担保直立的跟尾不是历史跟尾。

怎样,是不是轻细图解下,就明分晓畅了!

 



相关资讯