《TCP/IP详解 卷一:协议》读书笔记 - 11 广播和多播

本贴最后更新于 3338 天前,其中的信息可能已经沧海桑田

#广播和多播
根据 IP 地址对象的个数可以分为:单播地址,广播地址,多播地址。

广播地址和多播地址仅应用于 UDP(TCP 是面向连接的协议,因此只能单播) 。
下面介绍以下信道传送过滤帧的过程。

  • 网卡过滤由信道传送过来的帧,通常网卡仅接收目的地址为网卡物理地址或广播多播地址的帧(在以太网中,地址最高字节最低位设置为 12 表示是一个多播地址,01:00:00:00:00:00)。若接收后就将它传往设备驱动程序(若校验和错误,会被抛弃)。
  • 设备驱动程序进行另外的帧过滤,首先帧中必须指定使用的协议(IP、ARP 等);其次对多播地址需要检测该主机是否属于该多播组。若接收后将数据帧根据协议传给下一层。下面以下一层为 IP 进行说明。
  • IP 根据 IP 报首中的源地址和目的地址进行过滤。若正常,将数据报传送给下一层,如 UDP
  • UDP 根据目的端口号(有时还根据源端口进行过滤)。如果当前没有进程使用该目的端口,就丢弃数据报并产生 ICMP 不可达(若校验和出错同样也丢弃)。

根据上述的过程,我们知道广播增加了对广播地址不感兴趣的主机的处理负荷,因为只有到 UDP 层时,才能发现本机对该端口数据不感兴趣。
因此,多播的出现减少了这种负担,设备驱动程序就能进行过滤。


##广播
###受限的广播
受限的广播地址是指 255.255.255.255,主机不知道目的主机的 IP 地址及网络掩码。
这样的数据报仅出现在本地网络中,路由器不转发目的地址为受限广播地址的数据报。

一个未解决的问题:
若主机是多接口,那么广播地址的数据报应当发送到每个相连的接口上?还是发往主机中支持广播的所有接口?
大多数 BSD 系统将 255.255.255.255 看错是配置后的第一个接口的广播地址。

###指向网络的广播
指向网络的广播地址是主机号全 1 的地址。A 类地址的广播地址为:netid.255.255.255。
路由器需转发指向网络的广播地址。

###指向子网的广播
指向子网的广播地址是主机号为全 1,且具有特定子网号的地址,需要知道子网的掩码。

###指向所有子网的广播
指向所有子网的广播是子网号和主机号全为 1 的地址,需要知道子网的掩码,若无掩码,则该地址是一个指向网络的地址。


##多播
IP 多播提供两类服务:

  • 向多个目的地址传送数据。
  • 客户端对服务器的请求,如:无盘工作站需要确定启动引导服务器。

###多播组地址

D 类地址为多播地址,包括 4bit 网络号(1110)和 28bit 多播组 ID,范围 224.0.0.0 到 239.225.225.225

能够接收发往一个特定多播组地址数据的主机集合称为主机组。一个主机组可以跨多个网络。主机组中成员可以随时加入或离开主机组。
IANA 确定了一些永久主机组(和常用端口原理类似):224.0.0.1 代表该子网内所有系统组,224.0.0.2 代表该子网内所有路由器组等等。

###多播组地址到以太网地址的转换
IANA 拥有一块以太网地址,高 24bit 为 00:00:5e,其指定以太网多播地址首字节必须是 01,因此多播地址对应的以太网地址范围是 01:00:5e:00:00:00 到 01:00:5e:7f:ff:ff。

再把 IP 地址多播 ID 号 23bit(28-5=23 忽略最高 5bit)映射到以太网地址中的低 23bit(48-24=24,高 1bit 不用)。

但是这样会产生多个 IP 广播地址会映射到同一个以太网地址。因此设备驱动程序或 IP 层需要对数据报进行过滤。但是这样消耗依然比广播少得多。

注意,同一主机上可能存在多个属于同一多播组的进程,因此在收到多播数据报时,必须向属于多播组的每个进程传送一份复制。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖 • 1 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖 • 3 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 3 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 1 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 690 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 411 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 181 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 2 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 564 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 447 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 247 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 29 关注
  • AWS
    11 引用 • 28 回帖 • 9 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    290 引用 • 4494 回帖 • 653 关注