Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > linux保留端口避免被随机分配占用

linux保留端口避免被随机分配占用方式(ip_local_reserved_ports)

作者:IT杂人

文章分析Nginx服务器偶发端口冲突问题,指出因端口复用机制导致的连接数虚高现象,提出通过扩大端口范围、保留特定端口及分离Nginx与应用服务部署的解决方案,强调端口动态分配特性与实际资源消耗的差异

现象

nginx所在服务器上的应用偶现规划的端口被探测到激活,从而导致被ng分配请求,但却给不了正常的数据;

同时:

解决1:范围增大和保留端口不被占用

TCP/IP协议栈从ip_local_port_range中随机选取源端口时,会排除ip_local_reserved_ports中定义的端口,因此不会出现端口被占用导致服务无法启动的问题。

使用net.ipv4.ip_local_port_range参数,规划出一段端口段预留作为服务的端口,这种方法是可以解决当前问题,但是会有个问题,端口使用量减少了,当服务器需要消耗大量的端口号的话,比如反代服务器,就存在瓶颈了。

判断是否规划的端口在随机分配端口(也可增加范围)

sysctl -a |grep net.ipv4.ip_local_port_range

默认:

net.ipv4.ip_local_port_range = 32768 60999

当长连接比较多时,可适当增加此参数

如果端口在随机分配端口之内

则写如下配置,以保留不会被分配。

vim /etc/sysctl.conf

#支持“-”写端口段:33000-33100
net.ipv4.ip_local_reserved_ports = 35080

保存后,执行命令生效:sysctl -p

解决2:把ng服务与应用服务分开部署

当ng与需要反代的服务放一起时,会随机分配端口与反代服务映射,而因为都在同一台服务器,并发高时,此端口会被占用;

最大可用端口数

IP的端口是双字节,也就是256256-1, 256256对计算机来说就是0,因为此最大的端口号是65535而不是65536,当然端口数值是0-65535,数量是65536个,但0一般不用,故而我们通常都说65535,而且端口号最大也是65535,所以我们都说端口是65535

如何突破端口限制

每个机器还可以装多个网卡,在极端情况下,是可能通过增加网卡IP的形式来突破。

根据tcp连接四要素:

【源IP、源Port、目标IP、目标Port】,机器自身系统无关,在交互时以网卡标识。

实际几乎大多情况

端口不是说占用了就一直是你的了,你不用了还可以释放,释放后别的程序还能接着使用,所以,动态利用之下,很难把端口占完的。

其二、要分清端口和连接。一个端口可以有若干个连接,如nginx,普通linux上,一个80端口就能并发10万+的连接,极限情况下,可以近百万。所以,由于端口复用,其实并不会用到那么多端口。

所以,65536个端口用完的话基本上不会出现。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文