《TCP/IP 卷1》笔记:广播和多播

广播和多播

引言

IP地址有三种:单播地址、广播地址和多播地址
广播和多播仅应用于UDP,他们对需要将报文同时传往多个接收者的应用来说十分重要
TCP是一个面向连接的协议,意味着分别运行于两主机的两进程存在一条连接
单播:一个帧包含源主机和目的主机的以太网地址。目的地址指明单个接收接口
广播:有的时候一个主机要向网上的所有其他主机发送帧,这就是广播。通过ARP和RARP看到这一过程。
多播:处于单播和多播之间,帧仅传送给属于多播组的多个主机

《TCP/IP 卷1》笔记:广播和多播

  1. 主机收到一份帧时,传给网卡接口处理,网卡接口会过滤非本机物理地址和非广播地址,还有帧校验和错误的帧,再把帧传送给设备驱动程序
  2. 网卡经过配置能接受目的地址为多播地址或某些子网多播地址的帧。对于以太网,地址中最高字节的最低位设置为1表示该地址是一个多播地址。以太网的广播地址ff:ff:ff:ff:ff:ff可以看做多播地址的特例
  3. 设备驱动程序进行另外的帧过滤。首先帧的类型必须指定要使用的协议(IP、ARP)。其次进行多播过滤。再传给对应上层协议。
  4. IP层收到IP数据报时,对源地址和目的地地址过滤,再传给上层协议
  5. UDP收到数据报时,根据目的端口号,有时还有源端口号进行数据报的过滤。没有目的端口会产生一个ICMP不可达报文。

广播

4种IP广播地址

受限的广播
受限的广播地址是:255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时主机不知道网络的掩码,和IP地址。
路由器不转发目的地址为受限的广播地址的数据报。这种数据报仅仅出现在本地网络中

指向网络的广播
指向网络的广播地址是主机号为全1 的地址。A类网络的广播地址是netid.255.255.255。B类netid.netid.255.255。C类netid.netid.netid.255
一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择

指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址。路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址

指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便区分指向网络的广播地址。指向所有子网的广播地址的子网号和主机号全为1.例如,目的子网掩码为255.255.255.0,那么ip地址128.1.255.255是一个指向所有子网的广播地址。如果没有划分子网,这是一个指向网络号的广播
广播是过时的,应该使用多播

广播的例子

《TCP/IP 卷1》笔记:广播和多播
本意是向10.64.231.255的子网发起子网广播,但从收到ICMP回显应答来看,是向10.64.224.0这个网络号发起了指定网络的广播。可能是没有识别子网掩码

多播

多播组地址
《TCP/IP 卷1》笔记:广播和多播
十进制表示范围是224.0.0.0到239.255.255.255
能够接收发送一个特定多播组地址数据的主机集合称为主机组(Host group)。一个主机组可以跨越多个网络。主机组中成员可随时加入或离开主机组。主机组对主机的数量没有限制,同时不属于某一主机组的主机可以向主机组发送信息
224.0.0.1代表该子网内的所有系统组,224.0.0.2代表子网内的所有路由器组。多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP2。224.0.1.2用作sgi公司的dogfight应用

多播组地址到以太网地址的转换
IANA拥有一块以太网地块,高位24bit是00:00:5e。把一半用来分配为多播地址
指明一个多播地址,任何以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:ff:ff:ff。
这种地址分配将使以太网多播地址中的23bit与IP多播组号对应起来。低位23bit相映射
使用arp -a可以查看高速缓存中的IP地址和物理的的映射
《TCP/IP 卷1》笔记:广播和多播
《TCP/IP 卷1》笔记:广播和多播
这种地址映射是不唯一的,那么设备驱动程序或IP层就必须对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。
多播在单个网络中是简单的。
通过路由器转发多播数据时,复杂性就增加了,IGMP就是用来让路由器确定网络中属于确定多播组的任何一个主机。

FDDI和令牌环网络中的多播
FDDI网络使用相同的D类IP地址到48 bit FDDI地址的映射过程[Katz 1990]。令牌环网络通常使用不同的地址映射方法,这是因为大多数令牌控制中的限制。

小结

广播是将数据报发送到网络中的所有主机(通常是本地相连的网络),而多播是将数据报发送到网络的一个主机组。这两个概念的基本点在于当收到送往上一个协议栈的数据帧时采用不同类型的过滤。每个协议层均可以因为不同的理由丢弃数据报。目前有四种类型的广播地址:受限的广播、指向网络的广播、指向子网的广播和指向所有子网的广播。最常用的是指向子网的广播。受限的广播通常只在系统初始启动时才会用到。试图通过路由器进行广播而发生的问题,常常是因为路由器不了解目的网络的子网掩码。结果与多种因素有关:广播地址类型、配置参数等等。D类IP地址被称为多播组地址。通过将其低位23 bit映射到相应以太网地址中便可实现多播组地址到以太网地址的转换。由于地址映射是不唯一的,因此需要其他的协议实现额外的数据报过滤。

习题

12.1广播是否增加了网络通信量?
:否,增加了主机的额外处理时间。(个人理解数据帧会在链路中走一遍,比如在以太网中溜达一遍,那么广播也是溜达一遍,就没有增加了)

12.2考虑一个拥有50台主机的以太网:20台运行TCP/IP,其他30台运行其他的协议族。主机如何处理来自运行另一个协议族主机的广播?
:主机接收到广播后,把消息传送给网卡接口,发送时广播就把数据帧交给设备驱动程序,设备驱动程序检查目的地址是多播地址,并且设置了协议类型,传给了对应的上层类型,如果上层类型是IP,那么IP层对目的地址和源地址和端口进行过滤,再传给上层协议,比如说是UDP,那么发现端口不可达,发送ICMP报文给源站

12.3登录到一个过去从来没有用过的Unix系统,并且打算找出所有支持广播的接口的指向子网的广播地址。如何做到这点?
:ifconfig 找个每个接口的ip地址,根据子网掩码算出主机号全为1的广播地址

12.《TCP/IP 卷1》笔记:广播和多播
:IP分片了。

12.5重做习题10.6,假定8个RIP报文是通过多播而不是广播(使用RIP版本2)。有什么变化?
:那么只有指定主机才能收到