回复了个千赞问题:TCP为什么需要三次握手?


发布日期:2022-06-18 16:58    点击次数:103

回复了个千赞问题:TCP为什么需要三次握手?

环球好,我是小林。

之前我在图解蕴蓄 PDF 里写「TCP 为什么需要三次握手?」,给出了三个原因:

三次握手才不错胁制历史相连的开动化(主要原因); 三次握手才不错同步两边的开动序列号; 三次握手才不错幸免资源浪掷;

同期,这个骨子也在知乎获得了 1000 多赞。

其中,在讲第一个原因的时分,提到「三次握手不错通过高下文判断现时相连是否是历史相连,而两次握手无法判断」。

因为那时莫得详备说为什么两次握手无法判断历史相连,导致有许多读者私信我这个问题。

是以,这次详备说一下,趁便给环球温习下,这个口试被问到发霉的问题。

TCP 两次握手为什么无法胁制历史相连?

我之前的图解蕴蓄 PDF 里写的是,两次握手无法判断历史相连。

其实这句话,不太准确,因为就像读者问的那样,第二次握手的时分,客户端也不错凭据他的序列号和收到的报文中的阐述号进行相比。

是以,应该改成「TCP 两次握手无法胁制历史相连」。

那为什么 TCP 两次握手为什么无法胁制历史相连呢?

我先成功说论断,主若是因为在两次握手的情况下,「被迫发起方」莫得中间状况给「主动发起方」来胁制历史相连,导致「被迫发起方」可能斥地一个历史相连,变成资源浪掷。

你想想,两次握手的情况下,「被迫发起方」在收到 SYN 报文后,就参加 ESTABLISHED 状况,意味着这时不错给对方发送数据给,可是「主动发」起方此时还莫得参加 ESTABLISHED 状况,假定这次是历史相连,主动发起方判断到这次相连为历史相连,那么就会回 RST 报文来断开相连,而「被迫发起方」在第一次握手的时分就参加 ESTABLISHED 状况,是以它不错发送数据的,国产成人免费ā片在线观看可是它并不透露这个是历史相连,它唯有在收到 RST 报文后,才会断开相连。

不错看到,上头这种场景下,「被迫发起方」在向「主动发起方」发送数据前,并莫得胁制掉历史相连,导致「被迫发起方」斥地了一个历史相连,又白白首送了数据,妥妥地浪掷了「被迫发起方」的资源。

因此,要措置这种心仪,最佳即是在「被迫发起方」发送数据前,也即是斥地相连之前,要胁制掉历史相连,这么就不会变成资源浪掷,而要完毕这个功能,就需要三次握手。

三次握手胁制历史相连的流程如下图,精采图中的两个相连的序列号是不雷同的,因此新旧 SYN 报文并不是发生了超时重传,两个都是孤苦的相连。

客户端连气儿发送屡次 SYN 斥地相连的报文,在蕴蓄拥挤情况下:

一个「旧 SYN 报文」比「最新的 SYN 」 报文早到达了做事端; 那么此时做事端就会回一个 SYN + ACK 报文给客户端; 客户端收到后不错凭据自己的高下文,判断这是一个历史相连(序列号过时),那么客户端就会发送 RST 报文给做事端,暗示中止这一次相连。

不错看到,在三次握手的情况下, 不错在做事端斥地相连之前,不错胁制掉了历史相连,从而保证斥地的相连不是历史相连。

怎样样,是不是稍稍图解下,就清表现爽了!

 





Powered by 久久精品无码一区二区小草 @2013-2022 RSS地图 HTML地图