结论:2次不够,4次冗余。
本文简述自己的理解,没有过多的技术用语,若有错误望指正。
TCP的连接建立
A:您好,我是 A。 (SYN)
B:您好 A,我是 B。 (SYN + ACK)
A:您好 B。 (ACK)
TCP的设计初衷
1.认为网络环境恶劣,因此在设计时,需要算法来保证传输的可靠
2.TCP是全双工协议,收到的消息一定有回复,因此达到三次
为什么一定是3次
下面分别解释为什么1次和2次不行,而4次就冗余。
1. 为什么1次不行
A发送的包一定需要得到B的回复。
2. 为什么2次不行
1.对于B发送的回复,B需要收到对应该回复的回复。
2.假设2次握手后,连接建立:在断开连接后,若B收到A在断开连接之前发送的,但是由于堵塞延迟等原因此时才到达B的包,B会误认为A要建立连接。这导致连接重新建立,而实际发送端A并没有连接需求。
3. 为什么4次冗余
按照上面的逻辑,B在接收到A对B的应答的应答之后,应该发送一个对该“应答的应答”的应答。但实际上继续按照这样下去,发送4次、40次都400次都不足够。因此,达到最基本的有去有回的状态就可以了,即3次。
补充
这里再提一下,TCP在握手过程中,还有发送包序号的确认,A和B均会给出发送的包的起始序号。这种序号是跟随时间的变化而变化的,这样就可以确保不会收到“乱入”的包。