網路與 IP

IP 連接埠範圍是多少?0–65535 的三段劃分與常用連接埠

連接埠號是 TCP、UDP 報文頭裡的 16 位欄位,所以 IP 連接埠範圍是 0–65535,共 65536 個。IANA 把它分成三段:0–1023 知名連接埠、1024–49151 註冊連接埠、49152–65535 動態連接埠。連接埠 0 保留不用,TCP 和 UDP 的同號連接埠互不相干;查本機監聽用 ss 或 netstat,查遠端連接埠用 nc、telnet 或 Test-NetConnection。

作者 頂聯產品團隊發布於 6 分鐘閱讀

IP 連接埠範圍是 0–65535。連接埠號寫在 TCP 和 UDP 的報文頭裡,欄位長度 16 位,2¹⁶ = 65536,所以最小是 0、最大是 65535。嚴格地說連接埠屬於傳輸層,IP 報文頭裡並沒有連接埠,“IP 連接埠”是把“IP 位址 + 連接埠”連在一起說的習慣叫法。IANA 按 RFC 6335 把這 65536 個號分成三段:0–1023 知名連接埠(也叫系統連接埠),1024–49151 註冊連接埠(使用者連接埠),49152–65535 動態連接埠(私有連接埠)。下面先講三段的區別和幾個容易誤解的地方,再給常用連接埠表,最後是查本機連接埠和測遠端連接埠的命令。

三段連接埠有什麼區別

範圍 名稱 怎麼分配 實際用途
0–1023 知名連接埠(System Ports) 須經 IETF 稽核或 IESG 批准,由 IANA 分配 SSH 22、HTTP 80、HTTPS 443 等基礎服務;Linux 上普通使用者預設不能監聽
1024–49151 註冊連接埠(User Ports) 廠商或專案向 IANA 申請登記 MySQL 3306、RDP 3389、Redis 6379 等應用;登記不等於獨佔,任何程式都能用
49152–65535 動態連接埠(Dynamic/Private Ports) IANA 不分配 客戶端發起連線時,由系統臨時分配作源連接埠

幾個常被問到的細節:

  • 連接埠 0 是保留號,不作為服務連接埠使用。程式呼叫 bind 時把連接埠寫成 0,意思是“讓系統隨便給一個空閒連接埠”,並不是真的用了 0 號連接埠。
  • TCP 和 UDP 各有一套 0–65535。TCP 53 和 UDP 53 是兩個不同的連接埠,防火牆要分別放行;DNS 兩個都用,NTP 只用 UDP 123。
  • ICMP 沒有連接埠。ping 用的是 ICMP,所以“ping 得通”和“連接埠通不通”沒有必然關係:伺服器禁 ping 時連接埠照樣可能是通的,ping 得通的機器連接埠也可能被防火牆攔著。
  • 低於 1024 的連接埠在 Linux 上需要特權。普通使用者啟動的程式監聽 80 連接埠會報 Permission denied,要用 root 啟動、給程式加 CAP_NET_BIND_SERVICE 能力,或者調低 net.ipv4.ip_unprivileged_port_start(核心 4.11 起提供,預設值 1024)。Windows 沒有這條限制。
  • 同一個 IP 上,同一協議的同一連接埠同一時間只能被一個程式監聽,特意開啟連接埠複用的情況除外。伺服器有多個 IP 時,可以在不同 IP 上分別監聽同一個連接埠;程式監聽在 0.0.0.0,表示佔用本機所有 IPv4 位址上的這個連接埠。

系統實際用的臨時連接埠範圍

RFC 6335 建議用 49152–65535 作臨時連接埠,但各系統的預設值並不一樣:

系統 預設臨時連接埠範圍 檢視命令
Linux 32768–60999 sysctl net.ipv4.ip_local_port_range
Windows Vista、Windows Server 2008 及以後的版本 49152–65535 netsh int ipv4 show dynamicport tcp

Linux 的預設範圍有一大半(32768–49151)落在註冊連接埠段裡,會帶來一個實際問題:如果你把某個服務配在 40000 連接埠,它重啟的那一刻,這個連接埠可能正被某個對外連線臨時佔用,服務就會啟動失敗,而且只是偶爾出現,很難復現。解決辦法是把服務連接埠加入保留列表,系統分配臨時連接埠時會跳過它們(以 root 執行):

sysctl net.ipv4.ip_local_port_range                       # 檢視,預設是 32768 到 60999
sysctl -w net.ipv4.ip_local_reserved_ports=40000-40010    # 立即生效
echo 'net.ipv4.ip_local_reserved_ports = 40000-40010' > /etc/sysctl.d/90-reserved-ports.conf   # 重啟後保持
netsh int ipv4 show dynamicport tcp      # Windows:顯示 TCP 臨時連接埠的起點和數量

臨時連接埠範圍也決定了無狀態 ACL 怎麼寫。機房邊界的 ACL 不跟蹤連線狀態時,伺服器主動存取外部(例如下載系統更新)的回包,目的連接埠落在這段臨時連接埠裡,規則裡要放行,否則會出現“對外提供的服務正常,伺服器自己卻上不了網”。Linux 和 Windows 伺服器混在同一個網段時,兩種預設範圍合起來是 32768–65535,按這個區間放行回包。

常用連接埠號一覽

下表是各服務的預設連接埠。服務都可以改連接埠,所以“某個連接埠開著”不代表一定是這個服務,以實際監聽的程序為準。

連接埠 協議 服務 說明
20、21 TCP FTP 21 是控制連線,20 是主動模式的資料連線;被動模式的資料連線用伺服器指定的高位連接埠
22 TCP SSH、SFTP、SCP Linux 和網路裝置的遠端登入
23 TCP Telnet 明文傳輸,交換器上建議關閉
25 TCP SMTP 郵件伺服器之間投遞,不少雲平台預設封禁出方向的 25 連接埠
53 TCP、UDP DNS 普通查詢走 UDP,區域傳送和較大的回應走 TCP
67、68 UDP DHCP 67 是服務端,68 是客戶端,PXE 裝機也要用
69 UDP TFTP PXE 裝機、網路裝置配置備份
80 TCP HTTP 網頁
110、995 TCP POP3、POP3S 收信
123 UDP NTP 時間同步
143、993 TCP IMAP、IMAPS 收信
161、162 UDP SNMP 161 接收查詢,162 接收 Trap
179 TCP BGP 路由器之間的 BGP 會話
443 TCP、UDP HTTPS UDP 443 用於 HTTP/3(QUIC)
445 TCP SMB Windows 檔案共享,不要對公網開放
465、587 TCP SMTP 提交 郵件客戶端發信,465 為隱式 TLS
514 UDP Syslog 裝置日誌
623 UDP IPMI BMC 帶外管理
873 TCP rsync 檔案同步
1433 TCP SQL Server 資料庫
1521 TCP Oracle 資料庫
2049 TCP、UDP NFS 網路檔案系統
3306 TCP MySQL、MariaDB 資料庫
3389 TCP RDP Windows 遠端桌面
5432 TCP PostgreSQL 資料庫
5900 TCP VNC 第二個顯示是 5901,依此類推
6379 TCP Redis 預設不設密碼,只應在內網監聽
8080、8443 TCP 備用 HTTP、HTTPS 常見於 Java 應用和各類管理後台
9100 TCP node_exporter Prometheus 採集主機指標
10050、10051 TCP Zabbix 10050 是 agent,10051 是 server
27017 TCP MongoDB 資料庫

看到一個陌生連接埠號,想知道它一般對應什麼服務,可以查本機的服務名資料庫。Linux 用 getent services 3306,輸出 mysql 3306/tcp;Windows 的同名檔案在 C:\Windows\System32\drivers\etc\services。這只是“約定俗成用這個號”的列表,不代表本機真的開著這個服務。

查本機在監聽哪些連接埠

Linux 上一條命令列出所有 TCP、UDP 監聽連接埠和對應程序,用 root 執行才能看到全部程序名:

ss -tulnp

看 Local Address:Port 這一列就能判斷連接埠對誰開放:0.0.0.0:22 和 [::]:22 表示本機所有位址都在監聽,防火牆放行時外部就能連;127.0.0.1:6379 只接受本機連線,外部永遠連不上;10.40.66.12:6789 只在這一個位址上監聽,從伺服器的其他 IP 進來是連不上的。

Windows 有三種查法:

netstat -ano | findstr LISTENING
Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object LocalAddress, LocalPort, OwningProcess
Get-NetUDPEndpoint | Sort-Object LocalPort | Select-Object LocalAddress, LocalPort, OwningProcess

netstat -ano 的最後一列和 PowerShell 輸出裡的 OwningProcess 都是程序號,再用 Get-Process -Id 程序號 或 tasklist /FI "PID eq 程序號" 查出是哪個程式。UDP 沒有“監聽”狀態,所以第一條命令只列出 TCP,UDP 要用第三條看。

查遠端 IP 的連接埠通不通

測 TCP 連接埠,Linux 和 Windows 各有順手的工具:

nc -zv -w 3 203.0.113.10 443                    # -z 只測能否建立連線,-w 3 最多等 3 秒
timeout 3 bash -c '</dev/tcp/203.0.113.10/443' && echo open || echo closed   # 沒裝 nc 時用 bash 自帶的功能
telnet 203.0.113.10 443
Test-NetConnection 203.0.113.10 -Port 443       # 看結果裡 TcpTestSucceeded 是 True 還是 False

nc 有 OpenBSD 版、傳統版和 Nmap 附帶的 ncat 等幾種實現,提示文字略有不同,判讀方法一樣。Windows 預設不帶 telnet 客戶端,需要在“啟用或關閉 Windows 功能”裡勾選,所以優先用 Test-NetConnection。

結果怎麼讀,關鍵是分清“立刻被拒絕”和“等了很久超時”:

現象 含義 下一步
成功:nc 顯示 succeeded 或 Connected,telnet 顯示 Connected to,TcpTestSucceeded 為 True 三次握手完成,連接埠上有程式在監聽 網路層沒問題,排查應用本身
立刻失敗:Connection refused 包到達了目標主機,但連接埠上沒有程式監聽,或者防火牆用拒絕(REJECT)方式回了 RST 或 ICMP 連接埠不可達 在伺服器上用 ss 或 netstat 看服務是否在執行、監聽在哪個位址
等待後超時:timed out,telnet 一直停在 Trying 包在路上被丟棄:安全組或防火牆用丟棄(DROP)方式攔截,或者主機不線上、路由不通 從近到遠查:伺服器防火牆、安全組或機房 ACL、中間鏈路
連上後馬上斷開 連接埠在監聽,但應用主動關閉了連線,常見於來源 IP 不在白名單、連線數已滿。nc -z 和 Test-NetConnection 遇到這種情況也顯示成功,要用 telnet 或不加 -z 的 nc 連上去才看得出來 查服務自身的存取控制和日誌

UDP 沒有握手,nc -zvu 發出去沒有回應,既可能是連接埠開著但應用不回包,也可能是被防火牆丟了,結論不可靠;只有收到 ICMP 連接埠不可達,才能確定連接埠沒開。測 UDP 服務要用應用自己的請求:DNS 用 dig @203.0.113.53 example.com,SNMP 用 snmpget -v2c -c 團體名 203.0.113.20 SNMPv2-MIB::sysUpTime.0,IPMI 用 ipmitool -I lanplus -H 位址 -U 使用者 -P 密碼 mc info,收到正常應答才算通。

查一個 IP 開放了哪些連接埠

想知道一台伺服器對外暴露了哪些連接埠,用 nmap 從外部掃一遍,比登入上去看監聽列表更接近攻擊者看到的樣子,因為它把防火牆和安全組的效果也算進去了:

nmap -Pn 203.0.113.10                              # 預設掃最常用的 1000 個 TCP 連接埠
nmap -Pn -p- 203.0.113.10                          # 掃全部 1–65535
sudo nmap -Pn -sU -p 53,123,161,623 203.0.113.10   # UDP 慢,只掃指定連接埠,需要 root

-Pn 表示不先探測主機是否線上,適合禁 ping 的伺服器。結果裡的 open 是有程式在監聽,closed 是能到達但沒有程式監聽,filtered 是被防火牆丟棄、無法判斷,UDP 常見的 open|filtered 表示沒有收到任何回應。只掃描自己管理或已獲授權的位址:對別人的伺服器做連接埠掃描,可能違反服務商的使用條款和相關法規。

IP 連接埠和交換器連接埠不是一回事

在機房裡,“開連接埠”“關連接埠”至少有三種意思,工單裡說不清楚很容易做錯:

說法 指的是 在哪裡操作
TCP/UDP 連接埠,如 3389 邏輯編號,標識伺服器上的某個服務 系統防火牆、安全組、機房 ACL
交換器連接埠,如 GigabitEthernet0/0/12 交換器面板上的物理網口 交換器上開啟、關閉,修改 VLAN 和限速
BMC 管理口 伺服器上專門接 BMC 的物理網口,BMC 自己再監聽 UDP 623、TCP 443 等連接埠 管理網交換器,BMC 的網路和服務設定

欠費停機、被攻擊時臨時斷網,關的通常是交換器物理連接埠。Toplink DCIM 的交換器管理按廠商指令集遠端開關連接埠、修改 VLAN、設定進出方向的限速,不用逐台登入交換器敲命令。BMC 那一側的 623、443 和控制檯連接埠,也不必對每個維運人員的電腦放行:部署在各機房的從節點接入管理網、就近連線 BMC,維運人員只存取 DCIM 後台,在瀏覽器裡開啟 IPMI 遠端管理的控制檯即可。

常見問題

連接埠號能超過 65535 嗎?

不能。連接埠欄位只有 16 位,65535 是最大值。配置檔案或防火牆規則裡出現 65536 以上的數字,要麼會被拒絕,要麼是填錯了,應當改正。

一台伺服器最多能有多少個連線,是不是受 65535 限制?

不是。一個連線由協議、源 IP、源連接埠、目的 IP、目的連接埠五項共同確定,服務端監聽一個連接埠就能接受來自不同客戶端的大量連線,上限取決於記憶體和檔案描述符。受連接埠數限制的是主動向外連線的一方:從同一個源 IP 連同一個目標 IP 和連接埠時,可用的源連接埠數就是臨時連接埠範圍的大小。

自己的服務應該用哪個連接埠?

從 1024–49151 裡挑一個不和常用服務衝突的。在 Linux 上還要避開 32768–60999 這段臨時連接埠範圍,或者用 net.ipv4.ip_local_reserved_ports 把它保留下來,否則服務重啟時可能碰上連接埠正被某個對外連線臨時佔用。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88