TCP 三向握手 - Piggybacking ACKs

use*_*032 0 networking tcp protocols handshake

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

例如:

->同步

<-SYN_ACK

->确认

相对:

->同步

<-同步

->SYN_ACK

谢谢!

gab*_*jit 5

不,不会 - 这就是原因

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

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

话虽如此,理论上您可以设计一个带有 4 次握手的协议,但 TCP 并非如此设计。

希望有帮助。