![将我的 IPv4 更改为 ssh 到 rpi2 上的 OpenWRT - 之后在我的主机上执行 dhclient - 现在我在一个 NIC 上有两个 IPv4 - 并且它可以工作!如何?](https://linux22.com/image/217187/%E5%B0%86%E6%88%91%E7%9A%84%20IPv4%20%E6%9B%B4%E6%94%B9%E4%B8%BA%20ssh%20%E5%88%B0%20rpi2%20%E4%B8%8A%E7%9A%84%20OpenWRT%20-%20%E4%B9%8B%E5%90%8E%E5%9C%A8%E6%88%91%E7%9A%84%E4%B8%BB%E6%9C%BA%E4%B8%8A%E6%89%A7%E8%A1%8C%20dhclient%20-%20%E7%8E%B0%E5%9C%A8%E6%88%91%E5%9C%A8%E4%B8%80%E4%B8%AA%20NIC%20%E4%B8%8A%E6%9C%89%E4%B8%A4%E4%B8%AA%20IPv4%20-%20%E5%B9%B6%E4%B8%94%E5%AE%83%E5%8F%AF%E4%BB%A5%E5%B7%A5%E4%BD%9C%EF%BC%81%E5%A6%82%E4%BD%95%EF%BC%9F.png)
如标题中所述,抱歉,我想要一个特定的标题,但我无法获得具体且简短的标题,同时,我执行了以下操作:
- 使用 OpenWRT 闪存 SD 卡以在 Raspberry Pi 上进行测试。
- OpenWRT 禁用了 dhcp 客户端,并在该映像中放置了一个与我的网络 IPv4 模式不对应的静态 IP。
- 因此,我将主机 IPv4 更改为 192.168.1.2,以便连接到 192.168.1.1。那行得通。
- 注销后,我在主机上执行了 dhclient 。
现在我可以像以前一样访问所有网络设备,并且仍然可以连接到我上面描述的 OpenWRT 机器。我的主机系统上只有一张网卡。所以我想知道这是如何运作的?
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether *somevalue* brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.88.88.80/24 brd 10.88.88.255 scope global dynamic eth0
valid_lft 863229sec preferred_lft 863229sec
inet6 XXX/64 scope global dynamic mngtmpaddr
valid_lft forever preferred_lft forever
inet6 XXX/64 scope global dynamic mngtmpaddr
valid_lft 7013sec preferred_lft 1613sec
inet6 XXX/64 scope link
valid_lft forever preferred_lft forever
答案1
OS
简单地说:这是通过将多个接口分配给同一接口的能力IPv4 addresses
以及使用路由表和ARP
-地址解析协议。
当一个节点(A
)想要与另一个节点( )对话时B
,最初只知道 的IPv4 address
,B
首先它会查阅其路由表以找到到达目的地的最短路径(可能有更复杂的情况,例如循环策略,但对于为了简单起见,我们在这里假设最短路径策略)。
此时A
还知道两件事:a) 使用哪个源地址,b) 是G
参与交换的网关设备 ( )。
然后检查其缓存表中A
是否存在B
的地址条目(如果要使用网关,则在此处以及所有后续请求中检查并使用 的地址)。IP
ARP
A
G
如果缓存的条目存在,则从该条目中A
选择MAC
要发送到的地址。IP packet
如果没有缓存信息,则A
通过广播Address Resolution Request
来LAN segment
查明是否有人知道B
( G
) 的 IP 地址到MAC
地址的映射:
06:14:26.622107 7a:df:9c:b5:9a:ef > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.8.145 tell 192.168.8.160, length 28
06:14:26.665609 ac:ed:5c:76:01:38 > 7a:df:9c:b5:9a:ef, ethertype ARP (0x0806), length 60: Reply 192.168.8.145 is-at ac:ed:5c:76:01:38, length 46
这是主机192.168.8.160
尝试解析MAC
的地址192.168.8.145
。任何拥有所请求信息的节点都会发回响应。请注意,请求以广播MAC
地址 ( FF:FF:FF:FF:FF:FF
) 作为目标地址发送,而响应则使用MAC
请求者的单播地址发送。这是为了防止连接到该网段的所有节点的 IP 堆栈被不必要的信息淹没。
现在节点A
收到响应并ARP
使用 的条目填充缓存B
,因此下次A
需要向其发送IP packet
时B
不需要再次查询网络。
这样,节点就可以保持与使用相同接口IPv4 subnets
物理连接到同一节点的不同节点进行通信的能力。LAN segment
请注意,您的192.168.1.1
节点不知道您192.168.1.2
的以太网接口分配了另一个额外的 IP 地址。