最近项目中发现客户端每次上电后的端口都是一样的,不过在不同的机器上它们之间上电后的端口又不一样。这种表现与我之前的理解的不一样:
若未指定客户端端口,则由系统随机分配
按照我之前的理解,应该是每次上电的端口都会变化。而实际好像这个端口是根据网络协议栈的一些信息经过特定算法得到的。如果重启client端也会发现端口变化,一方面在关闭套接字的2MLS时间里,这个连接处于time_wait状态,端口被占用,所以协议栈分配另外的端口给client,另一方面协议栈的环境变化了,协议栈自动分配的端口也就会变化。可以看看connect源码中分配端口的函数inet_autobind,http://lib.csdn.net/article/computernetworks/38533
阅读里面的介绍,也了解到了
当bind的端口号小于1024,会要求root权限。
时间: 2024-10-18 17:30:44