<option id="mwy0y"><strong id="mwy0y"></strong></option>
  • <ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <ul id="mwy0y"></ul>
  • <del id="mwy0y"><dfn id="mwy0y"></dfn></del><ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <abbr id="mwy0y"></abbr>

    千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

    400-811-9990
    手機(jī)站
    千鋒教育

    千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

    千鋒教育

    掃一掃進(jìn)入千鋒手機(jī)站

    領(lǐng)取全套視頻
    千鋒教育

    關(guān)注千鋒學(xué)習(xí)站小程序
    隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當(dāng)前位置:長沙千鋒IT培訓(xùn)  >  技術(shù)干貨  >  tcp進(jìn)程如何處理失敗的連接?

    tcp進(jìn)程如何處理失敗的連接?

    來源:千鋒教育
    發(fā)布人:xqq
    時(shí)間: 2023-10-11 00:18:08

    一、tcp進(jìn)程處理失敗的連接的方法

    1.超時(shí)重傳

    發(fā)送方不知道3 4 5 的接收情況,接收方一直在等 3,這中方式會(huì)有比較嚴(yán)重的問題。

    發(fā)送方有兩種選擇:

    A,默認(rèn) 3 發(fā)送失敗,重新發(fā)送3 

    b,默認(rèn) 3 4 5 發(fā)送失敗,重傳 3 4 5 

    a的方式,只傳 3可能會(huì)慢,b的方式傳 3 4 5 很快但是占用帶寬,timeout也可能很長,這兩個(gè)都不是最后的方法。

    2.快速重傳

    tcp還有一種快速重傳的算法,F(xiàn)ast-Retransmit是以數(shù)據(jù)驅(qū)動(dòng)重傳,不是timeout時(shí)間驅(qū)動(dòng)。

    怎么是以數(shù)據(jù)驅(qū)動(dòng)呢?

    就是如果只收到 1 2 ,回復(fù)ack 3 ,隨后收到了 4 5 但是還沒收到 3, 4 5的ack也回復(fù) 3 3,這樣發(fā)送方會(huì)收到3個(gè)一樣的ack,會(huì)知道傳輸出了問題

    這就是大部分tcp數(shù)據(jù)驅(qū)動(dòng)重傳機(jī)制(什么?大部分tcp,總共是有幾個(gè)版本的..)。

    這種方式還不是較好的,只是解決了timeout的問題,回傳的個(gè)數(shù)還是沒解決,比如一次發(fā)了20條,就不知道是哪3個(gè)發(fā)的ack了,需要回傳這20條。。

    3.sack 重傳

    選擇性重傳,Selective Acknowledgement(sack),tcp的頭會(huì)多一個(gè)SACK,快速重傳的ACK還在。

    sack只回復(fù)已經(jīng)到達(dá)的碎片,這樣發(fā)送端就能準(zhǔn)確知道是重傳那部分字節(jié)流。在Linux可以用tcp_sack這個(gè)字段開啟這個(gè)功能,2.4版之后的Linux默認(rèn)開啟。

    延伸閱讀:

    二、服務(wù)器進(jìn)程終止處理方法

    當(dāng)服務(wù)器進(jìn)程終止時(shí),客戶TCP允許接著把數(shù)據(jù)發(fā)送給服務(wù)器。TCP允許這么做,因?yàn)榭蛻鬞CP接收到FIN只是表示服務(wù)器進(jìn)程已關(guān)閉了連接的服務(wù)器端,從而不再往其中發(fā)送任何數(shù)據(jù)而已。FIN的接收并沒有告知客戶TCP服務(wù)器進(jìn)程已經(jīng)終止。

    當(dāng)服務(wù)器TCP接收到來自客戶的數(shù)據(jù)時(shí),既然先前打開的那個(gè)套接字的進(jìn)程已經(jīng)終止,于是響應(yīng)以一個(gè)RST。

    然而客戶看不到這個(gè)RST,因?yàn)樗谡{(diào)用writen后立刻調(diào)用了readline,并且由于第二步中接收的FIIN,所調(diào)用的readline立刻返回0(表示EOF)。我們的客戶此時(shí)并為預(yù)期收到EOF,于是以出錯(cuò)信息,“server terminated prematurely”(服務(wù)器過早終止)退出。

    我們的上述討論還取決于本例子的時(shí)序。客戶調(diào)用readline即可能發(fā)生在服務(wù)器在的RST被客戶接收到之前,也可能發(fā)生在接收到之后,如果readline發(fā)生在收到RST之前(那么客戶接收到的是一個(gè)為預(yù)期的EOF;否則結(jié)果是由readline返回一個(gè)ECONNRESET 對(duì)方復(fù)位連接錯(cuò)誤)。

    以上就是關(guān)于tcp進(jìn)程如何處理失敗的連接的內(nèi)容希望對(duì)大家有幫助。

    聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

    猜你喜歡LIKE

    er圖橢圓表示什么?

    2023-10-11

    ic與id的區(qū)別是什么?

    2023-10-11

    什么是數(shù)據(jù)倉庫?

    2023-10-11

    最新文章NEW

    軟路由是什么?

    2023-10-11

    什么是操作系統(tǒng)中資源分配的基本單位?

    2023-10-11

    數(shù)據(jù)庫系統(tǒng)的核心組成部分是什么?

    2023-10-11

    相關(guān)推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網(wǎng)友熱搜 更多>>