TCP三次握手四次挥手

TCP三次握手四次挥手_第1张图片

为什么一定是三次握手?

为什么不能是两次握手一次握手或者四次握手呢?

如果是一次握手,那么会出现三种情况。一是客户端的SYN报文压根没有发送出去,二是SYN报文服务器收到了但是并没有建立连接,三是建立连接了但是却并没有分配到文件描述符与客户端开始通信。

如果是两次握手,则可能会出现大量客户端与服务器进行连接,但是并不是真正通信的情况,会造成服务器资源浪费,也就是SYN洪水。在这里要知道,在双方建立TCP连接后,OS在内核会创建管理TCP连接的内核数据结构,会产生系统开销。

如果是四次握手,则意味着主动发起方也就是客户端最后创建连接。这样的话如果服务器已经为客户端创建好连接了,但是客户端跑不见了,服务器则要等待客户端发送最后一次ACK报文,也就会导致服务器会产生超时重传,但是维护链接的数据结构已经创建好了却并不能立即开始通信,这不就是一种资源浪费吗。

综上因为连接往往都是客户端主动发起,所以奇数次握手都是服务器最后建立连接,偶数次握手都是客户端最后建立连接。如果建立连接发生错误,成本往往都是先建立连接的一方承担。

所以开始通信前的三次握手是验证全双工通信信道畅通的最小成本,这样可以保证服务器资源有效利用。

为什么一定是四次挥手?

理解TIME_WAIT状态

解决TIME_WAIT状态引起的bind失败的方法

理解 CLOSE_WAIT 状态

你可能感兴趣的:(tcp/ip,网络,服务器)