网站建设管理和维护,建立网站如何,杨浦做网站公司,wordpress导航图片作者#xff1a;Mr林_月生链接#xff1a;https://www.jianshu.com/p/3ab10c8685b5现象直接上图可以发现#xff0c;本地没监听50000端口的服务#xff0c;但是尝试连接本地50000端口时#xff0c;却能成功建立连接#xff0c;这种现象叫做「自连接」。我们再通过netstat…作者Mr林_月生链接https://www.jianshu.com/p/3ab10c8685b5现象直接上图可以发现本地没监听50000端口的服务但是尝试连接本地50000端口时却能成功建立连接这种现象叫做「自连接」。我们再通过netstat命令查看创建的连接是怎样的。我们可以注意到创建的连接的源端口和目的端口都是一样的。原因分析我们都知道一条TCP连接主要是由源端口、源IP、目的端口、目的IP四部分组成的我们称为「TCP socket四元组」。当我们尝试对本机的一个端口创建连接时四元组中的源IP、目的端口和目的IP已经确定了(源IP和目的IP都是本地IP目的端口即是我们尝试请求的端口)至于源端口是由系统为该连接分配的一个临时端口。此时如果目的端口未被监听连接会有两种结果系统分配的源端口与目的端口不一样则会报「Connection refused」的错误。系统分配的源端口与目的端口一样此时连接能创建成功这种情况我们称为自连接。发生自连接时创建连接时包的交互过程如下。系统分配给连接的源端口为50000所以tcp将通过50000端口发送一个SYN包给对端并将连接状态置为「SYN_SENT」由于50000端口同时也是目的端口所以它会收到SYN报文这时它会以为是对端同时也想创建连接所以会回复SYNACK报文并将连接状态置为「SYN_RCVD」SYNACK报文也是会被50000端口自己接收的它会以为这是对端给它的回复报文所以认为握手成功连接状态置为「ESTABLISHED」自连接发生的条件目的端口处于临时端口范围(linux临时端口范围由net.ipv4.ip_local_port_range决定)目的端口未被监听目的IP是本地IP自连接的危害假设有这样一个场景一个机器上有A和B两个服务服务A会请求服务B服务B监听的端口属于临时端口。有一天服务B挂了然后服务A一直在重连服务B很不幸的发生了自连接。这时候服务B想重启时就会发生端口占用的报错了。避免自连接的手段服务监听端口不要使用临时端口如果感觉推送内容不错不妨右下角点个在看感谢支持