小弟请教一下网络问题

2023-05-21 16:27:19 +08:00
 mingtdlb

两台 centos7 系统,node1 和 node2

node1 两个网卡 eth0 、eth1

eth0

eth1

node2 一块网卡 eth0

eth0

192.168.1.13 和 192.168.1.12 、192.168.1.11 通信,数据包是怎么流转的?

2489 次点击
所在节点    Linux
20 条回复
msg7086
2023-05-21 16:33:05 +08:00
网段冲突了得看你路由表怎么写的。
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------
mingtdlb
2023-05-21 16:57:25 +08:00
@qishouvip2022 看着像是这么回事,我把 192.168.1.10/24 ip 删了,他们就不通了。我问 chatgpt ,说要配路由...

我疑惑的是为什么数据包会发往 node1 的 eth0 口?
leonshaw
2023-05-21 17:23:11 +08:00
看一下 sysctl 的 arp_ignore, arp_filter 和 rp_filter
dem0ns
2023-05-21 17:52:08 +08:00
/32 的只能与自己通讯
dem0ns
2023-05-21 17:53:32 +08:00
能互通的只有 10 和 13
dode
2023-05-21 17:53:34 +08:00
192.168.1.13 不能直接与 11 ,12 通信,之所以 ping 通是 10 网络接受数据包给内核了,
dode
2023-05-21 17:58:13 +08:00
luckjoe680
2023-05-21 19:30:13 +08:00
/32 的话 计算机都算不出子网 不知道自己跟谁是一起的 可以了解一下子网掩码的作用
rrfeng
2023-05-21 20:39:00 +08:00
这关键不在路由查找。

假设他们是纯二层交换机互联:

node2 发往 .11 的包,发现是本地网络,那么会启动 ARP 查询,广播询问 .11 的 Mac 地址。

node1 收到了这个广播:注意,如果是从 eth0 收到,那么 node1 会直接响应,因为这是自己的地址。
于是 node2 可以直接以 node1 eth0 的 Mac 为目的发送数据了。

如果目标是是 .12 ,ARP 广播是一样的。node1 eth1 会响应它自己的 Mac 。
rrfeng
2023-05-21 20:40:05 +08:00
如果你把 /24 删了,系统不会生成路由,于是就不知道目标地址如何到达,不会进入下一步 ARP 阶段。
piku
2023-05-21 21:03:32 +08:00
node1 的 /32 ,相当于 node1 的 loopback 口。由于 /24 是广播网,eth0 能收到数据报,且它知道“这是我本机上的 ip 地址”,于是进行内部转发。
piku
2023-05-21 21:04:21 +08:00
rp_filter 有影响,默认是松散或关闭的。如果是严格,应该是收不到的。
jeesk
2023-05-21 21:26:30 +08:00
详细了解可以看看计算机网络一书中网络层这一章, 这一章把网络路由讲的很详细, 就是有点烧脑。
hefish
2023-05-21 21:29:36 +08:00
你这得手动设置一个高级的路由表才行啊。 默认路由表看起来已经有点吃力了。
用 ip ro 手动设一个高级的,定义一下入口,目标,出口。
dem0ns
2023-05-21 22:05:29 +08:00
和 rp_filter 关系应该不大,默认都是开着的,以前也遇到过这种问题,大概是会自动汇聚? 所以 /32 会失效,按 /24 来走。
dem0ns
2023-05-21 22:08:21 +08:00
或者是按路由表走,这样就说得通了
stcQ2G13k9yxep40
2023-05-21 22:22:22 +08:00
@mingtdlb 因为只有 192.168.1.10/24 这个地址,可用于与外部的 13 通信,或者你看下 node1 的路由表就一目了然了。/32 只能用于本机内部通信。
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 ,会处理收到的包,但是没有回去的路由,只能单通。
mingtdlb
2023-05-24 13:45:43 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/941709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX