在3路握手之後,我對TCP數據包中的ACK和SEQ號碼感到困惑。我認爲ACK編號是下一個預期的SEQ編號。 所以,當我分析Wireshark的TCP連接,它說連接建立後,爲什麼在第一個TCP請求中ACK = 1而不是2?
TCP SYN with SEQ=0
TCP SYN ACK with SEQ 0, ACK=1 (clear, server expects SEQ 1 in next packet)
TCP ACK with SEQ 1, ACK=1 (clear, sender expects SEQ 1 in next packet)
HTTP Request: TCP PSH ACK with SEQ 1, ACK=1
最後一行還不清楚。我會說發件人預計接下來的SEQ = 2,所以它應該是ACK = 2?已經有一個來自服務器的SEQ = 1的數據包,爲什麼發件人需要另一個?
有人可以解釋這樣對我?
爲什麼4號線使用序列1再次? – 2011-04-05 13:48:35
通常情況下,如果它是一個新數據包,它應該不再是1。但我認爲HTTP請求實際上是握手的最後一個數據包。這在我的答案中有點不清楚,我會編輯它 – Chris 2011-04-05 13:54:27
第4行使用SEQ 1,因爲ACK數據包不增加SEQ計數器,第3行只是一個ACK。 – cronor 2011-04-05 14:11:25