双向握手和三次握手

Far*_*ion 7 networking

我正在读一本关于Tanenbaum写的关于计算机网络的书,专门讨论握手问题.在那里,他解释了双向握手是不够的,考虑到这种情况:

A想要将钱转移到B,所以A向B发送SYN,然后B向A发送ACK.建立连接然后A可以发送他的钱,然后在完成后丢弃连接.如果从A到B的SYN重复延迟,B将再次发送其ACK,A将再次转移其资金.

如果我理解正确的话,这是基于Tanenbaum所写的书的双向握手的弱点之一.这本书说三方握手可以解决这个问题.

由于A的延迟重复SYN,B发送一个被A拒绝的ACK和SYN.这是我无法得到的地方,就好像"嘿B你为什么给我发送SYN和ACK?哦,我知道,这是来自延迟的SYN,我应该放弃它." 为什么不,在双向握手中,A不知道ACK是由延迟的重复SYN做出的?

谢谢.

S.R*_*ond 17

要建立连接,会发生三方(或三步)握手:

  1. SYN:活动打开由客户端向服务器发送SYN执行.客户端将段的序列号设置为随机值A.

  2. SYN-ACK:作为响应,服务器回复SYN-ACK.确认号码设置为比收到的序列号多一个,即A + 1,服务器为该数据包选择的序列号是另一个随机数,B.

  3. ACK:最后,客户端将ACK发送回服务器.序列号被设置为接收的确认值,即A + 1,并且确认号被设置为比接收的序列号多一个,即B + 1.

此时,客户端和服务器都收到了连接确认.步骤1,2为一个方向建立连接参数(序列号)并确认.步骤2,3为另一个方向建立连接参数(序列号)并确认.通过这些,建立了全双工通信.


Jos*_*der 7

根据Kurose和Ross的"计算机网络:自上而下的方法",第6版,p.232,

前两个段不携带有效载荷,即没有应用层数据; 这些段中的第三个可以携带有效载荷.由于在两个主机之间发送了三个段,因此该连接建立过程通常被称为三次握手

换句话说,A在发送数据之前不需要等待三次握手完成.只有B需要等待三次握手才能完成.

为什么B需要等待?正如S. Richmond所说,B需要知道A在开始发送数据之前已经收到了序列号.