“ping”在哪个端口上工作?

jos*_*eph 27 port ping

ping默认情况下,该命令是否有任何特定的端口号?

同样在 Linux 系统上,有没有办法自己弄清楚它运行在哪些端口号上并为其配置不同的端口号?

Jos*_*ang 53

Ping 使用ICMP 协议,它没有像 TCP 和 UDP 协议那样的端口。

如果您需要查看 Linux 系统上是否禁用了 Ping,您可以检查:

cat /proc/sys/net/ipv4/icmp_echo_ignore_all
Run Code Online (Sandbox Code Playgroud)
  • 0 表示启用 Ping。(系统会响应ping)
  • 1 表示 Ping 被禁用(系统不会响应 Ping)

  • @约瑟夫:不!端口号是 tcp 和 udp 的事情,而 icmp 是同级别的单独协议;在IP数据包的协议字段中区分为协议1(tcp和udp分别为6和17)。至于它是否是“服务”,好吧,任何东西都可以建模为服务,但它肯定不会实现为侦听 tcp 或 udp 端口​​的守护进程。在大多数情况下,我相信它在操作系统内核中得到了回答,除了在内核之外对 TCP 进行模块化的操作系统。 (13认同)
  • @joseph TCP 和 UDP 协议服务将有端口。ICMP 没有这个概念。如果您使用 ICMP 协议发送消息,则无需指定端口,只需指定该协议即可。 (5认同)
  • 同意 - 还有其他名为“ping”的东西,如 tcpping 和 arping,它们适用于不同的协议,但它们不是常见的 ping。 (4认同)
  • @CCTO,Re,“......在操作系统内核中,除了 TCP 模块化的操作系统......”有一种更简单的说法:ICMP 在 [_TCP/IP 堆栈_](https:// en.wikipedia.org/wiki/Internet_protocol_suite)。根据操作系统的不同,TCP/IP 堆栈可以是内核的一部分,也可以是驱动程序或可加载的内核模块,也可以是用户模式进程等。 (4认同)

phy*_*fox 35

TCP/IP 使用四层网络堆栈。链路层处理物理媒体以及如何传输字节,互联网层处理 IP 地址以及如何将数据从一个节点路由到另一个节点,传输层处理 TCP 和 UDP 会话,应用层处理用户程序用于正常与网络交互。

Ping 是作为 ICMP(互联网控制消息协议)的一部分实现的,它处理诸如错误、拥塞等问题。ICMP 是在互联网层实现的,因此完全不知道上游层提供的加密、端口、会话和其他东西,也不知道字节是如何物理地从 A 点传输到 B 点(这是Link层的要点)。

所有这些都意味着 ping 本身没有端口。它们不在任何端口号上运行,因为它们是在不同级别实现的。当您请求 ping 时,此操作有效地绕过了应用层和传输层,并直接要求 Internet 层诊断连接(即查看需要多长时间才能获得响应)。这通常直接在网络驱动程序中实现,不需要任何特殊的用户应用程序来请求或响应 ping。

您可以打开和关闭 ping 响应,但是您不能配置在您询问的层中实际上没有概念的东西。对于任何给定的操作系统,您只需查看在线手册以了解如何启用或禁用 ping 响应。另一个答案详细介绍了在 Linux 上启用/禁用它,而这个答案旨在解决为什么没有可以为 ping 配置的端口。

  • IP 和 ICMP 不是独立的协议:您不能在不同的第 3 层协议之上使用 ICMP,因为它是 IP 的*部分*,但它使用 IP 的方式与 TCP(第 4 层/传输协议)会。 (4认同)

iBu*_*Bug 7

传统的“Ping”使用ICMP协议,它与具​​有“端口”概念的TCP和UDP是分开的。我画了一个图,这样更容易理解: