如何优雅简洁的理解三次握手和四次挥手

本文主要参考博客:here。

TCP协议是面向连接的、可靠的传输层协议,采用全双工通信(也就是建立连接的两个对象可以同时发送和接收信息)。

本文使用A和B表示建立连接的两个对象。

三次握手

三次握手的目的是为了确认A和B都有发送和接受信息的能力,其过程如下:

1 A向B发起连接请求:A->B;

2 B收到A的请求,并返回确认信息:B->A;

3 A收到B的确认信息,并返回确认信息:A->B。

我们使用表格来记录三次握手确认的信息有哪些。在建立连接之前,我们的状态如下:

A B
       

 

在第一次握手后我们可以确认A可以发送数据:

A B
  1    

 

在第二次握手后,我们可以确认B可以同时接收和发送信息:

A B
  1 2 2

 

在第三次握手后,我们可以确认A可以接受信息:

A B
3 1 2 2

 

由上面的过程可知,经过三次握手后,我们知道了A和B都具有接收和发送信息的能力,从而保证能够全双工通信。三次是能够确认A和B能够进行全双工通信的最小次数。

四次挥手

四次挥手的目的是关闭连接,而关闭连接后的状态需要A和B双方都不再发送信息(也就意味这双方不会再接受信息),其过程如下:

1 A向B发送信号,表示没有数据发送了:A->B;

2 B收到A的信号,确认关闭连接请求:B->A;

3 B向A发送信息,表示没有数据发送了:B->A;

4 A收到B的信息,确认关闭连接:A->B。

同三次握手一样,我们同样使用表格来记录我们的挥手过程,表格初始状态如下:

A B
不收 不发 不收 不发
       

 

第一次挥手后,我们知道A不会发送信息了:

A B
不收 不发 不收 不发
  1    

第二次挥手后,我们确认B不需要接收信息:

A B
不收 不发 不收 不发
  1 2  

 

第三次挥手后,我们知道B不会发送信息:

A B
不收 不发 不收 不发
  1 2 3

 

第四次挥手后,我们知道A不会再接受信息:

A B
不收 不发 不收 不发
4 1 2 3

 

至此,A和B两个对象都不发送也不接受信息了,连接关闭。

为什么挥手比握手多一次?

由上面的分析可知,在握手的时候,第二次握手可以同时确认B可以接受和发送信息;而在挥手的时候,B接收到A的挥手信号,并不意味着B也需要立刻停止数据传送,所以B在停止发送数据时还需要再一次发送挥手信号。

概括着讲,握手是确认A和B的数据接收和发送能力,而挥手需要考虑A和B停止数据传输的先后顺序。于是,挥手比握手要多考虑一步。

你可能感兴趣的:(如何优雅简洁的理解三次握手和四次挥手)