应用层如何感知传输层链路故障

当TCP连接因故障断开时,应用层可能无法立即感知。通过实验表明,只有在数据传输时,如发送或接收数据,应用层才会通过内核接收到RST包,从而知道链路故障。实验中,模拟链路故障后,应用层在尝试发送或接收数据时,会遇到‘Connection reset by peer’的错误,表明TCP连接已关闭。
摘要由CSDN通过智能技术生成

应用层如何感知传输层链路故障

比如,一条普通的http连接底层依赖了一条普通的tcp连接,当某些故障导致tcp断掉了,http如何感知呢?

结论:tcp连接本质上是逻辑上的连接,依靠两边的操作系统内核维护了一些变量来表示连接的不同状态,所以只有在两端间真正有数据包传送的时候,才可能会改变现有的逻辑状态到一个新状态。

以下实验已将socket keepalive关闭

实验1:应用层有新数据发送时

实验过程

  1. client 与 server 建立TCP连接

  2. 通过scapy构造RST包“欺骗”server关闭连接来模拟链路故障,此时client并不知情server端已关闭(send(IP(dst=“192.168.57.3”)/TCP(sport=42752, dport=12345, seq=992635624, flags=“R”)))

  3. client发送数据

  4. 可以看到server由内核代为返回了RST包

抓包详情如下:

在这里插入图片描述

其中称192.168.57.100为client,192.168.57.3为server

每个包解释如下:

  • seq=1-3,TCP三次握手建立连接

  • seq=12,用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值