话不多说,先看一张桥转发时函数调用的一个基本蓝图。

这张图中,简单的展示了,数据的接收和发送,其中还包括netfilet的钩子点所处的位置。

需要说明的是:

1.我们先暂时忽略数据包从一开始是怎么从驱动进入到netif_receive_skb的,因为这个暂时不影响我们理解这幅图的流程。

2.由于桥转发的篇幅较大,图中没有标示出,数据包中途被丢弃的情况。约定数据包会发送成功。

现在数据包(skb)已经准备好了装备要闯关了

1.首先skb从驱动经过繁杂的路线走到了netif_receive_skb这个函数中经过一些小波折到达__netif_receive_skb_core中时遇到了第一个十字路口是看了看自己有没有skb->dev->rx_handler(注1)这个装备,如果有,则进入br_handle_frame(注2).如果没有则直接上协议栈。

注1:桥下的设备注册过rx_handler函数,所以数据包会进入桥,br_pass_frame_up函数将原先的设备换成了桥设备, 而桥设备没有注册过rx_handler函数,所以数据包不会二次进入桥。

注2:br_handle_frame我们在前几节提到过,是skb进入桥的入口函数,在br_add_if的时候会注册该函数。

2.skb注定要经历一番劫难,刚进入br_handle_frame又将陷入两难境地,此时有两个入口,这两个是netfilter设下的连个hook点,分别是,NF_BR_PRE_ROUTING,和NF_BR_LOCAL_IN,两种路径,如果数据包只想去本地,则会选择NF_BR_LOCAL_IN入口,然后发往本地,如果暂时还确定不了,则先进入NF_BR_PRE_ROUTING入口.

3.进入NF_BR_PRE_ROUTING入口后,会遇到br_handle_frame_finish函数,这个函数决定了skb的何去何从,(1)如果是转发,则在经过NF_BR_FORWARD钩子点进入转发阶段的障碍,最后在进入NF_BR_POST_ROUTING,以及最终的dev_queue_xmit,实现最终转发。(2)如果发往本地则重新进入NF_BR_LOCAL_IN最后在进入netif_receive_skb,进行转发。skb在经过目前口述的磨练最终得以释放。

4.如果是如果是本地发出的数据包,经过NF_BR_LOCAL_OUT钩子点然后进入最后阶段的NF_BR_POST_ROUTING,进行相应的转发。

原文链接:https://blog.csdn.net/NW_NW_NW/article/details/76153027

linux内核网络协议栈--数据包的skb桥转发蓝图(二十六)相关推荐

  1. linux内核网络协议栈--数据包的网卡缓冲区(二十四)

    程序员可能关心的基本网卡知识 网卡相关介绍:http://www.linuxidc.com/Linux/2012-12/77132.htm 一.什么是网卡? 它是主机的网络设备,本身是LAN(局域网) ...

  2. linux内核网络协议栈--数据包的接收过程(二十)

    本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例. 本示例里列出的函数调用关系来自于kerne ...

  3. linux内核网络协议栈--数据包的发送过程(二十一)

    继上一篇介绍了数据包的接收过程后,本文将介绍在Linux系统中,数据包是如何一步一步从应用程序到网卡并最终发送出去的. socket层 +-------------+| Application |+- ...

  4. linux 内核网络协议栈--数据从接收到IP层(二)

    此处主要讲的是从数据来到,中断到最终数据包被处理的过程. 首先来介绍一下IO端口访问问题,内核提供了这样一组函数处理: /kernel/io.c中 inb( ).inw( ).inl( )函数 分别从 ...

  5. linux内核网络协议栈--数据包的接收过程(二十二)

    与其说这篇文章分析了网卡驱动中中数据包的接收,还不如说基于Kernel:2.6.12,以e100为例,对网卡驱动编写的一个说明.当然,对数据包的接收说的很清楚. 一.从网卡说起 这并非是一个网卡驱动分 ...

  6. linux内核网络协议栈--数据包的接收流程(二十三)

    网卡在接受数据包时会产生中断,即当 有一个以太网帧到来时,网卡向内核产生一次中断: CPU收到中断信号后,执行中断处理程序,中断处理程序会设置 缓冲区地址.DMA 地址等信息: 网卡通过DMA 方式将 ...

  7. linux内核网络协议栈--数据包的网卡驱动收发包过程(二十五)

    网卡 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO.DMA等组成,其中网线通过变压器接PHY芯片.PHY芯片通过MII接MAC芯片.MAC芯片接PCI总线 PHY芯片主 ...

  8. linux内核网络协议栈--数据包的数据收发简略流程图(二十八)

    基于内核3.17.1版本 原文链接:https://blog.csdn.net/subfate/article/details/53107435

  9. linux内核网络协议栈--数据包的网卡转发流程(二十七)

    原文链接:https://blog.csdn.net/jackywgw/article/details/78321226

最新文章

  1. 使用SDL打造游戏世界之入门篇 - 1
  2. python画图哆啦a梦-【Python】绘制哆啦A梦
  3. 云计算灾备:灾备通识
  4. mac mysql 安装 简书_在Mac系统上配置MySQL以及Squel Pro
  5. Page.ClientScript.RegisterArrayDeclaration
  6. 项目管理常用文档表格模板一
  7. 关于用KMS的时候手欠把原装正版win11的激活卸载了怎么办
  8. 情感分类(Sentiment Classification)
  9. dfs——xy省赛选拔题——问题 E: 整数凑和问题
  10. 【NLP】NLP,能辅助法官判案吗? | CCF C³
  11. 怎样用python制表_用Python绘图和制表(附泰坦尼克号案例)
  12. 赶紧更新!PC版微信被曝高危0day漏洞;特斯拉Autopilot源码窃取案尘埃落定
  13. win10 xbox登录出现不能登录的解决方法
  14. 删除excel中的分页符
  15. 58同成前端面试分析
  16. 使用xpath解析网页的实例(完整代码)
  17. CentOS 下搭建 aria2 远程下载环境
  18. 攻防基础-木马病毒介绍
  19. 浙江大学计算机学院各专业介绍ppt模板,浙大硕士论文答辩经典ppt模板(几乎涵盖各种ppt制作技巧).ppt...
  20. APS跟踪和提高生产效率的五种方法

热门文章

  1. python写入文件-Python写入文件(write和writelines)详解
  2. python语言可以应用在哪些方面-Python语言的应用领域主要有哪些?
  3. python培训深圳-深圳靠谱的Python培训
  4. 案例驱动python编程入门-python实现事件驱动
  5. python语言命令大全-Linux命令大全
  6. python适合做后端开发吗-Python后端开发是什么职位?
  7. 100个必会的python脚本-Python 经典算法100及解析(小结)
  8. 在Linux上安装其他版本的cmake 或 升级cmake
  9. ssh连接服务器出现:ssh: connect to host 192.168.1.107 port 22: Connection refused 的解决方法
  10. 增加数据_Photoshop XMP元数据沉积造成文件量增加