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的通信也成功了!
三次握手的情况可以符合我们的需求!故必须采用三次握手。
浙公网安备 33010602011771号