网卡地址和多点播送(组播)及广播

  • 格式:doc
  • 大小:79.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网卡地址和多点播送(组播)及广播---转

(2009-11-18 16:36:37)

转载

分类:挨踢技术

标签:

杂谈

以太网的地址为48位,由ieee统一分配给网卡制造商,每个网卡的地址都必须是全球唯一的。共6个字节的长度

我们需要注意的是以太网地址的第40位是组播地址的标志位:

共6个字节,其中前面3个字节(除了第40位),组成制造厂商的标识,每个制造厂商的前3个字节是不同的,如果两个网卡的前面3个字节是一样的,那么这个卡是同一个公司制造的。同时通过该3个字节就可以反过来知道这个卡是哪个厂制造的。后面3个字节为系列号,由制造厂商给自己生产的网卡分配一个号码,不同网卡的号码必须不同,网卡地址的制造厂商的3个字节的标识中,例如上面的08:00:09 ,080009 是惠普公司的标识,表示这个卡是惠普公司制造的。3个字节的第一个字节,必须为偶数,上面的08是一个偶数,是因为第32位,就是第一个字节的最低位是组播标识,必须为0。

以下

X0:XX:XX:XX:XX:XX

X2:XX:XX:XX:XX:XX

X4:XX:XX:XX:XX:XX

X6:XX:XX:XX:XX:XX

X8:XX:XX:XX:XX:XX

X A:XX:XX:XX:XX:XX

X C:XX:XX:XX:XX:XX

X E:XX:XX:XX:XX:XX

为合法的以太网网卡地址。上面的X代表0-F中的任一个。如果你不是购买网卡,而是自己购买芯片制造,那么地址怎么办?可以自己使用一个还没有被ieee分配的厂商编号就可以了。就算是使用已经分配的厂商编号也没有不可,只要你能保证在你使用的局域网内,任何两个网卡的地址不一样就可以了。

地址FF:FF:FF:FF:FF:FF为广播地址,只能用在目的地址段,不能作为源地址段。目的地址为广播地址的数据包,可以被一个局域网内的所有网卡接收到。

地址

X1:XX:XX:XX:XX:XX

X3:XX:XX:XX:XX:XX

X5:XX:XX:XX:XX:XX

X7:XX:XX:XX:XX:XX

X9:XX:XX:XX:XX:XX

X B:XX:XX:XX:XX:XX

X D:XX:XX:XX:XX:XX

X F:XX:XX:XX:XX:XX

为组播地址,只能作为目的地址,不能作为源地址。组播地址可以被支持该组播地址的一组网卡接收到。组播地址主要用在视频广播,远程唤醒(通过发一个特殊的数据包使网卡产生一个中断信号,启动电脑),游戏(多个人在局域网里联机打游戏)里等。

以下是一些具体的组播地址:

地址范围

01:00:5E:00:00:00---01:00:5E:7F:FF:FF 用于ip地址的组播

其他组播地址跟tcp/ip无关,不做介绍。

网口地址判断图

从上图可知,网卡可以接收以下3种地址的数据包:

第一种目的地址跟自己的网卡地址是一样的数据包

第二种目的地址为FF:FF:FF:FF:FF:FF广播地址的数据包

第三种目的地址为跟自己的组播地址范围相同的数据包

那么在以太网的应用当中,如果你希望你的数据包只发给一个网卡,目的地址用对方的网卡地址如果你想把数据包发给所有的网卡,目的地址用广播地址

如果你想把数据包发给一组网卡,目的地址用组播地址。

rtl8019跟网卡地址有关的寄存器:

物理地址寄存器,位于page1,共6个字节,这就是网卡的地址,复位之后该6个寄存器的值是不定的。

要由用户将网卡地址写入到该6个寄存器中,以后网卡接收到的数据包,会将数据包的目的地址跟这6个寄存器的值进行比较,结果相同的数据包被接收下来。上电复位时从93c46读入的网卡地址不会自动写入到这里,而是放在rtl8019as的内存地址

0000H,0002H,0004H,0006H,0008H,000AH,0000CH里。你的程序要从这6个内存地址里读出网卡地址,写入到PAR0-5 共6个寄存器地址里。如果你的系统没有使用93c46来存储该网卡地址,那么要由你的软件自行产生或分配一个网卡地址,写入到6个寄存器里(比如你可以把网卡地址存储在单片机的flash rom里,存储在24c02的eeprom里等)。

跟组播地址有关的寄存器:

为8个寄存器,提供对组播地址的过滤。跟crc的逻辑有关。我对于该8个寄存器跟组播地址的关系不是很清楚,也没有找到相关的资料。将该8个寄存器全部写入0FFH,可以接收所有的组播地址地数据包。全部写入0,将不接收任何组播地址的数据包。在windows 98操作系统里,操作系统写入到这8个寄存器的值为:

MAR0 :00H

MAR1 :41H

MAR2 :00H

MAR3 :80H

MAR4 :00H

MAR5 :00H

MAR6 :00H

MAR7 :00H

写入的这8个值跟具体的组播地址是什么关系?我也不知道。lphard的方案是写入8个0xff 。那么在嵌入式应用中应该如何处理?建议为全部写入0xff。如果不想支持组播,可以不用理这8个寄存器,或全部写入0。

跟网卡地址有关的标志位:

其中的第3位ATD,0为正常操作,1为由组播地址控制(用作流控)。我们把这个位设置为0。

我们不需要使用流控,因为流控的标准不被所有的网卡支持,有些网卡支持,有些不支持。

其中的PRO,AM,AB跟地址有关:

PRO 为1时,将接收所有的数据包,不管任何地址,统统收下来。通常用在一些网桥,或一些用来监视网络的电脑里。sniffer软件就是利用这个特性,将以太网上所有数据包都收下来进行分析,以统计以太网里的数据传输率,冲突,出错情况,网卡地址情况,ip数据包等情况。