TCP异常终止连接及SO_LINGER选项

本文探讨TCP连接的异常终止,介绍如何通过SO_LINGER选项控制连接关闭行为。异常终止允许立即丢弃待发送数据并发送RST报文段。通过实例分析和tcpdump工具,展示了设置SO_LINGER后,主动关闭方可能跳过FIN_WAIT1等状态,直接关闭连接。此外,详细阐述了SO_LINGER参数对连接关闭的影响,包括进程阻塞、资源消耗及RST报文段的发送等情况。
摘要由CSDN通过智能技术生成

TCP的异常终止连接及SO_LINGER选项:

终止一个连接的正常方式是一方发送FIN,进入FIN_WAIT1状态。当我们调用close()函数关闭连接之后,如果在发送缓冲区中还有数据,那么系统会发送这些数据,然后再发送FIN,但是也有可能发送一个复位报文段来释放一个连接,这种现象就称为异常终止连接

异常终止一个连接有两个优点:(1.马上丢弃待发送数据并立即发送复位报文段(2.RST的接收方会区分另一端执行的是异常关闭还是正常关闭。

我们可以自己编写sock程序并使用tcpdump工具进行分析查看异常关闭的整个过程(sock代码放在最后)。

  1. 首先运行tcpdump "port 6666" -i lo -S(指定监听的端口,-i参数代表选择监听的网卡,lo是用来进行环回测试的,-S命令是完整的显示序号)
  2. 接下来运行我们编译完成的server端./server
  3. 再运行client端./client
  4. 这个时候就可以看到运行了tcpdump那个终端显示出了三次握手的三个报文
  5. 再启动一个终端运行netstat -ano | grep 6666,查看6666端口的使用情况
  6. ctrl+c终止任意一端,这时候查看运行了tcpdump那个终端显示的数据,就会发现多了一行数据,即复位报文段。再次运行netstat -ano | grep 6666,会发现已经没有进程占用6666端口了。这点和以前不同,正常的终止连接主动关闭方会进入TIME_WAIT状态&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值