TCP 为什么需要 3 次握手, 为什么 2 次不行, 4 次呢?

1、TCP 为什么需要 3 次握手, 为什么 2 次不行, 4 次呢?

TCP 的三次握手是为了保证数据的可靠传输的,TCP 是全双工的协议,也就是说通过 TCP 协议发送的协议是要得到回复的,一来一回,所以说对于需要建立 TCP 连接的两端来说,每一端都需要进行一来一回的确认,这就进行三次握手。

1、A 给 B 发送需要建立连接的请求;

2、B 给 A 发送可以建立连接的回复;

3、A 给 B 发送确认收到回复的信息;

如果只进行二次握手:

1、A 给 B 发送需要建立连接的请求;

2、B 给 A 发送可以建立连接的回复;

这样看似没有什么问题,但是这样还是不行的,因为第二次握手的时候 B 不知道自己发送给 A 的应答包是否可以到达 A;B 只知道了 A 能发,并不知道 A 是否能收;所以这样的连接还是不可靠的。

如果进行四次握手:

1、A 给 B 发送需要建立连接的请求;

2、B 给 A 发送可以建立连接的回复;

3、A 给 B 发送确认收到回复的信息;

4、B 给 A 发送确认收到确认的信息;

当进行到第二步的时候 B 在等待 A 的确认信息,只有等到这个消息,B 才能确认建立连接,这样其实就够了,如果需要进行第四次确认也可以,进行 40 次握手也可以,400 次也可以,但是握手次数的增多并不能保证通信达到稳定。所以只需要达到了一个最基本的可以建立连接的条件(三次握手)就可以了,多次反而会浪费资源,三次握手是保证双方互相明确对端可以收发的最低值。

另外在通信的过程中,也会进行 TCP 包序号的确认:

1、A 发给 B 自己发送包的起始序号;

2、B 确认 A 的起始序号,发送 B 的起始序号;

3、A 确认 B 的起始序号;

起始序号是随机产生的,因为考虑到下面的场景,确认连接后如果 A 给 B 了三个包,其中一个包 3 丢了,A 进行重发 3 号包后,就断开了连接,过了一段时间后 AB 又重新建立连接并且 A 给 B 发送了两个包,这时候刚刚丢掉的 3 号包又突然跟着这两个包过来了,这个时候如果起始序号相同的话,B 就会连同 3 号包一起收了,这样 B 就收到了错误信息,所以起始序号往往是需要不同的。

你可能感兴趣的:(计算机网络,网络协议,网络)