Linux下端口如何分配

我们知道建立一个socket连接进行网络通讯时需要四个元素client_ip:client_port<----->server_ip:server_port,socket绑定一个端口号用于标识进程。我一直好奇在linux平台上运行时进程的端口如何分配的?如何才能避免端口占用冲突?

要想了解这些答案需要先了解Linux下端口范围多少?如何修改端口范围?一个进程的端口如何分配的?最后了解linux系统下端口如何分配的?

linux端口范围的查看和修改

1)查看端口范围:sysctl -a | grep range

Ubuntu默认端口范围

2)修改端口范围:sysctl.conf

vi /etc/sysctl.conf

net.ipv4.ip_local_port_range=32788 60000

修改ip端口范围并生效

配置立即生效:sysctl -p

另外,端口范围不要超过1024  65535,1024以下系统使用,65535以上设置会提示失败。

端口分配

程序的端口分配分为固定分配和自动分配两种。一套系统中固定端口是要进行规划的,比如ftp的端口为10021(控制连接时服务端的),控制连接时客户端的端口就可以随机分配。ftp数据连接如果在被动模式下服务端和客户端的端口都可以随机分配,如果在主动模式下,服务端的端口可以固定分配,客户端的端口随机分配。

固定分配,一般在服务端的进程启动时分配端口,用于创建socket进行监听客户端,如ftp配置文件中的listen_port=10021,http默认的是80,snmp管理的 trap端口是162和snmp agent端口是161。

自动分配,创建进程即建立socket用于通讯,比如ftp服务端的数据连接进程,会从linux sysctl.conf定义的端口范围,自动来分配端口,调用bind进行端口绑定。但有时候不进行绑定端口也能正常工作,这是因为协议栈对没有端口绑定的socket进行了自动绑定。每次调用第4层协议的sendmsg成员函数时,会进行端口号的检查,如果没有绑定就调用协议的成员函数get_port进行自动绑定。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,634评论 2 56
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,396评论 0 6
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,987评论 1 13
  • 天阴着,空气潮温闷热,仿佛能拧出水来。 我的来到山西平顺,在网上传得很火的穽底村附近爬山。 从高家台水磨山庄前的沟...
    阿果悠悠阅读 353评论 0 1