TCP协议来自RFC793 。 https://www.ietf.org/rfc/rfc793.txt

1。 为什么三次握手?

正确答案:TCP三次握手,实际上是双方各握手一次,各做一次确认,其中一次握手和确认合并在一起。(就这样简单,完全没有别的幺儿子)。

来此上面链接的Page27页。

1) A --> B  SYN my sequence number is X
2) A <-- B  ACK your sequence number is X
3) A <-- B  SYN my sequence number is Y
4) A --> B  ACK your sequence number is Y

答案解释:TCP有2个特性1. “全双工” 2.“通信稳定”

特性1需要双向确认,特性2引入了SEQ(sequence numbers 序列号),用SEQ确定报文的前后顺序。

--错误答案:.谢希仁著《计算机网络》第四版中,讲 “三次握手” 的目的是 “为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”,这个只能算是表因,并不涉及本质。

2。 为什么四次挥手?

正确答案:双方各挥手一次,各做一次确认。几乎和握手一模一样,只是中间的2,3因为存在时间差无法合并。

1) A --> B  FIN my sequence number is X
2) A <-- B  ACK your sequence number is X
3) A <-- B  FIN my sequence number is Y
4) A --> B  ACK your sequence number is Y

RFC793给出的讨论在page38 

There are essentially three cases:

    1) The user initiates by telling the TCP to CLOSE the connection

    2) The remote TCP initiates by sending a FIN control signal

    3) Both users CLOSE simultaneously

就是说,只有case3的情况下,第2,3两步骤不存在时间差,可以做到3次挥手。但这种特例显然不应该被推荐为通用标准。更合理的4次挥手标准诞生了。

03-02 20:28