TCP的半关闭状态以及tcp-keepalive

文章目录半关闭状态实现方法tcp-keepalive开启 tcp-keepalive方法1 Linux系统全局开启方法2 setsockopt 设置 socket半关闭状态一次TCP四次挥手的过程如上图所示。设左侧为客户端,右侧为服务端,当客户端发起FIN而关闭其写通道时(对应服务端读通道),服务端进入close_wait状态,但希望推送完所有数据后再关闭整个连接。此时连接处于半关闭状态,客户端只能读,服务端只能写。待服务端发送完所有数据并发送一个FIN后,客户端响应ACK,服务端收到ACK后知道客
摘要由CSDN通过智能技术生成

半关闭状态

在这里插入图片描述

一次TCP四次挥手的过程如上图所示。设左侧为客户端,右侧为服务端,当客户端发起FIN而关闭其写通道时(对应服务端读通道),服务端进入close_wait状态,但希望推送完所有数据后再关闭整个连接。此时连接处于半关闭状态,客户端只能读,服务端只能写。

待服务端发送完所有数据并发送一个FIN后,客户端响应ACK,服务端收到ACK后知道客户端收到了所有数据,此时才能关闭服务端的写通道。

实现方法

客户端:调用shutdown(SHUT_WR) 发送⼀个 FIN 包,并且标记该 socket 为 SEND_SHUTDOWN;
服务端:收到 FIN 包并标记该 socket 为RCV_SHUTDOWN;此时就进入半关闭状态;

如果使用epoll实现,若⼀个Socket同时标记为 SEND_SHUTDOWN 和 RCV_SHUTDOWN;那么会触发 EPOLLHUP 事件;
如果⼀个Socket被标记为 RCV_SHUTDOWN;那么会触发 EPOLLRDHUP事件。

tcp-keepalive

tcp-keepalive 是在TCP传输层实现的探活机制,与应用层无关,因此应用程序无法介入。这也是为什么应

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值