Linux内核网络栈源代码情景分析.pdf

5星(超过95%的资源)
所需积分/C币:50 2017-05-17 10:40:55 5.98MB PDF
116
收藏 收藏
举报

本书主要对 Linux 1.2.13 内核协议栈的全部源代码做了详细的分析, 该版本所有代码都在一个文件夹中,每种协议的实现都只有一个文件与之对应,分析该版本源代码可以方便读者迅速掌握 Linux 网络协议结构。 本书共分为 5 个部分。具体内容包括网络栈总体架构分析、网络协议头文件分析、BSD socket 层实现分析、INET socket 层实现分析、网络层实现分析、链路层实现分析、网络设备驱动程序分析、系统网络栈初始化等内容。 本书适合 Linux 网络开发人员及 Linux 内核爱好者阅读。
序 序 早在2001年年初我创办《永远的UNX》(fanqiang.com)网站时,就梦想有一天能将众 多技术高手的工作经验集结成册,使广大网友在实际应用中能随手翻査。那时候国内爱好者 的学习热情很高,为了给网友提供一个更易于互动交流的平台,我在2001年年底创建了 www.chinaunix.net社区网站(简称CU)。 经过8年的发展,在广大CUer的支持下,CU社区的注册用户已经超过百万, Chinaunix 口经成为全球最大、人气最旺的以交流 Linux、UNⅨX和开源技术为主的中文社区。CU网站 聚集了大量富有工作经验的系统架构师、软件工程师、DBA和网络架构工程师等,她已经成 为广大开源技术爱好者学习、工作和生活中不可缺少的伙伴 随着网站一点点壮大,网友也不断成长起来。大量的版主利用业余时间义务解答网友问 题、维护论坛版块秩序、服务广大网友。很多网友将自己的学习、工作经验发帖分享出来 更有网友花费大量时间将自己多年的经验整理成书,供更多的人学习、分享。他们的成长是 国内技术社区成长的基础,也必将推动国内技术社区的进一步发展。 今天,在CU管理员瑞儿mm(周平)、人民邮电出版社的李大微经理、黄焱编辑和广大 CU作者们的共同努力下,这套“ ChinaUnⅸx技术图书大系”终于和大家见面了,非常感谢人 民邮电出版社的鼎立支持!人民邮电岀版社是工业和信息化部主管的大型专业出版社,他们 出版了一系列优秀的 Linux/UNX图书,在读者中有着巨大的影响力。希望“ Chinauniⅸx技术 图书大系”的出版能够为 Linux、UNIX和开源技术在中国的普及、推广做出应有的贡献 借此序,再次感谢一直以来关心和支持过 Chinaunix的网友、版主以及所有朋友们 Chinauniⅸx网站创始人樊强(CU网名: fanqiang) 2009年7月 TINUX 前 对于很多初学者而言,研习老代码似乎会让人看不起,他们会觉得最“酷”的事莫过 于捧着最新版本的内核源代码去“啃”。而且,很多人会对学习老代码的作用非常怀疑, 毕竟这些代码已成为历史,现在运行的系统代码较之那些之前的老代码已经是“面目全 非”,基本上已经找不到老代码的影子了,因此很多人会对学习这些老代码的必要性产生 怀疑 然而,分析内核的早期代码可以让我们更好地把握问题的实质。因为早期代码更注重实 际功能的实现,而辅助功能的代码很少或者基本没有。例如早期代码并没有专门的函数集去 处理 sk buffˆ结构的操作问题,只在需要分配或操作该结构时直接编码操作:而现在这些“直 接的编码”被分离出来,成为专门的操作函数集。从内核的演变来看,这是必要的,但同时 也会使代码变得越来越复杂。 对于一个初学者来说,在对内核代码组织不熟悉的情况下,经常会找不到一个被调用函 数的位置在什么地方,而只能通过使用查找工具来回翻看。这样的话不一会儿便会产生疲劳, 甚至会对系统内核的庞大复杂感到恐惧,从而削减了学习的积极性。因此,分析早期的核心 代码一方面可以帮读者更直接地抓住问题的实质,另一方面也可以帮助他们将注意力集中于 对问题本质的理解上。 因此,本文选择了 Linux1.2.13内核所包含的网络部分代码进行分析(注意网络部分代 码与内核代码的演变是分离的,如 Linux1.2.8网络代码与1.2.13是一样的,而两者之间的内 核显然是有差异的)ε Linux1.2.13网络部分所有实现代码仍然是集中在一个文件夹中(net 文件夹),在此之后(1.30内核版本)的网络部分代码在net文件夹下进行了细分。除此之外, 对于某些协议(如 TCP/IP)的实现也从之前的一个单一文件变成了几个独立文件以加强层次 和功能关系。为了消除结构上不必要的复杂性并保持功能实现上的完整性,本书选择 Linux1.2.13内核版本网络代码进行分析是比较适宜的 各种版本 Linux源码(包括本书分析所用的 Linux1.2.13内核版本)可到如下网站: htt:/www.kernel.org进行下载。 本书阅读方式 木书篇幅较大,对此,作者推荐如下的阅读方式:首先将本书除去协议实现分析的部分 (即除去本书第3部分内容)读完,然后读者可以按照本书的文件组织方式进行文件源码的分 析,对于不懂的地方再査阅本书对应文件分析。最关键的一点是,读者需要自始至终保持自 口独立思考的能力,不要被书本的内容拖着走。总之,要理解网络栈的实现,必须要形成自 己的思考能力,而本书的内容最终只会是一个引导者。 最后一点有必要提及的是,由于本书分析的是一个早期的内核版本,所以它提供的只是 个起点。如果你能够很好地理解本书分析的1.2.13版本,那么以后所有版本的内容对你来 说都将不成问题。学习早期版本的目的正在于此:通过一个早期版本降低学习和理解的难度, 在掌握本质之后,挑战最新版本也就不再困难。 TINUX Linux内核网络栈源代码情景分析 如果你没有时间研究最新版本的网络栈实现源代码(毕竟它太庞大了),那么阅读本书绝 对能够使你获益匪浅 本书内容 对于Iinuκ1.2.13网终栈代码的实现,本文采用了两种分析方式:第一种是按部就班地逐 文件逐函数地进行分析,此种分析方式较少涉及各种协议之间的关联性;第二种是从结构上 和层次上进行分析,着重阐述数据包接收和发送通道,分析数据包在传输路线上的各个处理 函数,此时将不针对某个函数作具体分析,只是简单交待功能之后,继续关注数据上下的传 输过程。在第一种分析方法的基础上辅以第二种分析方法,可以使读者更好地理解和掌握这 部分的知识 本书共分为5个部分。 第1部分,从网络栈总体架构上进行分析,讨论网络栈分层标准模型以及与本版本网络 栈实现的具体对应关系。 第2部分,着重介绍网络协议所涉及的各个头文件,即对 include/linux子目录下的相关 文件进行分析。 第3部分,分析网络协议的具体实现代码,包括 BSD Socket层实现分析、 INET SOcket 层实现分析、传输层实现分析、网络层实现分析、链路层实现分析等内容。本部分代码都集 中于net子目录下,其内容也是本书的重点。 第4部分,介绍网终设备驱动层的相关内容,包括网络设备的初始化过程以及驱动程序 的结构,这部分代码在 drivers子目录下 第5部分,介绍系统网络栈的初始化流程,并详细介绍了网络数据包的上下传送通道, 从而再次从整体实现上进行把握。 另外,本书的附录A中还对TCP协议的可靠性数据传输实现原理进行了分析。 本书约定 本书共包括5个部分,其中第2、3部分是本书的重点。第2部分主要介绍网络协议的 各个头文件,第3部分主要是分析网络协议的实现源代码,在这里,为了方便分析,且便 于读者阅读,我们以每个文件为单位,对源代码进行了编号。 致谢 我首先要感谢我的家人。每当我在生活中碰到困境的时候,总是能够感受到你们的支持, 是你们,帮助我勇敢地面对人生道路上一个又一个困难。同时,在此书漫长的编写过程中 你们也始终是鞭策我不断前进的动力。 我还要感谢人民邮电出版社的编辑。他们在本书的出版过程中提出了诸多宝贵的修改 意见,并帮助改正了书中的各种错误之处,最终使得本书能够与广大读者见面,在此我深 表感谢。 另外我还要感谢 Chinaunix论坛上诸多网友对本书的认可和支持,特别是 scutan网友的 推荐,使得本书有这个机会能够以纸质的方式与读者们见面,在此我一并表示感谢。 2 IINUX 鉴于作者能力有限,书中难免会有错漏之处,还请广大读者指正。大家可以通过以下邮 件地址与我进行联系:ingdxdy@gmail.com 曹桂平 2009.10 TINUX 目录 目录 第1部分网络栈总体架构 …………10 第0章网络栈总体架构分析 文件 0.22第二层入口: socket.s 0.1网络栈本质及其分层架构………3 文件………………10 0.2系统调用接口到内核的请求 023第三层入口: entry.S 传递 文件 0.2.1第一层入口 第2部分网络协议 第1章网络协议头文件分析 18 1.14ipxh头文件 1.15neth头文件 67 1.1 etherdevice h头文件……………20 1.16 netdevice h头文件……73 1.2 icmp. h头文件 1.17 notifier h头文件 85 1.3ifh头文件 申、, 28 1.18pph头文件 89 14 if arp.h头文件 31 1.19 route. h头文件 +····;·:········ 112 1.5 if ether:h头文件…………34 1.20 skbuff h头文件 …115 1.6 if plip. h头文件 36 1.2 1 socket. h头文件 …122 1.7 if slip.h头文件…… 37 1.22 sockios h头文件… 125 18igmp.h头文件… 38 19inh头文件 …………41 1.23tcph头文件…… 27 1.10 inet. h头文件 垂 …45 1.24 timer. h头文件………136 1.11 interrupt. h头文件… 46 1.25udph头文件 ………………138 1.12iph头文件 …49 1.26unh头文件…………………140 1.13ipwh头文件 ………57 1.27木章小结…………… ………140 第3部分网络栈实现分析 第2章 BSD socket层实现分析……144 2.2.2 move addr to kernel /p move addr to user函数…150 21 protocols.c文件 45 223 get fd函数… 150 2.2 socket.c文件 146 224 socki lookup和 221头文件声明、全局变量 sockfd lookup函数……15 定义、相关函数声明……148 225 sock alloc函数……153 IN∪x Linux内核网络栈源代码情景分析 2.2.6 sock release peer 3. 1.7 inet setsockop sock release fp sock close inet getsockopt函数……199 函数 ……153 3.1.8 inet autobind函数………200 22.7网络套接字普通文件接口 3.1.9 inet listen函数 函数 ……158 3.1.10 def callback1、 228 sock awaitconn函数……160 def callback2和 22.9 sock socket函数 162 def callback3函数……202 2210 sock socketpair函数…164 3.1.11 inet create Fu inet dup 2211 sock bind函数……165 函数 ……………202 22.12 sock listen函数…………166 3.1.12 closing *a inet release 22.13 sock accept函数 167 函数… 207 22.14 sock connect函数………168 3.1.13 inet bind函数………209 22.15 sock getsockname和 31.14 inet error函数……212 sock getpeername函数…170 3.1.15 inet connect函数……212 2.2.16 sock send *p sock sendto 3.1.16 inet socketpair函数……216 函数……171 3.1.17 Inet accept函数………217 2.2.17 sock recv和 8 inet getname函数……219 sock recvfrom函数……172 3.1.19 inet recvfrom、 2.2. 18 sock setsockopt *p inet recv和 inet read sock getsockopt函数…173 函数…………………221 2219 sock shutdown函数……174 3.1.20 inet send、 Inet write和 2220 sock fcntl函数………175 inet sendto函数………222 2221 sys socketcall函数……175 3.1.21 inet shutdown函数……223 2222 sock register和 3.1.22 inet select和 sock unregister函数…178 inet ioctl函数………224 2223 proto init函数………179 31.23 get sock和 2224 sock init函数… 179 get sock raw函数…226 2225 socket get_ info函数……180 3.1.24INET层操作函数集 22.26 socket.c文件小结……181 定义 230 3.125 inet proto init函数……231 第3章 INET socket层实现分析 …182 3.1.26 af inet . c文件小结……233 31 af inet. c文件 …183 第4章传输层实现分析………………234 3.11头文件声明、相关宏及 变量定义………………189 41tcp.c文件… ………235 3.1.2 sk inuse函数 ……190 41.1头文件声明、相关变量及 3.1.3 get new socknum函数…192 宏定义 ……………241 3. 1.4 put sock Fp remove sock 41.2 tcp set state函数………242 函数 ∴19 4 41.3 tcp select window函数…243 31.5 destroy sock函数……196 4. 1.4 tcp find established 3.1.6 inet fontI函数……198 tcp- dequeue established fu 2 IINUX 目录 tcp accept函数………244 41.37 tcp check urg和 41.5 tcp close pending函数·247 tcp urg函数……………365 4.1.6 tcp time wait函数……248 4138 tcp accept函数………368 41.7TCP协议超时重传处理 41.39 tcp connect函数………369 函数集… 248 41.40 tcp sequence函数 372 41.8 tcp err函数 ……258 41.41 tcp std reset函数 74 41.9 tcp readable函数……260 4142 tcp send probed0函数…375 41.10 tcp listen select函数…262 41.43 tcp setsockopt和 41.1 tcp select函数…………263 tcp getsockopt函数…376 4112 tcp ioctl函数 2 65 41.44 tcp rcv函数…………378 41.13 tcp check和 4.1.45ICP协议操作函数集 tcp send check函数…266 定义…………391 4114 Lcp send skb函数……268 4.1.46tcp pc文件小结………392 4.1.15 tcp dequeue partial 42tcp.h头文件 …393 tcp send partial和 43udpc文件…… …397 tcp enqueue partial 43.1头文件声明、变量及宏 函数……… 272 定义和函数声明………398 4116 tcp send ack函数…274 43.2 udp err函数 399 41.17 tcp build header函数…276 433 udp check和 41.8 tcp write函数…………277 udp send check函数…401 41.19 tcp sendto函数……286 43.4 udp send、 udp sendto和 1.20 tcp read wakeup和 udp write函数……403 tcp write wakeup函数…287 43.5 udp ioctl函数………407 4121 cleanup rbuf函数……291 43.6 udp recvfrom和 4.1.2 tcp read urg函数……293 udp read函数………408 41.23 tcp read函数 295 43.7 udp connect函数…4ll 4124 tcp close state函数……305 43.8 udp close函数…411 41.25 tcp send fin函数 307 43.9 udp rcv函数 ……412 4.1.26 tcp shute p own函数……3 43.10 udp deliver函数 4127 tcp recvfrom函数……311 43.11UDP协议操作函数集 41.28 tcp reset函数………312 定义………………417 4.129 tcp options函数………314 44udph头文件 …417 4.1.30 default mask和 4.5 sock.h头文件…………………419 tcp init seq函数……316 4.6 sock. c文件…… …427 41.31 tcp conn request函数…318 46.1头文件声明、相关宏 41.32 tcp close函数 326 定义 429 41.33 tcp write xmit函数…328 462 sock setsockopt和 41.34 tcp_ack函数………331 sock getsockopt函数…430 41.35 tcp fin函数…………349 46.3 sock wmalloc和 41.36 tcp data函数 355 sock realloc函数……434 IN∪x Linux内核网络栈源代码情景分析 464 sock rspace和 ip mc filter del函数…484 sock space函数 436 4.10.6 igmp group dropped Fp 4.6.5 sock free和 igmp group added k rfree函数 437 函数 485 4.6.6 sock alloc send skb 4107 Igmp rcV函数 486 函数 …438 410.8 Ip mc Inc group和 4.6.7 sock queue rcv skb ip mc dec_ group函数…487 函数……………………440 410.9 Ip mc Join group和 4.6.8 release sock函数…440 ip mc leave group 4.7 datagram.c文件……… …442 函数 489 4,7.1 skb recv datagram函数…443 4. 10.10 ip mc drop device 4.7.2 skb free datagram函数…46 函数………………491 4.7.3 Skb copy datagram 410.11 ip mc allhost函数…492 函数 …447 4.10. 12 ip mc drop socket 474 datagram select函数……447 函数 48 Icmp. c文件 ……449 410.13igmp.c文件小结……493 48.1头文件声明、变量定义…450 411nmp.h头文件 493 48.2 icmp send函数……451 412 protocol. h头文件 48.3 icmp unreach函数……456 413 protocol. c文件…………498 48.4 icmp redirect函数……458 414proc.c文件……503 48.5 icmp echo函数 461 第5章网络层实现分析 48.6 Icmp timestamp函数…4( 509 48.7 icmp info函数……467 51 route. h头文件… …510 48.8 icmp address函数…467 52 route.c文件 ……512 4.8.9 Icmp rcv函数……………469 521头文件声明、系统变量 48.10 icmp ioctl函数… 473 定义 …………512 48.11icmp.c文件小结………473 52.2 rt del函数………………513 49 icmp. h头文件… 474 523 ip rt flush函数 410igmp.c文件*… …475 524 default mask和 4.10.1 Igmp stop timer、 guess mask函数 515 Igmp start timer 52.5 get gw dev函数………516 Igmp timer exp ire 526 ip rt add函数………517 igmp init timer和 527 bad mask函数… 521 函数 48 28 rt new函数 22 4102 igmp send report函数…483 52.9 rt kill函数 525 4.10.3 igmp heard report a 52.10 rt get info函数…526 igmp heard query 2.11 Ip rt route和 函数 ………483 ip rt local函数 527 4104 Ip mc map函数………484 5212 ip get old tent函数…530 410.5 ip mc filter add和 5213 ip rt ioctl函数………530 4 IINUX

...展开详情
试读 127P Linux内核网络栈源代码情景分析.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
xiaoxiaoyuxue_wp 很棒,很有用,解决了我很多问题
2017-12-30
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚钱or赚积分
最新推荐
Linux内核网络栈源代码情景分析.pdf 50积分/C币 立即下载
1/127
Linux内核网络栈源代码情景分析.pdf第1页
Linux内核网络栈源代码情景分析.pdf第2页
Linux内核网络栈源代码情景分析.pdf第3页
Linux内核网络栈源代码情景分析.pdf第4页
Linux内核网络栈源代码情景分析.pdf第5页
Linux内核网络栈源代码情景分析.pdf第6页
Linux内核网络栈源代码情景分析.pdf第7页
Linux内核网络栈源代码情景分析.pdf第8页
Linux内核网络栈源代码情景分析.pdf第9页
Linux内核网络栈源代码情景分析.pdf第10页
Linux内核网络栈源代码情景分析.pdf第11页
Linux内核网络栈源代码情景分析.pdf第12页
Linux内核网络栈源代码情景分析.pdf第13页
Linux内核网络栈源代码情景分析.pdf第14页
Linux内核网络栈源代码情景分析.pdf第15页
Linux内核网络栈源代码情景分析.pdf第16页
Linux内核网络栈源代码情景分析.pdf第17页
Linux内核网络栈源代码情景分析.pdf第18页
Linux内核网络栈源代码情景分析.pdf第19页
Linux内核网络栈源代码情景分析.pdf第20页

试读结束, 可继续阅读

50积分/C币 立即下载 >