zoukankan      html  css  js  c++  java
  • 数据包从tcp->ip发出去

    ip_local_out->OUTPUT->dst_out->ip_output-> POSTROUTING -->ip_output_finish

    上面的路径中啊,在OUTPUT和POSTROUTING之间的都没有发生什么新事情,设置了两个地方一个是skb->dev,一个是skb->protocol

     364 int ip_output(struct net *net, struct sock *sk, struct sk_buff *skb)
     365 {
     366     struct net_device *dev = skb_dst(skb)->dev;
     367 
     368     IP_UPD_PO_STATS(net, IPSTATS_MIB_OUT, skb->len);
     369 
     370     skb->dev = dev;
     371     skb->protocol = htons(ETH_P_IP);
     372 
     373     return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING,
     374                 net, sk, skb, NULL, dev,
     375                 ip_finish_output, 
     376                 !(IPCB(skb)->flags & IPSKB_REROUTED));
     377 }
    

     在ouput的地方,

    层层调用,会到dev_queue_xmit部分,__dev_xmit_skb, 放到网卡的队列中去了,并且。。。。然后就是软中断

    恩 这里也明白了,回到原来的问题,如果在output处设置了iptables配置项,咋办?

    如果设置了iptables表项咋办?

    OUTPUT一般是干嘛呀?没有对应关系

    需要检查一下INPUT部分的源地址是否发生了转换,

    dnsmasq ip_local_deliver From Skb:
     S 127.0.1.1   D: 127.0.0.1
    dnsmasq ip_local_deliver_finish From Skb:
     S 127.0.1.1   D: 127.0.0.1

    发现源地址确实是换掉了: thanks to stap: net/nat/ip_local_deliver.stp

    发现OUTPUT和INPUT确实是换掉啦

    所以到这里啊,我们基本上就清楚了,PREROUTING & POSTROUTING 是一对;INPUT和OUTPUT是一对!

  • 相关阅读:
    Apache Pig的前世今生
    openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例
    P3388 【模板】割点(割顶)
    让priority_queue支持小根堆的几种方法
    2017.11.7解题报告
    一个例子教你如何与出题人斗智斗勇
    debug
    树上倍增求LCA及例题
    素数的筛法
    Catalan卡特兰数入门
  • 原文地址:https://www.cnblogs.com/honpey/p/9066810.html
Copyright © 2011-2022 走看看