V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fighterhit
V2EX  ›  问与答

问个弱弱的网络问题

  •  
  •   fighterhit · 2023-08-10 23:47:05 +08:00 · 1127 次点击
    这是一个创建于 469 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司有时候服务器 A ping 不通服务器 B ,运维一查说缺路由,两边都要加。我有点纳闷为啥两边服务器都要加,不是 A 上加了就行了,A 上加了能 ping 通 B ,路由不是会自学习吗?数据包都知道咋去了回来还不知道吗?
    26 条回复    2023-08-14 11:19:55 +08:00
    Andim
        1
    Andim  
       2023-08-10 23:50:24 +08:00
    AB 中间隔了两个路由器?
    fighterhit
        2
    fighterhit  
    OP
       2023-08-10 23:54:12 +08:00
    @Andim 可能有路由器,但为啥只加一个方向不行呢而是要在两个服务器上都加?
    billlee
        3
    billlee  
       2023-08-11 00:03:02 +08:00
    不会。这个不能自学习的,否则我伪造一个 IP 发包给你,你学习了以后就会把数据都发给我了
    fighterhit
        4
    fighterhit  
    OP
       2023-08-11 00:08:45 +08:00
    @billlee 但记得之前上学学的时候路由器之间不是会广播学习吗?
    billlee
        5
    billlee  
       2023-08-11 00:12:53 +08:00
    @fighterhit 那是交换机
    cdlnls
        6
    cdlnls  
       2023-08-11 00:35:04 +08:00
    交换机也不能学习路由的,交换机是二层的,二层的交换机是没有路由功能的,交换机能学习 mac 地址。。
    你说的学习路由,我估计是记错了,在动态路由协议里面,路由器可以通过和其他路由器交换信息,来学习路由,比如 OSPF 。 但是它也不是根据一个方向的数据包来实现学习路由的。
    revelationtan
        7
    revelationtan  
       2023-08-11 00:40:01 +08:00
    路由得一去一回,AB 间如果隔着一个网段那必然两边的设备都得加路由信息。不然能送到但没法回信
    fighterhit
        8
    fighterhit  
    OP
       2023-08-11 00:46:17 +08:00
    @cdlnls 对对,我记得就是你说的“路由器可以通过和其他路由器交换信息”,百科也这么说的 @billlee
    https://baike.baidu.com/item/%E5%8A%A8%E6%80%81%E8%B7%AF%E7%94%B1/100533?fr=ge_ala 。这样的前提下去的包经过这些路由器学到了路由,那回包经过这些路由器不是也知道往哪走吗?
    fighterhit
        9
    fighterhit  
    OP
       2023-08-11 00:48:23 +08:00
    @revelationtan 不太理解,隔着一个网段为啥就必须两边都加呢?单加一边的话,去的包中间经过的路由器不都学会了路由信息了吗?回来时候再经过这些路由器按理说不是能回来吗?
    billlee
        10
    billlee  
       2023-08-11 00:53:51 +08:00
    @fighterhit 只有专用的路由器会开动态路由,并且只会和已知的可信的其它路由器交换。作为终端的服务器、PC 、手机是不会运行动态路由的
    cdlnls
        11
    cdlnls  
       2023-08-11 00:55:42 +08:00   ❤️ 1
    @fighterhit 路由协议不是通过“包经过那里”去实现的发现/学习路由的。它就是路由器和路由器之间交互的一个协议,这个协议通常只是定义了怎么发现其他路由、怎么和其他路由交换他们各自的路由表,和路由器上传输了哪些数据包没啥关系。
    revelationtan
        12
    revelationtan  
       2023-08-11 00:59:44 +08:00
    @fighterhit
    路由器只会自动学习自己的直连网段,非直连网段要么写静态,要么用动态路由协议。写静态路由条目的话必须所有经过的路由器都写。
    包能送达目的主机不代表目的主机能回信。路由器连接的是网段不是主机
    fighterhit
        13
    fighterhit  
    OP
       2023-08-11 01:01:14 +08:00
    @cdlnls 那换个角度说,既然去的包经过这些路由器能顺利到达目的端,说明路由器上有两端通信的路由,那回包理论上不是也可以按照路由信息回到源端呢?为啥反过来就不行了呢
    cdlnls
        14
    cdlnls  
       2023-08-11 01:06:49 +08:00
    @fighterhit 这个不一定的,路由表怎么配,数据包怎么走的,来去的路由表有时候不一定是一样的。
    cdlnls
        15
    cdlnls  
       2023-08-11 01:13:39 +08:00
    @fighterhit 如果数据包能通过这些路由器能顺利到达目的端,这个只能说明,去的方向,经过的路由器里面的路由表是正确的。 比如在路由器上配置了一个 A 到 B 的路由。那就只能是 A 到 B ,B 不会到 A 。这里路由表 A 到 B 和 B 到 A 是两个路由信息。
    fighterhit
        16
    fighterhit  
    OP
       2023-08-11 01:14:55 +08:00
    @revelationtan “写静态路由条目的话必须所有经过的路由器都写” ,印象里运维每次仅仅是在两端服务器上加了一条这样的路由:目的地是对端服务器网段(或者具体 ip ),配置一个网关掩码以及网卡,中间经过的路由器都没配,这样就可以了。运维的配置看上去是只要把到那个网段的包送到配置的网关好像就可以了(这又是为啥呢?),但按你说的好像中间路由器也都要配?
    fighterhit
        17
    fighterhit  
    OP
       2023-08-11 01:17:36 +08:00
    @cdlnls 印象里运维每次是在两端服务器上加了一条这样的路由:目的地是对端服务器网段(或者具体 ip ),配置一个网关、掩码以及网卡,这样就可以了。运维这样配置看上去是只要把 到对方那个网段的包 送到配置的网关上就可以了?这是为啥呢?
    fighterhit
        18
    fighterhit  
    OP
       2023-08-11 01:20:06 +08:00
    其实我对路由、路由器、网关、交换机这些概念有点迷,他们功能上有区别,但网上很多又说路由器也能当网关、交换机。
    stcQ2G13k9yxep40
        19
    stcQ2G13k9yxep40  
       2023-08-11 07:38:29 +08:00 via iPhone
    @fighterhit 因为,回包的时候,服务器得首先知道需要把数据包送回到这个路由器,然后路由器才会转发。所以在中间路由器都无法配置动态路由协议的情况下,B 服务器需要手动指定去往 A 服务器所在网段的静态路由。如果是在一般企业的内网,跨网段访问的场景下,如果 A 或 B 其中一台服务器的默认网关不是 VLAN 的 SVI (旁路由的场景),一般只需要手动指定其中一台服务器的静态路由,就可以实现两边互通了。
    icegaze
        20
    icegaze  
       2023-08-11 07:44:14 +08:00 via Android
    @fighterhit 因为实际使用中,普通人看到的路由器都是低能力路由,它基本上只有两个方向(两个网络),只能把数据包往 A 或者 B 扔。而它的上级路由器(更高层级的多网口路由器)一般配置了 OSPF 学习能力,可以比较容易地进行路由决策… 所以,终端用户那里,基本不需要配置什么信息,或者只需要大概的路由方向(哪个网络)就行,至于后面怎么走的,都交给上级路由器去管吧。
    Vserz
        21
    Vserz  
       2023-08-11 09:26:35 +08:00
    @fighterhit #17 因为 A 、B 服务器的网关都在同一台路由器上面,那台路由器上既有 A 服务的网段路由,又有 B 服务器的网段路由,所以只需要配置服务器的静态路由就好了啊。如果 A 、Bf 服务器的网关分别在两台不同的路由器上,那这两台路由器就需要配置路由了,OP 还是去多了解一下 TCP 协议,OSI 模型,路由与交换啥的吧。
    MSIAM
        22
    MSIAM  
       2023-08-11 10:22:26 +08:00
    只有动态路由协议才会自学习。静态路由必须手动配置。
    revelationtan
        23
    revelationtan  
       2023-08-11 11:07:35 +08:00
    @fighterhit 那看来是你们公司路由器没有问题,只是服务器没有配置默认网关,所有需要给所有非服务器的直连网段配置路由。
    重点是得配置网关,根据情况不同,可能通往不同网段的网关也不一样。
    路由一般指的是路由条目:是用于告诉路由器或者网关 通往目的网段需要转发给哪一个直连的 IP 地址
    路由器:可以管理路由条目/路由表的设备,路由器一般就是会作为它直连设备的网关(一般的家用路由器其实是 AP ,交换机,傻瓜路由器的集合体,所以家用路由器才会分 WAN 和 LAN 口。企业或商用路由器是不分的)
    网关:只是一个概念,指的是转发非自身网段数据包的设备
    julyclyde
        24
    julyclyde  
       2023-08-11 19:07:10 +08:00
    路由信息确实可以自己学习
    但是这功能不一定(很可能没有)开
    lwjef
        25
    lwjef  
       2023-08-11 22:53:30 +08:00
    举个简单的情况,srv1 和 srv2 之间互通的路径都不是对方的默认路径,所以双方都有被指路。
    如果 b 是 srv3 这样只有一条路那么 a 单独添加路由是没问题的。

    fighterhit
        26
    fighterhit  
    OP
       2023-08-14 11:19:55 +08:00
    @lwjef "所以双方都有被指路" 是什么意思呢?从图上看我理解 srv1 和 srv2 因为默认路由分别是到 a 、c 交换机, 到不了对方,所以需要手动配置静态路由到对方网段要走 b 交换机?(另外这里用 switch 表述是否准确呢?还是用网关合适?)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1162 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:07 · PVG 02:07 · LAX 10:07 · JFK 13:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.