![这些数据包如何路由](https://linux22.com/image/1555001/%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%8C%85%E5%A6%82%E4%BD%95%E8%B7%AF%E7%94%B1.png)
路由器 B(192.168.1.1)通过以太网线插入路由器 A(192.168.0.1)。笔记本电脑 A(192.168.1.101)通过无线方式连接到路由器 B。
现在,如果我 ping 一个同样连接到 B 的 Windows VM (192.168.1.18),我知道这不会转到默认网关,因为它们位于同一子网中。但是,如果我随后 ping Raspberry Pi (192.168.0.11),这应该转到默认网关 (192.168.1.1) 吗?
当我打开 Wireshark 时,使用过滤器
ip.src == 192.168.1.101 && ip.dst == 192.168.1.1
什么都没有出现,显然我在这儿想错了,但是为什么 Wireshark 中没有显示 ICMP 消息呢?
我期望发生的情况是,我从 192.168.1.101 ping 到 192.168.0.11,这是在不同的子网上,因此它被发送到 DG(192.168.1.1),然后传递到路由器 A(192.168.0.1),然后将它传递给树莓派(192.168.0.11)...
路由器 B 是便宜的 TPLink 路由器,没有特殊配置,通过一根以太网电缆连接到路由器 A(Virgin 超级集线器)。路由器 A 连接到互联网。我想问题是,笔记本电脑 A 如何与 Raspberry Pi 通信,而不似乎通过路由器 192.168.1.1(Wireshark 中没有显示任何内容)
答案1
IP 数据包始终(至少在理想情况下)具有原始发件人和实际受助人设置。这些值永远不会改变。因此,如果流量被定向到192.168.0.11,它将ip.dst
设置为192.168.0.11
。
通过在数据包上设置适当的 MAC 地址将流量定向到下一跳。
答案2
这里基本上是一个以太网/IP 网络(wifi 不是以太网,但足够相似)。第 2 层是以太网,第 3 层是 IP。
在线路上,有带以太网地址 (MAC) 的以太网数据包,其中包含带 IP 地址的 IP 数据包。以太网通常在单个子网(例如 192.168.0.*)内使用,多个以太网子网通过路由器连接成更大的 IP 网络。
当您的计算机发送 IP 数据包时,它会查看其路由表以选择将其发送到何处。如果它在本地网络中(没有网关的路由),它将找到目的地的以太网 (MAC) 地址(通过 ARP)。具有源 IP 地址和目标 IP 地址的 IP 数据包将被放入以太网帧中,其中包含您的计算机和目的地的源和目标以太网地址。
如果路由表指定了带有网关的路由(默认路由或子网路由),它将查找网关(而非目标)的以太网地址,并且再次将包含源 IP 和目标 IP 的 IP 数据包发送至以太网帧内,其中源以太网 IP 是您计算机的,而目标以太网地址不是目标计算机的,而是网关的。网关将在其一个接口上接收以太网帧,查看 IP 数据包中的 IP,然后将其发送到另一个接口,方法与您的计算机类似。
由纯路由器路由的数据包的 IP 信息不会改变。路由器将以类似于计算机的方式为数据包选择路由,将其放入新的以太网帧中,源以太网地址为网关的出站接口,目标以太网地址为目的地或另一个网关(取决于路由)并将其发送出去。
拥有以太网地址的原因在于以太网不是点对点线路,而是由交换机连接在一起的元素网络,交换机是以太网层的更简单的路由器等价物。
现在,并非所有网络都是以太网。您的互联网上行链路可能不是以太网,甚至 wifi 也不是以太网,但典型的简单 wifi 的行为大多像以太网,具有以太网兼容地址,甚至可以在以太网-wifi 第 2 层混合网络中桥接,例如当您使用“哑 AP”时。
此外,典型的家用路由器不是路由器,而通常是交换机(在 LAN 端)微型计算机类准路由器,除了简单的路由之外,它还会对在 LAN 和 WAN 之间转发的数据包上的源/目标 IP 地址和端口进行 NAT 重写。
现在应该很明显了,当 ping 时,您将看不到目标 IP 设置为网关的数据包,但是如果您查看以太网地址,它应该是网关的地址。