2016-02-13 123 views
2

當客戶端通過發送其初始數據包來發起3路TCP握手時,Acknowledgment Number(請注意,我不是在說這裏的ACK標誌)設置爲0?如何識別TCP三次握手中的初始包?

我有一個TCP跟蹤文件,我用C中的pcap庫打印出每個數據包的特定信息。我注意到連接中第一個數據包的Acknowledgment Number始終設置爲0.我可以使用它作爲標識TCP會話的第一個數據包的標準嗎?

如果不是這樣,我可以使用哪些其他標準來將給定數據包標識爲Web客戶端發送的第一個數據包?僅僅查看SYN標誌將不起作用,因爲當服務器響應客戶端的初始請求時,它也會設置其SYN標誌。

回答

3

序列號將具有隨機值,但它完全是爲確認(你詢問)數目字段包含在它的零32個比特正常行爲。

這並不是說它不能包含數據。您正確區分ACK標誌和確認號碼。該標誌的實際含義是表示確認號碼字段中的值是有效的。由於它會在最初的SYN上被清除,所以沒有這種說法。因此,它可以包含任何東西,雖然同樣,正常行爲是零。

至於你區分初始SYN與響應的問題,正常IP棧對正確形成的初始SYN的響應將是SYN-ACK。所以,當SYN被設置時,ACK也會被設置。爲了區分彼此,更好的做法是查看TCP代碼位字段,而不是序列號,除非您嘗試進行某種異常檢測。

+0

你是正確的,我應該讀得更好。我刪除了我的帖子 – murphy

+0

不用擔心,也不需要刪除! –

+0

@DavidHoelzer但回到我原來的問題。我試圖通過查看給定的數據包來確定這是否是第一次以三次握手方式發送的數據包。因此,檢查確認號碼字段是否設置爲0就足夠了? –