网络层协议

网络层协议

前言

在好久之前的章节,已经介绍了应用层, 运输层相关的东西。已经大概对数据到底是如何从一台主机到另外一台主机有所了解,即端到端。html

了解了在TCP中数据收发两端到底是如何保证数据的有序性,可靠性等特性。又是如何进行流量控制, 如何控制应对网络拥塞,其中又包括,网络拥塞的定义。同时还知道了,如何创建起一条TCP链接,通话双方又是怎样断开链接的。而相应的,天然也是明白了 UDP究竟是一种不负责任的传输方式。算法

而且咱们也发现一点,将数据从传输层丢进网络层以后就无论不顾了,维护数据的有序性,可靠性等等其余的特性大都由传输层自身来实现。windows

那么这一篇章就是来看,当数据进入网络层以后怎样经过重重管道到达另外一端的。缓存

数据报格式

当数据从运输层传输到网络层的时候, 此时对于网络层而言并不区分上层到底是TCP或是UDP,在发送到网络层的时候被做为一个总体来看待。安全

而IP数据报格式以下:服务器

  • 4bit的版本号,与大多数数据格式同样,一开始指定的都是版本号,决定接下来的数据究竟该以怎样的方式被解读。而IP协议,目前有IPv4, IPv6两种版本。网络

  • 4bit的首部长度,与TCP协议相似,在其首部有 可选项部分, 是以,IP首部长度不定,须要经过这个字段指示数据究竟从哪里开始。架构

  • 8bit的服务类型,将不一样类型的IP区分开来。工具

  • 16bit的数据报长度,IP首部 + 数据 因此理论上最大支持度数据报长度是65535字节,但因为计算机网络中的MTU限制,最大长度通常为1500字节。数据超出这个长度就要进行分片处理。至于更多则在本节下的补充中进行说明。性能

  • 16bit标识, 13bit片偏移, 3bit标志, 这部分是为IP分片而服务的。

  • 8bit寿命(Time-to-live TTL), 保证数据不会永远在网络环路中循环,当数据通过一台路由器时, TTL - 1, 当为0,则数据被丢弃。

  • 8bit协议号, 在应用层与运输层之间,经过端口号将二者粘合,而在运输层与网络层之间则是协议号, 仅当到达目的地才起做用,指定运输层协议到底是什么。

  • 16bit校验和 将IP首部每两个字节当作一个数,用反码运算对这些数求和。当不一致须要丢弃数据, 而路由器须要从新计算校验和放回原处,由于可能TTL值会发生变化。 而之因此IP与运输层都要进行校验和计算,是运输层校验首部及数据不一样, IP校验和仅计算IP首部。另外一点则是,IP层并不必定必须与运输层同时使用。

  • 32bit源IP地址

  • 32bit目的IP地址

  • 选项, 可选项, 因为选项的存在使得路由器处理IP数据有了额外开销,在Ipv6中已经去掉这一点。

  • 数据, IP数据报的核心部分。

须要注意到的一个地方是,IP首部长度为20字节,若是在运输层采用的是TCP协议,则每条数据报须要承载的首部有40字节。

IP数据报分片

须要注意到的是, 不一样的链路协议对数据的承载能力是不一样的, 以太网中最大承载的能力不超过1500字节,一个链路层帧所能承载的最大数据量就被称做是MTU。

可是咱们知道, 对于IP数据报,其长度最大为65535字节,远远超过MTU数值,须要作的就是将数据报进行分片,切分红更小的数据发送,这些较小的数据报就被称为片。

但分片以后,又是怎样保证数据报可以被恰当的还原呢?这就须要相应的标识,偏移量, 标志位,来肯定当前数据流是否结束,以及片在原始数据中所处的位置,以便进行正确的还原。同时须要注意到一点的是, 在从一个个网络节点向下一节点发送的过程当中,可能对上一节点适用的数据片大小对下一节点就再也不适用,须要在当前节点再次进行数据分片处理。 这无疑加大了网络层的负担。 同时,不得不考虑到安全性问题, 毕竟须要按照必定规则进行数据的重组, 若是恶意发送的数据

因此在IPV6中废弃掉了这一点,禁止在IPV6的网络层进行分片处理,对于太大的数据直接让在源端中进行分组,网络层的中间节点再也不负责处理这件事情。可是依然会有上一节点的MTU与当前节点的MTU不一致的状况出现。对待这样的现象有两点做为保障,一是要求支持IPV6的节点,其链路层都要提供1280MTU的容量。 而不免依然会出现小于1280的状况出现,那么IPV6对于本地始发的数据报则进行分片, 并不违背原则, 而非本地始发的分片则会被丢弃!!!而且给源端发ICMPv6 'Too Big'消息。

IPV4编址

而对于一台主机而言,到底是怎样连接进入网络的?

一台主机一般只有一条链路链接到网络,当想要发送数据时,则在该链路上进行发送,主机与物理链路之间的连接则被称为接口。对于PC而言,功能较为单一,而对于路由器来讲,它须要从一条链路上接收数据并向另外一条链路发送数据,所以至少有两条链路。 IP要求每一个接口都有本身的IP地址,所以IP并不是与主机, 路由器, 而是与接口相关。

也所以, 一台路由器必然会存在多个IP。 对于IPv4而言,其地址长度为32位,所以最多可以拥有40亿地址,而IPv6的长度为128位,没必要担忧。 那么仅仅40亿地址,对于全球来讲够用吗?在如今这个时代来讲是显然不够用的,毕竟可以接入网络的设备是这样多,每台设备分配一个IP地址的话, 怎么够用呢?

这个问题暂时留在这里,稍后再提。

先来看一下IP编址规则。

IPV4长度为32位, 对于咱们平常生活中所见到每每是这样一种地址 192.168.0.9 大概相似于这样的数字, 每3位对应8bit,不难发现, 最大值必然是

1111 1111 1111 1111 1111 11111 1111 1111

32位均为1, 最大值也就是 255.255.255.255.

如今咱们已经有了属于本身的IP地址,在发送数据的时候终于有了本身的名字,那么接下来呢? 该怎样让全世界听到个人声音呢?

路由 转发

当咱们向外界发送一条消息时,主机中的网络层会将对应的数据封装成 IP层数据报,即网络分组, 而后经过链路向路由器发送,路由器拿到发送的数据,知道了你的目的IP,而后经过路由规则在转发表里查找,决定了须要将数据发送的下一个节点是谁。

和快递比较相似,当收到一批货物,根据货物的不一样地址发送到相关的省市,根据更详细的地址进一步分拣,层层处理,最终发送到目的地。

转发:就是在路由器内部,从入链路到出链路之间的一个过程。

路由:在整个网络中,根据每一个路由器中的转发表, 选择发送的路线。

作分组交换的有两种, 一种是根据链路层关键字肯定的, 另外一种则是根据网络层首部字段肯定的, 分别被称做链路层网络交换机, 路由器。 在这里提到的都是路由器。

对于一个路由器而言,可能有多个出链路接口,以便将目的地不一样的数据报发送到不一样的路由器中去。而转发时,使用的时目的地址的前缀进行匹配。假定以 111.222.111.开始的目的地址须要被发送到1号接口, 111.222.112.开始的须要被发送到2号接口,路由器所须要的就是根据前缀去进行匹配,完成端口的选择转发。

可是会存在这样一种可能性,多个转发项均可以匹配成功,如对于 IP地址 111.222.111.111而言, 既能够匹配111.222.. 也能够匹配111.222.111.*,当有多个匹配项时,路由器采起的是最长匹配前缀原则,即与转发表中最长的匹配项进行匹配。 合适的就转发。

而这种规则,也并非没有原因的。

每一个人都都有属于本身的IP地址,若是分配混乱的话寻址就是一件很不方便的事情,这样每台路由器必须知道对方的精确地址才能进行导航。 是按照必定的规则进行分组的, 将整个地址空间划分为一个个子网,经过子网层层链接,将整个网络家庭关联起来:

A.B.C.D/n, 表示32位IP地址的前n位与A.B.C.D的前n位相同。好比192.168.1.0/24,全部前24位与192.168.1.0相同的都是这个网段的IP,因为IP地址8位一分组,24位就是前三段,也就是192.168.1.x。符合规范的这段连续的IP段就叫作一个子网。这种子网的表示方法叫作CIDR。

对于咱们来讲经过192.168.1.0/24的方式来理解比较方便,可是对于计算机而言,有一种更快的方式来 判断 当前IP是否属于当前分组。 则是将32位地址与某个特殊值 进行与 运算, 若是运算结果 与 192.168.1.0/24 和特殊值进行与运算的结果一致, 则表示属于当前子网。

对于192.168.1.0/24 而言, 这个特殊值就是 后八位均为0的数值, 即 255.255.255.0与192.168.1.109进行与运算结果与 192.168.1.0结果一致, 这个255.255.255.0就被称做是子网掩码。

正是在子网中,层层递进,最终才能将数据送到咱们的目的地。

路由器工做原理

路由器由这样几个部分构成:

  • 输入端口:这部分负责输入链路与路由器之间的物理链路,同时也要负责与远端输入链路的交互功能, 同时还须要在这里完成分组查找, 即经过输入信息,查询究竟应该发送到哪个输出端口,这里的端口指的是物理端口。 而另外必需要作的事情是, 检查分组版本号, 检验和, 寿命, 同时更新后两个属性。 更新用于网络管理的计数器。

  • 交换结构:将路由器的输入端口, 输出端口相链接。 完成数据的转发工做。

  • 输出端口: 主要有存储, 发送。 存储从交换结构转发来的分组,按顺序发送到链路层。

  • 路由选择处理器:执行路由选择协议, 帮助输入端口查询到应该交由哪个输出端口处理。同时也须要维护路由表,以及网络管理功能。

在这里并不穷究细节到底是怎样的, 仅在功能上来讲, 输入端口, 交换结构, 输出端口三者之间, 有从输入链路流入输入端口的数据Rin, 数据通过交换结构进入输出端口Rc, 经过输出端口到达输出链路Ro,三者之间的处理速度须要有一个均衡, 当Rin的速度过快, Rc或Ro的速度过慢,都会引发拥塞,数据没法被及时且恰当的处理,都会在持续时间内不断累积,最终使得 数据超出缓存, 致使被丢弃。 丢包产生的源头也正是在这里。

地址分配

已经大体知道数据到底是以怎样的方式在网络中进行流通的。那么一台主机究竟如何获取它自身的IP地址?进而完成数据发送的第一步。

先来看一个组织究竟如何获取到属于它的IP地址,它会首先从它的上层ISP中已经拥有的大块IP地址中获取到其中的一部分IP地址。

对于一个组织而言, 如上层ISP已经被划分了一个地址范围 111.111.16.0/20, 它可能会将本身的IP地址范围进行八等份, 它的可支配范围只在后12位,可支配范围就在 111.111.16.0 ~ 111.111.30.255之间,由于此时可支配的最大IP是 0110 1111 0110 1111 0001 1111 1111 1111。 经过这种方式, 这个组织就可以拿到该属于本身的IP地址。

层层向上,最顶级的ISP依然要获取到属于本身的IP地址, 能够由 因特网名字和编号分配机构进行直接分配。

DHCP

而当组织获取到自身的IP地址范围以后,咱们固然能够经过手动的方式为每一台主机分配相应的IP地址,也就不得不在有新的主机离开加入的时候更改其IP地址。但幸运的是, 咱们有更简单的方式分配IP地址。

动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工做,主要有两个用途:用于内部网或网络服务供应商自动分配IP地址;给用户用于内部网管理员做为对全部计算机做中央管理的手段。

DHCP分配IP的方式有这样几种:

  • 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就能够永久性的使用该地址。

  • 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具备时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址能够被其余主机使用。

  • 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

在家庭网络日常使用路由器的时候, 正是经过动态分配的方式,

三种地址分配方式中,只有动态分配能够重复使用客户端再也不须要的地址。

特殊的IP

在下一步以前,有这样两个特殊的IP地址。

255.255.255.255 广播地址,即目的IP是这个地址的消息会被全部主机接收到,而其传播范围很是有限,到了广播域的边界(网关)会自动终结。 至于网关是什么,稍后再说。

0.0.0.0 表示的就是未知地址, 当主机刚刚开机,尚未加入网络时,所用的就是这个地址。

DHCP地址分配

DHCP为主机分配地址经过如下几个步骤:

  • DHCP服务器发现(DHCP discover):当主机须要加入一个网络时首先经过UDP的方式在端口67发送DHCP发现报文, 经过广播的方式发送出去, 此时源IP为0.0.0.0 目的Ip为 255.255.255.255, 链路层将该数据报广播到全部与该子网相链接的子网。

  • DHCP服务器提供(DHCP Offer): 在响应时,依然采起广播的方式。 但在这里又有所争议,我的理解偏向于,当客户请求时,已经指定了究竟应该选择广播仍是单播的方式。 因为有这样一种状况存在, 当客户请求时已经携带了本身须要的IP地址,DHCP服务器发现这个IP地址在本身的链接池内,且没有被占用,就会将IP分配给当前主机。 而当响应时, 主要根据Chaddr:客户端的mac地址 进行识别。 DHCP的详细数据格式就再也不说明。 而若是有多个DHCP服务器进行响应, 能够择优选取。

  • DHCP请求(DHCP Request):客户端从一个或多个DHCP服务器中选择一个,并向所选择的服务器提供 DHCP请求报文,回显配置参数。

  • DHCP ACK:DHCP服务器向客户发送ACK,对客户端的请求进行响应, 证明其所请求的参数。

NAT

如今咱们经过种种方式拿到了本身想要的IP地址,如今该回头看以前提到的问题了, 全世界只有那么多的IP地址,每人一个根本不够分配的。

同时咱们用IpConfig命令会意识到, IP地址老是 192.168.0.xxx, 不管咱们在哪一个办公室办公大都如此。

是的,答案是局域网。

经过将一部分主机限制在局域网内, 对外界而言, 这一批主机具备统一的IP, 这并不稀奇, 咱们将数据发送到统一的路由器中, 由它向外发送。

路由器不难识别数据到底是谁发送出去的, 可是问题来了, 数台主机统一发送数据, 不一样的服务器也会进行响应, 那么究竟该怎样识别响应回来的数据到底是发送给谁的?

答案是端口。咱们知道, 不管是UDP, 仍是TCP都须要肯定发送方与接收双方的端口是什么, 当局域网内的数据发送到路由器时, 此时保存一个映射表。即:

192.168.0.100 6666 -> 111.111.111.111 8888

192.168.0.101 7777 -> 111.111.111.111 7777

正是经过这样的方式, 完成了相关的转换过程。 而身处于局域网中的IP地址 是经过: 路由器经过ISP DHCP获取其地址, 同时路由器自身也拥有DHCP用于向内部分发地址。

而上面的映射表则被称为: NAT转换表。

咱们会注意到的地方是, 这是将IP层面所该处理的 问题, 转嫁到了应用层的相关端口去进行处理, 虽然以为不合理, 但NAT已是目前而言不可或缺的版块。

内网穿透简述

既然理解的上面所说的核心部分, 也就不难理解另外一个概念, 内网穿透。 而这里的原理可能并不许确,大都是我的理解。等之后学会了 wireshark相关再来看一下这个问题。

当咱们使用内网穿透工具时, 大都会精确到某一个端口, 告知对方, 咱们本身的端口是什么, 须要访问的端口是什么, 由局域网内部的本机发起请求,经过这种方式就在咱们与公网之间的IP + 端口创建起了有效连接,当有外界对 公网的IP:端口发起请求时, 则会经过他间接地与 自身创建起相应连接。

因特网控制报文协议

因特网的网络层具备三个主要组件,一是IP协议,二是路由选择协议, 三是 因特网控制报文协议(ICMP)。

ICMP是在主机与路由器沟通彼此的网络信息时使用,而其最经典的用途,是用在差错报告。

ICMP一般被认为是IP的一部分,但从体系上来讲是它是位于IP之上的,由于ICMP的报文是承载在IP的分组里面的, 做为数据的一部分而呈现的。

所以对于网络层而言,区别数据到底是否是ICMP报文的方式是经过, IP数据报的协议类型字段,一如区别 TCP与UDP同样。 当主机收到指明协议类型为ICMP的报文时, 会将数据分解出来给ICMP处理, 一如 分解出来 TCP 的数据部分 给TCP处理同样。

ICMP报文有一个类型字段 和 编码字段, 同时包含 引发该ICMP首次生成的IP数据报首部 以及前8字节, 以肯定到底是由于什么引发的。

ICMP数据类型

ICMP类型    编码    描述

0           0       显示回答(对ping的回答)
3           0       目的网络不可达
3           1       目的主机不可达
3           2       目的协议不可达
3           3       目的端口不可达
3           6       目的网络未知
3           7       目的主机未知
4           0       源抑制
8           0       回显请求
9           0       路由器通告
10          0       路由器发现
11          0       TTL过时
12          0       IP首部损坏

而ping 程序就是发送一个 8 类型 编码0的数据到目的主机, 目的主机返回 类型0 编码 0的数据作以响应。

而能够看路由跟踪的小功能也是借用了相关的东西来实现的, 在 windows是:

tracert ip/域名

//响应结果

C:\Users\admin>tracert www.baidu.com

经过最多 30 个跃点跟踪
到 www.a.shifen.com [183.232.231.172] 的路由:

1    10 ms     7 ms     8 ms  10.61.4.1
2     9 ms     5 ms    12 ms  10.61.0.1
3    15 ms    11 ms    18 ms  111.21.43.117
4     7 ms     8 ms     6 ms  120.192.202.253
5     7 ms     *        *     120.192.202.5
6    15 ms     9 ms     8 ms  221.183.47.149
7    35 ms    30 ms    30 ms  221.183.40.221
8     *        *        *     请求超时。
9    34 ms    34 ms    33 ms  120.241.49.206
10     *        *        *     请求超时。
11    40 ms    39 ms    34 ms  183.232.231.172

跟踪完成。

源主机会向目的主机发送一系列端口不可达的数据报, 而初始的TTL设为 1 2 3 4 ...

每当到达一台主机, 因为其TTL过时, 则会由相应的路由器向源主机发送 ICMP协议, 类型为11, 编码为0, 并会附带上本身的一部分信息。

而当到达真正的主机以后, 因为端口不可达, 则会响应类型, 编码均为3的ICMP报文, 此时, 中止发送数据报。

至于更多的版块, IPV6 等其余暂时就忽略跳过。

路由选择

虽然路由选择才是网络协议的难点所在,也是其最精彩的部分之一, 但在这里, 我只打算简要描述, 而后跳过。毕竟了解是关键的, 可是掌握路由算法对我而言,意义却并非显得有那么重要。

但仍然有几点关键的地方须要作出一点了解, 在整个网络中的路由器茫茫多, 有这样几种选择能够完善, 定义 路由器转发表。

静态的方式: 经过管理员手动配置路由器转发表,依然能够完成相应的功能。

动态方式又有这样两种:

一是在路由器中保存有整个网络中每个节点的相关信息, 以及从当前到对应节点的开销,经过算法为每一台路由器都计算出到每个节点最优路线。

二是从当前路由节点出发,计算出到周围相关节点的最优路线, 并将本身的相关信息, 通知给其余相连节点。层层递进,每当有最优路线被更新时,就会向周围发送相关信息, 你们不断更新迭代,直到趋于稳定。

第二种描述比较抽象, 举例来讲, 是这样的一个过程:

对于路由器A,知道本身能够到达路由器 A1 A2 A3这几个网络节点, 而且有相关开销, 就会有以下信息。

g(x, y) = n; 其中x,y各表明一个节点, 而n是从 x 到 y的开销。 须要注意的一点是 x -> y, y -> x二者之间并不等价。
有
g(A,A1) = 2; g(A, A2) = 3; g(A, A3) = 2;

对于节点A会将相关信息发送给相邻节点如 B, A1, A2, A3

假设B并不存在其余路径能够到 A1, A2, A3 则会更新本身的转发表为

g(B, A) = 1; g(B, A1) = 2 + 1; g(B, A2) = 3 + 1; g(B, A3) = 2 + 1;

再度将信息发送给相邻节点, 经过这种方式就可以不断更新完善, 假设未来在 B与A2之间创建了直连, 会更新信息为 g(B, A2) = 1;

当A收到对应信息时, 它会发现经过B到达A2会比当前路线更快, 则更新本身的 g(A, A2) = 2;

须要注意到这里的开销并不必定非得是指跳过, 通过多少个路由器, 可能网络拥塞, 链路速率等等都在考虑范围内。

在其中涉及到路由选择算法的坑, 暂时忽略无论。 可是有关于路由转发表所会必然带来的弊端就不得不提:

当规模逐渐增大, 不管经过哪一种方式, 为数亿台路由器更新并维护转发表无疑是一件并不那么现实的事情。

因为全局采起了相同的算法, 局部地区想要自治处理,个性化处理,也就是一件比较难的事情, 好比对某一部分路径封锁,不容许从这里经过。 因为采起了全局方式, 并不支持自由配置。

解决这个问题的方式,是将路由器的架构加入层次化处理。

路由自治系统(Autonomous System AS)

将一批路由器组成一个集合, 叫作AS, 在内外能够采起不一样的路由选择算法,在一个AS内部, 相互拥有彼此的信息, 能够实现转发表配置, 而在两个AS之间也须要进行相互的沟通。 因此在AS内就须要一台或几台路由器来作这个工做, 这些路由器就被称为网关路由器。

一个AS所在的范围就是一个子网的范围, 网络中的转发表也正是用 CIDR的方式配置的,也即:

A.B.C.D/n : xxx;

一样的, 跳过了AS内的 RIP, OSPF 以及路由器间的 BGP4 路由选择协议。

问题是,为何须要在AS内与AS间采起两套不一样的路由选择协议呢?

  • 策略 在AS之间策略问题起到了主导做用,一个给定的AS产生的流量不能穿过另外一个AS是一件很重要的事情,而在AS内部, 是被统一管理的, 传输性能反却是最大的关注点。

  • 在以前所提到的规模问题, 当规模太大时, 可以顺利切分, 而且依然运做良好。

  • 性能, AS间路由选择是面向策略的, 所以性能的关注度反却是最低的。而这也是 AS内路由选择协议的优点所在。

广播路由选择

参考:【计算机网络】广播和多播

主机对信道传过来的帧作这样的处理:

  1. 首先,网卡查看由信道传送过来的帧,肯定是否接收该帧,若接收后就将它传往设备驱动程序。一般网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。另外,多数接口均被设为混杂模式,这种模式能接收每一个帧的一个复制。

    目前,大多数的网卡通过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中以最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制表示为01:00:00:00:00:00(以太网广播地址 ff:ff:ff:ff:ff:ff可看做是以太网多播地址的特例)。

  2. 若是网卡收到一个帧,这个帧将被传送给设备驱动程序(若是帧检验和错误,网卡就丢弃该帧)。设备驱动程序将进行另外的帧过滤。首先,帧类型中必须制定要用的协议(IP、ARP等等)。其次,进行多播过滤来检测该主机是否属于多播地址说明的多播组)。

  3. 设备驱动程序随后将该数据帧传送给下一层,好比,当帧类型指定为IP数据报时,就传往IP层。IP根据IP地址中的源地址和目的地址进行更多的过滤。若是正常,就将数据报传送给下一层(如TCP或UDP)。

  4. 每次UDP收到由IP传来的数据报,就根据目的端口号,还有源端口号进行数据报过滤。若是当前没有进程使用该目的端口号,就丢弃该数据报并产生一个ICMP不可达报文(TCP根据它的端口号作类似的过滤).若是UDP数据报存在检验和错误,将被丢弃。

使用广播的问题在于它增长了对广播数据不感兴趣主机的处理负荷。拿一个使用UDP广播报文应用做为例子。若是网内有50个主机,但仅仅有20个参与该应用,每次这20个主机中的一个发送UDP广播数据时,其他30个主机不得不处理这些广播数据报。一直到UDP层,收到的UDP广播数据报才会被丢弃。这30个主机丢弃UDP广播数据报是由于这些主机没有使用这个目的端口。

多播的出现减小了对应用不感兴趣主机的处理负荷。使用多播,主机可加入一个或多个多播组。这样,网卡将获悉该主机属于哪一个多播组,而后仅接收主机躲在多播组的多播帧。

广播和多播路由协议

广播类型

广播有四种类型:受限的广播,指向网络的广播,指向子网的广播,指向全部子网的广播。

  • 受限的广播

    受限的广播地址是255.255.255.255。该地址用于主机配置过程当中IP数据报的目的地址,此时,主机可能还不知道它所在的网络的网络掩码,甚至连它的IP地址也不知道。

    在任何状况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据仅仅出如今本地网络中。这就是为何称为受限的网络地址。这种广播类型接收对象为局域网中包括发送主机在内的全部主机

  • 指向网络的广播

    指向网络的广播地址是主机号全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。

    一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。

  • 指向子网的广播

    指向子网的广播地址为主机号全1且有特定子网号的地址。做为子网直接广播地址的IP地址须要了解子网的掩码。例如,若是路由器接到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但若是该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。

  • 指向全部子网的广播

    指向全部子网的广播也须要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向全部子网的广播地址的子网号及主机号为全1.例如,若是目的子网掩码为255.255.255.0.那么IP地址128.1.255.255是一个指向全部子网的广播地址。然而,若是网络没有划分子网,这就是一个指向网络的广播。

而在上面的介绍中有几个名字没有接触到,在这里补充下:

参考:IP地址、子网掩码、网络号、主机号、网络地址、主机地址

简单来讲, 咱们已经知道了子网掩码是如何根据子网的 前缀生成的, 而这个所谓前缀, 术语上来讲就被称做是网络号, 也即 111.111.111.0/24 中的前24位为1后8位为0的二进制数。

固然网络号也能够由 IP地址和子网掩码作与运算生成, 毕竟子网掩码最初的目的也正是这样。

当两个网络具备相同的网络号就被称为 在同一个子网中。 而在32位地址中, 前8位相同叫作A类网, 前十六位相同就叫B类网, 前24位相同被称做C类网。

而主机地址就是 111.111.111.0/24 的后八位可变地址。 那么广播地址呢?

就是将网络地址中的主机地址 均置为1, 便可。

这样就可以多广播类型有个较为清晰的了解了。

广播路由协议

咱们已经决定要发广播了, 该怎么发送呢?

最简单的方式就是N次单播, 就是将源数据复制n份, 向N个地址发送, 固然, 问题很明显,同一份数据要在同一个节点通过许屡次, 致使了没必要要的开销。

固然, 咱们有一种更优的处理策略, 则是在每一个路由节点对数据进行复制, 然后发送出去。但N次单播的前提条件是, 咱们将每次发送都视做一次单播, 须要知道源IP及每次单播的目的IP,可是这些信息又怎样存储呢?须要相关的协议进行配置,这使得咱们的协议变得更复杂。

另外就是 在路由选择协议中,单播路由的链路状态也正是由广播所发送的, 所以采起这种N次单播的方式可行性并不高。

  • 无控制洪泛

    这种方式是须要每一个节点向其周围节点发送信息副本, 这样网络中的全部主机都可以收到消息。可是带来的缺点是, 若是在网络拓扑中存在环路, 则会使得数据无休止的发送下去。 同时一个节点至少会收到N次数据,N等于与其直接相连的节点数。

  • 受控洪泛

    有几种方式, 一是序号控制洪泛,对发出的每个副本都留存有其序号,当收到消息时,与当前收到转发的序号列表进行比对, 已发送则丢弃便可。

    第二种方式叫反向路径转发

    思路至关简单, 当一个节点收到数据时, 仅当发送数据的源节点 在 从当前节点到源节点的最短单播路径上时,才进行发送。 而在收到分组以后, 会向全部附近节点 除了 发送节点给他的那个节点 发送数据。这么读起来可能比较拗口 难以理解。 举例说明:

    数据由A节点发送出来,发往B节点, C节点, 此时A节点在 B节点到A节点的最短单播路径内, 所以B接收来自A节点的数据, 同时会向C发送数据, 当C收到来自B的数据, 由于数据源为A, C发现它本身到A的最短单播路径并不须要通过B, 所以拒绝接收来自B的数据。

    其余节点也是同理, 而如何知道最短单播路径呢? 就是在以前提到过的

    在节点 A2 -> A1 -> A 在A的转发表中有, 到达A2的最短单播路径 所须要通过的下一个节点是 A1 而不须要关心更多。

    第三种方式为生成树方式:

    上述两种方式依然有不可避免的问题, 就是依然须要重复发送数据, 当数据到达以后,再由接收节点进行判断是否留存, 转发。 但依然避免不了须要解析到IP首部, 接收数据的问题。

    在发送以前子网中的全部节点都已经根据算法计算出来了须要在当前生成树内, 本身的下一个子节点是谁, 生成树的特色是到达每一个点都是连同的, 且不包含环, 这样就可使得数据不会被无效发送。

多播

而多播有所不一样, 它带来的问题会更多, 但也有这样几个优点, 咱们不难发现有这样两个问题,存在于广播中, 一是全部的子节点都会无条件的收到相应的消息, 当广播通信持续多久,就要被这样一直骚扰下去。 另外一点是 广播都局限在一个子网内部发送, 固然, 广播必然不可以无限制的发送, 不然在整个互联网世界都会收到对应的广播消息, 是一件多可怕的事情。 可是对于同时须要多个接收点, 流行于今天的直播, 视频会议, 等等其余,须要被多人共享的功能 又该怎样实现呢?

可是广播中咱们并不须要存储目的地址, 而在多播中, 就须要存储这部分数据了。在因特网体系中,多播数据地址用间接地址来编址。 也就是用一个标识符来标识一组接收方,且该组使用这个单一标识符。

而与多播相关的地址为 D类地址, D类地址比较特别, 第一个字节以“1110”开始, 它的范围从224.0.0.0到239.255.255.255,或,等同的,在224.0.0.0/4。在IPv6,多播地址都有前缀ff00::/8。可是注意,224.0.0.0被保留,不能赋给任何多播组。 与多播相关的协议是IGMP。

多播是第一个字节的最低位为1的全部地址,例如01-12-0f-00-00-02。广播地址是全1的32位地址,也属于多播地址。可是广播又是多播中的特例。

相关文章
相关标签/搜索