小弟请教一下网络问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
mingtdlb
V2EX    Linux

小弟请教一下网络问题

  •  
  •   mingtdlb 2023-05-21 16:27:19 +08:00 2773 次点击
    这是一个创建于 878 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两台 centos7 系统,node1 和 node2

    node1 两个网卡 eth0 、eth1

    eth0

    • ip: 192.168.1.10/24
    • ip: 192.168.1.11/32

    eth1

    • ip: 192.168.1.12/32

    node2 一块网卡 eth0

    eth0

    • ip: 192.168.1.13/24

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

    第 1 条附言    2023-05-24 11:49:42 +08:00

    node1-ip node1-ip.png

    node1-eth0 node1-eth0.png

    node1-eth1 node1-eth1.png

    node2-ip node2-ip.png

    node2-eth0.png node2-eth0.png

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

    我疑惑的是为什么数据包会发往 node1 的 eth0 口?
    leonshaw
        4
    leonshaw  
       2023-05-21 17:23:11 +08:00
    看一下 sysctl 的 arp_ignore, arp_filter 和 rp_filter
    dem0ns
        5
    dem0ns  
       2023-05-21 17:52:08 +08:00
    /32 的只能与自己通讯
    dem0ns
        6
    dem0ns  
       2023-05-21 17:53:32 +08:00
    能互通的只有 10 和 13
    dode
        7
    dode  
       2023-05-21 17:53:34 +08:00
    192.168.1.13 不能直接与 11 ,12 通信,之所以 ping 通是 10 网络接受数据包给内核了,
    dode
        8
    dode  
       2023-05-21 17:58:13 +08:00
    luckjoe680
        9
    luckjoe680  
       2023-05-21 19:30:13 +08:00
    /32 的话 计算机都算不出子网 不知道自己跟谁是一起的 可以了解一下子网掩码的作用
    rrfeng
        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 。
    rrfeng
        11
    rrfeng  
       2023-05-21 20:40:05 +08:00 via Android
    如果你把 /24 删了,系统不会生成路由,于是就不知道目标地址如何到达,不会进入下一步 ARP 阶段。
    piku
        12
    piku  
       2023-05-21 21:03:32 +08:00 via Android
    node1 的 /32 ,相当于 node1 的 loopback 口。由于 /24 是广播网,eth0 能收到数据报,且它知道“这是我本机上的 ip 地址”,于是进行内部转发。
    piku
        13
    piku  
       2023-05-21 21:04:21 +08:00 via Android
    rp_filter 有影响,默认是松散或关闭的。如果是严格,应该是收不到的。
    jeesk
        14
    jeesk  
       2023-05-21 21:26:30 +08:00
    详细了解可以看看计算机网络一书中网络层这一章, 这一章把网络路由讲的很详细, 就是有点烧脑。
    hefish
        15
    hefish  
       2023-05-21 21:29:36 +08:00
    你这得手动设置一个高级的路由表才行啊。 默认路由表看起来已经有点吃力了。
    用 ip ro 手动设一个高级的,定义一下入口,目标,出口。
    dem0ns
        16
    dem0ns  
       2023-05-21 22:05:29 +08:00
    和 rp_filter 关系应该不大,默认都是开着的,以前也遇到过这种问题,大概是会自动汇聚? 所以 /32 会失效,按 /24 来走。
    dem0ns
        17
    dem0ns  
       2023-05-21 22:08:21 +08:00
    或者是按路由表走,这样就说得通了
    stcQ2G13k9yxep40
        18
    stcQ2G13k9yxep40  
       2023-05-21 22:22:22 +08:00 via iPhone
    @mingtdlb 因为只有 192.168.1.10/24 这个地址,可用于与外部的 13 通信,或者你看下 node1 的路由表就一目了然了。/32 只能用于本机内部通信。
    leonshaw
        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 ,会处理收到的包,但是没有回去的路由,只能单通。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5339 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:59 PVG 14:59 LAX 23:59 JFK 02:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86