zoukankan      html  css  js  c++  java
  • [TCP/IP协议]IGMP internet 组管理协议

       首先我们知道D类地址作为多播地址,对于单纯的子网内部多播,并不要求路由器进行转发,但一旦涉及到主机和路由器同时进行多播通信时,就需要用到IGMP协议,他可以让一个物理网络上的所有系统知道主机目前所在的多播组,很显然多播路由器(支持多播的路由器)需要这些信息以便知道它的多播数据包应该发往那个接口。

       IGMP作为网络层的一种协议,在IP首部的字段被设置为2。报文格式如下

    4位IGMP版本号 4位IGMP类型 8位未用 16为检验和
    32为组播地址                                                

        版本号常用的为1时表示是多播路由器发出的查询报文,为2表示主机发出的报告报文。

         其次,多播的基础可视为一个进程,该进程在一个主机的给定接口加入一个多播组,但这些多播组中的成员都是动态的,可以随时离开和加入进来。前提是保证组内必须只有有一个成员,否则该多播组就会被取消。

        当然,由于多播路由器使用IGMP报文来记录与该路由器相连的网络组成员的变化,就存在一个相应的规则。

       1)当第一个进程加入组时,主机要发送一个IGMP报告,如果主机的多个进程加入同一个组,那么只需要发送一个报告即可。

       2)当进程离开一个组时,主机不发送IGMP报告,即便是最后一个进程离开也不发送,但这样只要主机再收到路由器发送来的IGMP查询报文,不再作出回应就行。

       3)多播路由器要定时发送IGMP查询报文来确定组中是否还有主机,因此必须向每一个接口发送IGMP查询报文,因此其组地址未设置为0.

       4)正如所说主机通过发送IGMP报告来响应一个IGMP查询,对每一个至少还包含一个进程的组均要发回IGMP报告。否则路由器就会认为改组已经不存在成员而撤销。

     通过使用这些规则和报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。

         另外IGMP报告和查询同样具有TTL生存时间,比如一个TTL为0的多播数据报将被限制在同一主机,默认情况下TTL设置为1也就是只允许在同一个子网内。显然当TTL大于2时多播数据包将会有多播路由器转发。

         值得注意的是,从224.0.0.0到224.0.0.255的特殊地址空间,是用于多播范围不超过一跳的应用,不管其TTL值为多少,多播路由器均不会转发。

        

          总结,多播是一种将报文发往多个接受者的通信方式,在许多应用中他比广播更为好用,因为它降低了不参与通信主机的负担。

  • 相关阅读:
    phpmyadmin 设置密码
    php 单向链表反转 reverse (没有空的头结点)
    vue 学习资料
    vue 熟悉项目结构 创建第一个自己的组件
    vue开发环境配置
    vue.js 配置axios 用来ajax请求数据
    javascript 中介者模式 mediator
    PHP 相对路径转换为绝对路径 realpath
    Typescript, ES6
    POST、GET、@RequestBody和@RequestParam区别
  • 原文地址:https://www.cnblogs.com/qxhcpp/p/2622902.html
Copyright © 2011-2022 走看看