V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
qq446015875
V2EX  ›  Linux

问题:有关 Linux 内核中网络层数据包转发流程的疑问

  •  
  •   qq446015875 · 2015-02-04 17:03:50 +08:00 · 3252 次点击
    这是一个创建于 3369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚才看了些关于内核数据包转发的文章,结果不同的人写的都不一样啊,我都不知道该信谁了。我想问下关于 netfilter 框架里的5个 hook

    PREROUTING
    FORWARD
    INPUT
    OUTPUT
    POSTROUTING

    我现在知道在 PREROUTING 之后,
    如果dstIP是本机,就走 INPUT ;
    如果不是本机则走 FORWARD 。

    而我现在想知道路由是发生在那里呢?
    对于dstIP不是本机的数据包,路由发生在 FORWARD 之前还是之后?
    对于dstIP是本机的数据包,路由发生在 OUTPUT 之前还是之后?

    有谁知道哪里能查到比较权威的资料么?
    先谢谢了!!!

    第 1 条附言  ·  2015-02-04 20:40:46 +08:00
    ![netfilter](http://images.cnitblog.com/blog/580388/201401/221111388518.png)
    我暂时以这个为准了,这个和The Linux® Networking Architecture: Design and Implementation of Network 描述的一样
    9 条回复    2015-02-05 09:42:02 +08:00
    scys
        1
    scys  
       2015-02-04 17:41:10 +08:00   ❤️ 1
    权威资料,好像我自己都没有留意,不过随便能够找到图:

    https://wiki.archlinux.org/index.php/iptables
    qq446015875
        3
    qq446015875  
    OP
       2015-02-04 20:30:19 +08:00
    @scys
    按那个图就是两次路由选路了OUTPUT前后各一次?
    @Draplater
    没看太明白
    ryd994
        5
    ryd994  
       2015-02-04 22:11:11 +08:00
    对于dstIP不是本机的数据包,路由当然发生在 FORWARD 之前啦,不然怎么知道是FORWARD
    对于dstIP是本机的数据包,怎么会是 OUTPUT 呢?INPUT的话,当然也是在路由后,不然怎么知道?
    onemoo
        7
    onemoo  
       2015-02-04 22:49:28 +08:00
    接5L的回答
    对于destIP是本机的数据包,也是在route后才知道是本机的啊,但是再出本机的时候还要路由一次,这样才能确定把包给谁,所以发生在OUTPUT之前。
    ryd994
        8
    ryd994  
       2015-02-05 06:39:30 +08:00 via Android
    @onemoo
    output是本机产生的数据包,output链在路由之前。参见2楼的图。所有的用户程序都是local process
    onemoo
        9
    onemoo  
       2015-02-05 09:42:02 +08:00
    @ryd994
    我回复中的“但是再出本机的时候还要路由一次”的“路由”,应该是对应2L图中OUTPUT部分的那个“Check for Nat Reroute”,看起来是在filter OUTPUT之前啊?!

    还有一点,关于这个从本机出时的route的位置,有的资料中将route时机放到了raw、mangle、nat的OUTPUT链前面,当然也都在filter OUTPUT之前。比如6L的那个图。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2679 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:53 · PVG 12:53 · LAX 21:53 · JFK 00:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.