网络层
Wednesday, November 16, 2022
本文共11010字
22分钟阅读时长
⚠️本文是作者P3troL1er原创,首发于https://peterliuzhi.top/principle/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%BD%91%E7%BB%9C%E5%B1%82/。商业转载请联系作者获得授权,非商业转载请注明出处!
It isn’t where you come from, it’s where you’re going that counts.
— Ella Fitzgerald
链路层干的事情是局部的,网络层干的事情是全局的
概述
网络层从发送端到接收端传输数据段(segment)
发送端 |
接收端 |
将传输层给的数据段包装成数据报 |
解包数据包给传输层 |
每个端、主机、路由都要部署网络层,但是不是所有的网络设备都需要部署网络层(如交换机不需要)
路由检查 IP 地址,并选择路径分组转发
网络层提供的服务
- 分组:把数据分组打包并在终点解包
- 路由:数据要经过路由的中转才能到达目的地
- 转发:分组到达路由器的一个端口时,路由器所采取的行为。路由器的决策依据转发表(路由表)
路由和转发
数据平面 |
控制平面 |
本地、基于单个路由器的行为 |
Network-wide 的行为 |
主要行为:转发 |
主要行为:路由 |
网络层提供的两种分组交换的方法
数据报方法:无连接服务(现在使用的)
网络层只负责将数据报从源端发送到目的端,向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务,不保证质量,智能的事情摆在主机上做。
使用无连接服务时,每一个正在传送的分组都是一个独立的实体,同属于一个报文的诸分组无联系,每一个分组的路由都基于它的头部信息(源地址和目的地址)
优点:
- 网络的造价大大降低
- 运行方式灵活
- 能够适应多种应用
(便宜灵活用途广)
虚电路方法:面向连接服务
借鉴于电信网的成功经验,让网络负责可靠交付,通信之前先建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
- 请注意,电路交换的电话通信是先建立了一条真正的连接
每个分组都基于分组的标签(虚电路标识符)被转发(这让源地址和目的地址好像变得无用)
两种方法相比较
路由器架构
网络层使用的路由器称为网关
总体架构
输入
- 若交换结构转发分组的速度比所有输入端口分组到达的速度和要慢,则会在输入端口的缓存中发生排队
- 若缓存溢出,则会产生排队延时或分组丢失
- HOL 阻塞(Head-of-the-line):排在队列前面的数据报可能会阻碍队列中其他的数据报的转发
交换
负责将分组从输入端口的缓存发送到合适的输出端口缓存
交换速率:从所有输入端口到所有输出端口转发分组的速率
纵横式交换机:每一个交叉点都使用微交换机
榕树交换机:多级交换机,每一级都有一个微开关
输出
产生的问题:
- 若发出分组的速度比交换结构的速度慢,则分组会在输出端口的缓存中排队。
- 若缓存大小不足,则分组可能因为发生拥塞而丢失
需要使用调度算法来选择传输哪些排队的分组
调度策略
基于优先级
高优先级的排队分组最先发送
分类的标准可能是特殊标记、或其他首部信息。例如 IP 源地址、IP 目的地址、端口号等
其他还有轮询调度策略等
IP 协议 (网际协议)
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
利用 IP 协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用 IP 协议的虚拟互连网络可简称为 IP 网(IP 网是虚拟的,但平常不必每次都强调“虚拟”二字)。
IP 地址
IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符(一般用形如 X.X.X.X 的方式表示,每个 X 对应 8 位的二进制数)
IP地址和MAC地址
- 硬件地址(或物理地址)是数据链路层和物理层使用的地址。
- IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或路由器之间的通信
在链路层是看不到IP地址的,只能看到帧,然后把取出来的IP数据报抛给网络层去分析,让网络层不必关心链路上传播的细节。
为什么不直接用硬件地址进行通信?
- (过去)难以统一标准:全世界存在着各式各样的网络,它们使用不同的硬件地址
- 方便快捷:连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便
编址方法
分类的 IP 地址 -> 子网的划分(subnetting)-> 构成超网(CIDR)(现在使用)
分类 IP 地址
IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成:
- 网络号 net-id:它标志主机(或路由器)所连接到的网络
- 主机号 host-id:它标志该主机(或路由器)
网络号在整个互联网内是唯一的,主机号在当前网络下又是唯一的,因此 IP 地址就唯一了
由于近年来已经广泛使用无分类 IP 地址进行路由选择,A 类、B 类和 C 类地址的区分已成为历史
点分十进制记法
IP 地址有 32 位,我们把每八位分为一个组,每一个组转化为十进制数,每个数之间用点号隔开,就成了 IP 地址
常见的三类 IP 地址(A、B、C)
A的第一位已经固定为0,B的一二位为10,C的前三位为110
由上图可知,当IP地址的第一位在1 ~ 126之间为A类地址,128 ~ 191之间为B类,192 ~ 223为C类地址
其中127开头的为特殊地址
还有一些特殊的IP地址:
分类IP地址的特点
- IP 地址是一种分等级的地址结构
- IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配(分封制)——方便管理
- 路由器仅根据目的主机所连接的网络号来转发分组 ——减少占用空间
- 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
- 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址
- 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id
- 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的
分类IP的缺点
- IP 地址空间的利用率有时很低(粒度太粗)
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变差
- 两级的 IP 地址不够灵活
划分子网
将原本的两级IP地址的分级制度扩展为三级的IP地址
原本:网络号+主机号
-> 划分子网:网络号+子网号+主机号
基本思路:
- 划分私有化:划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
- 原本位数不变:从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位
- 发送方法不变:凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机。
虽然根据已成为互联网标准协议的 RFC 950 文档,子网号不能为全 1 或全 0,但随着无分类域间路由选择 CIDR 的广泛使用,现在全 1 和全 0 的子网号也可以使用了,但一定要谨慎使用,确认你的路由器所用的路由选择软件是否支持全 0 或全 1 的子网号这种较新的用法
划分子网的优缺点
优点:
- 减少了 IP 地址的浪费
- 使网络的组织更加灵活
- 更便于维护和管理
缺点:
减少了能够连接在网络上的主机总数
子网掩码——找出IP地址中的子网号
单单凭借IP地址是无法判断该地址是否进行了子网划分的,因此需要一个掩码(mask)来把无用的信息“档掉”,留下有用的子网号
把IP地址与掩码进行逐位的与运算,就可以把主机号屏蔽,留下网络号+子网号
A、B、C类IP地址的默认子网掩码:
因此,各地方就可以使用不同的子网掩码,从而将子网号从主机号中区分出来
因此,对于路由器:
- 和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器
- 路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码
- 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码
固定长度子网和变长子网
有固定长度子网和变长子网两种子网划分方法。
在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的
超网(无分类编址)CIDR – Classless Inter-Domain Routing
- B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕!
- 互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
- 整个 IPv4 的地址空间最终将全部耗尽
产生的主要原因就是IP不够了
CIDR消除了A/B/C类的划分,因此可以更加有效地分配IPv4的地址空间:
- 网络号和子网号 -> 各种长度的“网络前缀”(network-prefix)
- 三级地址 -> 两级地址
CIDR 使用 “斜线记法”(slash notation),又称为 CIDR 记法:
在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数 -> 代替了子网掩码的作用
/20的意思是前面有20个1的掩码,因此虽然CIDR不使用子网掩码了,但仍然使用掩码这一概念
例如: 220.78.168.0/24
CIDR地址块
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”
如,128.14.32.0/20 表示的地址块共有 $2^{12}$ 个地址,简称为“/20 地址块”,最小地址:128.14.32.0,最大地址:128.14.47.255
ps.全 0 和全 1 的主机号地址一般不使用
路由聚合 (route aggregation)/构成超网 (supernetting)
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合
由于相同的IP地址由于网络前缀的不同可以表达不同的意思,而网络前缀的位数又极为自由,所以极大地扩展了IP地址的数量
优点:
- 因为网络前缀的位数是随意定的,所以路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由
- 有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能
CIDR的简写
- 10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的 0 省略
- 网络前缀的后面加一个星号 * 的表示方法,如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值
CIDR的特点
- 前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址,这些 C 类地址合起来就构成了超网。
- CIDR 地址块中的地址数一定是 2 的整数次幂。
- 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
地址聚合
这样子路由器就只需要记住206.0.68.0/22
就🆗了,剩下大学各个系的IP地址怎么样由大学自己确定,这样路由器的负担就减少了。
这里其实是用了一种非常优雅的方式表达划分子网的概念
IP数据报
首部
(每一行是4字节,固定部分一共五行,一共20字节)
- 版本号:ipv4、ipv6等版本号
- 首部长度:最短为0101,单位为四个字节。也就是说首部的长度最低为5*4个字节;这同时也说明了首部的长度最低为1111也就是15*4个字节
- 区分服务:用于区分向不同数据报提供的服务,一般来说没有用
- 总长度:一共16位,总长度=首部+数据,单位为字节。所以总长度最大可以到$2^{16} – 1 = 65535$ 字节。但这只是理论长度,由于以太网链路层帧长度的限制,IP数据报的总长度不得超过最大传送单元MTU也就是1500个字节
- 标识 identification:占16位,IP软件一直在记录产生了多少个IP数据报。当IP数据报因为过长而不得不拆分时,软件就将计数赋予这个数据报的所有分组的标识位
- 标志/旗标 flag:一共三位,但目前只有两位有意义
- 最低位为MF
- MF=1->后面还有分片
- MF=0->这是最后一个分片
- 中间位为DF
- 片偏移:占13位,表示改分片在原本的数据报中的偏移量,也就是其相对位置。单位为8个字节,也就是说每一个分片长度必然为8个字节的整数倍
-
- 分片主要是为了满足链路层的限制
- 但是分片造成数据量和任务量的增加
- 生存空间 TTL:一共八位
- 一开始表示数据报在网络中的寿命,当数据报经过一个路由器,就减去在这个路由器消耗的时间(如果时间小于1s就当作1s),防止无效的数据报在网络中兜圈子
- 后来技术进步,数据报在路由器花费的时间往往远小于1s,TTL意义变为跳数限制的意思,每经过一个路由器就减1
- 协议:8位,表示网络层应该上交给什么协议
- 首部检验和:16位,只检验数据报的首部,但不包括数据部分,以节省时间
- 不采用CRC,采用另一种简单计算方法:
- 发送方:
- 把首部分成很多个16位的序列
- 把检验和的那16位置零
- 把所有序列按反码相加,结果写入检验和字段
- 再对结果取反
- 接收方:
- 把首部分成很多个16位的序列
- 把所有序列按反码相加
- 如果首部无误,则结果必为0
- 源地址:32位
- 目的地址:32位
可变部分
IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施
增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销
因此,可变部分很少被使用,IPv6甚至直接将数据报设为固定长的
NAT-Network Address Translation 网络地址转换
使用NAT的原因:
- IP地址紧缺
- 减少路由表的条目数,减轻路由器的负担
- 透明性:
- 更改IP不需要广而告之
- 可以更改ISP而不需要更改本地设备的IP地址
- 安全性:本地设备不能直接被外界访问
本地地址和全球地址
- 本地地址:仅在机构内部使用的 IP 地址,可以由本机构自行分配
- 全球地址:全球唯一的 IP 地址,必须向互联网的管理机构申请
但是如果本地地址和全球地址中某个地址重合,就会出现二义性问题
专用于本地地址的地址块
- 这种网络又称为专用互联网、本地互联网、专用网
- 这种网络的地址又称为可重用地址
那本地网络内的主机如何与互联网上的其他主机进行通信(在不需要加密的情况下)呢?
答案就是NAT转换
NAT转换的具体内容
NAT实际上是本地网络和全球网络中间的媒介
- 需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球IP地址。
- 所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
因此,全球地址相当于一个房子的门,而房子里的各房间的门就是本地地址
NAT:纯粹的地址转换,现实不使用
NAPT:加上端口一起转换
如果没有NAT,主机A可以向主机B发送数据报,但是主机B发不回来,因为目的地址是本地地址
纯NAT的计算方法
直接将数据报中的源IP地址(主机A的本地地址)替换为NAT中的全球地址,把转换结果记录到NAT地址转换表中
当接收时,就根据NAT地址转换表将数据报转发给主机A
纯NAT的局限
- 如果具有的全球IP地址数量小于主机数,本地地址要轮流使用全球地址
- 无法充当服务器使用:NAT地址转换表不确定,主机A又没有全球地址,主机B无法确定地访问主机A,导致单向性
NAPT的计算方法
只需要一个全球IP地址,不同主机的IP通过NAT路由器的端口号来区分
本地地址+端口号 -> 全球地址+新端口号
因此,NAPT是用端口号来区分不同的主机,而端口号又占用16位,可以支持六万多台本地主机
NAPT的缺点
NAT是“有争议性”的、“临时”的解决手段
- 路由器应至多只处理第三层;端口号是第四层的
- 地址短缺应由IPv6彻底解决,而不应该让NAT作临时解决
- 违背了端对端原则(end-to-end argument),应该让端系统负责智能而不是网络负责智能
- NAT后的主机不能同时作为服务器向外提供服务
IPv6
IPv6 仍支持无连接的传送,但将协议数据单元 PDU 称为分组
到目前为止,IPv6 还只是草案标准阶段
IPv6的特点
- 更大的地址空间。IPv6 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。
- 灵活的首部格式。 IPv6 定义了许多可选的扩展首部。
- 改进的选项。 IPv6 允许数据报包含有选项的控制信息,其选项放在有效载荷中。
IPv6的首部
IPv6 首部改为 8 字节对齐,原来是4字节对齐,但首部长度是固定的
IPv6数据报由基本首部和有效载荷两部分组成,有效载荷中允许有零个或多个扩展首部 (extension header),再后面是数据部分
与IPv4首部的差别是:
- ❌首部长度(长度固定)
- ❌服务类型
- 总长度 -> 有效载荷长度
- ❌标识、标志和片偏移
- TTL -> 跳数限制字段
- 协议字段 -> 下一个首部字段
- ❌检验和字段
- ❌选项字段(使用扩展首部)
从而IPv6 首部的字段数减少到只有 8 个
IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理(把智能的事情交给端系统),经过的路由器都不处理这些扩展首部
IPv6的地址
目的地址可以是:
- 单播
- 多播
- 任播(新增,任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个)
IPv6 将实现 IPv6 的主机和路由器均称为结点,一个结点就可能有多个与链路相连的接口,IPv6 地址是分配给结点上面的接口的。
- 一个接口可以有多个单播地址。
- 其中的任何一个地址都可以当作到达该结点的目的地址。即一个结点接口的单播地址可用来唯一地标志该结点。
冒号十六进制记法
每个 16 位的值用十六进制值表示,各值之间用冒号分隔。例如:68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
简写
- 在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0
- 每个地址允许且仅允许一次零压缩,即一连串连续的零可以为一对冒号所取代,如:
FF05:0:0:0:0:0:0:B3 -> FF05::B3
特殊记法
冒号十六进制记法可结合使用点分十进制记法的后缀:
128.10.2.1 -> 0:0:0:0:0:0:128.10.2.1 -> ::128.10.2.1
CIDR 的斜线表示法仍然可用:
60 位的前缀 12AB00000000CD3
可记为:12AB:0000:0000:CD30:0000:0000:0000:0000/60 -> 12AB::CD30:0:0:0:0/60 或 12AB:0:0:CD30::/60
分类
- 未指明地址:这个地址只能为还没有配置到一个标准的 IP 地址的主机当作源地址使用
- 环回地址:127.0.0.1
- 多播地址:和IPv4一样
- 有些单位的网络使用 TCP/IP 协议,但并没有连接到互联网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和互联网上的其他主机通信。
- 全球单播地址:就是普通的全球通信IP
向IPv6过渡
有两种向 IPv6 过渡的策略,即使用双协议栈和使用隧道技术
双协议栈
双协议栈主机在和 IPv6 主机通信时采用 IPv6 地址,而和 IPv4 主机通信时则采用 IPv4地址(使用域名系统DNS查询)
当IPv6数据报转化为v4后再转回来时,有一部分首部无法恢复,只能空缺,这种信息的损失是使用首部转换方法所不可避免的
隧道技术
在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4数据报,现在整个的 IPv6 数据报变成了 IPv4 数据报的数据部分
要使双协议栈的主机知道 IPv4 数据报里面封装的数据是一个 IPv6 数据报,就必须把IPv4 首部的协议字段的值设置为 41
路由协议/算法
路由协议的目的:决定从起点(source address, sending host)到终点(destination address, receiving host)的,经过若干个路由器的,最佳路径
理想的路由算法
- 正确的和完整的
- 简单
- 应能适应通信量和网络拓扑的变化(自适应性)
- 稳定性
- 公平
- 最佳
分层次的路由选择协议
使用原因
- 互联网的规模非常大
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上
因此, 可以把整个互联网划分为许多较小的自治系统(autonomous system, AS)
在目前的互联网中,一个大的 ISP 就是一个自治系统
- 自治系统 AS 是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量
- 一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略
两类路由选择协议
- 内部网关协议 IGP (Interior Gateway Protocol),如 RIP 和 OSPF 协议
- 外部网关协议 EGP (External Gateway Protocol),目前使用最多的外部网关协议是 BGP 的版本 4(BGP-4)
因为历史原因,网关也可用于表示路由器
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)
【内部网关协议】路由信息协议 RIP协议
- 最先得到广泛使用的
- 分布式的、基于距离向量的
- 要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录
- 距离可以理解为跳数,取得是最短跳数
- 从一个路由器到直接连接的网络的距离定义为 1。
- 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1
- RIP 允许一条路径最多只能包含 15 个路由器,也就是距离要小于等于15,“距离”的最大值为 16 时即相当于不可达
- 不能在两个网络之间同时使用多条路由
- RIP 选择一个具有最少路由器的路由,哪怕另一条路由器多的路由更快
RIP的特点
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
路由表的建立
- 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为 1)。它的路由表是空的。
- 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
RIP2协议报文格式
RIP协议的优缺点
优点:
缺点:
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
- “坏消息传播得慢”,使更新过程的收敛时间过长。
【内部网关协议】开放最短路径优先 OSPF (Open Shortest Path First)协议
- “开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
- “最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF采用分布式的链路状态协议 (link state protocol)
三个要点
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- “链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
链路状态数据库 (link-state database)
- 是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)
- 能较快地进行更新,使各个路由器能及时更新其路由表,因此更新过程收敛得快
OSPF的区域
OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。
- 每一个区域都有一个用点分十进制表示的 32 位的区域标识符
- 在一个区域内的路由器最好不超过 200 个
- 区域分为两种,主干区域0.0.0.0和其他下层区域
划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量
因此,在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况
OSPF的特点
- OSPF 不用 UDP 而是直接用 IP 数据报传送。
- OSPF 构成的数据报很短。这样做可减少路由信息的通信量
- OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载平衡。
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分和无分类编址 CIDR
- 每一个链路状态都带上一个 32 位的序号,序号越大状态就越新
- OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
- OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms
OSPF分组格式
五种类型:
- 类型1,问候 (Hello) 分组。
- 类型2,数据库描述 (Database Description) 分组。
- 类型3,链路状态请求 (Link State Request) 分组。
- 类型4,链路状态更新 (Link State Update) 分组,洪泛法对全网更新链路状态。
- 类型5,链路状态确认 (Link State Acknowledgment)分组。
指定的路由器
- 多点接入的局域网采用了指定的路由器 (designated router) 的方法,使广播的信息量大大减少。
- 指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息
与RIP的对比
【外部网关协议】BGP协议
BGP 是不同自治系统的路由器之间交换路由信息的协议
边界网关协议 BGP 力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由
BGP发言人
每一个自治系统的管理员要选择至少一个路由器作为该自治系统的 “ BGP 发言人” (BGP speaker)
一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器
BGP交换路由信息
一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。
- 使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。
- 使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer) 。
BGP发言人交换路径向量
BGP协议的特点
BGP协议的四种报文
BGP协议报文格式
两类基本路由算法
网络的图的抽象
链路成本
要找到从起点到终点的最小成本的路径,这就是路由算法需要解决的问题
路由算法的分类
根据路由算法是需要中心化的、全局的信息,还是去中心化的、局部的信息,可以分为两类:
- 链路状态算法(知道全局信息)
- 距离向量算法(只知道局部信息)
链路状态算法
距离向量算法
当链路成本发生变化时:
- “好消息传得快”:链路成本变小
- “坏消息传得慢”:链路成本变大、链路断了等等,可能会造成路由环路
为了避免路由环路,可以使用毒性逆转:
如果z -> y -> x,则z向y通告$𝐷_𝑧(𝑥)=∞$(即使z知道$𝐷_𝑧 (𝑥)$是某个数值)。这样可以防止y重新经过z到达x。
扫码阅读此文章
点击按钮复制分享信息
点击订阅