TCP 用两字节(16 bit)来表示端口,也是就说一台服务器最多可以有 65536 个端口号的。




docker sentinel 端口问题 docker端口范围_端口号


传输层使用端口号区分同一台主机的不同的应用程序。操作系统为需要的进程分配端口号,当目标主机收到数据包以后,会根据报文首部的目标端口将数据发送给对应端口的进程。

端口分类:

  1. 熟知端口(well-know port)
  2. 已登记端口(registered port)
  3. 临时端口号 (ephemeral port)

熟知端口

熟知端口的范围是0-1023,比如 HTTP 使用 80端口,HTTPS 使用 443 端口,ssh 使用 22 端口。

已登记的端口

范围是1024到49151。

临时端口号

如果应用程序没有调用 bind 将 socket 绑定到特定的端口上去,那么系统会为该 socket 分配一个唯一的临时端口。临时端口范围是 49152 - 65535,这些端口可以供本地程序临时分配端口使用。


docker sentinel 端口问题 docker端口范围_端口号_02


通过 cat /proc/sys/net/ipv4/ip_local_port_range 查看临时端口的范围。

使用下面的命令修改临时端口的范围:


sysctl -w net.ipv4.ip_local_port_range="50000 50010"


使用 telnet 或 nc -v 可以查看对方端口是否打开,端口如果没有被打开,会报 connection refuse 的错误。

查看端口被什么进程监听占用


netstat -ltpn | grep :22


lsof -n -P -i:22


其中-n表示不将 IP 转换为 hostname,-P表示不将 port number 转换为 service name,-i:port表示端口号为 22 的进程

如何查看进程监听的端口号


netstat -atpn | grep 3306


lsof -n -P -p 3306