簡體   English   中英

TCP - 確認

[英]TCP — acknowledgement

TCP標頭上的32位確認字段(比如說x)告訴另一個主機“我收到了所有字節,直到並包括x-1,現在期望x和on的字節”。 在這種情況下,接收器可能已經接收了一些其他字節,比如x + 100到x + 180,但它還沒有接收到第x個字節。

有沒有這樣的情況,雖然接收器沒有收到x到x + 100字節,但收到的字節比如x + 100到x + 180,接收器是否確認收到了x + 180?

我讀取的一個資源表示盡管在前面的字節中存在間隙,但仍接收到字節的確認。 然而,其他所有消息來源都說

“確認x告訴所有字節,直到收到x-1”。

有沒有例外情況? 我想驗證這一點。

TIA。

這可以通過稱為SACK的TCP選項來實現。

在這里,客戶端可以通過重復的ACK來說明它只有特定的包號2(包的序列號),並且對於接收的連續包的范圍附加SACK(選擇性確認)選項,如編號為4到5的包(序列)數)。 這又將使服務器能夠僅重傳未被客戶端接收的分組(3個序列號)。

下面提供了RFC 2018的摘錄:TCP選擇性確認選項

SACK選項由數據接收器發送,以通知數據發送器已接收的非連續數據塊和
排隊。 數據接收器等待接收數據(可能是通過
重傳方式)填補序列空間之間的空白
收到塊。 收到丟失的段時,數據
接收器通過推進左窗口來正常確認數據
TCP標頭的確認號字段中的邊緣。 SACK選項不會更改確認號的含義
領域。

來自https://www.rfc-editor.org/rfc/rfc793.txt上的TCP RFC:

3.3。 序號

設計中的一個基本概念是通過TCP連接發送的每個八位字節數據都有一個序列號。 由於每個八位字節都是有序的,因此每個八位字節都可以被確認。 所采用的確認機制是累積的,因此序列號X的確認表明已經接收到所有八位組但不包括X.

這對我來說非常清楚,序列號在第一個缺失的數據處停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM