linux协议栈源码分析

linux协议栈源码分析

ID:12290560

大小:2.95 MB

页数:114页

时间:2018-07-16

linux协议栈源码分析_第1页
linux协议栈源码分析_第2页
linux协议栈源码分析_第3页
linux协议栈源码分析_第4页
linux协议栈源码分析_第5页
资源描述:

《linux协议栈源码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、LINUX协议栈源码分析jiang_wei@topsec.com.cn分析要点1这里只会对网络协议栈相关的模块进行简要的介绍,为的是能够更好的理解协议栈的运作过程2内核是复杂的,其中简要介绍所涉及的保护模式,存储器寻址,内存管理(分页,分段),描述符表(本地、全局以及中断),中断控制器(8259AAPIC),中断系统(硬,软,软件),时间系统,进程控制调度,文件系统,段保护机制,堆栈切换,块字符设备驱动,DMA(8237)都不会深入的介绍,可以自己参看相关书籍3实例--跟踪数据包游历协议栈,以及命令触发协议栈工作这样的方式来详细描述其工作过程IPStack在Linux中

2、的位置由IPStack所处的位置上看,它牵扯到内核中大部分模块,如果对其中没一部分没有一定的了解的话,那么对IPStack工作行为理解就会出现一些问题,这个也是协议栈的难点网络协议发展介绍1网络协议的优胜劣汰----无数的私有协议逐渐的消失2IP协议的出现----被学校和军方发展壮大,形成协议族TCP/IP3TCP/IP协议族----健壮、简单4蚕食其他网络市场份额--IPXOSI七层模型IPStack的实现基本采用TCP/IP的4层架构,但是我们在学习协议栈的同时还需要关注物理层Ip重要性既然IP如此重要,那么应该知道每一类软件模块都不能独立存在,必定依托系统其它模块的支持

3、才能工作。协议栈是内核中实现的,所以必须要清楚操作系统是如何支持协议栈的!其中容易被忽视的是2处:glibc–提供各种APIINET—不属于TCP/IP体系,但是它提供了访问TCP/IP层的接口,这些操作是在网络初始化时就已经注册到socketLinux协议栈源码一系统初始化流程四个汇编程序:bootsect.Ssetup.Shead.Sentry.SInit目录下的main.c文件这4个汇编程序v0.11到现在改动与内核代码比起来改动很小,所以如果有兴趣的话,可以参看v0.11的,简单,实用,最起码能让我们知道系统是如何从加电开始,最后显示“login:”的要充分的理解内核

4、协议栈,很有必要从系统初始化开始阅读协议栈相关的代码v0.11引导流程Start_kernel()(linux2.6.x/init/main.c)从上边图中,我们要关注一下几个方面:1中断系统及调度系统2文件系统的初始化3设备管理系统的初始化4网络协议的初始化因为网络系统本身关系到设备、文件系统、任务调度等方面,如果这些不整清楚,那么理解协议栈是有一定困难的。对于目前版本的内核,理解一下ELF文件格式也非常重要,为什么重要,往后看就知道了Rest_init()(start_kernel()->rest_init())这里最重要的kernel_thread是创建了一个内核线程:

5、init其原型是intkernel_thread(int(*fn),void*arg,unsignedflags),此函数定义在Arch/i386/kernel/process.c中,它利用linux/i386的do_fork函数创建一个新的内核态线程,LINUX的内核态线程是没有虚存的,直接使用物理地址空间现在重点就到了init函数,内核中很多模块都定义了init函数Init()(kernel_thread()-->init())通过这个函数,我们能够看到,在do_basic_setup是有关网络部分的,sock_init是为网络创建了执行环境,并为协议栈申请了内存空间,那

6、么在哪里初始化协议栈本身呢?重点就在do_initcalls了内核文件解读—ELF文件ELF是*nix系统上可执行文件的标准格式,它取代了out格式的可执文件,因为它具有良好的可扩展性。ELF文件有双重性质:一方面编译器、汇编器和连接器都把它看做是逻辑段(section)的集合,另一方面loader把它看做是段(segment)的集合普通ELF的段排列As生成一个目标文件时,它假设程序段是从地址0开始,ld则把最后的地址赋给这个程序段,以至于不同的程序段不会相互覆盖As输出的目标文件至少有3个section,任何一个都有可能为空,即使为空,段依然存在As使用的每个地址都是如下

7、格式:(section)+(offsetintosection)Ld把所有相同的section放到连续的地址空间中Linkscript连接器有自己的一套语言规范,其目的是描述输入文件中的section是如何被映射到输出文件中,并控制输出文件的内存排列。编译生成用户态执行的程序使用ld-verbose查看默认script,它是内置在连接器中,ld就是使用这个缺省的script去输出应用程序而编译内核的时候,使用的是内核提供的script---arch/xxx/kernel/vmlinux_32.lds.S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。