关于网络:TCP三向握手-ggy带ACK

TCP Three way handshake - Piggybacking ACKs

我了解到在三向握手中,有时接收端在建立连接(ggy带)时会发送SYNACK数据包,但是何时会先发送SYN然后再发送ACK数据包?

例如:

->SYN

<-SYN_ACK

->ACK

与之相对:

->SYN

<-SYN

->SYN_ACK

谢谢!


不,不会-这是

的原因

SYN通常是由"客户端"(例如您的浏览器)在要打开与服务器(例如您的Web服务器)的TCP连接时发送的。服务器无法事先"知道"哪个客户端要向其打开连接(并因此发送SYN)。因此,它无法发送未经请求的SYN。

SYN和ACK是标志,因此来自服务器的SYN-ACK是对客户端的SYN(也是它自己的SYN)的ACK。从技术上讲,它可以单独发送它们,但是单独发送SYN和ACK将涉及额外的半程往返。 'cos那么这将是四向握手((c)SYN->,<-SYN(s),<-ACK(s),(c)ACK->),其可靠性不比三向高握手优惠。因此,这样做是没有意义的。

话虽如此,所以理论上您可以设计一种具有4种方式握手的协议,但TCP并非如此。

希望有帮助。