首页>电子书>操作系统>Linux内核网络栈源代码情景分析.pdf_linux内核网络栈实现源代码分析pdf下载,linux网络代码分析

Linux内核网络栈源代码情景分析.pdf_linux内核网络栈实现源代码分析pdf下载,linux网络代码分析

本书主要对 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

VIP任性下载 普通下载
意见反馈 联系客服 返回顶部

登录注册找回密码

充值账单订单冲正

*扫码按套餐金额一次性付款立即点击“确认”按钮

*充值提示成功,请重新登录账户生效

*充值问题联系Q或邮箱最迟24小时内答复

*充值问题先尝试【订单冲正】自助解决

*无法解决Q421644184或Q邮箱,支付宝订单平台账号

*推荐用chrome浏览器访问本站,禁用360浏览器

啥都没有哦

*输入正确支付宝订单号,2020开头的,点“确认”按钮

*有疑问请及时联系Q 421644184或此Q对应的邮箱

*提供支付宝支付订单号截图及平台用户名

*推荐用chrome浏览器访问本站,禁用360浏览器

在线咨询 x
如果您有任何疑问
点击咨询