为什么客户端在3路TCP握手中发送的ACK需要,为什么不能在第三步开始发送数据?服务器一旦知道客户端是否存活接收数据。
答案 0 :(得分:1)
没有什么禁止客户端在包含ACK的段中包含数据。
但是,客户端不应该延迟发送此ACK以等待应用程序发送数据,因为它可能会影响服务器上的RTT估计。如果没有立即收到ACK,使用SYN-cookies的服务器可能会将它们计时。
答案 1 :(得分:1)
典型的套接字编程API将以“open”方式阻塞,直到它从主机收到syn + ack。通信层应在收到后立即发送重新确认,即使由于客户端将处于“开放”方式,它也不会有任何数据要发送。
如果套接字API包含“openAndSend”方法,该方法尝试打开套接字并在尝试成功时发送一些数据,那么一旦从主机收到syn + ack,它就可以准备好传输数据。如果应用程序将使用大量短期连接,这样的事情可能是值得的,但我从未使用过这样的函数,也不知道它支持的程度。