数据平面
笔者阅读《计算机网络------自顶向下方法》第七版第四章所作笔记如下,主要为网络层数据平面功能。
第一章概述笔记入口
第二章应用层笔记入口
第三章运输层笔记入口
第四章网络层数据平面笔记入口
一、概述
网络层能够被分为两个相互作用的部分,分别为 数据平面和控制平面。
网络层的作用从表面上看主要作用为:将分组从一台主机发送至另一台主机,因此,需要提供两个重要的功能分别由数据平面和控制平面完成:
- 转发:当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路。
- 转发通常是路由器本地动作,发生所需要的时间也很短,通常为几纳秒,因此通常采用硬件实现。
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算路径的算法被称为路由选择算法。
- 路由选择发生的时间尺度较长,通常为几秒,因此通常采用软件来实现。
路由器中通常具有转发表,当一个分组到达路由器时,路由器检查到达分组首部的一个或多个字段,然后使用这些字段中转发表中查找,进而决定分组的转发方向。
- 数据平面主要就是执行根据转发表索引结果的转发动作
- 控制平面主要决定转发表中的记录项是如何配置产生的
- 传统方法:通过路由选择算法以及路由器间的通信,计算出转发表中的值
- SDN 方法:远程控制器将路由选择从路由器中物理分离开,它可以计算和分发转发表供每台路由器所使用,路由设备仅仅执行转发功能。路由器和远程控制器之间通过交换包含转发表和其他路由选择信息的报文进行通信。这种控制平面的方法称为软件定义网络(Software Defined Networking,SDN),因为计算转发表并与路由器交互的控制器时用软件实现的。
网络服务模型定义了分组中发送与接收端系统之间的端到端运输特性。网络层可能包含的服务有:
- 确保交付
- 具有时延上界的确保交付
- 有序分组交付
- 确保最小带宽
- 安全性
因特网的网络层提供了单一服务,称为尽力而为的服务。即传送的分组既不能保证它们以发送的顺序被接受,也不能保证最终会被交付,既不能保证端到端时延,也不能保证有最小的带宽
二、路由器工作原理
一台路由器通常由以下四个组件构成
- 输入端口:输入端口中路由器中执行终结入物理链路的物理层功能,同时与位于入链路远端的数据链路层交互来执行数据链路层功能,查找功能,即通过查询转发表决定路由器的输出端口
- 交换结构:交换结构将路由器的输入端口连接到输出端口
- 输出端口:输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能中输出链路上传输这些分组
- 路由选择处理器:执行网络层控制平面的功能。在传统路由器中,它执行路由选择协议,维护路由选择表于关联链路状态信息,并为该路由器计算转发表。在 SDN 路由器中,它负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。
1. 输入端口处理
输入端口处理:
2. 交换
交换结构位于一台路由器的核心部位,正式通过交换结构,分组才能完成从一个输入端口到一个输出端口的转发。
交换可使用多种方式完成,如
- 经内存交换
- 工作方式:一个分组到达一个输入端口时,该分组会被复制到处理器内存中,内存从其首部中提取目的地址,在转发表中找出适当的输出端口,并将该分组复制到输出端口的缓存中。
- 特点:最简单、最早的路由器(是传统的计算机)
- 经总线交换
- 工作方式:输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,是分组中总线上传送和传输到输出端口。该分组会被所有端口收到,但只有与该标签匹配的输出端口才能保存该分组,该输出端口会同时将标签去除。
- 特点:多个分组同时到达路由器时,一次只有一个分组能够跨越总线,因此其他分组必须等待。
- 经互联网络交换
- 工作方式:纵横式交换机是一种由 2N 条总线组成的互联网络,连接 N 个输入端口和输出端口
- 特点:能够并行转发多个分组,是非阻塞的,即只要没有其他分组当前被转发到输出端口,则转发到输出端口的分组不会被到达输出端口的分组阻塞。
3. 输出端口处理
输出端口负责处理取出已经存放在输出端口内存中的分组并将其转发到输出链路上。
4. 排队
从输入端口处理和输出端口处理的过程可以了解到,在输入端口和输出端口处都可以形成分组队列,当缓存(内存)无可用空间时,新到达的分组会被丢弃,即出现 丢包或弃尾现象。
5. 分组调度
排队的分组如何经过选择进入链路,即排队的次序问题的解决我们通过分组调度来完成。分组调度有以下几种方式
① 先进先出
即传统的依次排序方式
② 优先权排队
分组队列被分为几个不同的队列,不同队列具有不同的优先权,高优先权的队列会先被处理。
③ 循环和加权公平排队
分组仍像使用优先权排队那样被分类排队,但是不严格执行优先,而是由循环调度器在这些类之间轮流提供服务,由权重决定了轮训的规则。
三、网际协议
1. IPv4 数据报格式
一个 IP 数据报有总长为 20 字节的首部(这里假定无选项)。
2. IPv4 数据报分片
由于不是所有的链路层协议都能承载相同长度的网络层分组,有的协议能承载大数据报,而有的协议只能承载小分组。
一个链路层帧能过承载的最大数据量叫作最大传送单元(Maximum Transmission Unit,MTU)。
由于每个 IP 数据报会被封装中链路层帧中经路由器传输,因此 IP 数据报的长度被最大传送单元所限制。
解决方案为,将过大的数据报分成多个较小的部分,每个较小的数据报被称为片(fragment),这个过程即为分片。
片在到达目的地运输层之前,需要重新组装。而在 IPv4 协议中,组装工作被放到了端系统而不是路由器中。
当一台目的主机从相同源收到一系列数据报时,它需要确定这些数据报中的某些是否是一些原来较大的数据报的片。在 IP 数据报的首部中,标识、标志、片偏移字段用于分片和组装。
当生成一个数据报时,发送主机中为该数据报设置源和目的地址的同时,贴上标识号,发送主机通常将它发送的每个数据报的标识号加 1 。当某路由器需要对一个数据报分片时,形成的每个片具有初始数据报的原地址、目的地址与标识号。当目的地址从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。为了让目的主机确定收到了数据报的最后一片,路由器会将最后一个片的标志比特设为 0,其他片的标志比特为设为 1。为了让目的主机能够正确的按顺序重新组装,并可以确定是否丢失,使用片偏移字段指定位置。
3. IPv4 编址
首先明确:
主机与物理链路之间的边界叫作接口。
一个 IP 地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。
每个 IP 地址长度为 32 比特,因此共有
2
32
2^{32}
232 个(大约 40 亿)。这些地址通常按 点分十进制记法 书写,例如 193.32.216.9。或用二进制表示为 11000001 00100000 11011000 00001001。
一个接口的 IP 地址的一部分需要由其连接的子网来决定。
形式为 a.b.c.d/x 的地址定义子网地址,例如 223.1.1.0/24,其中的 /24 记法,被称为子网掩码,它表示 32 比特中的最左侧 24 比特定义了子网地址。在该子网内部,所有的设备的 IP 地址将具有相同的前缀,即该子网内部所有的 IP 地址的前 24 位比特相同。
因此,当外部的路由器在转发数据报时,该数据报位于该子网内部,则外部路由器仅需考虑前缀即可,这相当大地减少了路由器中转发表的长度。当转发表同时匹配上多个地址时,采用最长前缀匹配方式进行转发。
剩余的 32 - x 比特可以认为是用于区分该子网内部设备的。并且这些较低阶的比特还可能具有内部的子网结构。
在 无类别域间路由选择 CIDR 被采用之前,IP 地址的网络部分被限制为长度为 8、16 或 24 比特,这种方案被称为分类编址。具有 8、16 和 24 比特子网地址的子网被分别称为 A、B、C类网络。但由于 B 类子网内部可支持 65534 台主机,过大,而 C 类子网仅能容纳 254 台主机,过小,因此会导致很多地址被浪费。
255.255.255.255 被称为 IP 广播地址。当一台主机发出一个目的地址为 255.255.255.255 的数据报时,该报文会交付给同一个网络中的所有主机。路由器也会有选择地向邻近子网转发该报文。
4. IP地址的分配
我们假定待获取 IP 的主机位于一个组织的子网内,那么分配 IP 的过程如下:
首先,ISP 会从已经分配给它的更大的子网地址块中提供一部分地址给该组织。注: IP 地址由 因特网名字和编号分配机构(ICANN)管理。
当该组织获得一块地址,它就可以为本组织内的主机与路由器接口逐个分配 IP 地址。该工作可以手动配置,但更多通过 **动态主机配置协议(Dynamic Host Configuration Protocol)**完成,它又被称为 “即插即用协议” 或 “配置协议” 。
网络管理员能够配置 DHCP 分配策略,可以使某主机每次连接到子网时都获得相同的 IP 地址,也可以被分配一个临时的 IP 地址,这样每次连接的 IP 地址也可能不同。
DHCP 协议原理:
DHCP 是一个客户—服务器协议,每个子网通常都会具有 DHCP 服务器或一个 DHCP 中继代理(通常是一台路由器),而客户则是需要接入子网的主机。整个分配地址的过程如下
-
DHCP 服务器发现。新接入的主机发送 DHCP发现报文 与DHCP 服务器进行交互,使用 UDP 协议 67 端口。由于当前主机还没有被分配 IP,也不知道数据报该发给谁,所以在数据报中,将源主机 IP 地址设为 0.0.0.0,目的地址使用广播地址 255.255.255.255,将该报文发送至连接该子网的所有节点。 -
DHCP 服务器提供。当 DHCP 服务器收到 DHCP 发现报文时,用 DHCP提供报文 向客户做出响应。此时该报文仍使用广播地址向所有节点发送。注意子网中可能存在多个 DHCP 服务器,因此客户端主机可以中几个 DHCP 提供报文之间进行选择。DHCP 提供报文包含有收到的发现报文的事务 ID、向客户推荐的 IP 地址、网络掩码以及 IP 地址租用期(通常为几个小时或几天)。 -
DHCP 请求。客户会从到达的 DHCP 提供报文中选择一个,并向选中的服务器提供者响应 DHCP请求报文,回显配置的参数。 -
DHCP ACK。服务器用 DHCP ACK 报文 对 DHCP 请求报文进行响应,证实所要求的参数。
5. 网络地址转换
当子网内的主机数不断变多,而一时又无法分配更大的地址范围时,可以采用一些简单的方法来解决。
**网络地址转换(Network Address Translation,NAT)**就可以处理这样的问题。
NAT 使路由器对于外部世界来说不像一台路由器而是如同一个具有单一 IP 地址的单衣设备,即 NAT 路由器对外界隐藏了内部网络的细节。
它的工作方式为:
从广域网到达 NAT 路由器的所有数据报都具有相同的目的 IP 地址,由 NAT 路由器根据 NAT 转换表将分组发送至对应的内部主机中,而指示方式上通过 IP 加上端口号的方式,以下是 NAT 转换表的示例
NAT 转换表 | WAN 端 | LAN 端 | 138.76.29.7,5001 | 10.0.0.1,3345 | ... | ... |
缺点:
- 端口号是用于进程寻址的,而使用 NAT 后,端口被用于主机寻址
- 路由器是网络层设备,应当处理只能达到网络层的分组,而 NAT 违反主机应当直接彼此对话这个原则,没有干涉节点修改 IP 地址,更不用说端口号。
6. IPv6
由于新的子网和 IP 节点以惊人的增长率连接到因特网上,32比特的 IP 地址空间即将用尽。因此开发了新的 IP 协议,IPv6,同时还强化了 IPv4 的其他方面
① IPv6 数据报格式
其中重要的变化有
- 扩大地址容量。IPv6 将 IP 地址长度从 32 比特增加带 128 比特。同时除了单播和多播地址外,IPv6 还引入了任播地址,可以使数据报交付给一组主机中的任意一个。
- 简化高效的 40 字节首部。IPv6 舍弃了 IPv4 数据报首部的一些字段,形成了 40 字节的定长首部。
- 流标签。IPv6 引入了流的定义。可以用于给特殊流的分组加上标签。
- 分片与重新组装。IPv6 不允许在中间路由器上进行分片与重新组装,只能在源与目的地执行该操作。如果路由器收到的 IP 数据报太大不能转发,它将丢弃该数据报,并向发送方返回一个 “分组太大” 的 ICMP 差错报文。
② 从 IPv4 到 IPv6
迁移到方法广泛采用的是 建隧道的方式。
两个 IPv6 节点要使用 IPv6 数据报进行交互,但他们经由 IPv4 路由器互联。在交界处,将 IPv6 的整个数据报放到 IPv4 的数据(有效载荷)中。
四、通用转发和 SDN
由于第二层交换机和第三层路由器等中间盒的剧增,软件定义网络(SDN)提供了一种统一方法来总结多种网络层功能。
我们将基于目的地转发的特征总结为两个步骤
- 匹配:查找目的 IP 地址,
- 动作:将分组发送到有特定输出端口的交换结构。
其中动作可以包括例如:转发、负载均衡、重新首部值(如NAT)、拦截或丢弃(防火墙)等。
这种 匹配加动作 的方式即为通用转发。
在通用转发中,转发表变得一般化了。OpenFlow 中通用转发中是一个被高度认可的标准。匹配加动作转发表中 OpenFlow 中称为流表,它的每个表项包括:
- 首部字段值的集合:即匹配字段
- 计数器集合:记录已经与该表项匹配的分组数量已经更新时间
- 动作集合:当分组匹配到该表项时需要采取的动作。
|