第4章 网络层:数据平面
目录:
- 目标:
- 理解网络服务的基本原理,聚焦于其数据平面
- 网络服务模型
- 转发和路由
- 路由器工作原理
- 通用转发
- 互联网中网络层协议的实例和实现
- 提纲:
- 导论
- 数据平面
- 控制平面
- 路由器组成
- IP: Internet Protocol
- 数据报格式
- 分片
- IPv4地址
- NAT:网络地址转换
- IPv6
- 通用转发和SDN
- 匹配
- 行动
OpenFLow
有关“匹配+行动”的运行实例
1 导论
网络层功能:
- 转发: 将分组从路由器的输入接口转发到合适的输出接口(局部)
- 路由: 使用路由算法来决定分组从发送主机到目标接收主机的路径(整体)
1.1 网络层:数据平面、控制平面
- 数据平面:
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到输出端口
- 转发功能:
- 传统方式:基于目标地址+转发表
- SDN方式:基于多个字段+流表
- 控制平面;
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径
- 2个控制平面方法:
- 传统的路由算法: 在路由器中被实现
- software-defined networking(SDN): 在远程的服务器中实现
1.1.1传统方式:每-路由器(Per-router)控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
1.1.2 SDN方式:逻辑集中的控制平面
一个不同的(通常是远程的)控制器与本地控制代理(CAs)交互
1.2 网络服务模型
尽力而为的服务
- 对于单个数据报的服务:
- 可靠传送(确保交付)
- 延迟保证,如:少于40ms的延迟
- 对于数据报流的服务:
- 保序数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
2 路由器组成和原理
四个组件:
- 输入端口
- 交换结构
- 输出端口
- 路由选择处理器
2.1 输入端口
- 接入物理层
- 与数据链路层交互
- 查询转发表
2.1.1 基于目标的转发
在32比特IP地址的情况下,转发表的蛮力实现将针对每个目的地址有一个表项共40亿种,这显然不现实,故采用最长前缀匹配的方式
2.1.2 输入端口缓存
当交换机构的速率小于输入端口的汇聚速率时, 在输入端口可能要排队,所以需要缓存
- 两个输入端口对应同一个输出端口时会被阻塞
- 在输入端口种前一个被阻塞,后面的全部被阻塞
2.2 交换结构
将分组从输入缓冲区传输到合适的输出端口(与输入端口的区别是,输入端口只负责找到输出端口,而将分组送到输出端口由交换结构处理)
交换速率:分组可以按照该速率从输入传输到输出
N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈
三种典型的交换机构:
2.2.1 通过内存交换
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,然后CPU取出分组头部,查转发表,再转发
- 转发速率被内存的带宽限制(数据报通过BUS两遍)
- 1次处理一个分组
2.2.2 通过总线交换
- 输入端口为分组预先计划一个交换机首部标签,只有匹配的输出端口才能保留,其他丢弃
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争: 交换速度受限于总线带宽
- 1次处理一个分组
2.2.3 通过互联网络(crossbar等)的交换
- 同时并发转发多个分组,克服总线带宽限制
2.3 输出端口
当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存
由调度规则选择排队的数据报进行传输
2.3.1 输出端口排队
当多个输入端口同时向输出端口发送时,缓冲该分组(当通过交换网络到达的速率超过输出速率则缓存)
2.3.2 调度机制
调度: 选择下一个要通过链路传输的分组
- 先进先出:按照分组到来的次序发送
- 优先权排队:发送最高优先权的分组
- 循环和加权公平排队
3 IP: Internet Protocol
3.1 IP 数据报格式
- 版本:这4比特规定了数据报的IP协议版本。
- 首部长度:因为IPv4数据会有可选片段,但实际一般不会有,一般长度为20
- 服务类型:传输的优先级,但实际没啥用,因为大家都会调到最高
- 数据报长度:IP数据报的总长
- 标识、标志、片偏移:这三个字段与所谓IP分片有关
- 标识:每一个数据报都有唯一标识,主机每发送一个+1
- 标志:最后一个分片为0,其余为1
- 片偏移:数据的偏移量
- 寿命:TTL
- 协议:说明是TCP还是UDP
- 首部检验和:首部检验和用于帮助路由器检测收到的IP数据报中的比特错误
- 源和目的IP地址
- 选项:选项字段允许IP首部被扩展,没啥用
- 数据
3.2 IP 分片和重组(Fragmentation & Reassembly)
- 一个数据报被分割成若干个小的数据报
- 相同的ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行
3.3 IPv4 编址
IP 地址: 32位标示,对主机或者路由器的接口编址
子网:一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网
- IP地址:
- 子网部分(高位bits)
- 主机部分(低位bits)
3.3.1 IP 地址分类
类别 | 前缀 | 网络数 | 主机数 |
---|---|---|---|
A | 0 | 2^7-2=126 | 2^24-2 |
B | 10 | 16382 | 64 K |
C | 110 | 2百万+ | 254 |
D | 1110 | 用于组播 | multicast |
E | 11110 | 还没用过 | 预留的 |
B类网络数太少,C类主机数又太少,故现在采用子网掩码的方式
就是一个子网内最长的相同前缀例如:11111111 11111111 11111100 00000000/22
3.3.2 层次编制与路由聚合
路由聚合:将多个主机的相同最长前缀合并成一个子网掩码
例如:200.23.16.0/23
+200.23.18.0/23
+200.23.18.0
=>200.23.16.0/20
3.3.3 获得一个IP地址
- 系统管理员将地址配置在一个文件中
/etc/rc.config
- DHCP(Dynamic Host Configuration Protocol):从服务器中动态获得一个IP地址
步骤:
- DHCP服务器发现:新加入的主机向子网的67号端口广播(255.255.255.255)发送DHCP发现报文(UDP),并将本机IP设置为0.0.0.0
- DHCP服务器提供:当DHCP服务器收到发现报文时,向子网所以节点广播(因为可能有多个主机同时接入)。提供报文段包括:发现报文的事务ID、向客户推荐的IP地址、网络掩码以及IP地址租用
- DHCP请求:新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文(DHCP request mess昭e)进行响应,回显配置的参数。
- DHCP ACK:服务器用 DHCP ACK 报文(DHCP ACK message)寸 DHCP 请求报文进行响应,证实所要求的参数。
3.3.4 网络地址转换NAT: Network Address Translation
- 动机: 本地网络只有一个有效IP地址
- 省钱:只用买一个IP地址
- 安全:外网无法直接访问内容
- 灵活:外网IP可以随意变化,不会影响到内网IP
内部主机向外部服务器发送请求比较容易:通过一个统一 的路由器封装成一个统一IP发送出去即可
外部主机向内部发送报文较难,因为无法确认是哪一主机,解决方案:NAT转换表
NAT转换表:使用IP+端口号方式来转换,一个外网IP+一个端口号=>一个内网IP+端口号
举例:一个内网IP为10.0.0.1的主机使用3345端口访问服务器128.119.40.186的80端口
- DHCP会为10.0.0.1的3345端口分配一个外网IP+端口比如138.76.29.7的5001端口,并写入NAT转换表
- 10.0.0.1:3345向138.77.29.7:80发送请求
- 路由器通过NAT转换表将其转化为138.76.29.7.5001
- 服务器收到后向138.76.29.7.5001发送响应
- 路由器将138.76.29.7.5001通过NAT转换表将其转换为10.0.0.1:3345
3.4 IPv6
初始动机: 32-bit地址空间被用完
3.4.1 IPv6 数据报格式
- 固定的40 字节头部
- 数据报传输过程中,不允许分片
3.4.2 从IPv4到IPv6的平移
隧道: 在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
IPv6相当于一个孤岛,IPv4相当于海洋
IPv4之间相互通信没有任何影响,一个子网内IPv6之间相互通信也没有任何问题
但两个不同的IPv6子网间通信就必须通过IPv4
采用隧道的方式进行相互通信
其实本质上就封装和解封,将IPv6的报文封装为IPv4再解封装为IPv6
4 通用转发和SDN(了解)
- 传统方式实现网络功能的问题:
- 垂直集成(从上到下都由一个厂商提供)>昂贵、不便于创新的生态
- 分布式、固化设备功能==网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级特性
- 配置错误影响全网运行;升级和维护会涉及到全网设备:管理困难
- 要增加新的网络功能,需要设计、实现以及部署新的特定设备,设备种类繁多
- SDN:逻辑上集中的控制平面
- 网络设备数据平面和控制平面分离
- 水平集成控制平面的开放实现
- 集中式实现控制逻辑,网络管理容易
- 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
- 流表:
- 模式: 将分组头部字段和流表进行匹配
- 行动:对于匹配上的分组,可以是丢弃、转发、修改、将匹配的分组发送给控制器
- 优先权Priority : 几个模式匹配了,优先采用哪个,消除歧义
- 计数器Counters: #bytes 以及#packets
- 动作常见的有三种:
- 简单转发
- 负载均衡
- 充当防火墙