为什么在第一个ack数据包之后发送HTTP请求请求?

时间:2016-05-20 15:47:09

标签: linux sockets http tcp wget

我使用RAW套接字模拟http客户端流量。 我发送一个SYN数据包然后从服务器获取SYN-ACK。 最后,我发送一个ACK +请求数据包并等待响应。 我注意到使用wget或curl时, 第一个ACK和请求以两个不同的数据包发送。 为什么会这样,那与任何事情有关吗?

1 个答案:

答案 0 :(得分:0)

使用TCP套接字的客户端应用程序通常调用socket()然后connect()然后调用send()。 connect()函数建立TCP连接,为此,TCP协议需要3个数据包:SYN,SYN + ACK,ACK。之后send()调用发送第一个数据。因此,ACK和数据是分开发送的。

我认为您的数据包流可能确实满足TCP协议(请参阅https://tools.ietf.org/html/rfc793),但这很不寻常。