Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2365250
  • 博文数量: 145
  • 博客积分: 8668
  • 博客等级: 中将
  • 技术积分: 3922
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-09 21:21
个人简介

work hard

文章分类

全部博文(145)

文章存档

2016年(1)

2015年(1)

2014年(1)

2013年(12)

2012年(3)

2011年(9)

2010年(34)

2009年(55)

2008年(20)

2007年(9)

分类: LINUX

2008-10-07 13:51:19

网线可以看作一个高速公路,物理帧也就是辆汽车,网卡呢?或许是个加油站吧。
从这个角度将,汽车和加油站没有绝对的对应关系,所有的汽车都可以进入该加油站。
 
正常情况:
网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。
其次,网卡芯片将物理帧头去掉,得到MAC包。
网卡芯片检查MAC包内的目的MAC地址信息,和本网卡的MAC地址是否一致?不一致,抛弃。
网卡芯片将MAC帧拷贝到网卡内部的缓冲区,触发中断。
驱动程序通过中断,将MAC包拷贝到系统中,构建sk_buff。告诉上层。
上层去掉MAC包头,得到需要的IP包。
 
过程中,网卡芯片对物理帧进行了MAC匹配过滤。这样做可以减小系统负荷。
试想一下,若网卡芯片对所有的MAC帧不加判断的直接提供给驱动,让CPU判决会是什么样子呢?
当总线上数据繁忙,CPU将浪费大部分时间去判断该MAC包是否是自己需要的,效率低下。
 
不正常模式(混听):
网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。
其次,网卡芯片将物理帧头去掉,得到MAC包。
网卡芯片发现自己当前被配置为混听模式,就不对MAC包过滤。
网卡芯片将MAC帧拷贝到网卡内部的缓冲区,触发中断。
驱动程序通过中断,将MAC包拷贝到系统中,构建sk_buff。告诉上层。
上层去掉MAC包头,得到需要的IP包。
显然,这里的IP包并一定是发给自己的。
 
驱动的问题
网卡到底能不能接收其他MAC包,完全取决于网卡芯片中RCR(receive control register)配置。
驱动程序是决定网卡能否工作与混听模式的桥梁。
混听模式会加重CPU的负荷,而且也是不符合标准应用的!
 
所有的车辆都要从加油站穿过,(有些都不加油),加油站工作人员的任务量就可想而知。
 
 
当然也有例外,有些程序不通过驱动,也可以直接访问网卡芯片RCR达到设置混听模式。
所谓 条条大路通香港,就是这个道理:)没有绝对的
阅读(2647) | 评论(3) | 转发(2) |
给主人留下些什么吧!~~

Godbach2009-06-18 22:17:35

数据包的收发,CU论坛上有很多精华文章进行了分析,有网络层的,也有链路层的。

chinaunix网友2009-06-16 20:47:11

恩,我也有打算,谢谢

Godbach2009-03-17 21:22:01

有时间的时候,分析一下网卡接收和发送数据包的源码。