《TCP/IP详解 卷一:协议》读书笔记 - 12 IGMP

本贴最后更新于 3336 天前,其中的信息可能已经时移世异

#IGMP:Internet 组管理协议

上一章介绍了简单的多播,但是当涉及多个网络并且多播数据必须通过路由器转发时,情况就复杂得多。
本章介绍用于支持主机和路由器进行多播的 Internet 组管理协议 IGMP。其让物理网络上所有系统知道主机当前所在的多播组。
IGMP 报文通过 IP 数据报进行传输(IP 首部协议字段值为 2),固定长度为 8 字节。


##IGMP 报文
IGMP

  • 版本:4bit,版本 1 代表 IGMP
  • 类型:4bit,1 带 i 报多播路由器发出的查询报文;2 代表主机发出的报告报文。
  • 校验和:16bit,计算方法和 ICMP 协议相同。
  • 组地址:32bit,D 类 IP 地址,在查询报文中组地址设置为 0

##IGMP 协议
###加入一个多播组
多播的基础概念是:一个进程在主机的给定接口上加入一个多播组。
这里暗示,主机通过组地址和接口来识别一个多播组。

###IGMP 报告和查询
多播路由器使用 IGMP 报文来记录与该路由器相连网络中组成员的变化情况。

  • 当第一个进程加入一个组时,主机就发送一个 IGMP 报告。如果主机的多个进程加入同一组中,只发送一个 IGMP 报告。
  • 进程离开一个组时主机不发送 IGMP 报告。主机知道在确定的组中已不再有组成员后,在随后收到的 IGMP 查询中就不再发送报告报文。
  • 多播路由器定时发送 IGMP 查询来了解是否还有任何主机包含有属于多播组的进程。对每个接口必须发送一个 IGMP 请求。
  • 主机通过发送 IGMP 报文来响应 IGMP 查询。

###实现细节

  • 由于 IGMP 使用 IP 进行不可靠传输,因此当主机首次发送 IGMP 报告后,下一个报告将间隔一段时间后发送。
  • 主机收到路由器发出的查询后,并不立即响应,而是经过一定的时间间隔才发出响应(对参加的每个组均发送一个响应)
  • 在没有任何多播路由器的单个物理网络中,仅有的 IGMP 通信量就是在主机加入一个新的多播组时,支持 IP 多播的主机发出的报告。

###生存时间字段
IGMP 报告和查询的生存时间(TTL)均设置为 1。使多播数据报仅局限在同一子网内传送。仅有与网络直接相连的多播路由器才有必要了解该网络主机的多播分组情况。

###所有主机组
多播路由器的 IGMP 查询被送到目的 IP 地址为 224.0.0.1。该地址被称为所有主机组地址。当接口初始化后,往里网络中所有具备多播能力的主机和路由器均自动啊计入到这个多播组。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • AWS
    11 引用 • 28 回帖 • 11 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 2 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 35 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 668 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    170 引用 • 1529 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖 • 1 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 762 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 639 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • 叶归
    6 引用 • 17 回帖 • 14 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    173 引用 • 518 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • gRpc
    11 引用 • 9 回帖 • 92 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 2 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 409 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 182 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 463 关注
  • Follow
    4 引用 • 12 回帖 • 13 关注