TCP连接三次握手与两次握手的分析对比

两次握手:A ——seq=100——》》B

                  A《《——ack=101——B

此时 A确定自己的初始序列号为100,B也知晓这一点(重点)。意味着A发送给B消息时没问题的。(举例如下)

当A继续发送消息时,seq=101,B收到后,发现此数据报正好是我期望的(上次发送回去的ack就是101),说明按序到达,直接接受。同时返回ACK=102,说明我期待下一个数据为102,同时说明我102之前的数据报都正常收到了。

 

但是,如果B也要给A发送数据呢?

假设B给A发送一个seq=301的数据报,A收到后,由于不知道对方的起始seq为多少,也就没法知道此数据报是否是按序到达的,也没法提交给上层,这样A的ack也不知道怎么发送,所以B到A的通信就失败了。

 

而TCP是双工通信的,设计之初就确定双方可以彼此发送信息,两次握手的情况显然不符合预期。

 

那么三次握手呢?

 

三次握手的情况下,

A ——seq=100——》》B

A《《——ack=101,seq=300——B

A ——ack=301——》》B

A也知道B的初始seq为多少,那么当B发送给A一个seq=301的数据报时,那么A收到时,发现正好是我期望的seq(ack=301),说明按序到达,正常接收,同时发送seq=302。B到A的通信也成功了!

 

三次握手的情况可以符合我们的需求!故必须采用三次握手。

posted @ 2021-03-09 15:53  Coder_Dai  阅读(416)  评论(0)    收藏  举报