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

上传人:第*** 文档编号:31928593 上传时间:2018-02-09 格式:DOC 页数:5 大小:79KB
返回 下载 相关 举报
网卡地址和多点播送(组播)及广播_第1页
第1页 / 共5页
网卡地址和多点播送(组播)及广播_第2页
第2页 / 共5页
网卡地址和多点播送(组播)及广播_第3页
第3页 / 共5页
网卡地址和多点播送(组播)及广播_第4页
第4页 / 共5页
网卡地址和多点播送(组播)及广播_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《网卡地址和多点播送(组播)及广播》由会员分享,可在线阅读,更多相关《网卡地址和多点播送(组播)及广播(5页珍藏版)》请在金锄头文库上搜索。

1、网卡地址和多点播送(组播)及广播-转(2009-11-18 16:36:37)转载标签: 杂谈分类: 挨踢技术以太网的地址为 48 位,由 ieee 统一分配给网卡制造商,每个网卡的地址都必须是全球唯一的。共 6 个字节的长度字节 5 4 3 2 1 0位 47。40 39。32 31。24 23。16 15。8 7。0例子 08 00 09 A0 4A B1我们需要注意的是以太网地址的第 40 位是组播地址的标志位:位 47。41 40 39。24 23。0制造厂商标识 组播标志位 制造厂商标识 系列号共 6 个字节,其中前面 3 个字节(除了第 40 位),组成制造厂商的标识,每 个制造厂

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

3、:XX:XX:XXX6:XX:XX:XX:XX:XXX8:XX:XX:XX:XX:XXXA:XX:XX:XX:XX:XXXC:XX:XX:XX:XX:XXXE:XX:XX:XX:XX:XX为合法的以太网网卡地址。上面的 X 代表 0F 中的任一个。如果你不是购买网卡,而 是自己购买芯片制造,那么地址怎么办?可以自己使用一个还没有被 ieee 分配的厂商编号就可以了。就算是使用已经分配的厂商编号也没有不可,只要你能保证 在你使用的局域网内,任何两个网卡的地址不一样就可以了。地址 FF:FF:FF:FF:FF:FF 为广播地址,只能用在目的地址段,不能作为源地址段。目的地址为广播地址的数据包,可以

4、被一个局域网内的所有网卡接收到。地址X1:XX:XX:XX:XX:XXX3:XX:XX:XX:XX:XXX5:XX:XX:XX:XX:XXX7:XX:XX:XX:XX:XXX9:XX:XX:XX:XX:XXXB:XX:XX:XX:XX:XXXD:XX:XX:XX:XX:XXXF:XX:XX:XX:XX:XX为组播地址,只能作为目的地址,不能作为源地址。组播地址可以被支持该组播地址的一组网卡接收到。组播地址主要用在视频广播,远程唤醒(通过发一个特殊的数据包使网卡产生一个中断信号,启动电脑),游戏(多个人在局域网里联机打游戏)里等。以下是一些具体的组播地址:地址 范围01:00:5E:00:00:

5、00-01:00:5E:7F:FF:FF 用于 ip 地址的组播其他组播地址跟 tcp/ip 无关,不做介绍。网口地址判断图从上图可知,网卡可以接收以下 3 种地址的数据包:第一种 目的地址跟自己的网卡地址是一样的数据包第二种 目的地址为 FF:FF:FF:FF:FF:FF 广播地址的数据包第三种 目的地址为跟自己的组播地址范围相同的数据包那么在以太网的应用当中,如果你希望你的数据包只发给一个网卡,目的地址用对方的网卡地址如果你想把数据包发给所有的网卡,目的地址用广播地址如果你想把数据包发给一组网卡,目的地址用组播地址。rtl8019 跟网卡地址有关的寄存器:物理地址寄存器,位于 page1,

6、共 6 个字节,这就是网卡的地址,复位之后该 6 个寄存器的值是不定的。要 由用户将网卡地址写入到该 6 个寄存器中,以后网卡接收到的数据包,会将数据包的目的地址跟这 6 个寄存器的值进行比较,结果相同的数据包被接收下来。上电复 位时从 93c46 读入的网卡地址不会自动写入到这里,而是放在 rtl8019as 的内存地址 0000H,0002H,0004H,0006H,0008H,000AH,0000CH 里。你的程序要从这 6 个内存地址里读出网卡地址,写入到 PAR0-5 共 6 个寄存器地址里。如果你的系统没有使用 93c46 来存储该网卡地址,那么要由你的软件自行产生或分配一个网卡地

7、址,写入到 6 个寄存器里(比如你可以把 网卡地址存储在单片机的 flash rom 里,存储在 24c02 的 eeprom 里等)。跟组播地址有关的寄存器:为 8 个寄存器,提供对组播地址的过滤。跟 crc 的逻辑有关。我对于该 8 个寄存器跟组播地址的关系不是很清楚,也没有找到相关的资料。将该 8 个寄存器全部写入 0FFH,可以接收所有的组播地址地数据包。全部写入 0,将不接收任何组播地址的数据包。在 windows 98 操作系统里,操作系统写入到这 8 个寄存器的值为:MAR0 :00HMAR1 :41HMAR2 :00HMAR3 :80HMAR4 :00HMAR5 :00HMAR

8、6 :00HMAR7 :00H写入的这 8 个值跟具体的组播地址是什么关系?我也不知道。lphard 的方案是写入 8 个 0xff 。那么在嵌入式应用中应该如何处理?建议为全部写入 0xff。如果不想支持组播,可以不用理这8 个寄存器,或全部写入 0。跟网卡地址有关的标志位:其中的第 3 位 ATD,0 为正常操作,1 为由组播地址控制(用作流控)。我们把这个位设置为0。我们不需要使用流控,因为流控的标准不被所有的网卡支持,有些网卡支持,有些不支持。其中的 PRO,AM,AB 跟地址有关:PRO 为 1 时,将接收所有的数据包,不管任何地址, 统统收下来。通常用在一些网桥,或一些用来监视网络

9、的电脑里。sniffer 软件就是利用这个特性,将以太网上所有数据包都收下来进行分析,以统计以太网 里的数据传输率,冲突,出错情况,网卡地址情况,ip 数据包等情况。PRO 为 0 时,接收跟自己的地址一样的数据包,其他目的地址的被丢弃(不包括广播和组播包)。我们设置为 0 就可以了。AM1 时,接收组播地址的数据包,AM=0 时,不接收组播地址的数据包。 将该位根据你的情况设置为 1 或 0,推荐设置为 1。AB1 时,接收广播地址的数据包,AB0 时,不接收广播地址 FF:FF:FF:FF:FF:FF 的数据包。该位要设置为 1,才能实现 tcp/ip 协议。PHY 跟地址有关:为接收的情

10、况报告。参考:IP 组播地址转换为以太网组播地址二、组播地址大家知道,IP 地址空间被划分为 A、B、C 三类。第四类即 D 类地址被保留用做组播地址。在第四版的 IP 协议(IPv4)中,从 224.0.0.0 到 239.255.255.255 间的所有 IP 地址都属于 D类地址。组播地址中最重要的是第 24 位到 27 位间的这四位,对应到十进制是 224 到 239,其它 28位保留用做组播的组标识,如下图所示:图 1 组播地址示意图IPv4 的组播地址在网络层要转换成网络物理地址。对一个单播的网络地址,通过 ARP 协议可以获取与 IP 地址对应的物理地址。但在组播方式下 ARP

11、协议无法完成类似功能,必须得用其它的方法获取物理地址。在下面列出的 RFC 文档中提出了完成这个转换过程的方法:RFC1112:Multicast IPv4 to Ethernet physical address correspondenceRFC1390:Correspondence to FDDIRFC1469:Correspondence to Token-Ring networks在最大的以太网地址范围内,转换过程是这样的:将以太网地址的前 24 位最固定为01:00:5E,这几位是重要的标志位。紧接着的一位固定为 0,其它 23 位用 IPv4 组播地址中的低 23 位来填充。该转

12、换过程如下图所示:图 2 地址转换示意图例如,组播地址为 224.0.0.5 其以太网物理地址为 01:00:5E:00:00:05。还有一些特殊的 IPv4 组播地址:224.0.0.1:标识子网中的所有主机。同一个子网中具有组播功能的主机都是这个组的成员。224.0.0.2:该地址用来标识网络中每个具有组播功有的路由器。224.0.0.0-224.0.0.255 范围内的地址被分配给了低层次的协议。向这些范围内的地址发送数据包,有组播功能的路由器将不会为其提供路由。239.0.0.0-239.255.255.255 间的地址分配用做管理用途。这些地址被分配给局部的每一个组织,但不可以分配到

13、组织外部,组织内的路由器不向在组织外的地址提供路由。除了上面列出的部分组播地址外,还有许多的组播地址。在最新版本的 RFC 文档“Assinged Numbers”中有完整的介绍。下 面的表中列出了全部的组播地址空间,同时还列出了相应的地址段的常用名称及其TTL(IP 包的存活时间)。在 IPv4 组播方式下,TTL 有双重意义:正如 大家所知的,TTL 原本用来控制数据包在网络中的存活时间,防止由于路由器配置错误导致出现数据包传播的死循环;在组播方式下,它还代表了数据包的活动范 围,如:数据包在网络中能够传送多远?这样就可以基于数据包的分类来定义其传送范围。范围 TTL 地址区间 描述节点(

14、Node) 0 只能向本机发送的数据包,不能向网络中的其它接口传送链路(Link) 1 224.0.0.0-224.0.0.255 只能在发送主机所在的一个子网内的传送,不会通过路由器转发。部门 32 239.255.0.0-239.255.255.255 只在整个组织下的一个部门内(Department) 传送组织 64 239.192.0.0-239.195.255.255 在整个组织内传送(Organization)全局(Global)255 224.0.1.0-238.255.255.255 没有限制,可全局范围内传送三、组播的工作过程在局域网内,主机的网络接口将到目的主机的数据包发送

15、到高层,这些数据包中的目的地址是物理接口地址或广播地址。如果主机已经加入到一个组播组中,主机的网络接口就会识别出发送到该组成员的数据包。因此,如果主机接口的物理地址为 80:C0:F6:A0:4A:B1,其加入的组播组为 224.0.1.10,则发送给主机的数据包中的目的地址必是下面三种类型之一:接口地址:80:C0:F6:A0:4A:B1广播地址:FF:FF:FF:FF:FF:FF组播地址:01:00:5E:00:01:0A广 域网中,路由器必须支持组播路由。当主机中运行的进程加入到某个组播组中时,主机向子网中的所有组播路由器发送 IGMP(Internet 分组管理协议) 报文,告诉路由器

16、凡是发送到这个组播组的组播报文都必须发送到本地的子网中,这样主机的进程就可以接收到报文了。子网中的路由器再通知其它的路由器,这些 路由器就知道该将组播报文转发到哪些子网中去。子网中的路由器也向 224.0.0.1 发送一个 IGMP 报文(224.0.0.1 代表组中 的全部主机),要求组中的主机提供组的相关信息。组中的主机收到这个报文后,都各将计数器的值设为随机值,当计数器递减为 0 时再向路由器发送应答。这样就 防止了组中所有的主机同时向路由器发送应答,造成网络拥塞。主机向组播地址发送一个报文做为对路由器的应答,组中的其它主机一旦看到这个应答报文,就不再 发送应答报文了,因为组中的主机向路由器提供的都是相同的信息,所以子网路由器只需得到组中一个主机提供的信息就可以了。如果组中的主机都退出了,路由器就收不到应答,因此路由器认为该组目前没有主机加入,遂停止到该子网报文的路由。IGMPv2 的解决方案是:组中的主机在退出时向 224.0.0.2 发送报文通知组播路由器。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 工业设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号