ping 會話的 tcpdump 顯示以下兩行:
IP gateway.comp.com > somehost.comp.com: ICMP redirect 10.8.0.10 to host othergateway.comp.com, length 68
IP gateway.comp.com > somehost.comp.com: ICMP 10.8.0.10 protocol 1 port 21475 unreachable, length 68
我明白第一條訊息。它只是告訴somehost
不要將gateway
資料包發送到 10.8.0.10 來打擾主程序,而是直接將它們路由到othergateway
。
但第二條訊息是什麼意思呢?它晚了 17 毫秒,似乎是相關的。在這個背景下是什麼protocol 1 port XXX
。到底是什麼是遙不可及的呢? ICMP(=協定 1)沒有端口,據我所知,這是什麼意思?
答案1
這大概是ICMP 控制訊息類型 3(目標不可達)代碼 3(連接埠不可達)
這意味著目標處沒有與該 TCP 或 UDP 連接埠關聯的伺服器進程。
“UDP 的一條規則是,如果它收到 UDP 數據報並且目標端口與某個進程正在使用的端口不對應,則 UDP 會以無法訪問的 ICMP 端口進行響應。”- 從TCP/IP 插圖,史蒂文斯。
為什麼選擇UDP?該ping
命令傳統上是使用 ICMP 回顯請求來實現的,但在某些平台上,某些工具可以使用其他協定。一個例子是nmap -sU
答案2
在這個背景下是什麼
protocol 1 port XXX
。
1 號協議是 ICMP。 ICMP 不使用端口,但它使用 16 位標識符,port
為簡單起見,此處引用該標識符。 (也許程式設計師懶得去區分,否則使用者會對標籤感到更加困惑identifier
。)
NAT 路由器也會使用識別碼欄位將回覆對應到原始 NAT 會話,當然,本機 IP 堆疊本身也使用該識別碼欄位將回顯回覆路由回發起請求的進程 - 非常類似於傳輸層連接埠號碼。