Linux
為什麼對某些埠的訪問不穩定
我們安裝 netdata 工具(它的作業系統性能工具)
我們注意到 netdata 安裝失敗
curl -sSL --connect-timeout 10 --retry 3 http://localhost:19999/netdata.conf
和:
我們注意到有時埠 19999 被阻止,有時我們可以訪問
example when we have access telnet localhost 19999 Trying ::1... Connected to localhost. Escape character is '^]'. CConnection closed by foreign host.
有時埠被阻塞
Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused
這種非常奇怪的行為可能是什麼原因
注意-防火牆被禁用和彎腰,還有iptables
在第一種情況下
$ telnet localhost 19999 Trying ::1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.
有一個程序正在監聽給定的埠;您連接到它,最終遠端端終止連接。
在第二種情況下(在這裡,我假設您指定相同的埠,因為您沒有明確說明):
$ telnet localhost 19999 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused
這裡,
Connection refused
表示沒有程序在監聽指定的主機/埠。由於您使用了主機名localhost
,並且由於該主機名映射到 IPv4 和 IPv6 地址,telnet
因此嘗試連接到這兩者。最後,在給定埠上沒有程序監聽主機(通過 IPv4 或 IPv6)。您可以使用該
ss
命令列出正在偵聽哪個埠的程序:# ss -nlpt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 0 <address>:<port> 0.0.0.0:* users:(("<process-name>",pid=<process-id>,fd=<file-descriptor>))
選項:
-n
不要將地址轉換為主機名-l
僅列出偵聽套接字。-t
僅列出 TCP 套接字-p
列出相關的程序資訊。為此,您需要root使用者。這樣,您可以驗證該程序是否正在偵聽您期望的埠。