TCP 三向握手 - 搭载 ACK

TCP Three way handshake - Piggybacking ACKs

我理解在三次握手中,有时接收端在建立连接时会发送一个SYNACK包(piggybacking),但是什么时候会发送一个SYN然后发送一个ACK包呢?

例如:

->SYN

<-SYN_ACK

->ACK

对比:

->SYN

<-SYN

->SYN_ACK

谢谢!

不,不会 - 这就是

的原因

SYN 通常由 'client'(例如您的浏览器)在想要打开到服务器(例如您的 Web 服务器)的 TCP 连接时发送。服务器无法事先 'knowing' 知道哪个客户端想要打开一个连接(并因此发送一个 SYN)。所以它不能发送未经请求的 SYN。

SYN 和 ACK 是标志,因此来自服务器的 SYN-ACK 是对客户端 SYN(并且它自己的 SYN)的 ACK。从技术上讲,它可以单独发送它们,但是,单独发送 SYN 和 ACK 会增加半个往返。因为这将是四次握手 ((c)SYN -> , <- SYN(s), <-ACK(s), (c)ACK ->) 不会比三次握手更可靠握手优惠。因此,这样做是没有意义的。

话虽如此,理论上您可以设计一个具有 4 次握手的协议,但 TCP 并不是这样设计的。

希望对您有所帮助。