为什么在 TCP 3 次握手的第 3 部分期间没有传输数据?
例如
(A 到 B)SYN
(B 到 A)ACK+SYN
(A 到 B) ACK...为什么数据不能与这个 ACK 一起传输?
我一直认为这是为了将会话建立阶段与数据传输阶段分开,以便no传输真实数据,直到会话两端就序列号和会话选项达成一致,特别是因为到达的数据包可能来自完全不同的先前会话,而该会话恰好具有相同的端点。
However, on further investigation, I'm not entirely certain that transmitting data with the handshake packets is disallowed. The section on TCP connection establishment in my Internetworking with TCP/IP1 book contains the following snippet:
由于协议设计,可以在握手段中连同初始序列号一起发送数据。在这种情况下,TCP 软件必须保留数据,直到握手完成。一旦建立连接,TCP 软件就可以释放所保存的数据并将其快速传送给等待的应用程序。
因为肯定可以使用以下命令构造 TCP 数据包SYN
(or ACK
) and数据,这很可能是被允许的。我有never我在野外见过这种情况,但话又说回来,我也从未在野外见过毛耳矮狐猴,尽管我确信它们存在。
可能是套接字软件在会话完全建立之前阻止数据流出,但 TCP 似乎认为它有效。看来您可以使用发送数据SYN-ACK
数据包(连接建立的第 2 阶段),因为您拥有另一端的序列号和选项。同样,使用阶段 3 发送数据ACK
数据包似乎也是可能的。
TCP 软件保留数据直到握手完全完成的原因可能是由于上述原因 - 只有当两端都就序列号达成一致时,您才能确定数据不是来自先前的会话。
1 Internetworking with TCP/IP Volume 1 Principles, Protocols and Architecture, 3rd edition, Douglas E. Comer, ISBN 0-13-216987-8.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)