0

为什么在需要3次TCP握手的客户端发送的ACK中,为什么不能在第三步开始发送数据?服务器一旦收到数据就知道客户端是否活着.

4

2 回答 2

1

没有什么禁止客户端在包含 ACK 的段中包含数据。

但是,客户端不应延迟发送此 ACK 以等待应用程序发送数据,因为它可能会影响服务器上的 RTT 估计。如果使用 SYN-cookies 的服务器没有立即得到 ACK,它们可能会超时。

于 2013-10-04T00:05:20.543 回答
1

典型的套接字编程 API 将在“open”方法处阻塞,直到它收到来自主机的 syn+ack。通信层应该在收到它后立即发送它的重新确认,即使由于客户端将处于“打开”方法中,它不会有任何数据要发送。

如果套接字 API 包含一个“openAndSend”方法,该方法将尝试打开一个套接字并在尝试成功时发送一些数据,那么一旦它从主机接收到 syn+ack,它就可以准备好传输数据。如果应用程序将使用大量短期连接,这样的事情可能是值得的,但我从未使用过这样的功能,也不知道它的支持程度。

于 2013-10-04T00:12:08.963 回答