读Muduo源码笔记---4(TCP自连接)

本文详细探讨了TCP自连接的现象,起因于服务端端口释放后,客户端恰好使用同一端口进行连接。通过分析TCP连接过程,作者指出自连接并非伪命题,但实际连接建立后可能导致服务端无法启动。为避免自连接,提出了检查并关闭自连接连接、设置SO_REUSEADDR选项、使用固定端口以及调整系统配置等策略。文章还分享了Linux系统中关于客户端端口分配的配置信息。
摘要由CSDN通过智能技术生成

1、问题原因

  svr挂掉了,端口释放了,cli去connect这个目的端口的时候正好选择了这个端口作为源端口,此时端口没人用,使用是合法的。于是自连接形成了。 就是出现源ip和源端口通目的ip和目的端口完全相同的情况,也就是在服务端没有启动,客户端也可以连接成功,但会造成服务端无法启动。

2、tcp连接分析

   要建立一个tcp连接,首先svr要在b端口上listen,cli再使用a端口connect,端口选择一般是用户不显示bind,由内核代为选择一个空闲端口号,那么,即使svr和cli在一台机器上,因为svr已将b端口占用,cli不管用户bind还是内核选择,都不可能选到b。所以这样看来,同一个端口自连接就是一个伪命题。

同时打开

    在同时打开的过程中,我们站在一方的角度想,它①先发了一个SYN,然后②收到了对端的SYN(而不是SYN+ACK),这时③回复SYN+ACK,当④再次收到SYN+ACK时就认为建连成功。对于自连接过程:为了建立连接,向destport发送一个SYN(完成了步骤①)࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值