欢迎来到天天文库
浏览记录
ID:34420993
大小:220.72 KB
页数:11页
时间:2019-03-06
《linux内核网络系统概论》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux内核网络实现分析文档密级第一章Linux内核网络系统概论1引言Linux的组网能力非常强大,优秀的网络支持能力是Linux的核心竞争力之一。Linux提供了对于当前的TCP/IP协议的完全支持,并且包括了对下一代Internet。Linux内核还包括了IP防火墙代码、IP防伪、IP服务质量控制及许多安全特性,这些特性可以和像Cisco这样的公司提供的高端路由设备的特性相媲美。到目前为止,Linux支持的网络协议有:TCP/IP、X.25、FR、ATM、IPX/SPX、APPLETALK、Ipv6、DECnet、NETBEUI、NE
2、TLINK、ECONET、SNA、IRDA、BLUETOOTH…。随着技术的进步,一些新型的网络协议,如蓝牙、IPv6等热门的通信协议,都在Linux上率先被支持。Linux之所以能够在网络通信方面做得比其它操作系统好,我想首先得益于他的开源特性,追逐技术是工程师的天性,当一种新的通信协议出现时,他们往往首先想到的是,为什么不先到Linux上试试呢。并且Linux与商业公司比,没有过多的其他考虑,只要觉得一样东西好,甚至只要某些计算机天才感兴趣,就会被开发出来。Linux在网络通信方面做得比较优秀的另外一个重要原因是,它有一个良好的框架,增
3、加一种通信协议的支持是比较容易的事情。Linux通过向用户提供一个统一的Socket风格的API接口,使得用户编写的网络通信软件,很方便地从一种通信协议移植到另外一种通信协议中。另外,对同一种网络协议,Linux还提供获取各个网络层数据的统一方法,这种方法也是基于SocketAPI接口的。比如,对于TCP/IP协议,Linux很早就提供获取:链路层、IP、应用层的数据的方法,这极大地方便了调试和开发新的通信协议,而Windows操作系统至今还必须通过第三方的驱动程序(如wincap)才能做到这一点。2网络子系统的设计思路2.1模块化设计思想
4、Linux内核网络系统的开发,在模块划分上,采用了网络通信中通用的分层设计的思想。网络通信协议通常分成不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统:2003-12-24保留所有权利陈国强2003.12第1页,共11页PDFcreatedwithpdfFactoryProtrialversionwww.pdffactory.comLinux内核网络实现分析文档密级1)链路层,又可以看作是网络接口层。通常包括操作系统中的设备驱动程序和计算
5、机中的网络接口卡,完成物理数据的收发;2)网络层,主要处理数据如何在网络中被传输,比如选路、差错控制等;3)传输层,主要为应用程序提供端到端的通信,建立应用程序之间的逻辑通道。4)应用层,负责对用户数据的解释和处理。Linux内核也基本上采用的是这种分层结构,下面是TCP/IP协议在Linux内核的层次化模块图:用户程序用户程序用户程序系统调用文件系统插口I/O(Socket文件系统)TCP模块UDP模块IP路由ICMPNetfilter内核的管理IGMP模块软件中断空间ARP;内核IP层邻居管理模块空间IPv6协议子系统链路层管理模块Rx
6、软件中Tx软件中断队列断队列硬件网络接口卡驱动中断空间物理硬件图1Linux内核的TCP/IP的体系结构图但是,同时我们从上面的体系结构图可以看出,Linux内核整理网络代码不完全按照通信协议的层次逻辑来设计。典型的例子是,内核将ICMP、IGMP模块与TCP、UDP模块放在2003-12-24保留所有权利陈国强2003.12第2页,共11页PDFcreatedwithpdfFactoryProtrialversionwww.pdffactory.comLinux内核网络实现分析文档密级同一个层次对待(IP层之上的一层)。之所以这样做,还要
7、考虑从程序设计这个角度考虑,要便于体现程序调用逻辑。2.2面向对象的设计思想开发Linux内核的都是一些世界顶级的高手,所以阅读Linux内核代码不仅能够学到很多技术领域的知识,同时也能够学到很多软件工程方面的经验。Linux内核普遍采用模块化和面向对象的设计思想。由于有C++、Java等高级开发工具的支持,这些设计方法在高层软件领域,大家可能已经非常熟悉、熟练了。但是在操作系统开发的级别,采用C语言还是需要很多技巧的才能实现面向对象思想。为了做到良好的模块化设计和面向对象技术,GCC编译器提供了很多支持,有些特性,在其它C编译器时没有的。
8、向下面的语法就是一例:#defineINIT_TC_FILTER(name){externstructtcf_proto_opscls_##name##_ops;regist
此文档下载收益归作者所有