第4章 网络层:数据层面(Network Layer: Data Plane)
4.1 网络层概述
- 网络层核心功能:
- 转发:将 分组 从路由器的输入端口 转移到 合适的输出端口
- 路由:确定 分组 从源 到 目的 经过的路径
- 网络层连接 和 传输层连接 对比:
- 网络层连接:两个主机之间(路径上的路由器等网络设备参与其中)
- 传输层连接:两个应用进程之间(对中间网络设备透明)
- 网络服务模型:
- 无连接服务:
**数据包网络(datagram network)**提供无连接服务
不事先为分组的传输确定传输路径,每个分组独立确定路径,不同分组可能传输路径不同 - 连接服务:
虚电路网络(virtual-circuit network) 提供连接服务
首先为分组传输确定 从源主机到目的主机的路径(建立连接)
然后 沿该路径传输 系列分组
系列分组传输路径相同
传输结束后拆除连接
- 无连接服务:
- 网络层的设计思路
① 网络层向上只提供简单灵活的,无连接的、尽最大努力交付的数据报服务
② 网络在发送分组时不需要先建立连接
③ 每一个分组独立发送,与其前后的分组无关
④ 网络层不保证分组传送服务的质量,由主机中的传输层负责可靠的通信 - 在查找转发表时,采用最长前缀匹配原则 (与分组目的地址匹配前缀最长的输出端口)
路由(router)
- 路由器 主要工作:转发分组
把从某个输入端口收到的分组,按照分组要去的目的地,从当前路由器的某个合适的输出端口转发给下一跳路由器 - 转发 和 路由选择 区别
- 路由器 输入端口
- 路由器 输出端口
- 常用的三种交换结构:
- 通过存储器
- 通过总线
- 通过互联网络 / 纵横交换结构
- 通过存储器
- 输出端口队列
排队时延 和 丢失 的原因:输出端口缓冲区溢出 - 输入端口队列
4.2 IP: Internet Protocol
- 网络层功能
- 与 IP 协议配套使⽤的还有三个协议
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报⽂协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
分类 IP 地址
- 分类
- 各类IP地址的 指派范围
- 一般不使用的特殊IP地址
- 私有 IP 地址
- 分类的 IP地址 的优缺点
- 各类IP地址的 指派范围
子网划分
参考资料:划分子网
- 为什么要划分子网
① 节省IP资源,提高IP地址利用率
② 给每一个物理网络分配一个网络号会导致路由表变大,网络性能变差
③ 减少广播的负面影响 - 划分思路:从主机号借⽤n位作为⼦⽹号 subnet-id
- 子网划分方法:
- 定长子网:固定长度子网,所划分的所有⼦⽹的⼦⽹掩码都是相同的
- 变长子网:长度变化的子网
- 示例
- 子网掩码 (Subnet Mask / Netmask)
- 32位地址,与IP地址结合使用的技术
A类地址默认的子网掩码是255.0.0.0
B类地址默认的子网掩码是255.255.0.0
C类地址默认的子网掩码是255.255.255.0
- 作用:
① 屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上
② 将一个大的IP网络划分为若干小的子网络 - 规则:
将 32位的子网掩码 和 IP地址的二进制形式 进行“按位与”操作,得到的是 网络地址
- 具体使用:
① 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器
② 路由器的路由表中的每一个项目,要同时给出 目的网络地址 和 该网络的子网掩码
③ 一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码
④ 不同的子网掩码可能得出相同的网络地址,但其意义不同(子网的划分方式不同)
- 32位地址,与IP地址结合使用的技术
无分类域间路由 CIDR
- CIDR (Classless Inter-Domain Routing):无分类域间路由选择,消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,可以更加有效地分配 IPv4 的地址空间,但是不能解决IP地址枯竭的问题
- 网络前缀
- 示例:
128.14.35.7/20
中,斜线后的20代表 IP地址的前20位是网络前缀
- 示例:
- 地址块
- 网络前缀都相同的所有连续的 IP 地址组成一个CIDR地址块
- 示例:
128.14.35.7/20
所在的地址块为128.14.32.0/20
;
128.14.35.7/24
所在的地址块为128.14.35.0/24
- 地址掩码 / 子网掩码
- 网络前缀的数值 = 子网掩码中前面1的个数
- 示例:
128.14.35.7/20
的地址掩码为255.255.240.0
- 构造超网
每个CIDR地址块中的地址数一定是2 的整数次幂,此在文献中有时称 CIDR 编址为“构造超网”。 - 特殊的CIDR地址块
- 路由聚合
IP 地址的特点
- ① 每个 IP 地址都由网络前缀和主机号两部分组成
IP 地址是一种分等级的地址结构
方便了IP 地址的分配和管理
实现路由聚合,减小了转发表所占的存储空间,以及查找转发表的时间 - ② IP 地址是标志一台主机(或路由器)和一条链路的接口
当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机
一个路由器至少应当连接到两个网络,因此至少应当有两个不同的 IP 地址 - ③ 转发器或交换机连接起来的若干个局域网仍为一个网络
一个网络(或子网)是指具有相同网络前缀的主机的集合
转发器或交换机连接起来的若干个局域网都具有同样的网络号,它们仍为一个网络
具有不同网络号的局域网必须使用路由器进行互连 - ④ 在 IP 地址中,所有分配到网络前缀的网络都是平等的
互联网同等对待每一个IP地址,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网
4.3 地址解析协议 ARP
-
作用:从 IP地址 解析出 MAC地址
-
ARP 工作原理 - 同局域网
- ARP 查找IP地址对应MAC地址
在本局域网中广播发送 ARP请求(路由器不转发ARP请求)
ARP 请求:[源MAC | 源IP | 目的MAC或0 | 目的IP]
(目的MAC未知时 填0)
- ARP 查找IP地址对应MAC地址
-
ARP 缓存
存放 IP地址 到 MAC地址的 映射表,映射表动态更新 (新增或删除)- 作用:
① 存放最近获得的 IP 地址到 MAC 地址的绑定
② 减少 ARP 广播的通信量
③ 为进一步减少 ARP 通信量,主机A 在发送其ARP请求分组时,就将自己的 IP 地址到 MAC 地址的映射写入ARP请求分组
④ 当主机 B 收到 A 的 ARP 请求分组时,就将主机A的IP地址及其对应的 MAC 地址映射写入主机 B 自己的ARP 高速缓存中。不必在发送 ARP 请求
- 作用:
-
ARP 工作原理 - 跨局域网
- 情景:
- 上图数据包传输流程:
① A主机 向本局域网广播发送 ARP请求,询问路由器 R1 的 MAC地址
② 路由器 R1 回复 A主机 R1的MAC地址
③ 主机A把 IP数据包 外层封上MAC(R1),将该帧发给 路由器R1
④ 路由器 R1 解包MAC帧,根据数据包的头部目的IP,向其他局域网广播发送 ARP请求,询问 B主机 的 MAC地址
⑤ B主机 回复R1 B主机的MAC地址
⑥ 路由器R1 把 IP数据包 外层封上MAC(B),将该帧发给 B主机
- 情景:
4.4 IP 数据包格式
- IP数据包头部结构
- 版本:4位,IP协议的版本,IPv4 对应 4
- 首部长度:4位,首部长度的1表示1个单位4字节,即首部4位最大能表示的长度是15单位,首部最大60字节。
- 总长度:16位,首部和数据的总长度,单位字节
- 标识 (identification):16位,通过计数器产生,可以唯一标识一个IP报文,同一IP报文的不同分片中标识相同
- 标志 (flag):3位,与分片相关
第1位是 MF,MF=1 后面还有分片,MF=0 最后一片
第2位是 DF,DF=1 不允许分片,DF=0 允许分片 - 片偏移:13位,当前分组的首单位在原数据包的位置,片偏移以8个字节为偏移单位
- 生存时间 (TTL):8位,指示数据报在网络中可通过的路由器数的最大值
- 协议:8位,表示数据包的数据使用什么协议(TCP / UDP / ICMP / IGMP / OSPF)
- 首部校验和:16位,只检验数据包首部,不校验数据,每经过一个路由器就校验一次,错误则丢弃
- 源地址 和 目的地址:32位
路由转发示例
- 主机跨局域网转发
- 路由器转发
路由器转发算法
使用二叉树查找转发表
- 二叉树构造规则
- 二叉树使用规则
① 使用目的IP的网络地址 在二叉树中匹配- ② if 找到一个叶节点,将目的IP与该叶结点对应的子网掩码 按位AND计算,看网络前缀是否匹配
③ 若匹配,转发分组到吓一跳路由器;否则丢弃该分组 - ② if 在二叉树中找不到匹配的叶节点,则 检查是否存在默认路由
③ 若存在则转发分组到指定默认路由器,否则丢弃分组
- ② if 找到一个叶节点,将目的IP与该叶结点对应的子网掩码 按位AND计算,看网络前缀是否匹配
4.5 IP分配技术
DHCP
参考资料: DHCP相关报文 - CSDN
- DHCP (Dynamic Host Configuration Protocol) 动态主机配置协议,基于UDP工作,DHCP Server Port = 67,DHCP Client Port = 68
- 作用:允许主机在加入网络时从网络服务器动态获取自己的IP地址
- 可以续租使用的IP地址上
- 允许重用地址(只有保持地址时连接/“on”)
- 支持移动用户谁想加入网络(更简短)
- 向DHCP申请IP地址流程:
〇 Host 广播 - DHCP discover (可选操作)
〇 DHCP服务器 回复 - DHCP offer (可选操作)
① Host 请求IP地址 - DHCP request
② DHCP服务器 发送地址 - DHCP ack
其中 DHCP返回 IP地址,第一跳路由器IP地址,DNS服务器名和IP地址,子网掩码
- 运行示例:
① 联网笔记本需要获取自己的IP地址,第一跳路由器地址和DNS服务器:采用DHCP协议
② 客户端 DHCP 请求被封装在UDP段中,封装在IP数据报中,封装在以太网的帧中
③ 以太网帧在局域网范围内广播 (dest: 255.255.255.255) ,被运行DHCP服务的路由器收
到
④ 在DHCP路由器处,以太网帧解封装成IP,IP解封装成UDP,解封装成DHCP
⑤ DHCP服务器生成DHCP ACK,包含客户端的IP地址,第一跳路由器的IP地址和DNS域名服务器的IP地址
⑥ DHCP服务器封装的报文所在的帧转发到客户端,在客户端逐层解封装成DHCP报文
⑦ 客户端知道它自己的IP地址,DNS服务器的名字和IP地址,第一跳路由器的IP地址
NAT 网络地址转换
- NAT (Network Address Translation) 在专用网连接到互联网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球 IP 地址,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接
- 图示:
- NAT 特点:
- 本地网络只有一个有效IP地址,不要从ISP分配一块地址(省钱)
- 可以在局域网改变设备地址的情况下无需通知外界
- 改变ISP分配的地址时,不需要改变内部设备地址
- 局域网内部设备没有明确的地址,对外不可见(安全)
- NAT 转换:
- 向外传输数据包时,替换
<源IP地址, 端口号>
为<NAT_IP, 新端口号>
,目的IP地址和端口号不变 - NAT路由器 在NAT转换表中 记录每个替换对
- 向内传输数据包时,替换
<目的IP, 端口>
采用存储在NAT表中的mapping表项<源IP, 端口>
- 向外传输数据包时,替换
- NAT穿越问题
- 问题:客户段需要连接NAT路由器下的服务器,整网对外只要有一个地址
- 方法1:静态配置NAT:转发进来的分组对服务器特定端口连接请求
- 方法2:允许NAT下的主机可以获知网络的公共IP,列举存在的端口映射,在租期内增删端口映射
- 方法3:在NAT外建立中继连接,外部客户端和NAT内部的服务器在中继处桥接
ICMP
-
ICMP (Internet Control Message Protocol) 网际控制报文协议:允许主机或路由器报告差错情况和提供有关异常情况的报告
-
ICMP报文种类(2种):差错报告报文,询问报文
-
ICMP询问报文:
-
不应发送ICMP差错报文的情况
-
应用举例:
- ping 命令:用来测试两个主机之间的连通性
使用 ICMP回送请求和回送回答报文
应用层直接使用网络层ICMP,没有通过传输层
- ping 命令:用来测试两个主机之间的连通性
4.6 IPv6
- IPv6:Internet Protocol version 6,用于解决 IPv4 地址枯竭问题
- 主要变化:
IPv6数据报结构
-
基本首部:固定 40字节
- 版本:4位,IPv6对应6
- 流标号:路由相同的数据报具有相同的流标号
- 有效载荷长度:16位,拓展首部+数据部分的长度和,最大值为64KB
- 跳数限制:8位,类似IPv4首部的TTL字段
- 源地址 / 目的地址:128位
-
有效载荷:0-n个拓展首部 + 数据部分
- 拓展首部类型:逐跳选项,路由选择,分片,鉴别,封装安全有效载荷,目的站选项
-
IPv6三种基本类型
- 单播:一对一
- 多播:一对多
- 任播:交付目标为一组计算机中最近的一个(路由算法计算距离)
-
新概念:节点、接口
-
IPv6地址写法:
- 冒号十六进制 记法:16个十进制数→8个4位十六进制数
- 零压缩:一对冒号代表一串0,
0:0:0:0...
→::
,一个地址只能用一次 - 点分十进制记法的后缀:斜线表示法
- 冒号十六进制 记法:16个十进制数→8个4位十六进制数
IPv4 向 IPv6 过渡
- 方法:逐步演进,向后兼容(IPv6 系统必须能够接收和转发IPv4分组,并且能够为IPv4 分组选择路由)
- 两种过渡策略:
-
① 双协议栈
-
② 隧道技术
-
ICMPv6
END 练习
- [子网掩码计算练习] 已知 IP 地址是 141.14.72.24,子网掩码是255.255.192.0。试求网络地址。
第5章 网络层:控制层面(Network Layer: Control Plane)
5.1 路由选择算法
LS: link state 链路状态算法
- 符号标记:
- LS算法
Flooding 洪泛算法
- 基本思想:把收到的每一个包,向除了该包到来的线路外的所有输出线路发送
- 缺点:产生大量重复包
- 解决方案:每个包头部包含计数器,每经过一站计数器减1,减至0丢弃该包
记录包经过的路径
DV: distance vector 算法
- 基本思想:与相邻路由器交换路由表,更新自己的路由表
- 示例:
- 保证路由表正确性的方法(6种)
- 最大度量值:针对不同协议有不同的最大度量值;当路由表中的度量值达到最大度量值时,认为路由失效,并移除这条路由。
- 水平分割:一个方向发来的路由信息,不能再放入该方向的路由更新包中 并且 又发回那个方向
- 路由中毒:网络中出现故障时,通知邻居节点该网段不可用
- 毒性反转 / 反向下毒:被通知该网段不可用的邻居节点也会通知原节点,自己也不能使用该网段
- 保持时间:不可用信息还会再保持一定时间才会被删除
- 触发更新:当路由器发现某个网段出现故障时,立刻发送路由更新包来通知邻居,而不用等到下一次发送路由更新包的时间
- 6种方法联合应用示例:
层次路由算法
5.2 内部网关协议 RIP
RIP 路由信息协议
OSPF 开放最短路径协议
- 使用Dijkstra的最短路径算法,采用分布式的LS协议
- 主要特点:
- 高级特性:
BGP 协议
- 主要特点
- eBSP 和 iBGP连接
END 练习
- 考虑图中所示的网络。使用Dijkstra算法(LS Route)和一个类似于表5-1的表来说明你做的工作:
a. 计算出从 t 到所有网络节点的最短路径
b. 计算出从 u 到所有网络节点的最短路径
c. 计算出从 v 到所有网络节点的最短路径
d. 计算出从 w 到所有网络节点的最短路径
e. 计算出从 y 到所有网络节点的最短路径
f. 计算出从 z 到所有网络节点的最短路径
答:解a,N=tuvwxyz
步骤 | N’ | D(t),p(t) | D(u),p(u) | D(v),p(v) | D(w),p(w) | D(x),p(x) | D(y),p(y) | D(z),p(z) |
---|---|---|---|---|---|---|---|---|
1 | t | 2, t | 4, t | ∞ | ∞ | 7, t | ∞ | |
2 | tu | 4, t | 5, u | ∞ | 7, t | ∞ | ||
3 | tuv | 5, u | 7, v | 7, t | ∞ | |||
4 | tuvw | 7, v | 7, t | ∞ | ||||
5 | tuvwy | 7, v | 19, y | |||||
6 | tuvwyx | 15, y | ||||||
7 | tuvwyxz |