ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
源 IP、源端口是`127.0.0.1:50000`,目标 ip、目标端口也是`127.0.0.1:50000`,通过上面的脚本,我们连上了本来没有监听的端口号。 ## 自连接的危害 设想一个如下的场景: * 你写的业务系统 B 会访问本机服务 A,服务 A 监听了 50000 端口 * 业务系统 B 的代码写的稍微比较健壮,增加了对服务 A 断开重连的逻辑 * 如果有一天服务 A 挂掉比较长时间没有启动,业务系统 B 开始不断 connect 重连 * 系统 B 经过一段时间的重试就会出现自连接的情况 * 这时服务 A 想启动监听 50000 端口就会出现地址被占用的异常,无法正常启动 如果出现了自连接,至少有两个显而易见的问题: * 自连接的进程占用了端口,导致真正需要监听端口的服务进程无法监听成功 * 自连接的进程看起来 connect 成功,实际上服务是不正常的,无法正常进行数据通信 ## 如何解决自连接问题 自连接比较罕见,但一旦出现逻辑上就有问题了,因此要尽量避免。解决自连接有两个常见的办法。 * 让服务监听的端口与客户端随机分配的端口不可能相同即可 * 出现自连接的时候,主动关掉连接 对于第一种方法,客户端随机分配的范围由`/proc/sys/net/ipv4/ip_local_port_range`文件决定,在我的 Centos 8 上,这个值的范围是 32768~60999,只要服务监听的端口小于 32768 就不会出现客户端与服务端口相同的情况。这种方式比较推荐。