阅读本文需要先了解TCP连接过程,这里不详细描述,流程如下:
问题来了:
1.为什么建立连接要三次握手?
2.为什么断开连接要四次挥手?
先说第一个问题。在想这个问题的时候,我想到的是为什么两次握手不可以。以A、B两人通信为例,第一次握手是A发消息给B,第二次握手是B发消息给A,我们知道经过两次握手之后,A和B之间的通信线路(A到B,B到A)是通了,但没有解决信任的问题。第一次握手使得B知道A->B是通的,第二次握手使得A知道A->B,B->A是通的,但此时B不知道B->A是否通,因此需要第三次握手,即A再发消息给B告诉它收到消息,这时B就知道B->A是通的。经过三次握手之后,A和B都知道彼此通信是通的。其实这个信任的问题,用四次握手来描述就比较清楚,即A发B,B回A,B再发A,A回B,只是中间B那两步简化成一步就可以了。
其实断开连接的时候,使用的就是类似上述四次握手的过程,那么问题来了,为什么断开连接时中间那两步不能并成一步了呢?B回应A的分手请求时同时也发送自己的分手请求不可以吗?
答案是不可以。这是因为断开连接时,要连接过程中的数据处理可能没有完成。A发给B,B回应A时,表示A->B的线路断开,此时A不再发消息,B不再收消息。但是B可能还有数据要发给A,经过一段时间后,B处理完数据并全部发送给A后,才发起断开连接请求,开始B->A断开的过程,因此B回应A的分手请求和B发送分手请求不能合并成一步。