为什么ICMP不使用端口号?

网络工程 国际会议
2021-07-15 06:43:45

防火墙显示在 7 号端口中,Google 搜索也显示在 7 号端口中,所以我对 ICMP 究竟如何使用端口号感到困惑。

问候, 布山

4个回答

端口号是传输层协议(如 TCP 和 UDP)的一个特征。ICMP 实际上是网络互连层 (IP) 的一部分,因此该层不存在该属性。

是的,我知道 ICMP 被封装在 IP 中,但它仍然被认为是网络层的一部分。那只是显示了模型的局限性。引用 RFC 792:

ICMP,使用IP的基础支持,就好像它是一个更高级别的协议,然而,ICMP实际上是IP的一个组成部分,必须由每个IP模块来实现。[强调]。

ICMP 是 IP 协议 1,TCP 是 6,UDP 是 17。所以这些都是具有不同行为的不同协议。TCP 和 UDP 有端口,ICMP 没有。TCP 和 UDP 在端口 7 上有一个 Echo Service,有时称为 TCP-Ping/UDP-Ping,但它们与 ICMP 无关。也许这就是你的困惑。

TCP 和 UDP 是使用端口号在应用程序或进程之间复用它们的传输协议

这样,您的浏览器通过 TCP 使用 HTTP,例如可以多次连接到完全相同的 Web 服务器。虽然目标端口相同(HTTP 的默认值:80),但每个套接字连接使用不同的源端口。

同样,不同的应用程序当然可以使用相同的复用。在服务器端,不同的 TCP 端口可以有不同的服务 - 80 上的 HTTP,21 上的 FTP,25 上的 SMTP,等等。或者 - 使用非标准端口 - 例如,甚至端口 80 和 8000 上的不同 Web 服务器。

如果没有端口,任何两台主机之间可能只有一个 TCP 连接,或者在服务器上运行一个 TCP 服务。(UDP 或任何其他传输协议也是如此。)

ICMP 不是传输协议,而是IP 协议一部分它用于主机之间信令可以传输的消息包括

  • 目的地不可达(路由器发出信号表示它无法向目的地转发、主机拒绝数据包或类似情况)
  • 重定向消息(路由器希望源使用另一个网关)
  • 超时(数据包已超过其生命周期/跳数并被丢弃)
  • Echo 请求/ Echo 回复(由 使用 ping

端口号是某些传输协议使用的传输层地址传输地址(端口)的目的是允许多个进程同时使用一个传输协议,并且传输协议可以将正确的数据传递给使用它的多个进程中的正确进程。

端口号也是每个协议。例如,TCP和UDP使用的端口号解决,但TCP端口12345不是UDP端口12345一次只有一个进程可以绑定到TCP端口12345,但是一个进程可以同时绑定到TCP端口12345,另一个进程绑定到UDP端口12345