tcpip 3次握手

时间:2010-08-09 05:37:06

标签: networking tcp

为什么在TCP 3次握手的第3部分期间不传输数据? e.g。

(A到B)SYN

(B到A)ACK + SYN

(A到B)ACK ....为什么不能将数据与此ACK一起传输?

1 个答案:

答案 0 :(得分:6)

我一直认为是将会话建立阶段与数据传输阶段分开,以便 no 实际数据被传输,直到会话的两端都同意序列号和会话选项,特别是因为到达的数据包可能来自恰好具有相同端点的完全不同的先前会话。

然而,在进一步调查中,我不完全确定不允许使用握手数据包传输数据。我的使用TCP / IP进行网络连接 1 一书中有关TCP连接建立的部分包含以下代码段:

  

由于协议设计,可以在握手段中发送数据和初始序列号。在这种情况下,TCP软件必须保存数据,直到握手完成。建立连接后,TCP软件可以释放正在保存的数据并将其快速交付给等待的应用程序。

由于使用SYN(或ACK数据构建TCP数据包当然是可能的,因此很可能允许这样做。我已经从未看到它在野外发生了,但是,再一次,我从来没有见过野外的毛茸茸的矮狐猴,尽管我确信它们存在。

可能是套接字软件阻止数据在会话完全建立之前发出但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.