假设我们有两台主机,它们是 A 10.0.1.3 和 B 10.0.1.4。A 想要向 B 发送一个数据包,A 会寻找路由器来发送数据包吗?或者它只是使用 ARP 通过数据链路层发送数据包。
我的问题是,如果主机仅使用 ARP 在同一个子网中发送数据包,我们如何使用 VPN 发送数据包。而且,如果我们为主机分配一个 IP,似乎就不再有意义了。
答案1
在没有定义特定路由的情况下,A 将查阅其路由表,推断目的地在本地网络上,并对其进行 arp。
如果您不想这样做,请添加一条路由,说明数据包应发送到何处。假设您的 VPN 位于 10.0.1.6:
route add -host 10.0.1.4 gw 10.0.1.6
或者
route add 10.0.1.4 mask 255.255.255.255 10.0.1.6
这将添加比本地网络创建的路由更具体的路由,因此将强制将数据包发送到 10.0.1.6。
理想情况下,您永远不会在不同的子网上拥有具有相同网络地址的设备。
答案2
这里有两点需要回答:
正常情況:
在正常网络中(例如没有 VPN),会发生以下情况:
A 想要发送给 B
- 查看路由表以了解应如何传输数据。
- A 找到同一子网上主机的条目。
- A 将包发送到该子网上的 NIC,地址为 B。
不涉及路由器。没有“按数据链路级别使用 ARP”(无论其含义如何)。A 上的 IP 堆栈将简单地将数据包发送到从路由表中选择的 NIC 上的 B。如果 A 已经缓存了 B 的 MAC,它将直接发送数据包。如果它没有 MAC,那么它首先需要进行 ARP 发现,然后才能组装数据包。
VPN
现在 VPN 使情况发生了一些变化。
如果 B 是 VPN 主机,它似乎仍位于同一子网中。但是,有一些额外的机制可以拦截发送到 VPN 上主机的数据。通常,这是以不同的 NIC 的形式出现的,它将充当通向 VPN 另一端的隧道。除了双方的 VPN 软件之外,没有路由器参与。
答案3
在同一个子网上,两台主机之间的通信不会经过路由器进行任何数据包的发送。
为了理解 VPN,我解释两种链接:
点对点:链接位于两个设备之间,仅此而已。它与水管。如果你从一边洒一些水,水就会从另一边流出来。
多路访问:一个设备的接口所能看到的多于该设备能够通信的多。
以太网是多路访问链路,以太网交换机(目前使用的典型交换机)可以连接两个以上的设备。因此源设备需要在数据链路层指定目标设备地址(以太网报头中的目标 MAC 地址)。因此,以太网使用 ARP 来获取目标节点的 MAC 地址
VPN 是点对点链接,数据包从一端发出,从另一端出来。目的地拥有的任何地址(IP、MAC 等)都会接收数据包。因此 VPN 不需要 ARP,目标 IP 地址也不重要(不需要位于同一子网掩码中)
如果您使用 Wireshark 查看 VPN 未加密数据包,您将看到两个网络层报头,但只有一个数据链路报头!由于 VPN 是点对点的,因此第二个数据链路层报头不起作用。