网络驱动程序及分析趋势.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络驱动程序 我们已经讨论了字符设备和块设备驱动程序,接着要讨论的是迷人的网络世界。网络接口是Linux设备中的第三标准类,这一章就是讲述它们是如何与核心的其余部分交互的。 网络接口并不象字符和块设备那样存在于文件系统。相反,它在核心层处理包的发送和接收,并不与进程中的某个打开的文件绑定在一起。 网络接口在文件系统中的角色就象被安装的块设备。一个块设备在blk_dev数组和其它核心结构中注册它的特征,接着按照要求通过它的request_fn函数“发送”和“接收”块。类似地,一个网络接口必须在特定的数据结构中注册自己,从而在与外部世界交换包时可以被调用。 安装的磁盘与包发送接口有几个重要的不同。首先,磁盘以一个结点的形式存在于/dev目录,而网络接口并不在文件系统中出现。不过两者之间最大的不同在于:磁盘是被请求向核心发送一个缓冲区,而网络接口则是请求向核心推送进来的包。 Linux的网络子系统被设计成完全协议无关的。这对网络协议(IP vs. IPX 或其它协议)和硬件协议(以太网vs.令牌环等)都是如此。网络驱动程序和核心之间的交互一次处理一个网络包;这允许协议可以干净地对驱动程序隐`藏起来,而物理传输则可以对协议隐藏起来。 本章描述网络接口如何与核心的其它部分紧密合作,并给出一个基于内存的模块化的网络接口,称之为(你可能已经猜到了)snull。为简化讨论,这个接口使用以太网硬件协议并传送IP包。通过snull获得的知识可以很好地应用于IP以外的协议,从以太网移到其它硬件协议只要求你对使用的物理协议有所了解。 snull的另一个限制是它不能在Linux1.2中编译。再说一遍,这样做只是为了保持代码简单,并避免在snull中加入一些另人厌倦的条件。不过,本章将会提到与网络驱动程序相关的可移植性问题。 本章并不介绍IP的编号原则,网络协议,以及其它普通的网络概念。这个主题与驱动程序作者无关,而且以不到几百页的篇幅想对网络技术有一个令人满意的概述是不可能的。感兴趣的读者可以参考一些讲述网络问题的书。 在讨论网络设备之前,我想提醒你网络事务中的原子数据项被称做一个八元组(octet),由八个数据位组成。在本章中我都这样使用。网络文档从不使用术语“字节”。 Snull如何设计 本节讨论与snull网络接口有关的一些设计概念。尽管这些信息可能显得用处并不大,但如果不理解它则可能在研究示例代码时遇到一些困难。 第一位的设计决定(也是最重要的)是示例接口不应绑定于任何实际硬件。实际接口不依赖于所传送的协议,snull的这个限制并不影响本章给出的示例代码,因为它是协议无关的。IP限制的唯一影响是地址分配我们将位示例接口分配IP地址。 分配IP号码 snull模块生成两个接口。这样的接口与简单的环回(loopback)并不一样,这里你从一个接口传送的包总是环回到另一个接口,而不是它自己。它看起来好象是你有两个外部链接,但实际上你的计算机只是应答自己。 不幸的是,这个效果并不能仅仅通过IP号码分配来达到,因为核心不会从接口A发送一个指向它自己接口B的包。相反,这时它会使用环回通道,从而根本不通过snull。为了能建立一个通过snull接口的通信,源和目的地址必须在数据传送的时候修改一下。换句话说,从一个接口发出的包应能被另一个接口接收,但外出包的接收者不能被认为是本机。这也适用于收到包的源地址。 为了收到这种“隐藏环回”的效果,snull接口反转一下源和目的地址的第三个八元组的最低位。其效果就是发向网络A(连在接口sn0上)的包在sn1接口上好象是属于网络B。 为了避免和太多的号码打交道,我们给用到的IP号码分配一些符号名: snullnet0是一个连接在sn0接口上的一个C类网络。类似地,snullnet1是连在sn1上的网络。这两个网络的地址仅在第三个八元组的最低位不同。 local0是分配给接口sn0的IP地址;它属于snullnet0。与sn1相关联的地址是local1。local0和local1的第三和第四个八元组必须都不相同。 remote0是snullnet0中的一个主机,它的第四个八元组与local1相同。所有发向remote0的包在其C类地址被接口代码修改后将到达local1。主机remote1属于snullnet1,并且它的第四个八元组与local0相同。 snull接口的操作见图14-1,图中与接口相关联的主机名印在接口名旁边。 下面是几个可能的网络号码。一旦你把这几行写到/etc/networks,你就可以用名字来称呼这些网络。这些值是从保留私用的号码范围中选取的。 snullnet0 192.168.0.0 snullnet1 192.168.1.0 下面是写入/etc/hosts的可能的主机号码:

您可能关注的文档

文档评论(0)

aa15090828118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档