2016-05-20 41 views
0

我使用RAW套接字模擬HTTP客戶端流量。 我發送一個SYN數據包,然後從服務器獲取SYN-ACK。 最後我發送一個ACK +請求數據包並等待響應。 我注意到,當使用wget或curl時,第一個ACK和請求以兩個不同的數據包發送。 這是爲什麼,並與任何事情有關?爲什麼在第一個ack包之後發送HTTP請求請求?

+0

我認爲你的問題正在回答[這裏](http://stackoverflow.com/questions/3761276/when-should-i-use-tcp-nodelay-and-when-tcp-cork) – DaSourcerer

+0

這是因爲那就是他們工作的方式,而不是與任何事情無關。 – EJP

回答

0

使用TCP套接字的客戶端應用程序通常會調用socket(),然後connect()然後send()。 connect()函數建立TCP連接,爲此,TCP協議需要3個數據包:SYN,SYN + ACK,ACK。之後send()調用發送第一個數據。因此ACK和數據分開發送。

我認爲你的數據包流可能確實滿足TCP協議(見https://tools.ietf.org/html/rfc793),但它是不尋常的。