网络协议补完计划--广播与多播

目录

  • 前言
  • 《播》的通讯方式
  • 广播
    • 物理层的广播
    • IP协议的广播
  • 多播
    • 物理层的多播
    • IP协议的多播
    • 多播IP地址到多播以太网地址的映射
    • IP协议对多播数据包的处理
  • IGMP协议
    • GIMP数据包格式
    • IGMP协议的工作机制
      • 主机加入
      • 多播路由器查询
      • IGMP协议的实现

前言

参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》进行学习。
本篇主要参考第七章:《广播与多播》


《播》的通讯方式

  • 单播

点对点的通讯方式

  • 广播

向所有的主机同时通讯

  • 多播(组播)

向某些主机同时通讯

  • 任播

向任意一些主机中同时发起通讯、但只有离源主机最近的负责响应。可以参照负载均衡来理解、我想知道当前时间、10个服务器有资格响应、但最终只有一个离我最近的服务器完成响应


广播

向特定的范围内发送数据、范围内的所有接收者都应收到广播的信息。

由于一下几个原因、广播的发送者无法将所有人的地址全部放入数据包或数据帧中:
  1. 数据包或数据帧中只有一个目的地址字段
  2. 发送者往往不确定数据的确切接收者都是谁。

因此、需要一个特殊的地址。能代表网络中所有的主机。这种地址就称之为《广播地址》。需要注意这个地址在不同的协议层或不同的技术使用上都是不同的。

  • 物理层的广播

大多数物理网络技术都有标识广播地址的方法。
例如在以太网中:
每个以太网地址长48位、所有位都为1的地址就表示广播地址。
以太网的网卡可以接收两种数据帧。其一是目的地址为本网卡物理地址的数据帧、另一个则是目的地址是广播地址的数据帧。

当然、物理网络中发送广播的技术也各不相同。
对于以太网这种总线式网络、广播可以通过发送一个数据帧实现。
对于一些点到点的网络、则必须向网络中每个系统单独发送一个数据帧

  • IP协议的广播

首先需要声明的是在五类IP地址中、并没有一个称为广播地址的类型。但相应位置设置成1、则可以代表广播。

  • 本网络广播

对于IP地址全部为1、也就是255:255:255:255的IP地址、IP协议将其作为广播地址使用。
路由器在接收到目的地址为广播地址的IP数据包时、会发送给本网络所有的主机、而不会向外部进行转发。

  • 指定网络广播

对于主机地址全部为1的网络地址、IP协议将其作为指定网络的广播使用。
这个地址中的网络标识部分指定了该广播数据包要向那个网络进行广播、但并不限于本机网络。

  • 广播地址只能用作目的地址、不能设置在源地址。
  • 广播会消耗大量的系统资源

多播

与广播的区别是、参与者自己决定是否加入多播的范围。
即继承了广播的方便性、又在最大限度上节省了系统资源。

  1. 我们将加入多播的所有参与者看做一个组、所以多播又叫组播。
  2. 多播地址与广播地址不同、不能使用一个固定的地址(因为同一时间可能有多个组播存在)。
  3. 多播的成员可以是跨网络的
    但由于物理网络无法进行跨网络、所以需要特定的技术将IP数据包进行多播传输。
  • 物理层的多播

多数物理网络技术都保留了一部分地址作为多播地址使用。各种物理网络因为地址的表示不同、所以多播地址的表示也各不相同。

用以太网为例:

最高字节的最低位为1的地址都是多播地址。
例如:42:24:D4:54:37:01 就是一个多播地址、而广播地址(FF:FF:FF:FF:FF:FF)则是多播的一个特例。
在以太网中、默认只接收目的地址为本网卡或者广播地址的数据帧。特定多播地址数据帧的接收可以通过简单的设置来实现。

  • IP协议的多播

在学习IP协议时、我们讲到第四类地址(D类地址)用于多播通讯。
D类地址的范围是224.0.0.0~239.255.255.255、其中:
224.0.0.0被保留不能赋给任何播组。
224.0.0.1则是一个所有主机组的地址、它表示参与IP多播的所有主机和路由器。

多播地址与广播地址一样、只能出现在目的地址。

  • 多播IP地址到多播以太网地址的映射

IP地址为逻辑地址、最终都需要映射到具体物理地址进行传输。

如何映射呢?

只需要将IP多播地址的后23位填入以太网地址01:00:5E:00:00:00后23位即可。
例如:IP多播地址224.0.0.1映射到以太网地址为01:00:5E:00:00:01

不过这种映射关系并不是唯一的

因为IP地址一共为32位、D类地址指代前4位为1110的地址、剩余28位都是可变的。映射时只映射了后23位、意味着可能有2^5=32个广播租使用同一个物理地址。但因为IP多播地址范围很大、所以碰撞的概率很小。但依旧只要有重复的可能、所以在收到多播信息的时候需要小心甄别、将不是发往本主机的数据包丢弃。

IP协议对多播数据包的处理

  • 对于发送方

发送一个多播数据包很简单。IP协议软件允许应用程序将一个多播地址设定为目的地址、物理网络层也允许将一个IP多播地址映射就可以直接发送了。

  • 对于接收方

首先、IP协议软件需要提供一个接口、允许用户加入一个多播组。
同一个主机可能有多个应用程序加入了同一个多播租
如果这样、IP协议必须给每一个应用程序复制一个该数据包的副本
如果所有程序都退出了多播组、那么IP协议将不再接受该多播组的数据包。

  • IP多播数据包的路由

需要多播系统中的主机和路由器合作完成、详情可以参考IGMP协议


IGMP协议

想要加入一个本地多播组、主机只需要能发送和接收多播数据包即可。
但要加入一个跨网络的多播组、主机还需要将自己加入(了哪些多播组)的信息通知给本地的多播路由器。本地路由器与其他的多播路由器联系、传递多播组成员信息并建立路由。而在传递多播组成员信息之前、它必须确定在本地网络中有主机系统加入了该多播组。

主机和其多播路由器是通过internet组管理协议(IGMP)来管理多播组成员关系的。

GIMP数据包格式

总计8字节、64位。

  • 版本
  • 类型
    1代表由多播路由器发出的查询数据包
    2代表是主机发出的报告数据包
  • 预留字段
  • 校验和
    ICMP协议计算方式相同
  • IP多播地址
    D类IP地址。如果是查询数据包地址设置为0、报告数据包为主机想要加入的多播地址

ICMP协议一样、虽然IGMP是封装在IP数据包内传输、但它被当做IP层的一部分。IP数据包头部协议类型字段2表示IGMP协议(1则表示ICMP协议)。《网络协议补完计划--IP协议》——IP数据包的格式

IGMP协议的工作机制

  • 主机加入

主机发送一个IGMP报告数据包到网络上。
数据包的多播地址字段设置为想要加入的多播地址目的地址字段设置为所有主机的多播地址224.0.0.1、让本地网络中所有参与多播的主机和路由器接收、所以本机不需要知道本地多播路由器的地址
多播路由器接收到IGMP报告数据包后会通过向其他多播路由器传播组成员信息来建立必要的路由信息。

  • 多播路由器查询

由于多播的组员时刻在变化。多播路由器需要定期查询每个组在本地网络还有多少成员。这就需要通过发送IGMP查询数据包来更新信息。
多播路由器每个端口连接的网络发送一个目的地址224.0.0.1IGMP查询数据包。网络中的每个参与多播主机都将收到这个数据包。
主机收到IGMP查询数据包后、都需要发送IGMP报告数据包。并将多播地址字段目的地址字段都设为其参与的多播地址。每参加一个组、就要发送一个IGMP报告数据包

一开始读到这里其实我有一点疑问:

为什么主机在收到查询数据包后发送的报告数据包的目的地址不是本地多播地址、而是实际的多播地址??
但稍微思考一下就能得出结论、既然多播路由器知道本地网络中已经有至少一个主机之前已经加入了某个多播地址。那么其自身一定已经能接收并转发该多播地址的数据包、此时向该多播地址发送报告数据包多播路由器自然能够接收的到。

  • IGMP协议的实现

所有IGMP数据包都是以组播的形式发送的、所以需要尽量减少数据包的发送次数、以提升效率和节省资源。

  • 当一个主机第一次加入多播组而发送IGMP报告包时、并不能保证该报告被有效接收、下一个报告将在一段时间(1~10s内随机选择)后再次发送。
  • 如果多个程序加入同一个多播组只会为第一个程序发送报告包。
  • 当一个主机收到查询包、并不立即响应、而是经过一段时间间隔后才发出、这个延迟时间是随机的。
  • 在一个物理网络中所有加入某多播组的主机、都能收到其他主机发送的报告包(因为报告报的目的地址是该多播组地址)。
  • 多播路由器只关心需不需要对多播数据进行转发、也就是自己的物理网络内是否有主机加入了多播组、而不关心到底是谁加入了。
  • 由于上一条。如果某主机还没来得及发送报告包就收到其他主机发送的报告包、自己就不必发送了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,037评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 网络层提供的两种服务 在计算机网络领域,网络层应该向运输层提供怎样的服务(面向连接还是无连接)曾引起了长期的争论,...
    srtianxia阅读 3,926评论 0 12
  • 五、因特网的路由选择协议 1.有关路由选择协议的几个基本概念 Ⅰ、理想的路由算法 路由表中的路由是怎样得出的呢?核...
    dmmy大印阅读 1,917评论 0 4
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,472评论 0 6