如何判定乙個TCP應答包為dupack?

2021-10-13 07:29:20 字數 616 閱讀 7825

首先需要明白tcp包中的sequence和ack sequence的含義:

1.sequence·是表示傳送方的當前包的起始資料序列號

2.ack sequence則是表示對接收方的應答序列號,它是指對方下乙個包要使用的起始sequence。(上一接收包的sequence加上len之後的值)

那麼再來看什麼是dupack,它是為了快速重傳機制而傳送的重複確認包,那麼是不是說只要傳送包中的ack sequence一直相同就表示它是乙個dupack呢,並且會觸發重傳機制?

實際上並不是如此,試想一下,當傳送方a向接收方b不停傳送資料,而b端始終處於接收而沒有傳送資料到a的場景 ,首先比較容易理解的是,b端應答的ack sequence應該是遞增的;那麼a端傳送資料給b時,按照協議來說也需要填充ack sequence,由於b端始終沒有傳送資料到a端,那麼可想而知,當a端資料到b端時,填充的ack sequence始終是相同的,那麼對於這種來說,它並沒有觸發快速重傳,因為b端壓根不存在要傳送給a端的資料,所以這種情況並不資料dup ack,dup ack的存在時有乙個前提的,那就是它所重複應答的包,是對方傳送的舊包,並且對方已經把新包也發出來了,所以這個處理到底是按照dup ack進行快速重傳還是正常處理,是由傳送端是否已經傳送了更新的資料來決定的。

如何自己做乙個包

這周自己做了乙個包,是第一次嘗試,遇到了很多問題,在解決過程中也學到了很多東西 首先第一步要了解包的結構 首先先輸入 import sys用於把自己的包加入到路徑中 project module1 init py a.py b.py module2 init py c.py d.py init py...

如何發布乙個 npm 包

在工作時,突然接到經理的乙個要求,需要將乙個react的高階元件函式封裝成乙個npm包。之前從沒弄過,當場還是有些懵逼的,但是這畢竟是工作,不能推脫。於是開始了學習 湯坑之旅。最終包發布,線上專案成功使用,雖然導致了一次線上故障,但還是快速地fix掉。吃一塹長一智,記錄一下整個發布的過程和遇到的一些...

TCP連線狀態 如何判斷乙個TCP連線是否可用

在使用乙個長連線的tcp時,如果tcp伺服器端接收到tcp的客戶端連線過來後,接著伺服器端的tcp節點需要對這個客戶端進行資料收發,收發時需要判斷這個socket是否可用用,判斷方法有多種 1.linux的5種方法,本人在使用modbus伺服器端判斷已經連線的裝置或是gprs伺服器對已經連線的gpr...