【TCP/IP详解 卷一:协议】第十二章 广播和多播
建议参考:广播和多播 IGMP
12.1 引言
IP地址知识点回顾:
IP地址分为三种:(1)单播地址 (2)广播地址 (3)多播地址
另外一种是,IP地址一般划分成五类:A-E类。
单播
考虑 类似以太网的 包含多个主机的共享信道网络,每一个以太网帧 包含源主机和目的主机的 MAC地址(以太网地址 48bit),通常情况下,每个以太网帧只发送往单个目的主机,目的地址指明单个接收接口,称为 单播(unicast)。
- 在单播的情况下,任意两个主机之间的通信不会打扰到其他主机(除了争夺共享信道的)。
广播和多播
(1)广播和多播仅应用于 UDP。它们对于 需要把数据报文 发送给 多个 目的端 的应用来说 很重要。
(2)TCP 是一个 面向连接 的协议,它意味着 分别运行于 两个主机(由IP地址确定) 的 两个进程(由端口号确定) 之间存在一条连接。
- IP地址确定不同的主机,端口号确定主机中不同的进程。
有时一个主机 要向网络上所有的主机 发送相同的数据帧,这就是广播。我们在之前的 ARP 地址解析协议 的时候有提到,向周围的主机发送 ARP请求(以太网数据帧)。
多播 介于 广播 和 单播 之间:帧只传给属于 多播组 的多个主机。
所以 广播 可以看做 多播 的特例。(所有主机都属于同一个多播组)
广播和多播 的区别:了解主机对 由信道传送过来的帧 的过滤过程
Link Layer 网卡 第一次过滤
网卡查看传送过来的帧,根据 目的地址(MAC地址) 是否为 网卡的物理地址 或者 广播地址(个人认为 进行了一次转换,转换为以太网地址) 来筛选。
若接收,传给设备驱动程序。不接收,丢弃。
- 多数接口被设置为 混杂模式:能够接收 每一个帧 的一个复制。
目前大多数网卡,经过配置都支持 目的地址为多播地址 或者某些 子网多播地址的帧。
对于以太网来说,地址中最高字节的 最低位 为1时,代表地址为一个多播地址。十六进制可以表示为 01:00:00:00:00:00(以太网 广播地址 ff:ff:ff:ff:ff:ff 可以看做是它的特例)。
Link Layer 设备驱动程序(相当于硬件的接口) 第二次过滤
属于广播 或者 组播 的数据报 在此处被区分开来
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用。
首先,判断检验和是否有差错,如果检验和计算结果错误,说明传输过程中出错,则丢弃该报。
其次,判断 帧类型 中是否有指定要使用的协议(比如 ARP等等),没有的话丢弃。
然后,进行多播过滤,检测该主机 是否属于 多播地址 说明的 多播组。
以上都满足的情况下,交给下一层:网络层。
Internetwork Layer 第三次过滤
当 帧类型 指定为 IP数据报 的时候,就传向IP层。
IP **根据IP地址中的源地址 和 目的地址 **进行过滤。
正常的话,传给下一层(TCP 或者 UDP)。
Transport Layer 第四次过滤
如果检验和出错,丢弃报文。
当 UDP(TCP 采用类似的方法)收到一份 IP传过来的数据报 的时候,根据 目的端口号(有时候 还根据源端口号) 进行数据报过滤。
如果没有遇到当前进程所使用的 端口号(回忆:端口号区分不同的进程),就丢弃它 并且 产生一个ICMP不可达报文。
使用广播的问题:多播的一个优点
使用广播的问题在于,增加了对广播数据不感兴趣的主机的处理负担。
拿一个 UDP 广播作为例子,假如网内有50台主机,但是只有 20台对广播感兴趣,所以 当其中的一台主机 发送UDP广播数据的时候,其他的30台不得不处理这些广播数据报:直到 UDP层才会被丢弃(不存在进程对应的端口号)。
多播的出现,减少了 对广播不感兴趣主机的 处理负荷。使用多播,主机可以加入一个 或者 多个 多播组。这样 网卡 可以获知主机 是否属于 数据报中指明的多播组。
12.2 广播
大致分为两类:受限的广播 和 直接广播。
- (1)受限的广播:它不被路由但会被送到相同物理网络段上的所有主机,IP地址的网络字段和主机字段全为1就是地址255.255.255.255。
- (2)直接广播:网络广播会被路由,并会发送到专门网络上的每台主机,IP地址的网络字段定义这个网络,主机字段通常全为1,如 192.168.10.255。
四种IP广播地址
12.2.1 受限的广播
受限的广播地址:255.255.255.255,用于 主机配置 过程中 IP数据报的目的地址。这个时候,主机可能连所在网络的掩码都不知道,甚至连IP地址都不知道。
在任何情况下,路由器都不转发 目的地址 为 受限的广播地址 的数据报。这样的数据报只出现在本地网络LAN中。
直接广播:主机号一般全为1.
12.2.2 指向网络的广播
指向网络的广播地址:主机号全为1。
A类网络广播地址:netid.255.255.255,netted 为 A类网络的网络号。
一个路由器 必须转发 指向网络的广播。但是也必须有一个不进行转发的选择。
12.2.3 指向子网的广播
指向子网的广播地址:主机号全为1,有特定子网号。
作为子网广播地址的 IP地址 需要了解 该子网的掩码。
比如 路由器 收到 发完 128.1.2.255(B类IP地址) 的数据报,当 B类网络 128.1 的子网掩码 为 255.255.255.0 时,该地址就是 指向子网的广播地址。
回顾:某一类的IP地址(这里指 ABCD···) 的格式 区分了 网络号 和 主机号,而 子网掩码 在原有的主机号中 区分了 子网号 和 主机号 的界限。
但是 如果 子网掩码 是 255.255.254.0,该地址就不是指向子网的地址。
12.2.3 指向所有子网的广播
指向所有子网的广播地址:主机号 和 子网号 全为1。
比如IP地址:128.1.255.255 (子网掩码:255.255.255.0) 就是一个指向所有子网的广播地址。(根据:(1)B类网络 (2)子网掩码 找出 子网号 和 主机号)
12.4 多播
IP 多播 提供的服务:
(1)向多个目的地址传送数据。
(2)客户对服务器的请求。
12.4.1 多播组地址
多播组地址 包括 为1110 的最高4bit 和 多播组号。通常表示为点分十进制数。范围:224.0.0.0 到 239.255.255.255。
能够接收 发往一个特定多播组地址 数据的主机集合 称为主机组。一个主机组 可以跨越多个网络,主机组成员可以随时加入或者离开主机组,主机的数量没有限制。不属于主机组的主机可以向它们发送消息。
12.4.2 多播组地址 到 以太网地址 的转换
IANA 拥有一个以太网地址块,范围:00:00:5e:00:00:00 到 00:00:5e:ff:ff:ff ,它把其中的一半分配给了多播地址。
为了指明一个多播地址,任何一个以太网地址的首字节 必须是01,这意味着 与IP多播相对应的以太网地址 从 01:00:5e:00:00:00 到 01:00:5e:7f:ff:ff。
这种地址分配将 以太网多播地址 中的 23bit 与 IP多播组号联系起来:
- 通过将 多播组号(D类IP地址中) 的低位23bit 映射到 以太网地址(MAC地址) 中的低位23bit实现。
多播组号的头五位在映射过程中被忽略,因此 每个以太网多播地址(MAC) 对应的 多播组(由IP地址确定) 不唯一。
既然地址映射不唯一,那么 设备驱动程序或者IP层 就必须对数据报进行过滤(检查MAC地址 和 IP地址)。
单个物理网络的多播是简单的。多播进程 把目的IP地址指明为多播地址(范围在 224.0.0.0 到 239.255.255.255),设备驱动程序 将IP多播地址 转换为 相应的以太网地址,然后把数据发送出去。
- 这些接收进程 必须 通知它们的IP层:它们想接收的多播数据报。并且设备驱动装置 必须能够接收 这些 数据帧。这个过程就是 加入一个多播组。
- 一个主机上可能存在多个属于同一个多播组的进程。
IGMP的作用在于,让 其他所有需要知道自己处于哪个多播组的 主机和路由器 知道自己的状态。
2016/8/6
【TCP/IP详解 卷一:协议】第十二章 广播和多播的更多相关文章
- TCP/IP详解 卷一(第十二章 广播和多播)
广播和多播仅应用于UDP. 广播指的是一个主机向网上的所有其他主机发送帧,而 多播仅发送给属于多播组的多个主机. 为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程 1.首先,网卡查看由信道 ...
- TCP/IP详解 卷一(第十四章 DNS:域名系统)
域名系统(DNS Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 从应用角度上看,对DNS的访问时通过 ...
- TCP/IP详解 卷一(第十九章 TCP的交互数据流)
TCP需要同时处理两类数据:块数据.交互数据. 本章将以Rlogin应用为例观察交互数据的传输过程. 交互式输入 首先观察在一个Rlogin连接上键入一个交互命令时所产生的数据流(每键入一个交互按键都 ...
- TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)
建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...
- TCP/IP详解 卷1 第十九章 TCP的交互数据流
19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 【TCP/IP详解 卷一:协议】第二章:链路层
2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...
- TCP/IP详解 卷一(第一章 概述)
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...
随机推荐
- Spark DataFrame vector 类型存储到Hive表
1. 软件版本 软件 版本 Spark 1.6.0 Hive 1.2.1 2. 场景描述 在使用Spark时,有时需要存储DataFrame数据到Hive表中,一般的存储方式如下: // 注册临时表 ...
- [vue]vue-cli下载原理
正常vue-cli这样操作就ok了 vue-cli github $ npm install -g vue-cli $ vue init webpack my-project $ cd my-proj ...
- POJ:2528(Mayor's posters)离散化成段更新+简单哈希
http://poj.org/problem?id=2528 Description The citizens of Bytetown, AB, could not stand that the ca ...
- 【Cocos2dx 3.3 Lua】SpriteBatchNode和SpriteFrameCache使用
精灵帧缓存类 一.SpriteFrameCache 精灵帧缓冲类SpriteFrameCache用于存储精灵帧,SpriteFrameCache是一个单例模式,不属于某一个精灵,是所有精灵共享 ...
- (转载)【cocos2dx 3.x Lua] 注册事件函数详解
出处: http://www.2cto.com/kf/201409/338235.html coocs2dx 版本 3.1.1 registerScriptTouchHandler 注册触屏事件 re ...
- [LeetCode] 437. Path Sum III_ Easy tag: DFS
You are given a binary tree in which each node contains an integer value. Find the number of paths t ...
- gerrit 使用教程(一)
原文地址:https://www.jianshu.com/p/b77fd16894b6 1, Gerrit是什么? Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控 ...
- 33. Search in Rotated Sorted Array(二分查找)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- 何为仿射变换(Affine Transformation)
http://www.cnblogs.com/ghj1976/p/5199086.html 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型.可 ...
- [转]Mac Appium环境安装
原文:https://blog.csdn.net/dongqiushan/article/details/53326518 1.安装JDK; 2.安装Android SDK; 3.安装brew; 4. ...




