两台 centos7 系统,node1 和 node2
node1 两个网卡 eth0 、eth1
eth0
eth1
node2 一块网卡 eth0
eth0
192.168.1.13 和 192.168.1.12 、192.168.1.11 通信,数据包是怎么流转的?
node1-ip
node1-eth0
node1-eth1
node2-ip
node2-eth0.png
1
msg7086 2023-05-21 16:33:05 +08:00
网段冲突了得看你路由表怎么写的。
|
2
stcQ2G13k9yxep40 2023-05-21 16:47:31 +08:00
根据你提供的网络配置,192.168.1.13 与 node1 的 192.168.1.12 和 192.168.1.11 之间的通信路径如下:
1. 当 192.168.1.13 想要与 192.168.1.12 通信时,数据包首先发送到 node1 的 eth0 接口。 2. node1 的网络堆栈会检查本地路由表,并发现目标 IP 地址( 192.168.1.12 )与其 eth1 接口的一个 IP 地址匹配。 3. 因为 192.168.1.12 具有 /32 掩码,它被视为单个主机而不是一个网络。node1 将识别到目标 IP 地址属于本地主机。 4. 数据包被直接传递给 node1 的 eth1 接口。 5. 接下来,node1 的 eth1 接口将数据包传递给上层应用程序或处理程序,以便处理目标为 192.168.1.12 的通信。 同样的步骤适用于 192.168.1.13 与 192.168.1.11 之间的通信。数据包会通过 node1 的 eth0 接口转发给 node1 的 eth1 接口进行处理。 综上所述,当 192.168.1.13 与 node1 的 192.168.1.12 和 192.168.1.11 通信时,数据包将通过 node1 内部的网络接口进行转发,而不需要离开 node1 的主机。这是因为目标 IP 地址被视为本地主机,通过直接连接的方式进行通信。 ------以上来自 chatgpt------ |
3
mingtdlb OP @qishouvip2022 看着像是这么回事,我把 192.168.1.10/24 ip 删了,他们就不通了。我问 chatgpt ,说要配路由...
我疑惑的是为什么数据包会发往 node1 的 eth0 口? |
4
leonshaw 2023-05-21 17:23:11 +08:00
看一下 sysctl 的 arp_ignore, arp_filter 和 rp_filter
|
5
dem0ns 2023-05-21 17:52:08 +08:00
/32 的只能与自己通讯
|
6
dem0ns 2023-05-21 17:53:32 +08:00
能互通的只有 10 和 13
|
7
dode 2023-05-21 17:53:34 +08:00
192.168.1.13 不能直接与 11 ,12 通信,之所以 ping 通是 10 网络接受数据包给内核了,
|
8
dode 2023-05-21 17:58:13 +08:00
|
9
luckjoe680 2023-05-21 19:30:13 +08:00
/32 的话 计算机都算不出子网 不知道自己跟谁是一起的 可以了解一下子网掩码的作用
|
10
rrfeng 2023-05-21 20:39:00 +08:00 via Android
这关键不在路由查找。
假设他们是纯二层交换机互联: node2 发往 .11 的包,发现是本地网络,那么会启动 ARP 查询,广播询问 .11 的 Mac 地址。 node1 收到了这个广播:注意,如果是从 eth0 收到,那么 node1 会直接响应,因为这是自己的地址。 于是 node2 可以直接以 node1 eth0 的 Mac 为目的发送数据了。 如果目标是是 .12 ,ARP 广播是一样的。node1 eth1 会响应它自己的 Mac 。 |
11
rrfeng 2023-05-21 20:40:05 +08:00 via Android
如果你把 /24 删了,系统不会生成路由,于是就不知道目标地址如何到达,不会进入下一步 ARP 阶段。
|
12
piku 2023-05-21 21:03:32 +08:00 via Android
node1 的 /32 ,相当于 node1 的 loopback 口。由于 /24 是广播网,eth0 能收到数据报,且它知道“这是我本机上的 ip 地址”,于是进行内部转发。
|
13
piku 2023-05-21 21:04:21 +08:00 via Android
rp_filter 有影响,默认是松散或关闭的。如果是严格,应该是收不到的。
|
14
jeesk 2023-05-21 21:26:30 +08:00
详细了解可以看看计算机网络一书中网络层这一章, 这一章把网络路由讲的很详细, 就是有点烧脑。
|
15
hefish 2023-05-21 21:29:36 +08:00
你这得手动设置一个高级的路由表才行啊。 默认路由表看起来已经有点吃力了。
用 ip ro 手动设一个高级的,定义一下入口,目标,出口。 |
16
dem0ns 2023-05-21 22:05:29 +08:00
和 rp_filter 关系应该不大,默认都是开着的,以前也遇到过这种问题,大概是会自动汇聚? 所以 /32 会失效,按 /24 来走。
|
17
dem0ns 2023-05-21 22:08:21 +08:00
或者是按路由表走,这样就说得通了
|
18
stcQ2G13k9yxep40 2023-05-21 22:22:22 +08:00 via iPhone
@mingtdlb 因为只有 192.168.1.10/24 这个地址,可用于与外部的 13 通信,或者你看下 node1 的路由表就一目了然了。/32 只能用于本机内部通信。
|
19
leonshaw 2023-05-21 22:32:16 +08:00
不知道你怎么连的,假设两个 eth0 在同一个广播域,eth1 不在,并且没有其它路由配置。
node2 就是普通的主机直连网段通信行为,先发 ARP ,收到回复后发数据包。 node1 有 /24 地址的情况,有这个网段的路由。linux 默认 arp_filter, arp_ignore 配置下会响应所有对本机 IP 的 ARP 请求,node2 收到 ARP 答复就可以往 eth0 发数据包,node1 收到包发现目的是本机 IP 就会走本地处理,不会到 eth1 。 node1 没有 /24 地址,就没有这个网段的路由。如果 rp_filter 不是 0 ,不响应 ARP ,即使 node2 有 ARP 缓存,数据包到了 node1 也会被 rp_filter 过滤掉。如果 rp_filter 是 0 ,会处理收到的包,但是没有回去的路由,只能单通。 |
20
mingtdlb OP |