![ping 交换中 ICMP 协议 1 端口 xxx 不可达的确切含义](https://linux22.com/image/1496693/ping%20%E4%BA%A4%E6%8D%A2%E4%B8%AD%20ICMP%20%E5%8D%8F%E8%AE%AE%201%20%E7%AB%AF%E5%8F%A3%20xxx%20%E4%B8%8D%E5%8F%AF%E8%BE%BE%E7%9A%84%E7%A1%AE%E5%88%87%E5%90%AB%E4%B9%89.png)
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 图解,Stevens。
为什么是 UDP?该ping
命令传统上是使用 ICMP 回显请求实现的,但在某些平台上,某些工具可以使用其他协议。例如nmap -sU
答案2
在这个背景下是什么
protocol 1 port XXX
。
协议编号 1 是 ICMP。ICMP 不使用端口,但它使用 16 位标识符,port
此处为了简单起见将其称为标识符。(也许程序员懒得区分,或者标签会让用户更加困惑identifier
。)
NAT 路由器也使用标识符字段将答复映射到原始 NAT 会话,当然本地 IP 堆栈本身也使用标识符字段将回显答复路由回发起请求的进程 - 非常类似于传输层端口号。