国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?

這篇具有很好參考價值的文章主要介紹了(學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

常規(guī)回答:“因?yàn)槿挝帐植拍鼙WC雙方具有接收和發(fā)送的能力”


原因一:避免歷史連接

三次握手的首要原因是為了防止舊的重復(fù)連接初始化造成混亂。

假設(shè):客戶端先發(fā)送了SYN(seq=90)報文,然后客戶端宕機(jī)了,而且這個SYN報文還被網(wǎng)絡(luò)阻塞了,服務(wù)端并沒有收到,接著客戶端重啟后,又重新向服務(wù)端建立連接,發(fā)送了SYN(seq=100)報文。(這里不是重傳,而是重新發(fā)送請求)

?客戶端連續(xù)發(fā)送多次SYN(都是同一個四元組)建立連接的報文,在網(wǎng)絡(luò)擁堵的情況下:

  • 一個[舊的SYN報文]比[最新的SYN]報文早到達(dá)了服務(wù)端,那么此時服務(wù)端就回一個SYN+ACK報文給客戶端,此報文中的確認(rèn)號是91(90+1)
  • 客戶端收到后,發(fā)現(xiàn)自己期望收到的確認(rèn)號應(yīng)該是100+1,而不是90+1,于是就會回RST報文
  • 服務(wù)端收到RST報文后,就會釋放連接。
  • 后續(xù)最新的SYN抵達(dá)了服務(wù)端,客戶端與服務(wù)端就可以正常的完成三次握手了。

上述中的「舊 SYN 報文」稱為歷史連接,TCP 使用三次握手建立連接的最主要原因就是防止「歷史連接」初始化了連接。

?TIP

如果服務(wù)端在收到 RST 報文之前,先收到了「新 SYN 報文」,也就是服務(wù)端收到客戶端報文的順序是:「舊 SYN 報文」->「新 SYN 報文」,此時會發(fā)生什么?

當(dāng)服務(wù)端第一次收到 SYN 報文,也就是收到 「舊 SYN 報文」時,就會回復(fù)?SYN + ACK?報文給客戶端,此報文中的確認(rèn)號是 91(90+1)。

然后這時再收到「新 SYN 報文」時,就會回?Challenge Ack?(opens new window)報文給客戶端,這個 ack 報文并不是確認(rèn)收到「新 SYN 報文」的,而是上一次的 ack 確認(rèn)號,也就是91(90+1)。所以客戶端收到此 ACK 報文時,發(fā)現(xiàn)自己期望收到的確認(rèn)號應(yīng)該是 101,而不是 91,于是就會回 RST 報文。

如果是兩次握手連接,就無法阻止歷史連接,那為什么TCP兩次握手就無法阻止歷史連接呢?

因?yàn)樵趦纱挝帐值那闆r下,服務(wù)端沒有中間狀態(tài)給客戶端來阻止歷史連接,導(dǎo)致服務(wù)端可能建立一個歷史連接,造成資源浪費(fèi)。

在兩次握手的情況下,服務(wù)端在收到 SYN 報文后,就進(jìn)入 ESTABLISHED 狀態(tài),意味著這時可以給對方發(fā)送數(shù)據(jù),但是客戶端此時還沒有進(jìn)入 ESTABLISHED 狀態(tài),假設(shè)這次是歷史連接,客戶端判斷到此次連接為歷史連接,那么就會回 RST 報文來斷開連接,而兩次握手而服務(wù)端在第一次握手的時候就進(jìn)入 ESTABLISHED 狀態(tài),所以它可以發(fā)送數(shù)據(jù)的,但是它并不知道這個是歷史連接,它只有在收到 RST 報文后,才會斷開連接。

(學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?,計算機(jī)網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò),服務(wù)器

?可以看到,如果采用兩次握手建立 TCP 連接的場景下,服務(wù)端在向客戶端發(fā)送數(shù)據(jù)前,并沒有阻止掉歷史連接,導(dǎo)致服務(wù)端建立了一個歷史連接,又白白發(fā)送了數(shù)據(jù),妥妥地浪費(fèi)了服務(wù)端的資源。

因此,要解決這種現(xiàn)象,最好就是在服務(wù)端發(fā)送數(shù)據(jù)前,也就是在建立連接前,要阻止掉歷史連接,這樣就不會造成資源浪費(fèi),所以需要三次握手。

所以TCP使用三次握手建立連接的最主要原因是防止[歷史連接]初始化了連接


原因二:同步雙方初始序列號

TCP協(xié)議的通信雙方,都必須維護(hù)一個[序列號],序列號是可靠傳輸?shù)囊粋€關(guān)鍵因素,它的作用:

  • 接收方可以去除重復(fù)數(shù)據(jù)
  • 接收方可以根據(jù)數(shù)據(jù)包的序列號按序接收
  • 可以標(biāo)識發(fā)送出去的數(shù)據(jù)包中,哪些是已經(jīng)被對方收到的(通過ACK報文中的序列號知道)

可見,序列號在TCP連接中占據(jù)著非常重要的作用,所以當(dāng)客戶端發(fā)送攜帶[初始序列號]的SYN報文的時候,需要服務(wù)端回一個ACK應(yīng)答報文,表示客戶端的SYN報文已被服務(wù)端成功接收,那么當(dāng)服務(wù)端發(fā)送[初始序列號]給客戶端的時候,依然也要得到客戶端的應(yīng)答,這樣一來一回,才能確保雙方的初始序列號能被可靠的同步。

(學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?,計算機(jī)網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò),服務(wù)器

四次握手其實(shí)也能夠可靠的同步雙方的初始化序號,但由于第二步和第三步可以優(yōu)化成一步,所以就成了[三次握手]。

?兩次握手只保證了一方的初始序列號能被對方成功接收,沒辦法保證雙方的初始序列號都能被確認(rèn)接收。


原因三:避免資源浪費(fèi)

如果只有[兩次握手],當(dāng)客戶端發(fā)生的SYN報文在網(wǎng)絡(luò)中阻塞,客戶端沒有收到ACK報文,就會重新發(fā)送SYN,由于沒有第三次握手,服務(wù)端不清楚客戶端是否收到了自己回復(fù)的ACK報文,所以服務(wù)端每收到一個SYN就只能先主動建立一個連接,這會造成什么情況呢?

如果客戶端發(fā)送的SYN報文在網(wǎng)絡(luò)中阻塞了,重復(fù)發(fā)送多次SNY報文,那么服務(wù)端在收到請求后就會建立多個冗余的無效鏈接,造成資源浪費(fèi)。(因?yàn)閮纱挝帐值那闆r下,服務(wù)端在接收到SYN報文后就會建立連接)

(學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?,計算機(jī)網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò),服務(wù)器

這里兩次握手是假設(shè)「由于沒有第三次握手,服務(wù)端不清楚客戶端是否收到了自己發(fā)送的建立連接的?ACK?確認(rèn)報文,所以每收到一個?SYN?就只能先主動建立一個連接」這個場景。


結(jié)論

TCP建立連接時,通過三次握手能夠防止歷史連接的建立,能減少雙方不必要的資源開銷,能幫助雙方同步初始化序列號。序列號能夠保證數(shù)據(jù)包不重復(fù)、不丟棄和按序傳輸。

不使用兩次握手和四次握手的原因:文章來源地址http://www.zghlxwxcb.cn/news/detail-582559.html

  • 兩次握手:無法防止歷史連接的建立,會造成雙方資源的浪費(fèi),無法可靠的同步雙方序列號
  • 四次握手:三次握手就已經(jīng)理論上最少可靠連接建立,所以不需要使用更多的通信次數(shù)。

到了這里,關(guān)于(學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 筆記:TCP握手為什么是3次而不是2次?

    這個問題比較常見,這里簡單總結(jié)一下。 一、兩次握手建立連接:流程說明: 1)客戶端發(fā)送SYN。 2)服務(wù)端收到SYN請求后,服務(wù)端回復(fù)SYN+ACK,然后進(jìn)入已連接狀態(tài)。 3)客戶端收到SYN+ACK回復(fù)后,進(jìn)入已連接狀態(tài)。 二、兩次握手建立連接:存在的問題 若客戶端發(fā)送SYN后,沒

    2023年04月13日
    瀏覽(22)
  • TCP為什么需要三次握手進(jìn)行連接,二次或四次不可以嗎?

    為了確認(rèn)雙方具有接收和發(fā)送的能力。 1.?可以阻止重復(fù)歷史連接的初始化(主要原因)。 2.?可以同步雙方的初始序列號。 3. 可以避免資源的浪費(fèi)。 1.?為了防止舊的重復(fù)連接初始化造成混亂。 當(dāng)客戶端發(fā)送了一個 SYN 報文后,突然宕機(jī)了,并且這個 SYN 報文還被網(wǎng)絡(luò)阻塞了

    2024年02月16日
    瀏覽(22)
  • TCP 和 UDP 區(qū)別? 2、TCP/IP 協(xié)議涉及哪幾層架構(gòu)? 3、描述下 TCP 連接 4 次揮手的過程?為什么要 4 次揮手?

    TCP 基于連接,UDP 基于無連接。 TCP 要求系統(tǒng)資源較多,UDP 較少。 UDP 程序結(jié)構(gòu)較簡單。 TCP 保證數(shù)據(jù)正確性,UDP 可能丟包。 TCP 保證數(shù)據(jù)順序,UDP 不保證。 應(yīng)用層 傳輸層 互連網(wǎng)絡(luò)層 網(wǎng)絡(luò)接口層。 因?yàn)?TCP 是全雙工,每個方向都必須進(jìn)行單獨(dú)關(guān)閉。關(guān)閉連接時,當(dāng) Server 端收

    2024年02月03日
    瀏覽(26)
  • 學(xué)習(xí)筆記18——個人理解為什么快速重傳是3次ACK

    為什么快速重傳是選擇3次ACK? 個人理解:首先網(wǎng)絡(luò)中的丟包,亂序以及網(wǎng)路故障都會讓服務(wù)器端發(fā)回duplicated ACK,表示有一個包一直未收到。快速重傳是通過3次ACK來區(qū)分亂序,丟包和網(wǎng)路擁塞的情況,是基于實(shí)踐經(jīng)驗(yàn)得到的,所以說這種判斷方式不一定準(zhǔn)確,只是“大概率

    2024年02月02日
    瀏覽(21)
  • (學(xué)習(xí)筆記-TCP連接斷開)建立了連接,但是客戶端或服務(wù)端出現(xiàn)問題,會怎么樣?

    (學(xué)習(xí)筆記-TCP連接斷開)建立了連接,但是客戶端或服務(wù)端出現(xiàn)問題,會怎么樣?

    客戶端出現(xiàn)故障指的是客戶端的主機(jī)發(fā)生了宕機(jī)或者斷電的場景。發(fā)生這種情況的時候,如果服務(wù)端一直不會發(fā)送數(shù)據(jù)給客戶端,那么服務(wù)端是永遠(yuǎn)無法感知到客戶端宕機(jī)這件事的,也就是服務(wù)端的TCP連接將一直處于 ESTABLISH 狀態(tài),占用著資源。 為了避免這種情況,TCP有一個

    2024年02月16日
    瀏覽(25)
  • AIMD 為什么收斂(tcp reno/cubic 為什么好)

    AIMD 為什么收斂(tcp reno/cubic 為什么好)

    TCP 擁塞控制目標(biāo)是緩解并解除網(wǎng)絡(luò)擁塞,讓所有流量公平共享帶寬,合在一起就是公平收斂。 AIMD(幾乎所有與擁塞控制相關(guān)的協(xié)議或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 為什么收斂?我一般會給出下面的老圖: 雖然只展示了兩條流的收斂,但 n 條流收斂的展示無非就是將

    2024年02月06日
    瀏覽(31)
  • MSQL系列(十二) Mysql實(shí)戰(zhàn)-為什么索引要建立在被驅(qū)動表上

    MSQL系列(十二) Mysql實(shí)戰(zhàn)-為什么索引要建立在被驅(qū)動表上

    Mysql實(shí)戰(zhàn)-為什么索引要建立在被驅(qū)動表上 前面我們講解了B+Tree的索引結(jié)構(gòu),也詳細(xì)講解下 left Join的底層驅(qū)動表 選擇原理,那么今天我們來看看到底如何用以及如何建立索引和索引優(yōu)化 開始之前我們先提一個問題, 為什么索引要建立在被驅(qū)動表上 ? 1.建表及測試數(shù)據(jù) 我們先

    2024年02月08日
    瀏覽(43)
  • tcp 為什么要三次握手,兩次不行嗎?為什么?

    TCP使用三次握手(Three-Way Handshake)的過程是為了確保雙方建立起可靠的通信連接,并在連接的建立過程中協(xié)商必要的參數(shù)。兩次握手是不夠的,原因主要有以下幾點(diǎn): 防止已失效的連接請求被接受: 假設(shè)有A和B兩臺主機(jī),A向B發(fā)送了一個連接請求,但由于某些原因?qū)е逻B接建

    2024年02月20日
    瀏覽(35)
  • TCP為什么需要3次握手?

    一、3次握手過程 客戶端向服務(wù)端發(fā)送一個表示建立連接的SYN報文段,服務(wù)端從IP數(shù)據(jù)報中提取出TCP SYN報文段,為該TCP連接分配需要的緩存和變量,并向客戶端發(fā)送表示允許連接的報文段ACK。客戶端在收到ACK報文段之后,也要給該連接分配緩存和變量,客戶端向服務(wù)器再發(fā)送

    2024年04月26日
    瀏覽(16)
  • TCP為什么三次握手?

    TCP為什么三次握手?

    參考:公眾號 小林coding 常見回答:三次握手保證雙方都具有接受和發(fā)送數(shù)據(jù)的能力。 主要原因: 1. 防止重復(fù)歷史連接的初始化 2.同步雙方初始序列號 3.避免資源的浪費(fèi) 序列號seq標(biāo)記已發(fā)送數(shù)據(jù)的位置,確認(rèn)號ack表示數(shù)據(jù)已接受,期望下一次數(shù)據(jù)序列號seq = ack 當(dāng)因?yàn)榫W(wǎng)絡(luò)擁

    2023年04月27日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包