4-网络层(上)
网络层基础
在参考模型中网络层位于传输层之下,链路层之上。
网络层的功能主要是将源端产生的数据包/分组,送达至目的机
完成这项工作需要:
- 封装源数据
- 识别目的机
- 找到一条好的路径(路由)
可能遭遇的问题:
- 地址不够用
- 丢包
- 拥塞
网络层主要内容
被路由协议:IP协议
- IP地址:定位目的机
- IP分组:解决信息封装
- IPv6:新一代IP协议
路由选择协议:找到目的机和源机之间的最优路径
- 距离矢量路由选择协议(RIP)
- 链路状态路由选择协议(OSPF)
其他方面:
- ARP
- ICMP
- CIDR
- NAT
源和目的机之间的网络分为:
数据报网络:
提供无连接的服务
虚电路网络:
提供面向连接的服务
比较项目 | 数据报子网(无连接服务) | 虚电路子网(面向连接服务) |
---|---|---|
建立电路 | 不需要 | 要求 |
地址信息 | 每个分组含完整的SA和DA | 每个VC包含一个很短的VC号码 |
状态信息 | 路由器不保留任何连接状态信息 | 每个VC都要求路由器建立表项 |
路由 | 每个分组独立选择路由 | 每个分组沿建立VC时确定的路由 |
路由器失效影响 | 没有,只有系统崩溃时丢失分组 | 所有经过失效R的VC都终止 |
服务质量,拥塞控制 | 很难实现 | 总资源(带宽、缓存)足够的情况下,采用提前给每个VC分配资源的方法,很容易实现 |
IP地址
IP(Internet Protocol)
互联网协议,是TCP/IP协议栈的核心之一
IP任务:
提供一种尽力而为(best-effort),把数据从源端运输到目的机的方法,IP就像是胶水,将整个互联网络连接起来
IP为路由提供路由所需要的信息,所以IP也被称为被路由协议
包含两方面的内容,一方面包含IP地址,IP地址的作用就在于标识收发的数据机。另一方面是IP分组/数据报,这是信息封装的格式
IP地址
由32位二进制数表示,包含$2^{32}\approx43*10^8$即43亿个IP地址。缺点在于难于记忆。所以我们经常将IP地址的32位均等分为4组,中间用点分号隔开,每组八位用十进制表示,就形成了常见的IP地址格式
1 | 10000100100110010000110011000101 |
IP地址具有层次结构
各个地址之间可能具有一定的从属关系
这得益于IP地址天生就由两部分组成,IP地址中一部分表示网络部分,一部分表示主机部分,至于各部分占多少位,在不同类型的IP地址中有不同规定
A类地址
前一个字节标识网络部分,后三个字节都标识主机部分,
由于第一个字节的第一位固定用0标识,所以这个网络公有从(0000000-1111111)也就是0~127组网络,每个网络能容纳$2^{24}-2$台主机,具有A类网络特征的网络有128个,属于大型网络
0xxxxxxx | xxxxxxxx | xxxxxxxx | xxxxxxxx |
---|---|---|---|
网络部分 | 主机部分 | 主机部分 | 主机部分 |
B类地址
前两个字节用来标识网络部分,后两个字节用来标识主机部分,开头两位固定为10,所以这个网络第一字节从(10000000-10111111)也就是第一字节从128-191的网络,每个网络能容纳$2^{16}-2$台主机,具有B类特征的网络有$2^{14}$个,属于中型网络
10xxxxxx | xxxxxxxx | xxxxxxxx | xxxxxxxx |
---|---|---|---|
网络部分 | 网络部分 | 主机部分 | 主机部分 |
C类地址
前三个字节标识网络部分,最后一个字节用来标识主机部分,开头三位固定为110,第一字节从11000000~11011111也就是192-223范围内的网络,每个网络能容纳254台主机,具有C类地址特征的网络总数为$2^{21}$个。属于小型网络
110xxxxx | xxxxxxxx | xxxxxxxx | xxxxxxxx |
---|---|---|---|
网络部分 | 网络部分 | 网络部分 | 主机部分 |
保留IP地址
D类地址:用作组播
E类地址:用作科研
网络地址:主机部分全部为0的地址
广播地址:主机部分全部为1的地址
32位全为0:0.0.0.0,标识这个主机,这个网络。路由表中默认路由的默认地址
32位全为1:255.255.255.255,泛洪广播地址,指代互联网所有机器,如果一个分组目的地址是泛洪广播地址,它将发送给互联网上所有主机,但这种行为实际非常可怕,他可能引起很严重的广播风暴,所以这个广播地址实际退化成了本地广播地址,路由器在截获这个地址后,不会再转发这种地址
环回地址:以127开头的地址,例如127.0.0.1代表本地主机
非正常地址:169.254.x.x,不能与外界正常通信
IP地址的分配
IP地址的分配是一种层级分配,全球的IP地址和域名分配,由ICANN负责,其下有诸多地区网络中心,如APNIC亚太地址网络信息中心,再往下就是各个国家网络中心,例如中国网络中心就从属于APNIC,国家网络中心下还有诸多运营商网络中心,普通用户就是从运营商处获取IP地址
子网规划
局域网不断发展,日益庞大以至于难以管理,所以必须要将庞大的局域网进行分割,分割成为不同的子网
一个局域网虽然被分割成几部分(子网),但在外界看来,还是在一个局域网内,这是由于这些局域网对应的外部路由器仍然只有一条
同时允许不同的子网在一个组织内部连接起来
主/边界路由器
负责与外部进行联系,从外部收到分组,向内部分组转发,路由器识别选择子网的方式通过子网掩码实现。
子网掩码
一种了解网络规模的机制
可以用点分十进制(连续的0和连续的1)表示,例如:11111111111111111111111111100000(255.255.255.224),其中1表示网络位,0表示主机位。
还可以用/+网络位数+子网位数 表示,例如上文中的27个1和5个0表示的点分十进制形式的子网掩码还可以用 /27 表示
路由器采用按位与操作,将目的IP地址和子网掩码进行按位与计算。例如:
目的IP地址:128.125.23.102,当前路由器IP地址:128.125.0.0/16,前16位为网络地址,后16位中,前八位为子网位数,后八位为主机位数,所以,它的子网掩码就是/24,也就是前24位为1,后八位为0
1 | 128.125.23.102 |
执行按位与操作得到:
1 | 10000000-01111101-00010111-00000000 |
最终得到的结果就是目的IP地址所属的网络(子网)的地址。
适用子网掩码的机制,使得路由器不必记录所有主机的地址,缩减了路由表的规模
一些缺省的子网掩码
网络类型 | 点分十进制 | 网络前缀表示 |
---|---|---|
A: | 255.0.0.0(8位网络位) | /8 |
B: | 255.255.0.0(16位网络位) | /16 |
C: | 255.255.255.0(24位网络位) | /24 |
主机借位
IP地址长度不变,却从两级结构(网络位+主机位)变为了三级结构(网络位+子网位+主机位)。这个过程是通过向主机位借位形成子网位实现的
例如对于C类地址,后八位是主机位,假设现在从其中借两位用来表示子网位,那么可以表示三个子网(00,01,11).剩余6位可以形成$2^6$即64个IP地址,除了其中的保留地址(网络地址:000000和广播地址:111111)其余62个均为可用IP地址
借位原则:
- 借位必须从主机域的高位开始借
- 主机域至少要求保留两位
网络类型 | 主机位 | 最大借位/子网位 |
---|---|---|
A | 24 | 22 |
B | 16 | 14 |
C | 8 | 6 |
确定子网位
按照主机位规划
$$
IP地址需求数量\le2^n
$$
(n表示主机位数),子网位数=8-n
按照网络数要求规划
根据子网数,确定借位数
$$
子网数\le2^n
$$
借位数=n
还可以综合主机位与网络数两点因素共同规划确定子网位
IP寻址
互联网与网络层的关系
- 在网络层上,可将整个互联网看作是一组互联的子网络的自治系统
- 将整个互联网联合起来的正是网络层协议:IP
- IP的目的是提供一种尽力的传送方式,将数据从源传到目的
IP寻址:根据目的IP地址,找到目的网络的过程
在路由器之间进行的是IP寻址,根据路由器内部的路由表可以实现最短路径到达我们标记的目的地址,而在局域网内部是借助MAC寻址最终到达目的机
两种寻址方式比较
区别\寻址方式 | IP寻址 | MAC寻址 |
---|---|---|
适用的网络范围不同 | 大型网络(互联网间) | 小型网络(局域网) |
所依赖的地址结构不同 | 结构化、层次化地址,其本身携带了位置信息 | 平面地址 |
所处的OSI模型层数不同 | 网络层 | 数据链路层 |
地址数目的限制 | IP地址池正在枯竭 | 暂无耗尽的危险 |
地址格式区别 | 32位/十进制表示 | 48位/十六进制 |
路由器
在IP寻址过程中,一个路由器又被称为一跳(HOP)。当数据到达最后一跳,最后将数据重新封装好后传给所在的目的网络,随后在目的网络内部开始进行的就变成了MAC寻址
主要功能
- 打开传来的分组
- 确定目标网络,查找路由表
- 将数据重新封装,转发
路由表(路由器转发数据的依据)
主要包括
- 目的网络地址network address
- 接口interface
- 代价metric (f.g. hop)
- 子网掩码subnet mask
- 网关gateway
除了路由表,路由器内部有一张ARP表(所有子网设备的IP-MAC映射(包括网关))
路由表可能因厂家的不同而不同
终端可通过route print查看本地的路由表
1 | =========================================================================== |
IP分组
IP协议的另一个重要内容
IP分组分为头部和数据两大部分,不含可选字段的头部有20个字节的长度,其中包含十二个字段。按照4个字节(32位)为一行排列,则一共有五行
协议版本
长度为4位,用来表明IP协议版本号(IPv4:0100,IPv6:0110)
报头长度
表明IP分组报头的长度,长度为4位,单位是4字节(32bit)。这4位数变化的范围在0101-1111对应的十进制数就是5-15,也就是报头长度的变化范围在20-60字节(其中包括二十字节的固定报头长度,和不确定的可选项)
服务类型
区分服务(DS:Differentiated Service),长度为8位,表示分组的优先级和丢弃级等,在现在的互联网中应用较少,可以用来提供一些服务质量的保证,拥塞控制等
数据报总长度
长度位16位,表明整个报文/分组的长度(报头+数据),单位是字节,能够表示的总长度=$2^16-1$,即65535字节
数据报标识号
也叫分组标识号,长度为16位,标识当前分组/数据报的序列号,这个序列号由源机(发送方)维护。接收方可以通过这个序列号进行数据报的重组
标志字段,分片偏移字段
标志字段占3位,分片偏移字段占13位。前者决定是否进行分片操作,后者决定分片之后,接收方如何还原原数据报
分组从源传输到目的机的过程可能会跨越一个很大的网络,这其间的网络的MTU(最大传输单元Maximum Transmission Unit)可能是不同的,当数据从一个大MTU的网络传输到一个小MTU的网络,就需要进行分片操作,将一个大数据报切割成多个小数据报。
生存时间TTL
现行的生存时间的单位是跳数(HOP),每经过一个路由器,跳数都需要减一,当跳数为0时,这个数据报就会被丢弃,丢弃数据报的路由会向发送方返回一个超时消息,说明这个数据报没有到达目的机,但生存时间已经为0,所以被丢弃了。TTL可以防止一个分组在网络里无限循环
用户协议
长度为8位,用来指明上层传输层采用的协议,同时表明数据部分搭载的是哪种数据。常见的协议有:17表示UDP,6表示TCP
报头校验和
长度为16位,搭载的是互联网校验和,检验分组头部在传输过程中有没有发生错误
数据报选项
可选的选项,允许主机支持不同的选项(安全,源路由,时戳等到…)。很少被使用
填充位
如果其余部分总长度不是32位的整数倍,则填充位会补齐剩余部分,使报头总长度保持为32位的整数倍
Wireshark抓包工具
Wireshark是一个免费开源的网络数据包分析软件,功能就是截取网络数据包,尽可能详细的截取网络数据报中的数据
优点
- 开源,强大
- 支持脚本
- 支持的数据包类型众多
可以看到,上图就是利用wireshark实际抓取到的一个网络数据包,可以详细查看数据包内容,以IP协议为例,已经将报头内容详细展示了出来
IPv6地址
IPv4危机
IPv4面临的诸多问题
- 地址危机(最主要的问题)
- 移动性支持不够
- 路由表的膨胀(进而带来延迟增加)
- 安全问题
- 配置复杂
- QoS和性能问题
- 端到端业务模式受到破坏(由于地址池枯竭,所以出现大量私人地址,私人地址不具有唯一性,在接入互联网时需要经过NAT转换器进行转换,是的原来端到端的业务模式变成了“端-转换器-端”的模式)
IPv4地址危机
IPv4拥有约43亿个的巨量地址,但由于网络飞速发展,以及过度分类浪费了大量地址,导致IPv4地址池逐渐枯竭
2011年2月,IPv4总地址池彻底枯竭
解决方案-替换还是修补
如果替换IPv4协议,表示网络中所有的系统均需要升级,所有设备也都需要升级或更换,这对大型组织来说是一场难以想象的过程
如果是修补,可通过NAT、CIDR、VLSM等。但是,它们最终将阻碍未来Internet的发展,因为它们限制了可连接的网络数和主机数。
最终,经过讨论,人们决定替换IPv4协议
新IP协议目标
- 支持几十亿台主机
- 缩减路由表规模
- 简化协议,让路由器更快处理分组
- 提供比IPv4更好的安全性
- 更加关注服务类型(尤其是实时应用)
- 允许通过指定范围进行组播传输
- 允许主机在不改变地址的情况下进行漫游
- 允许协议具有扩展性
- 允许新老协议共存多年
最终形成了我们如今所说的IPv6网络协议(前身是SIPP-简单增强IP协议)
IPv6标准组织
IP Version 6 Working Group
- 制订IPv6规范和标准
IPv6 Operations
- 为运营IPv4/IPv6共存的Internet和在已有的IPv4网络或者新的网络安装中部署IPv6提供指导
其它IPv6相关工作组
- 6lowpan, mip6, mipshop, monami6, multi6, shim6…
IPv6地址
邻节点
一条链路上的两台主机之间互为邻节点
IPv6最先著的变化
地址空间的变化,IPv4地址空间为$2^{32}≈4.3*10^9$
而IPv6的地址用128个二进制位表示,达到了惊人的$2^{128}≈3.410^{34}=340涧(1涧=10^{36})$ 。相当于全球十四亿人,人均可以分配到$510^{28}$个IPv6地址
IPv6地址表示
由于IPv6地址过长,所以我们采用冒分十六进制来表示IPv6地址
1 | 00100000000000010000010000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000100010111111111 |
先将128位的二进制地址按照16位一组的格式分成8组
1 | 0010000000000001 |
每组都采用十六进制表示
1 | 2001:0410:0000:0001:0000:0000:0000:45ff |
规则1:省略前导0,每组前导0可被忽略
1 | 2001:410:0:1:0:0:0:45ff |
规则2:如果某组全为0可被全部忽略,中间用双冒号表示(但一个IPv6地址中只能存在一个双冒号,否则无法还原IP地址)
1 | 2001:410:0:1::45ff |
地址前缀长度用“/xx”来表示,如: 1::1/64
IPv6地址分类
- 单播地址 (Unicast Address)
- 组播地址 (Multicast Address)
- 任播地址 (Anycast Address)
- 特殊地址
特殊地址
地址类型 | 二进制前缀 | IPv6标识 |
---|---|---|
未指定 | 00…0 (128 bits) | ::/128 |
环回地址 | 00…1 (128 bits) | ::1/128 |
组播 | 11111111 | FF00::/8 |
链路本地地址 | 1111111010 | FE80::/10 |
网点本地地址 | 1111111011 | FEC0::/10 |
全局单播 | (其他) |
单播地址中的链路-本地地址
用在单一链路上,带有链路-本地源或目的地址的数据包不转发到其它链路
应用范围:只能在同一本地链路节点之间使用
节点启动时,自动配置一个本地链路地址
链路本地地址组成
高64位(前64位):FE80:0:0:0
低64位(后64位):EUI-64地址
EUI-64地址是将MAC地址(48位)从中间(前24位,后24位)拆开,然后在中间部分插入一段“11111111 11111110”,最后从这64位的高位数起,第七位修改为1,就完成了。合计64位
(可在本地计算机DOS窗口通过“ipconfig”查看本地IPv6地址)
1 | Windows IP 配置 |
可聚合全球单播地址
组成
- 001:前三位固定,表示全球IPv6地址目前只用了1/8,剩余7/8还没有使用
- TLA:顶级聚类地址,分配给各大地区网络中心,例如亚太地区网络中心
- RES:保留位
- NLA:次级聚类
- SLA:站点级聚类地址
运营商分配给单位网络的地址通常是/48
也就是说后续的16位地址可以由单位自行根据需求进行子网规划
时至今日,中国约申请到两万个/32地址,一个/32地址包含的IPv6地址数约等于全部的IPv4地址总数,所以是完全足够使用的
IPv6主机如何做到即插即用
- 启动时,生成链路本地地址
- 该地址主机可和默认网关这一节点进行通信,获得全球IP地址前缀
- 后缀(InterfaceID)可以利用人工(笨重,容易出错),EUI-64直接生成(有安全隐患,容易被他人获知MAC地址),或者随机生成
- 也可利用DHCP获得上网所需的资源
IPv6地址的子网规划
IPv4地址由于本身的稀缺性,所以在进行子网规划时需要精打细算,但IPv6地址不需要,它在进行子网规划时只需要考虑路由器数量以及所支持网络来规划即可
IPv6分组
IPv6分组由头部,扩展头,数据三部分组成
IPv6头部
IPv6分组头部长度共四十个字节,也就是320比特,按照每行32比特排列后结构如图。
版本号
长度4bit,表明协议版本,在IPv6中为固定值“0110”
区分服务(业务等级)
表明数据分组的服务类型,提供区分服务,表明分组的重要程度,优先级等因素
流标签
长度为20比特,表示分组的业务需求标记,提供服务质量。(为源端和接收端提供了一种建立伪连接的方式,即源端和接收端,把一组具有同样需求,并希望收到网络同等对待的数据分组,打上相同的分组,以便区分并执行对应操作)
净荷长度
也叫有效载荷长度,长为16比特,指明了跟在分组头部(固定头)后有多少个字节,可以表示$2^{16}-1=65535B=64KB$。
下一个头 next header
这是IPv6最与众不同之处,指明了紧跟的扩展头,如果当前头是最后一个IP头,此处就退化为协议说明,指明用户协议(例如:6表示TCP。17表示UDP),指定上层传输层协议。
IPv6相较于IPv4之所以能大大减少头部的种类就是由于扩展头的存在,而next header就是负责指向下一个头的工具
跳数限制
Hop Limit,跳数限制完全等同于IPv4协议中的TTL,都是为了避免一个分组在网络中一直存在,跳数归零后,路由依旧是舍弃这个分组,并返回一个错误信息,解释情况
总体来说,IPv6分组头部是在IPv4分组头部的基础上,进行了增加,修改和删除操作最终得到的结果
IPv6删除了IPv4中的分段/分片偏移,因为分片操作会占用分片路由器大量资源,无形中增加路由器负担,所以IPv6放弃了分片操作,选择在发出时利用PMTU算法推测整条路径上最小的MTU网络,在发出前就对数据大小做出处理。
IPv6协议对校验和这一部分也作出了删除,因为计算校验和会消耗CPU时间,同时它的下层数据链路层以及上层传输层都拥有各自的校验和方法,在IP协议处进行校验显得冗余
扩展头
扩展头是可选的,目前已经定义的有6种扩展头,一个分组可以有多个扩展头也可以没有,当有多个扩展头时,扩展头之间必须按照相对顺序排列
- | 头部类型Header type | Next Header Code | 用途purpose |
---|---|---|---|
1 | Basic IPv6 Header基本报文头部 | - | 位于报文最前端,包含必要信息,后接可选的扩展头或数据 |
2 | Hop-by-Hop Options跳跃选项头部 | 0 | 包含数据包发送路径上的所有节点都必须处理的可选信息 |
3 | Destination Options目的地选项头部 | 60 | 只包含接收方节点所需的可选信息 |
4 | Routing Header路由选择头部 | 43 | 松散的路由器头列表,它允许Ipv6起端通过列出所要访问的一个或多个节点来决定到达目的地的路由 |
5 | Fragment Header分段头部 | 44 | 利用分段头部,IPv6源节点就可以向目的节点传送一个比路径MTU还大的分组 |
6 | Authentication Header身份认证头部 | 51 | 提供无连接的完整性、数据源认证、和抗重放服务。无论接的完整性确保数据中的数据包中的数据在从发送者到接收者的传输过程中不会被修改,它是对付数据篡改的策略;数据源认证确保数据所由所期望的用户发送,而不是由假冒者来发送,它是对付IP欺骗的策略;抗重放服务是保证一旦数据包被接收,其会话编号不能被攻击者再次使用。 |
7 | Encapsulation Security Payload Header封装安全性有效载荷头部 | 50 | 提供数据保密性、数据源认证、无连接完整性、抗重放服务和有限的数据流保密服务。 |
8 | Mobility Header | 135 | |
上层协议 | TCP | 6 | - |
上层协议 | UDP | 17 | - |
上层协议 | ICMPv6 | 58 | - |
以下就是用wireshark随机抓取的一段IPv6分组
可以看到清楚的给出了IPv6协议内的主要部分以及扩展头内容
IPv6过渡技术
IPv4与IPv6共存策略
- 短时间内IPv4迁移到IPv6是不可能的
- 在较长一段时间内都要保证二者共存的状态
问题
- 加快IPv6网络的成熟与稳定
- 解决IPv4与IPv6网络之间的相互通信问题
三种基类过渡技术
- 双协议栈(Dual Stack)
- 隧道(Tunnel)
- 地址转换技术
双协议栈
- 网络设备与主机必须全部支持双协议栈
- 主机端只需要支持IPv4或IPv6任一即可
- 主机端设备如果也是双栈的,优先使用IPv6,如果不通,则采用IPv4
隧道技术
- 通过隧道技术,IPv6分组,被作为无结构,无意义的数据封装在IPv4分组中,被IPv4网络传输
- 同样的,也存在将IPv4分组看作无结构无意义的纯数据封装在IPv6中的情况
- 适用于第一阶段与第三阶段,也就是IPv4或IPv6是孤岛时的通信
翻译转换技术
- 从IPv4转换到IPv6,或反过来,不仅发生在网络层,还有传输层和应用层。
- 当双栈和隧道都无法使用的时候,才使用;适用纯IPv4节点和纯IPv6节点间的通信。
IPv6试验网
北美
- 美国: 6REN, 6TAP, ESnet, vBNS, Internet2, NASA
- 加拿大: CA*Net, Viagenie, Freenet6.net
欧洲
- 欧盟: 6INIT
- 法国: CNRS/UREC, INRIA, G6, Renater2, @IRS
- 德国: DFN, JOIN
- 意大利: CSELT
亚太地区
- 日本: KAME, WIDE, NTT, TAHI
- 韩国: KRv6, ETRI
- 中国:CNGI,CERNET2
路由表来源
一个路由在收到IP分组后,会进行如下操作:
- 打开分组(解封装)到第三层网络层,提取目的IP地址
- 利用按位与操作,计算确定出目的网络,查找路由表
- 重新封装好(封装过程中会进行TTL-1,置换源和目的的MAC地址,重新计算校验和,分片/分段操作(可选)等),然后转发出去
路由表内容:
目的网络/子网掩码 | 路径代价 | 下一跳(网关) | 转出接口 |
---|---|---|---|
202.182.112.0/24 | 5 | 192.168.1.1 | Fe0/0 |
… | … | … | … |
路由表来源
- 直连路由:通过学习感知
- 静态路由:通过人工配置
- 动态路由:自动生成,更新,维护
直连路由
当一台路由器开启它的接口后,路由器就会自动将这些接口所连接的子网加入到路由表中成为直连路由。
例如,图中的FE0/0接口所连的子网:192.168.1.0/24就会被放入路由表中
静态路由
由管理员手工配置的路由
常用的静态路由-默认/缺省路由
是默认的路径,找不到路的时候可以从这里通过
- 避免错误丢包
- 缩减路由表的规模
- 减少路由器的运行负担
静态路由优缺点
优点 | 缺点 |
---|---|
在小型网络中容易实施 | 仅适用于小型网络或特殊用途(默认路由) |
非常安全,不会发送通告 | 随着网络增多,配置复杂性增加 |
总是从同意路径到达同一目的,稳定可靠 | 需要人工更新维护 |
不需要CPU,RAM,带宽消耗 |
动态路由
最常见的路由,适用于网络大,变化多时。在小型网络中也可以应用。开销较大,可以减少网络管理人员的负担
通过路由选择协议动态的建立,更新和维护的路由
路由表中动态路由占多数
路由选择协议会计算最优路径,装载最优路径到路由表中,引导IP分组转发
路由选择协议如何量度路径是否最优(代价/开销/成本)
- 路径长度:从源端到目的端代价总和为路径长度,即hop跳数
- 带宽:链路的最大传输能力以及网络流量
- 延迟:数据包从源到宿需要花费的传输时间
- 带宽:链路的最大传输能力以及网络流量
- 负载:网络资源(例如路由器的CPU)的使用率
- 通信代价:占用通信线路的费用
动态路由的优点与缺点
优点 | 缺点 |
---|---|
适用于有多个路由器的网络 | 可能使实施更加复杂 |
通常不受网络规模限制 | 又安全隐患,因为通告在路由间传输 |
自动更新和维护路由信息 | 消耗CPU,RAM,带宽 |
距离矢量路由选择协议
(Distance Vector)
路由选择协议分类:
- 距离矢量路由选择协议(Distance Vector 简称DV)
- 链路状态路由选择协议(Link State 简称LS)
根据距离矢量路由选择协议,每个路由器维护两张表。表$D_i$存储当前到各个节点最短路径,表$S_i$存储到达最短路径的下一跳
D-V算法是一种动态和分布式的,常被应用于小型网络,RIP是一个典型的D-V算法 (RIP:Routing information protocol,路由选择信息协议)
DV算法是典型的分布式Bellman-Ford算法
通过不断在邻居间更换交换信息实现路由表的更新
优点
- 简单
缺点
- 交换的信息太大了
- 路由信息传播慢,可能导致路
- 径信息不一致
- 收敛慢,度量计数到无穷
- 不适合大型的网络
收敛–整个网络寻找最佳路径的过程
RIP (路由选择信息协议)
特点:
收敛快(好消息传的快,也就是更短的路径很容易被传播到其他路由节点中去)
坏消息传的慢,存在无穷计数问题。当一个网络趋于稳定后,若其中某个节点发生故障导致该节点崩溃后,在修复过程中坏消息传播缓慢,并且可能形成路由环,进而导致无穷计数问题
(例如:一条路径X->A->B->C,假设各边权重为1
此时B路由到X距离为2,假设A路由崩溃,B此时失去到X的路径
但是在更新邻居节点时,发现邻居C路径可达X节点,且距离为3,所以B更新到X节点最短路径为4
但实际上C中所储存的路径已经过时了,就是X->A->B->C这一条)
所以由于坏消息传播慢,B更新了一个错误节点
之后C开始更新节点,发现A路由崩溃不能到达X,就从邻居中搜索
发现B路由可达(实际上仍是那条错误路径),所以更新到X距离为4+1=5
由此路由环形成,后续只会不断增加路径,最终导致无穷计数问题产生
解决方案
定义路由表中的最大跳数,例如15
在超过15跳后,认定路径不可达(这可能会导致时间消耗)
加快收敛的方法
- 水平分割
- 毒性逆转
- 抑制定时器
RIP产生无穷计数问题的原因
收集信息来源单一,只从邻居处获得信息,并只能相信邻居的信息。也就是站的不够高,看的不够远(就像刚才的例子,在A崩溃之前,路由节点之间相互传递的信息还是完全真实的,但是A崩溃后,C传给了B第一个虚假的过时的信息,并在二者之间不断传递)
站得高,看得远的代价是消耗带宽,CPU等