FreeBSD 内核网络处理流程分析

2016-01-29 18:08 54 1 收藏

FreeBSD 内核网络处理流程分析,FreeBSD 内核网络处理流程分析

【 tulaoshi.com - Linux 】

    对于不了解内核的,特别是内核网络的人来说,内核的网路处理就像一个巧克力盒子。不打开就不会知道里面是什么,打开了就会觉得里面是丰富多彩的。    本文试图从一个原始数据包处理流程的角度,结合源代码(相应的函数)简单扼要地分析FreeBSD的内核网络处理。    主机对主机的方式是比较简单的,数据包从链路层上来,一路上行,达到用户空间的应用程序,一个数据包的生命期就结束了。对于像网关或防火墙之类包转发的方式,处理起来就相对复杂了一些,这也是许多人迷惑不解之处。
    对于不了解内核的,特别是内核网络的人来说,内核的网路处理就像一个巧克力盒子。不打开就不会知道里面是什么,打开了就会觉得里面是丰富多彩的。    本文试图从一个原始数据包处理流程的角度,结合源代码(相应的函数)简单扼要地分析FreeBSD的内核网络处理。    主机对主机的方式是比较简单的,数据包从链路层上来,一路上行,达到用户空间的应用程序,一个数据包的生命期就结束了。对于像网关或防火墙之类包转发的方式,处理起来就相对复杂了一些,这也是许多人迷惑不解之处。    上面是开场白,接下来就转入正题。    老规矩,先建立场景,场景总是要假设并建立起来的。设:        hostA  --  GW  --  hostB        主机A通过GW互访hostB        谈到数据的通讯,总是双向的,如同2人谈话,如果仅仅是一个人说,那就成了演讲--广播。GW就是扮演了一个传递员的角色,将2人的话传来传去,粗俗的话,优化的GW或防火墙十有八九是不传的,免得制造矛盾。    对于主机如何产生包,本文不作详细讨论。关心此项内容的,可以参见tcp/udp处理以及内核中的socket等系统调用。本文的重点放在GW上,分析GW是如何处理转发数据包的。    hostA 想要访问hostB的ftp(21端口):    0. 先广播询问并获得网关的MAC地址。谁是网关,速速报来!!!    1. 连接hostB的ftp端口    2. 成功后,发送数据包    ....    hostA找到网关的MAC地址后,发往非本网段的数据包的目标 MAC地址都是网关的 MAC地址但目标 IP地址不是网关的。                下面就看看GW都作了哪些工作        1. GW听到一个包             NIC               <-- 硬中断发生了,          |                    调用驱动的rxeof函数。包处理开始。对于polling          |                    方式,是cpu主动去网卡读包,这样硬中断数会少,          |                    但是如果处理不及时,数据包就丢了。对于小包,而          |                    且网卡芯片上的buf很大时,polling方式的好处就很          |                    大了。反过来,在遭受小包攻击时,系统的中断数就          |                    会异常高,这是因为需要不停地响应处理。          |        if_xxx.c            <-- rxeof          |                    m_devget 申请mbuf,从网卡的buf拷贝数据到mbuf,          |  

来源:http://www.tulaoshi.com/n/20160129/1504517.html

延伸阅读
确定有穷自动机分析内核 作者/孙雪青 下载源代码     前些时候学习编译原理,同时也为 DocWizard 做词法分析技术的准备,于是便想出了一种词法分析内核。这个分析内核可以在不改变代码的情况下分析不同的 DFA。 分析器的基本构造 ...
认识FreeBSD的过程。 对于计算机方面而言,我可谓表现平平,毫无天分。 记得在本科毕业的时候,就是因为计算机接触得太少,连打字都不会,毕业论文只有手写。回想起来,就觉得太对不起父母供自己读书所付出的艰辛。 出来工作以后,总算开始熟悉基本的操作,但是也仅限于Windows操作系统。对于unix和linux,仅仅是听说过,没有任何感性的认识。...
标签: 服务器
linux内核驱动-内核初涉   一、为什么要学习内核? 有些人要学习内核,而有些人则可以不学习它。你如果以后要从事系统研发或驱动开发的话,就要学习内核。 刚刚接触内核,主要学习内核的接口函数。不要深入的去读内核,因为你读也读不懂,内核代码庞大如野兽一般不可驾驭。 学习内核主要掌握层次学习法,即从头开始学习...
  linux下的关机和重启流程对于一般的桌面应用和网络服务器来说并不重要,但是在用户自己定义的嵌入式系统内核中就有一定的研究意义,通过了解Linux 关机重启的流程,我们对它可以修改和自定义,甚至以此为基础开发出全新的功能来。 1.概述 在linux下的关机和重启可能由两种行为引发,一是通过用户编程,一是系统自己产生的消息。用户...
这是一篇关于内核编译的文章,作者是双眼皮的猪,觉得好,所以收藏了 菜鸟浅谈Linux内核编译过程...菜鸟编译Linux内核 双眼皮的猪 菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下… 首先,...

经验教程

156

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部