《TCP/IP详解》学习笔记(七):广播和多播、IGMP协议

单播,多播,广播的介绍

1单播(unicast)

单播是说,对特定的主机进行数据传送。例如给某一个主机发送 IP 数据包。这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来说,就是网卡的 MAC 地址(不是 FF-FF-FF-FF-FF-FF 这样的地址)。现在的具有路由功能的主机应该可以将单播数据定向转发,而目的主机的网络接口则可以过滤掉和自己 MAC 地址不一致的数据。
 

2广播(unicast)

广播是主机针对某一个网络上的所有主机发送数据包。这个网络可能是网络,可能是子网,还可能是所有的子网。如果是网络, 例如 A 类网址的广播就是 netid.255.255.255,如果是子网,则是 netid.netid.subnetid.255;如果是所有的子网(B 类 IP)则是则是 netid.netid.255.255。广播所用的 MAC 地址 FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC 地址为 FF-FF-FF-FF-FF-FF 的数据交给内核就可以了。一般说来 ARP,或者路由协议 RIP 应该是以广播的形式播发的。
 

3多播(multicast)

可以说广播是多播的特例,多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些(实际上播发的范围 一点也没有变小),多播的 MAC 地址是最高字节的低位为1,例 如01-00-00-00-00-00。多播组的地址是 D 类 IP,规定是 224.0.0.0-239.255.255.255。

虽然多播比较特殊,但是究其原理,多播的数据还是要通过数据链路层进行 MAC 地址绑定然后进行发送。所以一个以太网卡在 绑定了一个多播 IP 地址之后,必定还要绑定一个多播的 MAC 地址,才能使得其可以像单播那样工作。这个多播的 IP 和多播 MAC 地址有一个对应的算法,在书的 p133到 p134之间。可以看到 这个对应不是一一对应的,主机还是要对多播数据进行过滤。

个人的看法:广播和多播的性质是一样的,路由器会把数据放到局域网里面,然后网卡对这些数据进行过滤,只拿到自己打算要 的数据,比如自己感兴趣的多播数据,自己感兴趣的组播数据。当一个主机运行了一个处理某一个多播 IP 的进程的时候,这个进程会给网卡绑定一个虚拟的多播 mac 地址,并做出来一个多播 ip。这样,网卡就会让带有这个多播 mac 地址的数据进来,从而实现通信,而那些没有监听这些数据的主机就会把这些数据过滤掉,换句话说,多播是让主机的内核轻松了,而网卡对不起,您就累点吧。

一些文章也印证了这种想法,最明显的就是《局域网监听的原理、实现与防范》。

 

一些验证性实验

这些实验并不是很复杂,我们只是要 ping 一下一般的 ip 和一个广播地址。首先我 ping 一下自己所在的子网的某一台主机:
 

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time=1ms TTL=255


可以看到,机器返回的是一台主机的回应结果,进而推测,如果我 ping 一个广播地址呢?结果如下:
 

Reply from 192.168.11.9: bytes=32 time=1ms TTL=255 
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64 
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64 
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64
Reply from 192.168.11.218: bytes=32 time<1ms TTL=64 
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64


可以看到,ping 返回了一些随机的 ip 的结果,这些 ip 都是与主机在同一子网内的 ip。我们可以看到,广播实际上是给处于子网 内的所有 ip 发信。

再来一个多播的例子,但是要实现这个多播并不容易,因为我不知道网络内有多少个多播组,就只好利用几个特殊的多播地址来验证了。对于多播地址,有几个特殊的多播地址被占用,他们是 224.0.0.1--该子网内所有的系统组。
 

  • 224.0.0.2--该子网内所有的路由器。
  • 224.0.1.1--网络实现协议 NTP 专用 IP。
  • 224.0.0.9--RIPv2专用 IP


所以只要 ping 这几个 IP,就应该能得到一些结果,比如说我 ping 224.0.0.2:
 

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255 
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255


我们可以看到,这回 ping 只返回了一个 ip 的回应。而这个就是我的网关的地址,这也验证了224.0.0.2是所有路由器的多播(组播) 地址。

 

IGMP 协议

IGMP 的作用在于,让其他所有需要知道自己处于哪个多播组的主机和路由器知道自己的状态。一般多播路由器根本不需要知道 某一个多播组里面有多少个 主机,而只要知道自己的子网内还有没有处于某个多播组的主机就可以了。只要某一个多播组还有一台主机,多播路由器就会把数据传输出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据。为了知道多播组的信息,多播路由器需要定时的发送 IGMP 查询,IGMP 的格式可以看书,各个多播组里面的主机要根据查询来回复自己的状态。路由器来决定有几 个多播组,自己要对某一个多播组发送什么样的数据。

这种查询回应数据报的 TTL 一般是1,而且就算是出错也不产生 ICMP 差错(没必要)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【 POJ - 3628 】Bookshelf 2(dfs 或 dp,0-1背包)

题干&#xff1a; Farmer John recently bought another bookshelf for the cow library, but the shelf is getting filled up quite quickly, and now the only available space is at the top. FJ has N cows (1 ≤ N ≤ 20) each with some height of Hi (1 ≤ Hi ≤ 1,0…

ES5总结1:数组Array新特性最全最精简的详解

2个位置方法&#xff1a;indexOf lastIndexOf 5个迭代方法&#xff1a;forEach every some filter map 2个高阶函数&#xff1a;reduce reduceRight &#xff08;可用于数组求和&#xff09; API: 1、indexOf(searchElement: T, fromIndex?: n…

Apollo自动驾驶入门课程第③讲 — 定位

目录 1. 定位的概述 2. 定位方法介绍 2.1 GNSS RTK 2.2 惯性导航 2.3 激光雷达定位 2.4 视觉定位 2.5 Apollo定位 本文转自微信公众号&#xff1a;Apollo开发者社区 原创&#xff1a; 阿波君 Apollo开发者社区 8月17日 上周我们发布了 Apollo入门课堂第②讲—高精地图&…

【HRBUST - 1621】迷宫问题II (bfs)

题干&#xff1a; 小z身处在一个迷宫中&#xff0c;小z每分钟可以走到上下左右四个方向的相邻格之一。迷宫中有一些墙和障碍物。 同时迷宫中也有一些怪兽&#xff0c;当小z碰到任意一个怪兽时&#xff0c;小z需要将怪兽消灭掉才可以离开此方格。但消灭 怪兽会花费一定的时间。…

Linux与Bash 编程——Linux文件处理命令-L1

目录&#xff1a; linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版&#xff1a;Linux与Windows比较&#xff1a;Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件&#xff1a;mobaxterm的使用&#xff1a;使用电脑命令行连接&#xff1a;sshd的…

4.Transfer Learning

Intro 这是深度学习第4课。 在本课程结束时&#xff0c;您将能够使用迁移学习为您的自定义目标构建高度准确的计算机视觉模型&#xff0c;即使您的数据相对较少。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(mPFq5KMxKVw, width800, height450) S…

Angular相关的有价值的问题集锦

001. Angular的三大核心概念是什么&#xff1f; 答&#xff1a;组件化、模块化和路由&#xff08;Component、NgModule、Router&#xff09;,其中最核心的概念是组件化Component。 002. 前端为什么需要Router&#xff1f; 答&#xff1a;如果没有Router&#xff0c;浏览器的…

如何在Word中排版出漂亮规整的编程语言代码样式?【☆】

[1] 能输出各种编程语言并保持代码格式和语法高亮显示的网站&#xff1a; PlanetB | Syntax Highlight Code in Word Documents http://www.planetb.ca/syntax-highlight-word Welcome! — Pygments http://pygments.org/ [2] How do you display code snippets in MS Wor…

网络编程懒人入门(一):快速理解网络通信协议(上篇)

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统&#xff0c;很…

PCA算法中样本方差和协方差的无偏估计与n-1的由来

原文出处&#xff1a; http://blog.sina.com.cn/s/blog_c96053d60101n24f.html 在PCA算法中的方差协方差计算公式中除数为什么是n-1? 假设X为独立同分布的一组随机变量&#xff0c;总体为M&#xff0c;随机抽取N个随机变量构成一个样本&#xff0c;和是总体的均值和方差, 是常…

【Gym - 101915D】Largest Group(二分图最大团,状压dp)

题干&#xff1a; 大黑山上有小小民和小小涛两种物种&#xff0c;山东人小李想要研究这两种物种的关系 奇怪的是大黑山上有相同数量的小小民和小小涛。小李数了数一共有 P 个&#xff0c;小李分别给P个小小民和小小涛编号 1 - P 号&#xff0c;已知每对小小民之间都是好朋友&…

Apollo自动驾驶入门课程第④讲 — 感知(上)

目录 1. 感知的概述 2. 计算机视觉 3. 摄像头图像 4. LiDAR图像 5. 机器学习 6. 神经网络 7. 反向滤波法 本文转自微信公众号&#xff1a;Apollo开发者社区 原创&#xff1a; 阿波君 Apollo开发者社区 8月23日 上一篇文章中&#xff0c;我们发布了无人驾驶技术的 定位篇…

三种经典的洗牌算法

参考原文链接&#xff1a;https://blog.csdn.net/qq_25026989/article/details/89512769 问题描述&#xff1a;洗牌算法是将原来的数组进行打散&#xff0c;使原数组的某个数在打散后的数组中的每个位置上等概率的出现。 主要有3中经典的洗牌算法&#xff1a; 1.抽牌&#x…

【数据库实验课堂】实验一:数据库的管理

实验一&#xff1a;数据库的管理 1、假设SQL Server服务已启动&#xff0c;并以Administrator身份登录计算机&#xff08;文件名称自定&#xff09;&#xff1b;请分别使用Management界面方式和T-SQL语句实现以下操作&#xff1a; 1) 要求在本地磁盘D创建一个学生-课程数据库…

网络编程懒人入门(二):快速理解网络通信协议(下篇)

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、前言 本文上篇《网络编程懒人入门(一)&#xff1a;快速理解网络通信协议&#xff0…

为什么说逻辑回归LR是线性分类器?

问题描述&#xff1a;为什么说逻辑回归LR是非常典型的线性分类器&#xff1f; 首先&#xff0c;我们要弄明白区分线性与非线性分类器的标准是什么&#xff1f;是决策边界&#xff08;Decision Boundary&#xff09; 以二分类&#xff08;LR可以用于多分类&#xff09;为例进行…

【数据库实验课堂】实验二 使用SQL Server管理数据表

实验二 使用SQL Server管理数据表&#xff1a; 1、请在指定数据库内完成以下内容&#xff1a; 1) 依据数据表的结构创建相对应的数据表&#xff0c;表结构如下所示&#xff1b; **学生信息表&#xff08;student&#xff09;**字段名称 字段类型及长度 说明 备注 S…

5, Data Augmentation

Intro 这是深度学习第5课 在本课程结束时&#xff0c;您将能够使用数据增强。 这个技巧让你看起来拥有的数据远远超过实际拥有的数据&#xff0c;从而产生更好的模型。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(ypt_BAotCLo, width800, height45…

朴素贝叶斯算法注意事项(有待完善)

1.朴素贝叶斯算法的优缺点总结&#xff1a; 优点&#xff1a; 朴素贝叶斯模型发源于古典数学理论&#xff0c;有稳定的分类效率&#xff1b;分类速度快&#xff0c;准确度高&#xff1b;对缺失数据不太敏感&#xff0c;算法简单&#xff0c;常用于文本分类&#xff08;如新闻…

网络编程懒人入门(三):快速理解TCP协议一篇就够

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、前言 本系列文章的前两篇《网络编程懒人入门(一)&#xff1a;快速理解网络通信协议…