假设我有 2 台 PC 连接到路由器。其中一台是无线的,另一台是有线的。我不确定这在这个问题上是否有区别。我可以从另一台 PC ping 一台 PC。但是当我执行 tracert 时,我发现它直接相互通信,而不需要路由器作为网关。据我所知,我认为所有通信都必须通过路由器?那么 PC 如何直接 ping 对方?
答案1
他们并不直接 ping 对方,而是通过路由器。
只有直接连接时才可以互相 ping 通。
以下是我的网络的一个示例
他们检查了所谓的“家庭/Nat 路由器”,即设备内的交换机,尽管输出没有显示这一点
C:\Users\user1>ping acomp
Pinging acomp.lan [192.168.1.66] with 32 bytes of data:
Reply from 192.168.1.66: bytes=32 time<1ms TTL=128
Reply from 192.168.1.66: bytes=32 time<1ms TTL=128
Reply from 192.168.1.66: bytes=32 time<1ms TTL=128
Reply from 192.168.1.66: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.1.66:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\Users\user1>tracert acomp
Tracing route to acomp.lan [192.168.1.66]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms acomp.lan [192.168.1.66]
Trace complete.
C:\Users\user1>
不过,你应该粘贴一些 ping 和 tracert 的输出,以便你得出结论
答案2
虽然您的路由器充当 IP(网络层)路由器,但它也充当以太网交换机(数据链路层)。网络层消息始终包裹在数据链路层消息内。
任何直接连接到交换机的主机都可以通过数据链路层联系任何其他直接连接的主机,方法是在发送时指定接收方的 MAC 地址。发送主机使用地址解析协议 (ARP) 发现 MAC 地址。请参阅http://en.wikipedia.org/wiki/Address_Resolution_Protocol了解更多信息。
流程基本上是这样的:
发送者(例如 192.168.1.10)想要向接收者(例如 192.168.1.11)发送信息。发送者知道接收者与发送者位于同一子网,因为网络掩码为 255.255.255.0。发送者发送广播 ARP 消息(通过数据链路层发送到本地网络上的所有主机),请求 192.168.1.11 的应答。接收者主机将以其 MAC 地址进行响应。现在发送者知道了接收者的 MAC 地址,它会创建一个 IP 数据包,并通过在数据链路层指定接收者的 MAC 地址将其直接发送给接收者。
由于指定了接收方的 MAC 地址,因此交换机无需执行任何 IP(网络层)路由;它只需通过将数据包发送到正确的 MAC 地址来执行数据链路层交换。从有线到无线的数据包在数据链路层基本上无关紧要 - 这些都是物理层关注的问题,而数据链路层位于物理层的顶部。
因此,就网络层而言(ping 所关注的是网络层),数据包直接从发送方到达接收方。就数据链路层而言,数据包通过交换机从一条链路切换到另一条链路。
请注意,实际流程稍微复杂一些;例如,MAC 地址被缓存,但总的来说,它的工作方式与描述一致。