为什么 ping 不是客户端 - 服务器类型的东西?

网络工程
2021-07-20 00:27:44

我在某处读到 ping 请求-响应不像客户端-服务器那样工作。如何?我们(发送方)发送一个数据包(ping),如果服务器启动,它会发回一个数据包。这不是客户端-服务器类型的通信吗?

4个回答

我们(发送方)发送一个数据包(ping),如果服务器启动,它会发回一个数据包

这不是客户端/服务器的定义,它只是意味着您有双向流量,在 p2p 应用程序中也有。

有人可能会争辩说,严格来说,您执行的“ping”实用程序(应用程序?)可以被视为客户端,因为它总是发送回显请求,然后处理它得到的响应。因此,可以将远程设备中发回回声的 IP 堆栈部分视为服务器

另一种看待它的方式是 IP 网络上的每个设备都可以发送回声请求响应它们,所以从这个角度来看,没有客户端与服务器,但都是平等的,因此“ping”(我假设你的意思是与“ping 应用程序”)更多的是一种点对点功能。这是 laika 和 Datagrem.Network 在他们的答案中暗示的,但没有明确说。

最后恕我直言,它更像是一种语义而不是真正的技术讨论,我什至认为 ping 甚至不是一个“应用程序”。

Ping 使用 ICMP 回显消息。

引自RFC 792,ICMP(互联网控制消息协议)规范:

ICMP实际上是IP的一个组成部分,每个IP模块都必须实现。

无需启动任何要启动的服务并在特定端口上侦听 ICMP 消息。

您似乎将无处不在的网络请求/响应概念与应用程序客户端/服务器响应混淆了。

在网络层(OSI 层 1 到 4),一切都是点对点连接。对等点可以相互查询,并从对方接收响应。这不是客户端/服务器概念。第 3 层的每个对等点都可以 ping 另一个对等点并收到响应。这是一条双向街道,即点对点。

客户端/服务器概念是一个应用程序概念。例如,Web 浏览器可以从 Web 服务器请求一个网页,它会得到一个网页作为响应,但 Web 服务器不能从 Web 浏览器请求一个网页。这是一条单向街道,即客户端/服务器。

ICMP 直接在 IP 数据包之上实现,不使用 TCP 或 UDP 等传输层(OSI 第 4 层),并且是 IP 的组成部分。RFC 792 定义了ICMP,它为IP 提供路由、诊断和错误功能。尽管 ICMP 消息封装在 IP 数据报中,但 ICMP 处理被认为是(并且通常被实现为)IP 层的一部分。