【知识强化】第四章 网络层 4.7 IP组播
这节课我们来学习一下IP组播。
首先我们来看这样一个问题,IP数据报在网络当中传输的时候,有几种传输方式呢?三种,分别是单播、广播和组播(多播)。这个组播呢也叫做多播,它们俩是一个意思。那这个组播是由于在很多年前,我们之前是译成了这个组播。现在通常用的都是多播这个词,那么我们现在分别来看一下三种传输方式。
首先对于单播来说呢,单播它指的是发送这个数据报,或者说IP数据报,到单个目的地。而且每发送一份单播报文呢都要使用一个单播的IP地址作为目的地址。那这个单播IP地址呢,其实就是我们之前所讲的A、B、C类里面啊经常使用的一些IP地址。那这些IP地址呢就会构成一个点对点的传输方式。因为我们发送端所使用的源地址,源IP,就是一个单播IP地址。然后目的地址呢也是一个单播IP地址,所以就是一对一的点对点的这种通信。
那这种点对点传输方式呢叫做单播。啊就好比我们这个一个男生,要追求另一个女生要给她表白的时候,那他只给这一个女生表白,就是一对一点对点的。
那么再来看广播。广播指的是发送数据包或者说IP数据报到同一广播域或者是子网内所有设备的一种数据传输方式。这是一种点对多点的传输方式。这里面呢发送端还是一个单播的IP地址。不过啊,目的地址它就不是了,目的地址它是一个全1的广播地址。那只要一个IP数据报它的目的地址是全1的,那它所对应的这个MAC地址也就是物理地址自然也是全F的。所以,这样的数据报,到网络上面传输,进入到局域网之后,是要发送给局域网内部的整个全部的主机的。即使有一台交换机,它也会从这个交换机的全部端口转发出去。那这种呢是广播通信,一个人对多个人,一点对多点。
那还举刚才这个例子,那这个男生呢他就比较花心,他现在对很多人表白,但是呢他不管青红皂白,不管这个女生到底是有没有男朋友,他都会跟她表白。那我们现在讲完了单播和广播相信同学们也发现了一定问题。首先单播来说呢,它这个用户是比较少的,如果发送数据只能一对一的发送。那如果我要为很多人都发送这样相同的数据包,那我就要建立很多个单播连接,啊这个也非常占用带宽。第二个我们再来看这个广播呢,广播的话它是不分青红皂白,会给整个局域网当中的所有主机全部发送这样一个数据报。即使这个主机它是并不想要,并不需要的,但是它还是会去发送。所以这种广播呢,没有办法应付这个用户不同的需求。而且呢在实际网络当中,我们这个用户量是不定的。一个网络的用户量是不定的。可能有的时候这个用户量多,有的时候用户量少。那这个单播和广播它们的效率呢就会相对较低。因此呢,我们就产生了一种比较好的传输方式。
那这个传输方式呢叫做组播也叫做多播。它指的是当网络当中某些用户是要特定的数据的时候,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立一个组播分发树。那被传递的数据到了距离用户尽可能近的节点之后,才会复制和分发,是一种一点对多点的传输方式。也就是说广播和组播,它本质上面是很类似的,都是一个人发给很多个人。不过广播呢是不管用户需求,而这个组播呢是只给一个组播组内的主机,也就是一些有相同需求的主机才会发送一个相同的这个数据报。而且呢,它也不会在最开始,也就是在发送端在原点这儿复制,它会经历很多路由器。直到马上要到这个局域网了,也就是说要经过下一个路由器就要到局域网了,那我才会在下一个路由器这儿把数据报进行一个复制。所以说,在之前传输的时候呢那一条路径上面都是在传输一个数据报。只有到最后一步,最后一个路由器才会把这个数据报复制,然后分发给这个网络当中的组播组当中的主机。
那在这个表白的例子里面呢,就是一个男生他想追求女生,啊想对女生表白。但这个时候呢他稍微有点职业操守了,
啊他就会对这些单身的女性采取表白。也就是这些单身女生,也就是说这些女性呢她们是有这个需求的,所以他会给这些有需求的人,啊有需求的人表白,发送一个表白的信息。那这个对应的就是组播,也叫做多播。
那我们再结合实际的看视频节目的这样一个例子,来看一下单播和组播的一个区别。啊首先我们看单播。单播的方式呢就是每一个啊待接收的这个主机,都要和发送站点建立一个单播之间的连接。那因此啊,在源站点这儿,它就应该根据有多少个人要接收我的数据,它就复制多少份。比如说现在有90个主机要接收这个、要看这个电视,看这个视频节目,那它就要复制90份这个IP数据报,然后呢再分发到各个主机当中。 那可以看到在实际传输的时候这样所占的带宽和资源是比较多的,
就是因为在发送者和每个接收者之间都要建立一个单独的数据信道。
那组播呢,啊它好在哪里呢?
就是它可以提高数据的传输速率,减少主干网当中出现拥塞的可能性。也就是说这个原站点呢,啊或者是说发送方,它不需要事先复制好很多份这个数据报,它就是一份数据报。然后到一个路由器呢可能如果要分开好几个路,它就会复制几份,但是复制之后在每一个链路上面还是保持只有一个数据报。
那这个局域网当中的主机呢,只要是属于这个同一个组播组的,就可以收到这样一个组播的数据报。也就是说最后一步,这个一个数据报才会变成很多个数据报,分发给这些主机。那组播组当中的主机呢,可以是在同一个物理网络当中,也就是可以是在这个一个局域网内。当然呢,也可以在不同的物理网络当中。那这个时候呢,就需要有组播路由器的支持。组播路由器呢就是指可以运行组播协议的路由器,那这一类路由器呢既可以运行组播协议,也可以运行单播协议。它们身兼多职的。比如说我们现在是这一个网络当中,可能有一些主机它是啊属于一个组播组的,那也可以这个网络当中的第一台主机和这个网络当中第一台主机以及第三个网络当中的几台主机,它们是同一个组播组。那这样如果要发送给这个组播组的数据报,就要走这个R2、R3、R4这个路由器,再分发给这个组播组当中的成员主机。那现在我们想这样一个问题,啊在发送的时候我们怎么找到这个主机呢?或者说怎么知道这些人是不是一个组播组呢?
这个就要涉及到IP组播地址了。我们知道在因特网当中进行啊通信的时候呢,每一个主机都需要有一个全球唯一的IP地址。那如果某个主机现在想要接收某个特定多播组的分组,那怎么才能够使这个多播数据报传送到这个主机当中呢?显然啊这个组播数据报它的目的地址一定不能写这个主机它自己的IP地址,因为如果这样写的话,只会发给这个主机,其他的属于同属一个组播组当中的主机都是收不到这个数据报的。因此呢,就需要有一个新的地址。比如说这个主机当中呢再产生出一个新的地址,来接收这个组播的数据报。当然其他属于这一个组播组当中的主机呢,都可以有这样一个IP组播地址然后接收到发送给它们所在的组播组的数据报。
因此呢,IP组播地址就是可以让源设备能够将分组发送给一组设备。啊这样的一个标识,而且属于多播组的设备,属于同一个多播组或者组播组当中的设备,都会被分配一个组播组IP地址,也就是说很多主机它们都会有一个组播地址。如果它们是一个组播组的话,那它们的组播地址都是一样的。当然这个组播地址并不是任何一个主机它生来就有的,如果这个主机它要实现接收这个组播数据报的功能。比如说我现在要看直播,或者是我要加入一些视频会议,那我这个手机呢现在就有一个组播的IP地址了。
那接下来我们看一下组播地址的范围。它的范围呢是从224.0.0.0到239.255.255.255。那可以看到,这儿其实是D类地址的一个范围。因为我们之前在讲这个A、B、C、D、E这5类分类的编址的时候呢,就有讲过D类地址它们适用于组播或者说多播的。而这个D类地址它的标志呢就是前面4位是1110,那现在呢就是D类地址大显身手的时候了。一个D类地址呢就可以表示一个组播组。但是要注意,每一个这个IP组播地址,它只能作为数据报或者说分组的目的地址,但是不能够作为源地址。啊我们可以这样想,啊我们现在看这个斗鱼直播。啊我们在看一个主播他的这样一个频道,那可以很多人都在看这个主播的频道,那就相当于主播它是源站,它就把这个信息呢啊通过组播的方式,啊这个主播通过组播的方式发给这些主机。那这些主机都能看到了,因为这些主机它都是同属一个组播组。但是呢反过来可不可以,可不可以有很多个组播,很多个组播发送组播数据报,然后给一台主机。那肯定是不行的,因为我们在同一时间只能看一个频道。所以没有办法,所以如果有那种情况,这样我们的画面一定就是非常混乱的。所以说要注意的是IP组播地址只能作为目的地址,啊那源地址呢?一定是一个单播地址。这个点呢大家要清楚。
接下来还有几点有关于组播数据报要注意的,第一个呢就是组播数据报是尽最大努力交付的,不提供可靠交付,应用于UDP。那UDP呢它是一个实现不可靠交付的一个协议。那这种协议呢,它用起来虽然听起来不可靠,但是呢它给我们带来的一个优点,就是速度比较快。因为我们在开视频会议或者是看直播啊看电视节目等等,我们要求的是一个实时性,快速性,所以呢我们希望要越快越好。因此我们就应用这个UDP,然后尽最大努力交付。
再来看第二点。对组播数据报是不产生ICMP差错报告报文的。
第三点就是并不是所有的D类地址都可以作为一个组播的地址。也就是说D类地址当中有一些是不能随意使用的。因为有的地址呢已经被指派了永久组地址了,那大家知道有这些特殊地址的存在就可以了。啊也就是D类地址并不是全部的都可以用作表示一个组播组的。
那IP组播的一个典型过程呢就大概如图所示。
啊那我们可以看到,我们可以把这个图呢分成两个部分。啊一个部分叫做硬件组播,一个叫做因特网范围内组播。啊什么意思呢?这其实就是对IP组播进行一个分类,一种呢是只能在本局域网内进行的一个硬件组播、硬件多播,那还有一个呢就是在因特网的范围内也就是没有进入到局域网内的这个范围来进行组播。那这种硬件组播呢是很简单但是是非常重要的。因为现在大部分主机都是通过连在局域网然后再连入因特网,所以最后通过因特网范围内组播之后还是要进入到局域网内的硬件组播。
那接下来我们就解决一下有关于硬件组播的一些相关问题。那硬件组播呢说的其实就是在局域网范围对于一个组播的数据报,我应该怎么给这些主机或者说给哪些主机。啊这个里面我们就可以结合之前所学过一个单播的情况,比如说我们现在发来了一个单播的数据报,那它进入了局域网之后,应该交付给哪个主机呢?就要看这个主机的MAC地址。那同样,在硬件组播这儿呢,我们非常重要的一环,也是要根据这个MAC地址,来找到可以接收组播数据报的主机。
也就是说这个硬件组播它当中的这个组播地址是和单播地址一样的。啊组播地址也需要相应的组播MAC地址,然后在本地网络当中传送帧。那我们现在可以想一下啊广播的情况。如果我们现在要发送一个广播的数据报,啊现在进入到一个局域网了,那我们接下来就应该看它的MAC地址,那MAC地址呢表示的就是全F。如果我们看到MAC地址、目标地址是全F的话,我们就应该把这个数据报发送给整个局域网当中的所有主机,不管有没有交换机,所有主机都要发送到。啊所以在广播的这个数据报当中呢,全F的这种广播的MAC地址,其实就相当于是一种标识。啊那在组播这里面呢,其实也有这种MAC地址的标识,也就是01-00-5E,只要这个MAC地址它是这个打头的,我们就知道它一定是一个组播MAC地址,就做好准备要发给这个局域网当中的一部分主机了。
那接下来发给哪些主机呢?就要看剩下的部分。啊,剩下的部分呢我们现在来结合这个图示来看一下。
【知识强化】第四章 网络层 4.7 IP组播的更多相关文章
- 【知识强化】第四章 网络层 4.3 IP
这节课我们来学习一下IP数据报的格式.那之所以把路由算法这一小节跳过呢,就是因为我们之后会要讲到路由的选择协议.那在路由选择协议这一块讲路由算法,我觉得是比较合适的.那我们先来看一下这节课要讲的知识. ...
- 《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)
我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(m ...
- 【知识强化】第四章 网络层 4.4 IPv4
这节课我们来学习一个非常重要的概念,就是IPv4地址,其实也是我们常用的IP地址. 首先我们来了解一下,为什么会有IP地址的出现以及它是做什么用的.假如说在很多年前我遇到一个女生非常的漂亮,等了十年之 ...
- 【知识强化】第四章 网络层 4.5 IPv6
这节课我们来学习一下IPv6. 首先呢我们来看一下为什么会有IPv6的产生.由于我们之前探讨过,对于IPv4这种编址方式呢,这个地址线已经被消耗殆尽了,已经没有剩多少地址.所以我们就学习了两种技术,一 ...
- 【知识强化】第四章 网络层 4.8 移动IP
这节课我们来学习一下移动IP. 那移动IP呢要跟动态IP区分开.动态IP是指,通过使用DHCP协议,在一个局域网内部的一台主机,就可以动态地获得一个IP地址.那这里面的移动IP是什么意思呢? 我们来举 ...
- Android初级教程理论知识(第四章内容提供器)
之前第三章理论知识写到过数据库.数据库是在程序内部自己访问自己.而内容提供器是访问别的程序数据的,即跨程序共享数据.对访问的数据也无非就是CRUD. 内容提供者 应用的数据库是不允许其他应用访问的 内 ...
- 【知识强化】第二章 数据的表示和运算 2.4 算术逻辑单元ALU
从本节开始我们就进入到本章的最后一节内容了,也就是我们算术逻辑单元的它的实现.这部分呢是数字电路的一些知识,所以呢,如果你没有学过数字电路的话,也不要慌张,我会从基础开始给大家补起.那么在计算机当中, ...
- unix环境高级编程基础知识之第四章
1.从当前用户转到root用户:直接输入su命令,然后输入root密码,如果之前没有设置root命令密码会登陆不成功,这里需要命令sudo passwd命令设置密码,然后按照上面输入就成:从root命 ...
- Java基础知识笔记第四章:类和对象
编程语言的几个发展阶段 面向机器语言 面向过程语言 面向对象语言:封装.继承.多态 类 类声明 class Person{ ....... } class 植物{ ....... } 类体 类使用 ...
随机推荐
- spring boot集成mongodb的增删改查
添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- ubuntu 安装apache2 二进制包
官方安装教程 http://httpd.apache.org/docs/2.4/install.html 一.下载安装包 进入https://httpd.apache.org/download.cg ...
- Autoit3域用户的登陆统计
#include <ACN_NET.au3> If @OSArch="X86" Then $fileURL=@CommonFilesDir & "\S ...
- js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池
var vue = require('vue'); 引入vue的意思,commonjs的写法.node都是用require来载入模块的,可以看看webpack+vue. require()可以调用模块 ...
- django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11
搭建Django2.0+Python3+MySQL5时同步数据库时报错:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 o ...
- Delphi fmx 找不到android设备解决办法
刚接触到移动开发,很多不熟悉.配置好Android SDK后,如果用模拟器来调试程序的话,那速度会让人崩溃,我用的Nexus7平板,插上电脑,开启USB调试,但奇怪在Delphi里就是找不到 ...
- Dataphin帮助企业构建数据中台系列之--萃取数据中心
Dataphin作为阿里巴巴数据中台OneData (OneModel.OneID.OneService)方法论的产品载体,帮助企业构建三大数据中心:基于数据集成形成的垂直数据中心.基于数据开发沉淀的 ...
- npm和gem
https://blog.csdn.net/u011099640/article/details/53083845
- codeforces 111A/112C Petya and Inequiations
题目:Petya and Inequiations传送门: http://codeforces.com/problemset/problem/111/A http://codeforces.com/p ...
- django中常见命令总结
一,创建一个django项目: django-admin.py startproject mysite二,在mysite目录下创建blog应用: python manage.py startapp b ...