TCP/IP协议---广播和多播及IGMP协议
老板找某个高层谈话,这是一对一形式。当老板叫来所有高层谈话,那么就变为了一对多。计算机网络中也是如此,当一个主机需要和更多机器对话时,就有了广播和多播这种形式。
广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口号确定)间存在一条连接。
网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制可表示为01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff可看作是以太网多播地址的特例)。
广播的类型:
1. 受限的广播
受限的广播地址是255.255.255.255。路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
2. 指向网络的广播
指向网络的广播地址是主机号为全1的地址。根据子网掩码判断主机号。
3. 指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址。同样依赖子网掩码。
4. 指向所有子网的广播
指向所有子网的广播地址的子网号及主机号为全1。
比如局域网内有50台机器,我只想发送到其中的30台监听着5000端口的UDP协议程序,利用了广播:
当各个机器的网卡收到满足自己网卡地址或者是广播多播地址时,网卡要传给设备驱动程序,驱动程序再根据协议传给IP层或者ARP等,比如到了IP层,IP层还要根据协议再传给UDP层等,到了UDP层,此时UDP根据端口号发现我这台机器没监听这个端口,那么我就给它返回端口不可达的ICMP报文。
这样,那20台机器就分担了额外的压力,直到我的UDP层,我才知道哦这不是给我的。这就引出了多播的概念哈哈~我可以指定一些机器。
多播组地址: 互联网D类地址就是多播组地址:
如图:

多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。
一些多播组地址被IANA(互联网数字分配机构)确定为知名地址。例如:224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。
多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP-2,224.0.1.2用作SGI公司的dogfight应用。
-- 多播组地址到以太网地址的转换:
如图:

IANA拥有一个以太网地址块,即高位24bit为00:00:5e(十六进制表示),这意味着该地址块所拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中的一半(高位的第四个字节的高四位分成0~7和8~f两半,这样是分成了整体的一半)分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff(7f这个就是一半)。
由于7的二进制是0111,所以高位0是确定的了,因此以太网地址的前三个字节01:00:5e和下一位0确定了25bit。剩下的23bit和IP地址的低23bit相同。这样D类地址中高9bit中的低5bit就被忽略了。 --这样带来一个问题,5bit被忽略,那么表示会有32(2的5次方)个不同的多播号映射成了相同的以太网地址...比如:224.128.64.32和224.0.64.32都映射为同一以太网地址01:00:5e:00:40:20。
既然地址映射是不唯一的,那么设备驱动程序或IP层就必须对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。另外,如果网卡不提供足够的多播数据帧过滤功能,设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤。
- IGMP:Internet组管理协议
IGMP协议让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。
正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议,IGMP有固定的报文长度,没有可选数据。
如图:


这是版本为1的IGMP。IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文(多播路由器发出的是查询类型的报文,网络上的主机发送的是报告类型的报文)。检验和的计算和IGMP协议相同,同样覆盖首部和数据部分。组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。
多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如
下:
1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
2) 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。
使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组(多播路由只关心是不是至少有一个,有一个就得转发)。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。
如图:查询和报告的报文。显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组

值得注意的是:1. 在主机发送报告报文的时候,目的IP地址是组地址(表示报告发送的时候,网络上其它同一个组地址的主机也可以接收到,这意味着如果一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了,因为多播路由只要知道至少有一个多播组存在就OK了。);2. 多播路由发送的目的IP地址是224.0.0.1(这表示该子网内的所有系统组)。3. 一个初始TTL为0的多播数据报将被限制在同一主机。默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送。
实现IGMP的几个细节:
1). 当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是IP交付服务)。下一个报告将在间隔一段时间后发送。这个时间间隔由主机在 0 ~ 1 0秒的范围内随机选择。
2). 当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应s(一个主机可能不止一个多播组,有几个就要发送几个响应)。
-
TCP/IP协议---广播和多播及IGMP协议的更多相关文章
- TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
1.单播,多播,广播的介绍 1.1.单播(unicast) 单播是说,对特定的主机进行数据传送.例如给某一个主机发送IP数据包.这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说 ...
- TCP/IP 笔记 - 广播和本地组播
在之前第二章介绍IP寻址的时候有介绍到,IP地址有4种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...
- 7.广播和多播,IGMP协议
1.单播,多播,广播的介绍 1.1.单播(unicast) 单播是说,对特定的主机进行数据传送.例如给某一个主机发送IP数据包.这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说 ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute【转】
转自:http://blog.csdn.net/goodboy1881/article/details/670761 1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议(是一种尽力传送的协 ...
- TCP/IP模型各个层次的功能和协议
层次名称 功 能 协 议 应用层 (Application Layer) 负责实现一切与应用程序相关的功能,对应OSI参考模型的上三层 FTP(文件传输协议) HTTP(超文本传输协议 ...
- TCP/IP学习20180709-数据链路层-arp协议
arp协议:address resolution protocol地址解析协议数据链路层,每个数据包都有MAC地址.主机是怎样根据对方主机的ip地址知道对方主机的mac地址呢?通过arp协议.主机里有 ...
- TCP/IP和OSI4层、7层协议介绍
1.TCP/IP全称:Transmission Control Protocol / Internet Protocol 中文翻译:传输控制协议 / 互联网协议 2.OSI4层.7层模型:
- TCP/IP学习笔记1--概述,分组交换协议
1.TCP/IP 互联网是由许多独立发展的网络通信技术融合而成的,能够使它们不断融合并实现统一的正式TCP/IP技术,TCP/IP使通信协议的统称. TCP/IP协议模型(Transmission C ...
随机推荐
- Python之历史
一.python简单介绍 python的创始人:吉多·范罗苏姆(Guido van Rossum),于1989年开始编写,到1991年完成了第一个python编译器.它是用C语言实现的,并能够调用C语 ...
- Java数据解析---JSON
一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...
- 反编译Apk得到Java源代码
原文章转载自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 本人转载自:ht ...
- Django基础篇--Models
在Django中创建与数据库的链接并调用数据库的数据是很关键的步骤,那么怎么实现这个过程呢? 下面这篇文章简单梳理了一下创建Model层的过程和应用 模型-Models 首先需要理解什么是模型? 模型 ...
- (后端)异常不仅仅是try/catch
前言 编程时我们往往拿到的是业务流程正确的业务说明文档或规范,但实际开发中却布满荆棘和例外情况,而这些例外中包含业务用例的例外,也包含技术上的例外.对于业务用例的例外我们别无它法,必须要求实施人员与 ...
- PHP开发APP接口学习笔记
习要点概述1.APP接口简介 2.封装通信接口方法 3.核心技术 4.APP接口实例 服务器和客户端进行接口数据通信:服务器 -->数据库|缓存 -->调用接口 -->客户端 服务器 ...
- Ubuntu16下配置支持Windows访问的samba共享
一.安装Ubuntu samba服务器 $ sudo apt-get install samba $ sudo apt-get install smbclient # Linux客户端测试用 二.创建 ...
- puppeteer入门
转自: https://www.jianshu.com/p/a89d8d6c007b 作者: ppCode puppeteer新手入门(chromium下载跳坑) ppCode 关注 2017.12. ...
- 百度纯CSS生成菜单
首页我们打看dreamweaver或其它编辑器,创建一个名为nav的导航菜单 <div class="nav"> <ul> <li><a ...
- 解决windows下git push卡住问题的方法
问题描述: 在windows下向使用git协议传输的Git Repo进行push时会卡住. -- 这是windows上的msysgit的bug,在新版本上已经修复,但要在.gitconfig中做一项配 ...