2016-05-20 42 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),但它是不寻常的。