1. 程式人生 > >wireshark中帶有SLE和SRE的SACK包詳解

wireshark中帶有SLE和SRE的SACK包詳解

一、名詞解釋

SLE: Sequence Left Edge of already acknowledged data when Selective Acknowledgments are used. 即已收到tcp資料的左邊界。
SRE: Sequence Right Edge of already acknowledged data when Selective Acknowledgments are used. 即已收到tcp資料的右邊界。


二、 使用場景


SACK在資料丟包需要重傳時起作用。比如,伺服器已傳送的資料為1~34454個包,但是,客戶端只收到了“1~22774,28614~34454”這些序列的包,也就是說“22775~28613”這些包已經丟了。這個時候,客戶端會向伺服器請求傳送回饋包,說我收到了seq為22774的包,同時也亂序收到了"SLE為28614,SRE為34454"的包。那麼,伺服器就知道,接著從seq=22775的包開始傳送,傳送到seq=28613的包的時候,就不用在傳送seq=28614的包了,因為客戶端已經收到了。
如果ACK中不帶SLE和SRE會怎樣呢?那伺服器就會重發從"22775"開始之後的所有的包,包括其實客戶端已經收到的"28614~34454"序號的包,那就浪費網路帶寬了,不是麼。


三、多個亂序段的情況
    實際情況中較少見,因為這代表著隔三差五就有丟包,丟包率應該很大。
    就我們使用的有線鏈路而言,丟包率不足0.1%,無線鏈路大約在5%左右。【注 1】
    在RFC2018中詳述了SACK包格式。
    有多個數據塊亂序的情況下,SLE和SRE也可以有多組,但因為頭部位元組限制,最多為4組。


sack選項
   選項型別: 5
   選項長度: 可變,但整個TCP選項長度不超過40位元組,實際最多不超過4組邊界值。
                         +--------+--------+
                         | Kind=5 | Length |
       +--------+--------+--------+--------+
       |      Left Edge of 1st Block       |
       +--------+--------+--------+--------+
       |      Right Edge of 1st Block      |
       +--------+--------+--------+--------+
       |                                   |
       /            . . .                  /
       |                                   |
       +--------+--------+--------+--------+
       |      Left Edge of nth Block       |
       +--------+--------+--------+--------+
       |      Right Edge of nth Block      |

       +--------+--------+--------+--------+

圖2是1組邊界的抓包截圖


注:

【1】無線鏈路的丟包率不確定,也有20%的情況

參考:

https://ask.wireshark.org/questions/1389/what-are-sre-and-sle?sort=votes

http://blog.chinaunix.net/uid-28387257-id-3624060.html