6.TCP协议-连接异常

本文是通过阅读这篇博客并进行了适当的修改而完成的,谢谢这位博主


有很多情况导致连接无法建立。

本文我们分析 2 种情况,分别是针对 Windows 和 Linux 进行讨论,它们是有区别的。

  • 第一种情况是连接的主机不在网络中
  • 第二种情况是主机在网络中,但是对应的服务未开启

不同版本的 Linux 内核也是有区别的。这里我使用的是 Ubuntu 14.04 LTS 版本。

主机不在网络中

Linux 上的测试

主机是不存在的,但是客户端并不清楚此主机是否在网络中。

我们可以分析出以下结果:

  • 客户端发送了 SYN 请求后,因为超时没有 ack 返回,重传了 6 次 SYN,总共进行了7次SYN;最终 connect 超时。
  • 每次超时时间都是上一次的 2 倍(指数退避算法)

Window 7 上的测试

从图 3 中可以看到,Windows 第一次发送完 SYN 段后,没有等到对端 ACK,进行了 2 次重传。也就是一共发送了 3 次 SYN 段,如果第 3 次发送的 SYN 还没有收到 ACK,超时后 connect 函数就直接返回错误。

另外,我们发现,第一次的超时时间约为 3 秒,第二次约为 6 秒。

主机在网络中,但是服务未启动 

Linux 上的测试

这里写图片描述
图4 连接 Windows 主机 

从图 4 的结果来看,Linux 发送 SYN 段给目标主机后,对端直接丢了个 RST 段过来^_^,然后 connect 函数直接返回错误啦。。。。

在 Windows 上的测试

这里写图片描述
图5 Windows 上的测试 

可以看到,Windows 脸皮是比较厚的,对方丢了个 RST 段过来,仍然不放弃,又发两次 SYN 段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值