LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1445|回复: 5

这个为什么是广播包?

[复制链接]
发表于 2005-6-19 11:54:48 | 显示全部楼层 |阅读模式
下面是mystar中的一个函数
  1. int SendFindServerPacket(libnet_t *l)
  2. {
  3.    static uint8_t broadPackage[0x3E8] = {        //广播包,用于寻找服务器
  4.            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x
  5. 8E,0x01,0x01,
  6.            0x00,0x00,0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x
  7. 00,0x00,0x00,
  8.            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x
  9. 38,0x30,0x32,
  10.            0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
  11. 00,0x00,0x00,
  12.            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
  13. 02,0x1F,0x00,
  14.            0x00,0x00,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x
  15. 11,0x17,0x22,
  16.            0x92,0x68,0x64,0x66,0x92,0x94,0x62,0x66,0x91,0x93,0x95,0x62,0x93,0x
  17. 93,0x91,0x94,
  18.            0x64,0x61,0x64,0x64,0x65,0x66,0x68,0x94,0x98,0xA7,0x61,0x67,0x65,0x
  19. 67,0x9C,0x6B};
  20.            
  21.    uint8_t StandardAddr[] = {0x01,0x80,0xC2,0x00,0x00,0x03};
  22.    uint8_t StarAddr[]     = {0x01,0xD0,0xF8,0x00,0x00,0x03};

  23.    extern uint8_t  m_localMAC[6];
  24.    extern int    m_authenticationMode;

  25.    if (m_authenticationMode==1) memcpy(broadPackage,StarAddr,6);
  26.       else memcpy( broadPackage, StandardAddr, 6 );
  27.    memcpy( broadPackage+6, m_localMAC, 6 );   //填充MAC地址

  28.    FillNetParamater( &broadPackage[0x17] );

  29.    fputs(">>searching for server...\n",stdout);

  30.    return (libnet_write_link(l,broadPackage, 0x3E8)==0x3E8)?0:-1;
  31. }
复制代码

注释说的很清楚,这是用来寻找服务器的广播包。
显然这应该是数据链路层的帧,按照帧的格式,前6字节是目的mac,按照我的理解,目的
mac全1才是广播啊,在本函数中,不管m_authenticationMode是什么,目的mac都不会是全
1啊,为什么是广播呢?
望大侠赐教
thx
发表于 2005-6-19 19:22:47 | 显示全部楼层
看看关于MAC的SPEC?
回复 支持 反对

使用道具 举报

发表于 2005-6-19 21:40:21 | 显示全部楼层
Post by nait
下面是mystar中的一个函数
  1. int SendFindServerPacket(libnet_t *l)
  2. {
  3.    static uint8_t broadPackage[0x3E8] = {        //广播包,用于寻找服务器
  4.            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x
  5. 8E,0x01,0x01,
  6.            0x00,0x00,0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x
  7. 00,0x00,0x00,
  8.            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x
  9. 38,0x30,0x32,
  10.            0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
  11. 00,0x00,0x00,
  12.            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
  13. 02,0x1F,0x00,
  14.            0x00,0x00,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x
  15. 11,0x17,0x22,
  16.            0x92,0x68,0x64,0x66,0x92,0x94,0x62,0x66,0x91,0x93,0x95,0x62,0x93,0x
  17. 93,0x91,0x94,
  18.            0x64,0x61,0x64,0x64,0x65,0x66,0x68,0x94,0x98,0xA7,0x61,0x67,0x65,0x
  19. 67,0x9C,0x6B};
  20.            
  21.    uint8_t StandardAddr[] = {0x01,0x80,0xC2,0x00,0x00,0x03};
  22.    uint8_t StarAddr[]     = {0x01,0xD0,0xF8,0x00,0x00,0x03};

  23.    extern uint8_t  m_localMAC[6];
  24.    extern int    m_authenticationMode;

  25.    if (m_authenticationMode==1) memcpy(broadPackage,StarAddr,6);
  26.       else memcpy( broadPackage, StandardAddr, 6 );
  27.    memcpy( broadPackage+6, m_localMAC, 6 );   //填充MAC地址

  28.    FillNetParamater( &broadPackage[0x17] );

  29.    fputs(">>searching for server...\n",stdout);

  30.    return (libnet_write_link(l,broadPackage, 0x3E8)==0x3E8)?0:-1;
  31. }
复制代码

注释说的很清楚,这是用来寻找服务器的广播包。
显然这应该是数据链路层的帧,按照帧的格式,前6字节是目的mac,按照我的理解,目的
mac全1才是广播啊,在本函数中,不管m_authenticationMode是什么,目的mac都不会是全
1啊,为什么是广播呢?
望大侠赐教
thx


以我的所知,以太网的帧都是广播的。你说的全1广播,指的是IP分组吧。你觉得呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-19 23:54:46 | 显示全部楼层
呵呵,搞定了,原来这是个多播地址,注释写错了

@Illidan
你的理解有问题
以太网的帧并没有规定是要广播还是单播,这依赖于实现,具体说就是硬件
一般用集线器相连,是广播,用交换机相连,是单播。
广播效率底,同一时间总线上只能有一台主机传输信息,需要载波监听之类的技术,而且不安全
所以现在交换机比较好
回复 支持 反对

使用道具 举报

发表于 2005-6-20 08:45:20 | 显示全部楼层
Post by nait
呵呵,搞定了,原来这是个多播地址,注释写错了

@Illidan
你的理解有问题
以太网的帧并没有规定是要广播还是单播,这依赖于实现,具体说就是硬件
一般用集线器相连,是广播,用交换机相连,是单播。
广播效率底,同一时间总线上只能有一台主机传输信息,需要载波监听之类的技术,而且不安全
所以现在交换机比较好



多谢,是我理解错了, hoho。而且广播的帧的目标MAC确实全1,真正的全1,IP分组广播也只是把host-id全置1而已,net-id并不变。
MAC地址也有多播这一类吗? 你能多介绍一些不?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-20 23:27:45 | 显示全部楼层
以太网的多播地址特征是mac地址的第一个字节的最低位为1,以太网的多播是硬件实现的,更多的我也不知道了,我也正在查找这方面的资料
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表