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 ...
随机推荐
- jQ效果:jQuery和css自定义video播放控件
下面介绍一下通过jquery和css自定义video播放控件. Html5 Video是现在html5最流行的功能之一,得到了大多数最新版本的浏览器支持.包括IE9,也是如此.不同的浏览器提供了不同的 ...
- 【读书笔记】iOS-iCloud文件备份
iOS应用在运行时经常要创建一些文件,不过这些文件要如何存放呢?有没有什么要求呢? 由于手机资源空间有限而且考虑到Apple推出的iCloud,我们确实要对创建出的文件按照作用的不同,分出几种类别出来 ...
- Salesforce小知识:累计汇总字段类型
累计汇总字段类型的定义 Salesforce中可以在两个对象之间建立关系.一个对象的某一条记录可以有若干条相关联的其他对象记录. 累计汇总字段可以将这些相关联的记录中的某些字段值汇总起来,显示给用户. ...
- (网页)20个JS 小技巧超级实用
转自CSDN: 1. 将彻底屏蔽鼠标右键 oncontextmenu=”window.event.returnValue=false”< table border oncontextmenu=r ...
- 03-13_WLST导航和定位MBean
本文重点:WLST导航和定位MBean MBean切换图 如上:红色的字体表示切换的命令.ls和cd是在当前树下切换,其他命令是在不同树之间切换. 其中: DomainMBeanServer有 ...
- Ubuntu关闭(重启)网络服务命令
Ubuntu关闭网络服务命令: service network-manager stop 重启网络服务命令: service network-manager restart
- Python实现Excel转换工具小结
经历过的打表工具从c++.C#,再到Python,算下来还是Python方便些.一天即可上手开发,非常适合快速迭代中的各种小工具开发. Python开源的第三方库很多,涉及excel方面的也有好几个x ...
- Ulua对象管理方式
不管是C++中还是在C#中,在都绕不开一个问题:类对象怎么在Lua中使用的问题,还好Lua提供了Userdata以及ligh Userdata结构类型,通过扩展可以处理这方面的问题.现在的很多框架也大 ...
- zTree异步加载展开第一级节点
在 setting 中的 callback 中加上 onAsyncSuccess:onAsyncSuccess 回调函数 , 然后实现回调函数 var isFirst = true;function ...
- vue_02 开发过程中的问题记载
1.package.json 运行 npm start 执行的是npm run dev 实际上执行的是“dev” : node build/dev-server.js这一条 跑的是build目录下d ...