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就绝不会搞错。而且英文中单词有间隔也更容易让人抓住重点。我每次读翻译的书总是会想:下次一定要买原版!可是有时原版没货,或从国外发货价格又贵太多了。所以如果有机会可以去香港买点原版书回来 : )

  • 相关阅读:
    利用vuex 做个简单的前端缓存
    EFcore 解决 SQLite 没有datetime 类型的问题
    dotnet 清理 nuget 缓存
    .net 5 单文件模式发布异常 CodeBase is not supported on assemblies loaded from a single-file bundle
    ubuntu 开启ip转发的方法
    Vue-ECharts 6 迁移记录
    System.Text.Json 5.0 已增加支持将Enum 由默认 Number类型 转换为String JsonStringEnumConverter
    Windows 10 LTSC 2019 正式版轻松激活教程
    Mac 提示Permission denied
    苹果手机代理 charles 提示(此链接非私人连接)
  • 原文地址:https://www.cnblogs.com/justforfun12/p/4965236.html
Copyright © 2011-2022 走看看