zoukankan      html  css  js  c++  java
  • 广播和多播

    概述:

      广播和多播,顾名思义,分别是传给子网中的所有系统或属于某个多播组的系统。它们仅应用于UDP。

      对于ip,我们知道主机号全为1的使广播地址,而D类ip(即从224.0.0.0到239.255.255.255)为多播地址。

      对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,即01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff是多播地址特例)。

      如果网卡收到一个帧,要先经过4步:

    1、接口卡。如果帧检验和错误,该帧将被丢弃;

    2、设备驱动程序。先查看帧类型中指定要使用的协议(如IP、ARP等),然后进行多播过滤检测主机是否属于该多播组;

    3、当帧类型指定为IP数据报时,就传往IP层。IP层根据IP地址中的源地址和目的地址进行更多的过滤检测。如果正常,就传给下一层;

    4、TCP或UDP。根据端口号进行过滤,如果当前没有进程使用该目的端口号,就丢弃该数据报并产生一个ICMP不可达报文。

      虽然有以上的层层过滤,但是使用广播还是增加了对广播数据不感兴趣主机的处理负荷。所以可以使用多播。

    多播组地址:

      有一些约定俗成的多播组地址(类似于服务与端口号):224.0.0.1代表“该子网内的所有系统组“,224.0.0.2代表“该子网内的所有路由器组”,如此等等。这些多播组的IP地址也可以映射为相应的MAC地址。具体规则是忽略IP多播组号的最高5bit,将低位23bit映射到以太网地址中的低位23bit(最高字节的最低位为1)。由于忽略了高5bit,所以造成32(2的5次方)个不同的多播组号映射为一个以太网地址,这就需要设备驱动程序或IP层对数据包进行过滤了。

    IGMP报文:

      IGMP报文让一个物理网络上的所有系统知道主机当前所在的多播组。某个进程若想要加入一个多播组,必须和接口相关联。一个进程可以在多个接口上加入同一多播组。

      多播路由器会定时发送IGMP来了解是否还有任何主机包含属于多播组的进程。它不需要知道数量,只要知道有还是没有,以便确定是否转发多播数据报。

    *******************************************************************************************************************************************************

    随想:

      中华文化博大精深,中文在文学上有非凡的美感。然而在科技方面个人觉得还是英文更有优势。我在读这本译本时就觉得有很多别扭、生硬、容易混淆的地方。比如端口和接口,一不留神就看错,要是Port和Interface就绝不会搞错。而且英文中单词有间隔也更容易让人抓住重点。我每次读翻译的书总是会想:下次一定要买原版!可是有时原版没货,或从国外发货价格又贵太多了。所以如果有机会可以去香港买点原版书回来 : )

  • 相关阅读:
    day 26 python2和python3的区别 模块logging 的高级版,collections 模块,random模块
    常用模块:time,os,sys,rondom
    模块 hashlib(算法) configparser(配置) logging(日志)
    序列化,json pickle,shelve
    面向对象的封装,多态,单例模式
    属性,类方法,静态方法,反射
    面向对象的接口类 以及鸭子类型
    面向对象的继承
    面向对象的介绍
    reset internet explorer settings with registry
  • 原文地址:https://www.cnblogs.com/justforfun12/p/4965236.html
Copyright © 2011-2022 走看看