2017-10-13 128 views
0

下一個數據包的序列號是否得到ack nr加上長度?理解wireshark中的數據包時遇到的問題

OR

是否爲下一個數據包的序列號獲得的序列NR加上長度以前

的包能夠以隨機順序?如果是的話,爲什麼以及如何知道一個數據包已經丟失?

回答

0

首先,有兩組序列和確認號碼對,一組用於對話的每一側。序列號是發件人的當前號碼,確認號碼是收件人關於發件人「下一個預期序列號」的想法。一般來說,它們的工作方式如下...

假設: HostA的初始序列號是100,HostB的初始序列號是200(這些數字是隨機的,它們的初始值完全不重要,但它們是在的TCP三次握手)

方案:主機A發送1000個字節的TCP有效載荷的到主機B:

Seq # Ack # TCP Payload (bytes) Next Seq # 
----- ----- ------------------- ---------- 
100 200     1000  1100 

這裏,假設玉簪的初始序列號爲100,並且自我們假定它正在發送1000個字節的TCP有效負載,我們計算下一個預期的序列號爲100 + 1000 = 1100.這就是我們要從HostB尋找的ACK#,這將向HostA指示HostB接收到1000個字節的有效負載,並且預計HostA的下一個TCP段的序列號爲1100.

HostB確認從HostA接收上述TCP段:

Seq # Ack # TCP Payload (bytes) Next Seq # 
----- ----- ------------------- ---------- 
200 1100      0   200 

這是HostB的一組序列號和確認號。請注意,這個集合完全獨立於HostA的集合。這裏,HostB已經向HostA確認通過向HostA發送1100的ACK#(初始序列號100加上額外的1000個有效載荷字節)接收發送器在先前分組中發送的所有1000字節的數據。 HostB自己的序列號200在此數據傳輸中不起作用,除了向HostA指示HostB沒有將數據以相反方向發送回HostA。

如果主機B做從主機A收到該段時,ACK主機B最終會送回主機A會已經進行的只有100的ACK#,所以主機A就知道主機B不接收攜帶1000個字節的段有效載荷,因此應重新發送。

我希望有幫助嗎?請致電RFC 793