提问者:小点点

为什么传输控制协议终止需要4个步骤?


所以基本上,我在面试中被问到这个问题。问题是:

为什么传输控制协议终止需要4个步骤?

由此我知道,双方都需要发送FIN和确认字符才能完成终止,但另一个我无法回答的后续问题是,为什么服务器必须发送2条消息(每条消息都只设置了FIN和确认字符位)。

为什么不能一起做?


共2个答案

匿名用户

为什么不能一起做?

它可以一起完成,这实际上是实践中的常见情况,即

-> FIN
<- FIN, ACK to FIN
-> ACK to FIN

但它也可以单独完成,特别是如果对等方没有立即关闭但仍发送数据:

-> FIN
<- DATA, ACK to FIN
.... <- more DATA (+ again ACK to FIN)
<- FIN (+ again ACK to FIN)
-> ACK to FIN 

匿名用户

关闭是一个操作,意思是“我没有更多的数据要发送”。参考RFC793。

         TCP A                                                TCP B
  1.     ESTABLISHED                                          ESTABLISHED

  2.     (Close)
         FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT

  3.     FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT

  4.                                                          (Close)
         TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK

  5.     TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED

  6.     (2 MSL)
         CLOSED

所以你可以看到客户端在步骤2时已经没有数据要发送,但是服务器直到步骤4才有数据要发送。服务器需要另一个FIN来告诉客户端“我没有数据要发送”。这就是为什么它不能像传输控制协议一样工作3步。