2012-10-15 35 views
0

我有一個我認爲是Windows客戶端的流量捕獲。我注意到它不時發送Wireshark標識爲「TCP Keep-Alive」的內容,而不是僅僅設置ACK並且不發送數據,而是將SEQ支持一個八位字節並重新發送該數據。Windows TCP keepalive發送1個字節的郵件沒有PSH

(C =客戶端,S =服務器,相對SEQ/ACK)

(connected, data transferred back and forth) 
1 C: PSH  Seq=21, Ack=41, Len=12 
2 S: PSH ACK Seq=41, Ack=33, Len=12 
3 C:  ACK Seq=33, Ack=53 
4 S: PSH ACK Seq=53, Ack=33, Len=1 
5 C:  ACK Seq=33, Ack=54 
    ... 3 seconds pass ... 
6 C:  ACK Seq=32, Ack=54, Len=1 (resends the last octet from #1) 
7 S:  ACK Seq=54, Ack=33 
    ... 

這是Windows發送TCP保持連接時堆棧正常行爲?

回答

0

這就是保持活力的細分市場。它不是一個單獨的協議,它只是一個已經被確認的序列號的冗餘發送,用當前的序列號碼來回答ACK。沒有要求它設置PSH標誌。

+0

據我瞭解,TCP保持活動應該不發送數據。我猜想windows的實現是不同的,就是這樣。 – Wade

+0

@Wade存在Keepalive的「Windows實現」。只有keepalive,這是如何實施的。你需要認識到你的觀念不準確的觀念。 – EJP

+1

不要太挑剔,我很欣賞你的答案,但肯定有一個'Windows實現'發送len = 1,其中Linux實現發送len = 0。 – Wade