工作学习1-tcp自连接
2021/9/8 6:08:02
本文主要是介绍工作学习1-tcp自连接,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
运维同事反馈服务起不来。下面为了方便,写了一个demo来展示。
https://gitee.com/northeast_coder/code/tree/master/case/case1_tcp_self_con
1、调查问题
查问题先看软件日志,报错日志提示监听管理公开i的port被占用,无法建立监听。
root@DESKTOP-JS5DDL9:~/gitee/code/case/case1_tcp_self_con$ ./srv/srv 0.0.0.0 40000err!file:../../../xcom/xsock.hpp,line:51,last err=98 Address already in useerr!file:main.cpp,line:19,last err=98 Address already in use
根据提示,ss命令看了一下,谁占用了端口
root@DESKTOP-JS5DDL9:~$ ss -apn|grep 40000tcp ESTAB 0 0 127.0.0.1:40000 127.0.0.1:40000 users:(("client",pid=275,fd=3))
有一条怪异的连接,local addr和 peer addr居然相同,都是服务要监听的地址。client是管理工具,是connect端,连接服务的,怎么连上自己了呢?原来这里触发了“tcp自连接”
2、分析原因
正常tcp连接
#监听端 bind,listern;
#连接端:connect
#监听端:accept
也就是大名鼎鼎的三次握手过程
1、con:syn
2、srv:syn+ack
3、con:ack
非正常tcp连接(simultaneous open)
学习时尽量要找到一手材料,在 RFC-793 Section 3.4, page 32定义了这种同时打开的情况。rfc793 (ietf.org)
自连接是simultaneous open比较特殊的情况,每次连接时os会给本地随机有一个port,服务没有启动,所以不断重连,当随机的port恰好为服务的port时,则client本地地址为0.0.0.0:40000,目标也是0.0.0.0:40000,达成了simultaneous open的条件,触发了自连接,占用了服务端的端口。
3、问题解决
#检测自连接
连接端:连接成功后,获取对端地址以及本地地址,若相同则主动断开。
#修改服务端监听端口
连接端随机端口有个范围,修改监听地址不在此范围即可。
cat /proc/sys/net/ipv4/ip_local_port_range32768 60999
全网同名(腾讯&字节&博客园)欢迎关注~
这篇关于工作学习1-tcp自连接的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用