搜尋

首頁  >  問答  >  主體

linux - 应用层TCP的确认机制

巴扎黑巴扎黑2767 天前505

全部回覆(5)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 15:55:26

    你是說TCP協定?
    TCP協定本身就包含了確認送達和自動重傳的機制,只要你使用TCP連接,就不需要考慮這個問題。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 15:55:26

    TCP是一種協議,一般由你的機器設備進行實現,你無需關注TCP的重傳。一般你的應用層,例如HTTP,網路層就是TCP,在呼叫HTTP協定時無需關注下層協定實現,下層網路協定對上層協定是透明的

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 15:55:26

    用Modbus協定的機制跟你探討一下,主站和從站通訊屬於請示應答機制。當主站給從站發送一個請求時,假如從站未及時回复,超過延時時間之後,主站會連續給從站下發5次。透過超時時間和重發次數來盡可能保證每次的請求都成功,假如重發5次均失敗,則判定此次發送失敗,此時物理鏈路可能發生異常,後續未發完的數據也不再發送。

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:55:26

    TCP是可靠傳輸的協議,你發的每一個包,對端都需要ACK確認.
    比如你傳了5個包給對端, 其中3號包丟了,
    那麼當對端收到4號包時, 對端會給你發ACK 3,同時對端會把4號包保存下來
    當對端又收到5號包時, 對端還是會給你發ACK 3, 同時對端會把5號包保存下來.
    TCP協定中,當你連續收到3個「ACK 3」時, 你這邊就知道3號包丟了,要重發, 這就叫快速重傳機制.

    當你重發3號包 給到對端後, 對端接收成功後,會回 ACK 6,因為4號 5號包,對端之前已經收成功了.

    這個TCP幫你保證的,
    如果3號包在TCP層重發多次後,還是失敗,那整個發送就失敗了.
    需要檢查下網絡連接並在應用層重新發送一次.

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 15:55:26

    不用,你說的這些由TCP協議層實現,你只管用就是了.
    如果想知道細節,你可以參考 這篇文章

    回覆
    0
  • 取消回覆