修改预留端口号防止被占用

给客户端的端口号通常是动态分配的,称为ephemeral port(临时端口)

  • net.ipv4.ip_local_port_range

    在Linux系统上临时端口号的取值范围是通过这个内核参数定义的:net.ipv4.ip_local_port_range (/proc/sys/net/ipv4/ip_local_port_range),默认为32768 - 60999

    [root@VM_42 /]# cat /proc/sys/net/ipv4/ip_local_port_range
    32768   60999
    
  • net.ipv4.ip_local_reserved_ports
    /proc/sys/net/ipv4/ip_local_reserved_ports (net.ipv4.ip_local_reserved_ports) 是应用程序保留的端口号,不会参与内核动态分配.

端口号动态分配时并不是从小到大依次选取的,而是按照特定的算法随机分配的。临时端口号是这样产生的:生成一个随机数,利用随机数在ip_local_port_range范围内取值,如果取到的值在ip_local_reserved_ports范围内 ,那就再依次取下一个值,直到不在ip_local_reserved_ports范围内为止

服务监听端口在32768 - 60999之间,可能导致端口号用作临时端口,从而导致服务启动失败,解决方式:

  1. 修改临时端口范围 ip_local_port_range,因为一个程序的端口问题修改一个机器的临时端口范围,明显减少了临时端口的使用量。代价大。
  2. 修改预留端口ip_local_reserved_ports,即使没有发生冲突也可以预先设置,防止后续端口被占用。
posted @ 2020-12-15 17:02  城东  阅读(1037)  评论(0编辑  收藏  举报