热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux下网卡的一些技术信息(2)

文章标题:Linux下网卡的一些技术信息(2)。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  6 广播与混杂模式
  
  Donald所做的另一件事是实现广播与混杂模式的钩子。所有发布的(即不是ALPHA的)ISA驱动程序现在都支持混杂模式。
  
  Donald写道:“我准备从讨论混杂模式开始,它从概念上来说很容易实现。对大多数硬件,你只需要设置一个寄存器位,然后就可以接收到线路上的每一个数据包。对,差不多就这么简单;对有些硬件,你必须先关闭板卡(可能会丢失若干数据包),重新配置它,然后重新启用以太网卡。对吧,就这么简单,下面要讨论的就不是这么明显了:广播模式。它可以用两种方式实现:
  
  使用混杂模式和一个如Berkeley包过滤器(BPF)的数据包过滤器。BPF是一个模式匹配指令语言,可以编写一个程序挑出感兴趣的地址。它的优点在于它很普遍和可编程。其缺点是没有一个一般性的方法可以让内核避免打开混杂模式和通过每一个注册的包过滤器运行每一个线路上的数据包。参见Berkeley包过滤器以了解更多信息。
  使用绝大多数以太网芯片内建的广播包过滤器。
  我想应该列出几个以太网卡/芯片提供的广播包过滤器:
  
  芯片/网卡 混杂模式 广播包过滤器
  Seeq8001/3c501 Yes Binary filter (1)
  3Com/3c509 Yes Binary filter (1)
  8390 Yes Autodin II six bit hash (2) (3)
  LANCE Yes Autodin II six bit hash (2) (3)
  i82586 Yes Hidden Autodin II six bit hash (2) (4)
  
  这些网卡声称有一个过滤器,但只是简单地对“accept all multicast packets”或“accept no multicast packets”回答yes/no。
  AUTODIN II是标准的以太网CRC校验多项式。在这种方式下,广播地址被哈希运算后在哈希表里进行查找。如果启用了相应的比特位,则数据包被接收。以太网数据包的设计使得硬件在如此处理时的开销很小——(一般)只要在前6个八进制数(目标地址)之后锁定CRC电路(用来进行错误检查)的6个比特位,把它们作为哈希表的索引(6比特——一个64比特的表)。
  这些芯片使用6比特哈希,必须由主机计算并载入哈希表。这也就是说内核必须包含CRC代码。
  82586内部使用6比特哈希,但是由自己从接受的广播地址列表计算出哈希表。
  注意,这些芯片的过滤效果都不好,还需要一个中间层次的模块完成最后的过滤。同时还要注意,在每种情况下都必须保持一个完整的接受广播地址列表,在出现变化时以重新计算哈希表。
  
  7 Berkeley包过滤器(BPF)
  
  开发者普遍认为BPF的功能不该由内核提供,而是放在一个(但愿很少使用的)兼容库里。
  
  对不了解的人来说:BPF(Berkeley包过滤器)是一种向内核网络层说明对哪些数据包感兴趣的机制。它是用一种建立在底层网络代码中的特殊指令语言解释器实现的。应用程序把一个用这种语言编写的程序传递给内核,然后内核对每一个接收到的数据包执行该程序。如果内核有多个BPF应用程序,对每个数据包都要运行这几个程序。
  
  问题在于很难从数据包过滤器程序推断出应用程序实际上对哪一种数据包感兴趣,所以一般的解决方法就是始终运行过滤器。假设一个应用程序注册的BPF程序是获取发往某个广播地址的低速数据流。绝大多数以太网卡有一个64个入口的哈希表的硬件实现的广播地址过滤器,用来忽略大多数不想要的广播数据包,所以有可能以极低的开销完成这一操作。但是由于有了BPF,内核必须把接口设置为混杂模式,接收所有数据包,并对它们运行过滤器。不管怎样,这样确实可以工作,但考虑到对所要求的数据包进行的处理,就已经变得过于麻烦了。
  
  
推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 关羽败走麦城时路过马超封地 马超为何没有出手救人
    对当年关羽败走麦城,恰好路过马超的封地,为啥马超不救他?很感兴趣的小伙伴们,趣历史小编带来详细的文章供大家参考。说到英雄好汉,便要提到一本名著了,没错,那就是《三国演义》。书中虽 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 橱窗设计的表现手法及其应用
    本文介绍了橱窗设计的表现手法,包括直接展示、寓意与联想、夸张与幽默等。通过对商品的折、拉、叠、挂、堆等陈列技巧,橱窗设计能够充分展现商品的形态、质地、色彩、样式等特性。同时,寓意与联想可以通过象形形式或抽象几何道具来唤起消费者的联想与共鸣,创造出强烈的时代气息和视觉空间。合理的夸张和贴切的幽默能够明显夸大商品的美的因素,给人以新颖奇特的心理感受,引起人们的笑声和思考。通过这些表现手法,橱窗设计能够有效地传达商品的个性内涵,吸引消费者的注意力。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • faceu激萌变老特效的使用方法详解
    本文介绍了faceu激萌变老特效的使用方法,包括打开faceu激萌app、点击贴纸、选择热门贴纸中的变老特效,然后对准人脸进行拍摄,即可给照片添加变老特效。操作简单,适合新用户使用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 大连微软技术社区举办《.net core始于足下》活动,获得微软赛百味和易迪斯的赞助
    九月十五日,大连微软技术社区举办了《.net core始于足下》活动,共有51人报名参加,实际到场人数为43人,还有一位专程从北京赶来的同学。活动得到了微软赛百味和易迪斯的赞助,场地也由易迪斯提供。活动中大家积极交流,取得了非常成功的效果。 ... [详细]
  • 给定一个二叉树,要求随机选择树上的一个节点。解法:遍历树的过程中,随机选择一个节点即可。具体做法参看:从输入 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在微店中如何修改分销产品的价格以及设置价格的方法。客户在拍下商品后,在1小时内可以进行修改价格的操作,通过进入订单管理,点击未付款子项,可以找到订单信息并进行改价操作。修改价格后,买家会收到改价后的短信通知,在微店订单中进行付款即可。 ... [详细]
author-avatar
别禳莴觞芯_737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有