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

5 篇文章 0 订阅

现象

nginx所在服务器上的应用偶现规划的端口被探测到激活,从而导致被ng分配请求,但却给不了正常的数据;
同时:
通过命令netstat -anlp|wc -l 显示有大量tcp连接,对open files值也有参考意义
通过命令netstat -anlp|awk '{print $4}'|sort|uniq -c|wc -l显示有大量端口占用,统计第四列表示本地使用的端口(会重复)

解决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个端口用完的话基本上不会出现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值