计网-U4 网络层
4.1 网络层的功能(16)
4.2 IPv4(300)
4.3 IPv6(36)
4.4 路由算法与路由协议(240)
4.5 IP多播(18)
4.6 移动IP(26)
4.7 网络层设备(20)

前言


4.1 网络层的功能
〇

OSI参考模型主张在网络层使用:面向连接的虚电路服务
TCP/IP体系结构的网络层提供的是:无连接的数据报服务
即通信的可靠性由高一级的传输层负责。
这样子可以使得网络中的路由器做得简单,价格低廉。
① 异构网络互连
网络互连:用中继系统对网络进行互连。
异构网络互连:对 物理层 / 数据链路层 / 网络层 不同的网络进行互连。
中继系统:
- 物理层中继系统:转发器,集线器
- 数据链路层中继系统:网桥或交换机
- 网络层中继系统:路由器
- 网络层以上的中继系统:网关

② 路由与转发
路由表的核心功能:==路由选择== 和 ==分组转发==
③ 网络层提供的两种服务
虚电路:
在网络层建立一条 逻辑链接(而非物理链接,所以也无需分配带宽)
虚电路建立 – 数据传输 – 虚电路释放
仅在建立节点使用 完整的源地址目的地址,之后分组的首部只需要携带 虚电路号
虚电路也需要路由选择的,只不过是同一个虚电路的分组按照同一个路由器转发。
虚电路的“虚”:链路不是专用的,可被多条虚电路共享(不是共用,是虚路共享,不会有冲突)
虚电路分为:永久性虚电路,交换型虚电路(临时连接)
数据报:
- 发送分组前无需连接。
- 分组仅占用当前链路的资源。

④ SDN(Sofeware Define Network)
传统的网络层:
- 数据平面:负责分组转发
- 控制平面:负责路由选择
SDN网络架构的网络层:
- 网络的控制功能由:一个远程控制器完成(实现路由选择,由一个远程的服务器来计算和分发流表给网络设备)
- 路由器仅保留数据平面的功能(分组转发)
- 原先的转发表 → 流表(SDN的转发表)
- 控制协议:OpenFlow
SDN还提供的编程接口:(可编程)
- 北向接口:向上层开发者提供标准化API
- 南向接口:实现控制平面和数据平面的双向通信(通过OpenFlow协议)
- 东西向接口:用于控制器集群的内部通信
SDN的优点:①集中控制与分布转发。②灵活可编程性。
SDN的缺点:①安全风险。②性能瓶颈
4.2 IPv4
① IPv4分组
协议字段:网络协议IP
版本字段:v4,v6
网际层的协议有:IP协议,ARP协议,ICMP协议

IP数据报(IP分组)的格式
==首部 / (IP分组头)==(固定部分20bit+可变部分0-40bit) + ==数据部分==
==① 首部固定部分的第一行==
【版本+首部长度+区分服务+总长度(指的是整个IP数据报的总长度)】
- 版本:IP协议的版本(4或6)
- 总长度:占16bit,所以IP数据报的最大长度是2^16 -1=65535B
- 因为以太网MTU=1500B,所以实际上在以太网中最大1480B(20B是首部)
- IP数据报首部包含3个与长度有关的字段:首部长度,总长度,片偏移。它们的基本单位分别为4B,1B,8B。


==② 首部固定部分的第二行==
(发送方)分片
实际传输过程中,“数据部分”的长度会受到下一段链路的最短/最长帧长限制,46-1500。
MTU:一个链路层数据帧承载的最大数据量称为最大传送单元MTU。eg 以太网的MTU=1500
所以:如果一个IP数据报的总长度超出了下一段链路的MTU,就需要分片。
分片:分片收到 标志字段控制:
- DF=0,表示数据报允许被分片
- MF=0,表示这是最后一个分片
- 除了最后一个分片外,其余分片长度必须是8B的整数倍。
分片发生在:源主机,或者任何一个路由器
重组发生在:目的主机


(接收方)分片整理
目的主机接收到的分片可能是乱序的,需要整理排序(**==通过“标识”,“标志”,“片偏移”字段==**)
- 只有目的主机才能对分片重组(路由器不行)
- 因为首部的 “片偏移” 字段是以 8B 为单位,因此,*除了最后一个分片外,其他每个分片的数据部分必须是8B的整数倍。


==③ 首部固定部分的第三行==
生存时间TTL:IP数据报的生存时间TTL。每经过一个路由器,TTL-1。
- 如果TTL=0,就丢弃分组,并向源主机发送ICMP报文!
首部检验和:每个路由器仅校验首部,不校验数据部分。

首部固定部分的第四五行
IP地址:源地址,目的地址(见下节)

回顾

② IP地址
==32位(bit) 【=网络号+主机号】==
(为方便阅读)==用十进制表示为4个部分,每个部分表示8bit。==
(IP地址资源由ICANN进行有偿分配,32位的地址最多可以分配2^32个。)

1. 最初的IP地址 分类/编写方案
==网络号不定长,但【前面的数字+网络号】定长为8位==
A类(1-126)
- (前八位可表示的:网络号数量是2^7-2=126,减了全0(DHCP特殊用途)和127的情况)(区别:主机号-2才是因为全0和全1)
- 前面8bit,主机号32-8bit
B类(128-191)
- (前八位可表示的:网络号数量是2^6=64)(从128开始而不是127,全1的127是另外的情况)
- 前面16bit,主机号32-16bit
C类(192-223)
- (前八位可表示的:网络号数量是2^5=32)
- 前面24bit,后面32-24bit
D类(224-239)
- (前八位可表示的:网络号数量是2^4=16)
- 多播地址
E类(240-255)
- (前八位可表示的:网络号数量是2^3=8)(
- (0到7一共八位是编码范围,8是主机号的编码开始,所以网络号一共有2^8-2种编码)

| 网络类别 | 最大可用网络数 | 第一个可用网络号 | 最后一个可用网络号 | 每个网络中的最大主机数 |
|---|---|---|---|---|
| A | 2^7-2? | 1 | 126 | 2^24 - 2? |
| B | 2^14? | 128.0 | 191.255 | 2^16 - 2? |
| C | 2^21? | 192.0.0 | 223.255.255 | 2^8 - 2? |
重点内容:
- ① 在那个年代,要求每台主机,每个路由器接口被分配的IP地址都是全球唯一的。
- ② 路由器和路由器连接的接口可以不分配IP地址,但==路由器和主机节点连接的接口== 必须分配IP地址。
- ③ 从属于==同一个网络的所有主机,路由器接口的IP地址 “网络号” 都相同。==
- ④ 当一台新主机接入网络时,需要给分配一个IP地址,并配置 ==“默认网关”== 。
多播,单播,==广播地址==:
- 单播地址分配给一个主机,
- 多播地址分配给一组(就像是qq号和qq群号的关系),
- 广播地址,主机号全1。
其他:
- IP地址表示的是主机号,而不是主机本身。
- IP地址是逻辑地址,与硬件地址(MAC地址)无关。
2. IP地址传输过程
通过根据默认网关的地址 + ARP协议可以查询到数据链路层的MAC地址,
在数据链路层,有了MAC地址就可以把数据传输到下一个路由器/交换机/。



⭐3. 一些特殊用途的IP地址
Nbit主机号,最多支持2^N -2台主机/路由器
Nbit子网号,最多支持2^N个子网

③ 子网划分,子网掩码
画图训练


a.子网划分
==主机号分成:子网号+主机号==
(like一个学校多个校区,一个校区一个子网)
b.子网掩码
前提:网络号 和 子网号完全相同的IP地址才属于**==同一个(子)网络==**
子网掩码 和 IP地址(自己的/对面的) **==相与==**(与运算:1 1→1,别的都是0),
- 得到:网络号+子网号(call:网络前缀)
子网掩码的另一种记法
(17的意思是前面17个比特全1,后面的全0)
(这种方法一看就知道使用了子网掩码)

c.默认子网掩码和默认路由
默认子网掩码
如果一个网络(ABC类)内部还没有进行子网划分,那么可以 将对应此网络的转发表项设置为 “默认子网掩码”
- A类默认 255.0.0.0
- B类默认 255.255.0.0
- C类默认 255.255.255.0
默认路由
目的网络号全0,子网掩码全0。
路由器没找到别的转发口时,也肯定在(转发往上一级的)默认路由器转发出去的。
⭐回顾

⭐总结:主机 发送 IP数据报过程
- ① 判断目的主机和本机是否属于同一个网络。
- A.检查本机IP地址和目的IP地址的网络前缀是否相同(通过IP地址和本机子网掩码 “逐位与”)
- B.若 网络前缀相同,说明目的主机和本机属于同一个网络。若 网络前缀不同,说明不属于同一网络。
- ② 将IP数据报封装成MAC帧并发送到链路上。
- A.如果目的主机与本机 属于 同一个网络,就通过ARP协议找到 目的主机 的MAC地址,再将IP数据报封装成帧,并将帧发送给目的主机。(帧→默认网关→……→目的主机)
- B.如果目的主机与本机 不属于 同一个网络,就通过ARP协议 找到 默认网关 的MAC地址,再将IP数据报封装成帧,并将帧发送给网关。(帧→目的主机
⭐总结:路由器 转发 IP数据报过程
- ① 路由器的某一个接口收到IP数据报。(路由器收到帧,把首部尾部的控制信息拆除,得到IP数据报内容,交给路由器的网络层)
- ② 对IP数据报首部进行校验,并从中找到目的IP地址。
- ③ 查 “转发表”
- 转发表的表项包含 <目的网络号,子网掩码,转发接口>
- 检查目的IP地址与每个表项能否匹配(通过目的IP地址,子网掩码的逐位与,匹配表项中的目的网络号),从而找到转发接口。
- 注:至少 “默认路由” 表项是一定可以匹配成功的。
- ④ 转发
- 根据查转发表的结果,将IP数据报从匹配的接口转发出去。
- 注:如果匹配的“转发接口”和该IP数据报的入口相同(即属于同一个局域网),就不用再把IP数据报转发出去。

④ CIDR(无分类编址)
为什么要提出CIDR:互联网在民用领域受到欢迎,由于每台主机都至少要消耗一个全球唯一的IP地址,IP地址资源越来越少

传统的IP地址的缺陷
C类地址:网络号长,主机号短。一个IP地址可供给使用的主机少(不适合给大单位使用)
A类地址:网络号短,主机号长。一个IP地址可供多个主机使用(可以给大单位使用,但是容易造成浪费。)(有限的IP地址资源会很快耗尽)

无分类编址CIDR
==网络前缀(的子网部分), 可变长!==
不再区分网络类别,用网络前缀表示网络部分。

定长子网,变长子网
一个单位获得CIDR地址块后,可以再划分多个子网。
- 定长子网划分:nbit主机号前面用kbit作为子网号。
- 缺点:每个子网都一样大,不够灵活,浪费IP地址资源。(比如不同学校校区主机数不一样多)
- 变长子网划分:子网号长度不固定→每个子网包含的IP地址块大小不同。


⭐


例题


回顾

⑤ 路由聚合
配套CIDR的东西
路由聚合(构成超网)
- 将几条路由表项聚合成一条,(原本记录ALL下一层表项的子网IP地址),只记录一个下层路由器的IP地址就行。(因为转发接口,网络前缀相同)
- 优点:提高转发表查询速度
- 缺点:路由聚合可能会引入额外的无效地址(在终点路由器才能被发现)

==最长前缀匹配原则==
when大局域网和小局域网不止一个接口。
从拥有 最长网络前缀匹配长度的接口 转发出去。
- 优先级:特定主机路由(前缀32位)>普通路由器>默认路由器(前缀长度为0)


⭐主机发送IP数据过程
使用了CIDR和路由聚合后, 和之前完全相同

⭐路由器转发一个IP数据报的过程
(使用了CIDR和路由聚合后),查转发表的部分稍有改变:当IP地址匹配多个表项时,选取匹配长度最长的。

⭐过程再模拟

⑥ NAT 网络地址转换

端口号
主机内部进程和进程之间的接口。
进程和进程之间的通信:IP地址 + 端口号


NAT:进一步缓解IP地址不够用的问题
如果==每台主机一个IP地址==:2^32≈32亿,显然不够用
如果==一个局域网一个IP地址 + 一个端口号==(实现定位):好像可以
原来的IP地址:**==外网IP==**(全球IP地址)
私有IP地址:**==内网IP==**(只要求局域网唯一,不要求全球唯一)(分配给局域网内部的节点)
三个私有IP地址块:
- 10.0.0.0/8(相当于1个A类网络)
- 172.16.0.0/12(相当于16个连续的B类网络)
- 192.168.0.0/16(相当于256个连续的C类网络
注:所有路由器对目的地址为私有地址的数据报一律不转发(所以目的地址得填公共IP)
NAT路由器(普通的路由器仅包含网络层及以下的功能,不包括传输层的功能)
- 转发IP数据报时,进行内网IP和端口号、外围IP和端口号的相互转换
- NAT表记录的信息:<内网IP:端口号 | 外围IP:端口号>
- 【传输数据:IP首部(内含源/目标IP),TCP首部(内含源/目标端口),数据部分】


回顾

⑦ ARP 地址解析协议
(当主机需要发送信息,但ARP表没有目的IP与MAC地址的映射关系时)
==在一个局域网的 内部,==
==查询一个IP地址对应的 MAC地址==

回顾
- MAC地址(48bit),是网络适配器出厂时分配好的,全球唯一
- 一台主机至少有一个网络适配器(网卡),因此主机至少有一个MAC地址
- 一台路由器有多个转发接口,每一个接口背后都是一个网卡,因此网络适配器有多个MAC地址。
==ARP表==
- 记录 <IP地址,MAC地址> 之间的映射关系
- ARP响应后,双方都可以把对面的 IP地址和MAC地址记录在APR表。
- 需要定期更新(表项有保质期,超时删除表项)
==ARP过程==
①ARP请求分组
- 内容:我是谁(自己的IP地址,MAC地址),我想找谁(对方的IP地址)
- 把 APR请求分组 封装进自己的MAC帧(帧目的地址全1,源地址=Y)(所有接口都收得到)【广播帧】
②ARP响应分组
- 内容:我的IP地址是Z,我的MAC地址是V
- 把 ARP响应分组 封装进自己的MAC帧(帧目的地址=Y,源地址=V)【单播帧】(碰到集线器就不算单播了哈哈哈)
拓展


⑧ DHCP 动态主机配置协议
提供了即插即用的联网机制
==给刚接入网络的主机动态分配IP地址,配置默认网关,子网掩码==
DHCP是 应用层协议!


DHCP服务器
DHCP服务器的IP地址和子网的路由器IP地址相同
DHCP服务器负责管理子网内的所有IP地址。
新主机连进局域网,会请求DHCP服务器分配【IP地址,配置默认网关,子网掩码】给自己。
①DISCOVER:其他主机能够接收,到达主机传输层看到目的端口号,才发现不匹配,丢弃。
②OFFER:DHCP服务器 OFFER 一个IP地址给新主机【MAC帧是单播帧,精准到达新主机】
③REQUEST:新主机告诉服务器我接受IP地址(此时还没有IP地址)
- 因为大型网络可能有多台服务器,多台服务器都进行第②步。所以新节点MAC帧需广播所有人,我最终选用的是服务器的IP地址。

DHCP服务器分配给DHCP客户的IP地址是临时的
- 是一段租用期
- 租用期超过50%,DHCP客户发送DHCP请求报文(单播),请求更新租用期
- 租用期超过87.5%,DHCP客户发送DHCP请求报文(广播),请求更新租用期
回顾

⑨ ICMP 网际控制层协议
ICMP属于网络层,ICMP报文封装在IP数据报中。
==让主机和路由器互相报告网络中发生的差错和异常情况==



ICMP报文的常见类型
a.差错报告报文
- 终点不可达
- 路由器告诉发送方:目的IP地址不可到达
- 目的主机告诉发送方:目的端口号不存在
- 时间超过
- 路由器告诉发送方:IP数据报的TTL=0,被丢弃
- 目的主机告诉发送方:IP数据报被分片了,规定时间没到齐,被丢弃
- 参数问题
- 告诉发送方:IP数据报首部不合法或者首部校验出错
- 改变路由(重定向)
- 路由器告诉发送方:下次用另一台路由器转发,路径更短
b.询问报文
回送请求(Echo Request):A→B:在吗?回答我!
回送回答(Echo Reply):B→A:在!
时间戳请求:A→B:我这边现在的时间是xxx,你那边现在几点了?
时间戳回答:B→A:我收到请求的时间是yyy,我发出回答的时间是zzz
(eg电脑开机自动校准时间)
不用反馈ICMP差错报告报文的情况
- 若携带ICMP差错报告报文的IP数据报出错,不再反馈ICMP差错
- 若IP数据报被分片,则无论几个分片出错,都只反馈一次ICMP差错
- 若IP数据报的目的地址为多播地址,不反馈ICMP差错
- 若IP数据报的源地址为特殊地址(如 127.x.x.x,0.0.0.0),即使发生IP数据报异常也不反馈ICMP差错
ICMP经典应用
- 分组网间探测ping 基于 回送请求报文,回送回答报文 实现功能
- 路由跟踪traceroute(tracert)基于 时间超过报文 实现功能
⑩ 其他
每经过一个路由器时候,MAC源地址目的地址都会重新封装/改变,但是目的IP地址不变。
子网重叠:就是A地址是C地址的子网,A地址重叠了C地址的网络前缀。或者是有交集。
子网的判断重叠,子网划分的题:画图⭐
若一台主机有两个或两个以上的IP地址,说明这台主机属于两个或两个以上的网络。(eg:WiFi+宽带)
在一条点对点链路中,只需要两个主机IP地址,一个网络地址,和一个广播地址的4种组合,主机号只需2位。(子网掩码应设定为255.255.255.254)
4.3 IPv6
真正解决了IP地址资源问题
IPv4地址:32位
IPv6地址:128位
如何表示这么多位的IPv6地址?
IPv4:点分十进制记法:8bit为一段,一共4段。
IPv6:冒号十六进制记法:16bit为一段,段间以冒号分割,一共8个段。(所以一共有32个十六进制数)
- 压缩记法:
- ① 去除每一个分段的前导0。
- ② 双冒号替代连续出现的多个0(一个地址只能用一次)
IPv6地址资源分配
nbit前缀 + 128-n bit接口标识符

IPv6支持即插即用(IP地址自动配置)(通常把主机主机自身48位AMC地址作为接口标识符,唯一)(IPv4不支持即插即用)
IPv6可以不使用DHCP,也可以使用,安全性高。

IPv6地址的分类
任播地址:任播的终点是一组计算机,但数据报只会交付其中的一台计算机,通常是距离最近的一台计算机。(eg多个DNS服务器共享一个任播地址)
地址类型:
- ① 未指明地址,
- ② 环回地址,
- ③ 多播地址,这类地址占IPv6的1/256
- ④ 本地链路单播地址,
- ⑤ 全球单播地址

回顾

IPv6的特点:
地址空间大:为IPv4的2^96倍
可划分多个层次
支持即插即用
IPv6只有源主机才能分片(路由器不行)
IPv6首部长度固定40B
减少了首部字段数量,仅有8个字段
取消了首部检验和字段,不提供差错检验(传输层提供)
首部格式灵活,有可选的扩展首部
改进的选项放在有效载荷(有效数据)中。而IPv4将其放在首部的可变部分中。
允许协议继续扩充
支持资源的预分配
增加了安全性,身份鉴别由扩展首部提供。
IPv6数据报的基本首部
IPv6数据报由 ==基本首部== 和 ==有效载荷== 组成。


有效载荷长度:类似IPv4的“总长度”,也是16bit。
下一个首部:类似IPv4的协议字段。
跳数限制:类似IPv4的TTL。
(通信量类:区分不同IPv6数据报的类别或者优先级
(流编号:用于实时视频传输等,保证传输质量。
从IPv4向IPv6过渡
双协议栈:一台主机同时安装IPv4和IPv6两个协议栈,分别配置一个IPv4地址和一个IPv6地址。
隧道技术:当IPv6数据报需要接入IPv4网络时,将其封装为IPv4数据报的数据部分,使原IPv6数据报如同在IPv4网络的隧道传输。
4.4 路由算法和路由协议
① 路由算法

1. 路由算法和路由协议之间的关系
==路由协议==(规定路由器之间如何通信,以获取路由算法所需的信息)
→输入进==路由算法==(目标:找到转发IP分组(源路由器到目的路由器)的最短路径)
→生成==路由表==(得到最佳转发路径)

2. 路由算法的分类
① 静态路由算法:手工配置每一条路由(只适合小型网络)
② ss动态路由算法:路由器根据 网络流量负载 和 拓朴结构 来动态调整自身的路由表
- 距离-向量路由算法(RIP协议基于此算法),
- 链路状态路由算法(OSFP协议基于此算法),
- 路径-向量路由算法(BGP协议基于此算法)(op)
a.距离-向量路由算法
算法特点:不必了解完整的网络拓扑结构,
只需要关注:你到相邻的节点,相邻节点到目的节点之间的最短距离,
最后使用Ford算法算出最短路径。
- X到net1的距离:min{ X和邻居之间的距离 + Vi到net1的最短距离 }

- 向量:如果有多个网络,就有到多个目的网络的多个最短距离/向量。


b.链路状态路由算法
算法特点:让路由器弄明白完整的网络拓扑结构,就可以使用Djsk算法,找到最短路径。
回顾

② 分层次的路由协议
思考:RIP,OSPF是否适用全世界范围的路由器?
RIP路由协议(基于距离向量路由算法),网络数量越多,距离向量越大。
OSPF路由协议(基于链路状态路由算法),要求每一台路由器都要建立整个网络的拓扑图
将全世界的网络划分为多个相互独立的自治系统AS。(唯一的编号ASN)
AS的管理单位有权决定在本AS内,使用何种内部路由协议(RIP,OSPF..)
每一个AS至少有一台AS边界路由器,与其他AS相连。
各个边界路由器之间,使用统一的外部路由协议。
AS之间的路由选择也称 域间路由选择,AS内部的路由选择称为 域内路由选择。
一个AS通常包含一个或多个CIDR地址块。

路由协议分为:
- 内部网关协议 IGP(内部路由协议):用于AS内部的路由选择(如RIP,OSPF)
- 外部网关协议 EGP(外部路由协议):用于AS之间的路由选择(如BGP)

回顾

③ RIP 路由信息协议
RIP属于应用层,它使用UDP传送数据(端口520)

RIP协议在协议栈中的位置

RIP的规定
RIP定义路径长度:
①RIP使用跳数/距离来衡量到达目的网络的距离。(越少越好)
注:规定路由器到直连网络的距离为1。
②RIP合法路径距离≤15。(可见RIP只适合小型自治系统)
RIP定义路由器格式:
①每一个路由器都要维护自己的路由表。
路由表项 :<目的网络N,距离d,下一条路由器地址X>
②每一个路由器都要维护它自身到其他每个目的网络的距离记录,即距离向量。
运行RIP的路由器 之间 如何交换必要信息?
who:直接相邻的路由器
what:发送自己的完整路由表(就是距离向量)
when:固定时间间隔(30s)
(为了加快逐步生成的路由表,可以引入 触发更新:当路由器路由表发送变化时,迅速把自己的路由表发送给邻居)

RIP的工作过程示例1(从路由器启动到收敛)
此处规定使用的协议是RIP协议
RIP的工作过程

初始:各路由器同时开机,构建初始路由表
- 路由器刚开始工作时,只知道自己到直接相连的几个网络的距离为1

0时刻:各路由器向邻居发送RIP报文(包含完整路由表),之后更新自己的路由信息
- 根据收到别的路由器的报文,修改并更新自己的路由表
- 让:发来的路由表距离都+1,目的地址改为发送方X


30时刻:各路由器向邻居发送RIP报文(包含完整路由表),更新自己的路由器信息
- 如果原来的路由表已经有目的网络N了,且下一跳路由器地址是X:替换原来。**==(老路径以最新的为准)==**
- 如果原来的路由表已经有目的网络N了,且下一跳路由器地址不是X:
- 如果收到的距离更小,就进行更新,反之不更新**==(如果新路径更短,就更新)==**
- 如果距离一样,同时写入(实现负载均衡转发)

60时刻:各路由器向邻居发送RIP报文(包含完整路由表),更新自己的路由器信息

60时刻后,没有路由的信息需要更新,RIP已收敛。
RIP的工作过程示例2(动态适应网络拓扑变化)
100时刻:R1和R4之间新建一条链路
120时刻:各路由器向邻居发送RIP报文,更新自己的路由器信息
- (老路径更短了就更新)(新路径更短也更新)

RIP的工作过程示例3(RIP的优缺点)
120时刻:路由器被破坏
如果**==在180时刻(RIP默认超时时间)之后==**:还没有收到相邻路由器发送的更新路由表,
则可以把此相邻路由器记为不可达的路由器,即把距离设置为16(表示不可达)

330时刻:路由器R1判定R2不可达,并更新自己的路由表
R1更新路由表,以为可以通过R3/R4到达R2。
但从上帝视角来看,不只是R2对net2不可达,R3,R4也对net2不可达
造成了错误,形成**==转发环路==**:R3 – R3/R4,直到TTL=0才会被丢弃。

330时刻:各路由器向邻居发送RIP报文,更新自己的路由器信息
- ==(老路径已最新的为准)(如果新路径更短,就更新)==
- 实际上还是环路,继续等等看吧。

360时刻:各路由器向邻居发送RIP报文,更新自己的路由器信息
- 每经过一轮的信息交换,到达net2的距离+1.
- 多轮迭代之后,net2的距离才加到16,才能确定net2不可达。
- 可见RIP的缺点:==坏消息传得慢(慢收敛现象)==

690时刻:终于收敛了!
(160时刻的出错,690时刻的收敛,哭了)

RIP的缺点
- RIP限制了网络的规模
- 网络规模越大开销越大
- ==坏消息传得慢==

700时刻:R2换了个新路由器

720时刻:
- R2是在700时刻开机的,要过30s即730s才发一次RIP报文

RIP的优点
- ==好消息传得快==

④ OSPF 开放最短路径优先协议
1.OSPF协议的特点
OSPF在协议栈所处的位置

OSPF协议大致原理
基于链路状态路由算法(Djsk算法)
==首先让 每一台 路由器都建立整个网络的拓扑图(带权有向图,用邻接表存储)==
- ① 每一台路由器(开机时)探测到和自己相连路由器/网络的信息(相邻节点,权重)
- ② 分别把所有数据整合在一起(带权有向图的邻接表存储)

Q②:一台路由器怎么把自己探测到的信息 “说给” 其他所有路由器?
**洪泛法(flooding)**:通过相邻节点,一传十,十传百地传播。
- 注意:洪泛信息不可回流。若收到重复的链路状态信息,不重复转发。
- 每个链路状态都带上一个32位的序号。序号越大,状态/版本就越新。

Q①:当探测到相邻路由器信息有变化时怎么做?
立即洪泛最新的链路状态信息!(LSA:自己构建的单链表)
所以:不存在“坏消息穿播慢”的问题
OSPF其他特点:
- ① 运行每条路设置不同的代价/权值。
- 代价=参考带宽/接口带宽
- 一个链路的两个方向,权值可能不同
- 【直连网络→路由器】单方向的权值通常是0
- ② 若同一个目的网络有多条相同长度的路径,则都可以用来转发(可以负载均衡)
- ③ OSPF具有鉴别功能,可以保证仅在 可信赖的路由器 之间交换链路状态信息。
- ④ OSPF支持可变长度的子网划分 和 无分类编址CIDR

回顾

2.OSPF的基本工作原理
(在知道了每一台路由器都建立整个网络的拓扑图后)【LSDB – 链路状态数据库】
==① 路由器构建LSDB,使用Dijkstra算法计算最短路径==

==② (根据Dijk算法结果),构建Ri的路由表==
特点:
路由表结构:【目的网络,下一跳,到目的网络的距离】(
- (路由表中不会存储完整路径,只存储下一跳)
一旦网络拓扑(链路或者路由器)变换,会立即引起洪泛,LSDB变化,再次运行D算法,构建新路由表。

Q:超大型自治系统的LSDB
这时候每台路由器都还得存储一份LSDB?
洪泛压力也大,D算法开销也大。
SOL:区域划分
- 把自治系统划分成多个区域Area【一个主干区域,多个非主干区域】
- 主干区域至少有一台 自治系统路由器ASBR,与其他自治系统相连。
- 非主干区域至少有一台 区域边界路由器ABR,与主干区域相连。
- 这时洪泛法的范围是区域内部,不是AS。
- LSDB也小了,D算法开销也小了。

整理三类路由器
- 自治系统边界路由器:负责 本自治系统与其他自治系统之间的 IP分组路由转发
- 区域边界路由器 :负责 为流出流入该区域的 IP分组提供路由转发
- 区域内部路由器(非边界路由器):负责 本区域内的 IP分组路由转发
回顾

拓展:LSDB,LSA,LSI
LSDB:链路状态数据库
LSA:链路状态通告
LSI:链路状态信息(广义的概念)


3.OSPF协议的分组类型


Hello分组(问候分组)
一开始路由器R2和别的路由器还没建立联系,是独立的。

各台路由器每隔10s会向直接邻居发送一次“问候分组”
如果超过40秒没收到邻居的问候,就认为该邻居不可达。
R1和R2建立了连接后:相互发送“问候分组”,确认邻居关系,更新链路状态信息。
R1更新链路状态信息→洪泛给所有路由器→所有路由器也更新链路状态信息。

DD分组(数据库描述分组)
两台路由器的邻居关系建立时,通过DD分组,向邻居给出自己的LSDB摘要(即LSA的头信息)

LSR分组(链路状态请求分组)
通过LSR分组,向邻居请求缺少的LSA(头信息)

LSU分组(链路状态更新分组)
路由器通过LSU分组,向邻居传输具体的LSA(可能引发全网洪泛,蝴蝶效应)
- 即使重复收到了洪泛的LSU分组,也要给邻居返回LSAck


LSAck分组(链路状态确认分组)
路由器收到邻居发来的LSU后,返回LSAck分组,向邻居确认收到了哪些LSA(头信息)

⑤ BGP 边界网关协议
路由协议的分类:
- 内部网关协议:用于AS内部交换路由信息,实现路由选择,例如RIP,OSPF
- 外部网关协议:用于AS之间交换路由信息,实现路由选择,例如BGP
边界路由器之间使用BGP协议
特点,相关概念
特点:
- ① BGP力求找到一条自治系统之间比较好的路由,而不是最佳路由
- 原因是AS之间一大堆路由器,费时。

- ② AS之间的路由选择必须考虑政治安全或经济等因素。
- ③ BPG采用路径-向量路由算法:路由器之间提高BPG路由器时,不仅告知目的地,还告知到达该地的完整路径(经过哪些自治系统)。
- ④ BGP是应用层协议,基于TCP。(运行BGP协议的路由器还包含传输层,应用层)
BGP相关概念
Q:哪些路由器需要运行BGP协议?
- 边界路由器,某些内部核心路由器
- (简化理解:AS内所有路由器都要运行BGP协议)
BGP邻居
- BGP协议通信双方称为BGP邻居。
- BGP邻居之间先建立TCP连接,然后在该连接上交换BGP报文,从而建立BGP会话

BGP会话
- 两个AS的直连边界路由器之间,长期保持eBGP会话。【在物理上连接】
- AS内部的BGP路由器之间,长期两两保持iBGP会话。【物理上不直连也可以】
- 注意:规定AS内iBGP会话必须全连通:N个路由器形成N(N-1)/2条iBGP会话。
回顾

BGP路由信息,工作原理示例


BGP路由选择
==对于外部AS的目的网络,如果有多条路可以走,怎么选择?==

【按①②③④优先级考虑】
① 本地偏好值最高
相当于优先级(由AS管理员设置)
通常考虑成本,安全因素。
② AS跳数最少
AS跳数最少,路由器跳数不一定最少。
③ 热土豆路线选择算法(最小代价)
想法:烫手的土豆,尽快脱手
让IP分组以“最小代价”离开自治系统
- RIP以路由器跳数为代价
- OSPF以路径总长度为代价
④ BGP路由器标识符(即ID)最小
选IP更小的(老员工工号更小)
BGP四种报文


