第四章 网络层:数据平面
导论
网络层服务
- 在发送主机和接收主机对之间传送段(segment)
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
- 网络层协议存在于每一个主机和路由器
- 路由器检查每一个经过它的IP数据报的头部
网络层地关键功能
路由 :使用路由算法来决定分组从发送主机到目标接收主机的路径(global)
转发 :将分组从路由器的输入接口转发到合适的输出接口 (local)
网络层:数据平面、控制平面
数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达地分组如何转发到输出端口
- 转发功能:
- 传统方式:基于目标地址+路由表
- SDN方式:基于多个字段+流表
控制平面 :
- 网络范围内地逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径
- 2个控制平面方法:
- 传统的路由算法:在路由器中被实现(分布实现)
- SDN:在远程的服务器中实现(集中实现)
网络服务模型
网络提供什么样的服务模型
连接建立在某些网络架构中是第三个重要的功能
路由器组成
路由器结构概况
高层面通用路由器体系架构
路由 :运行路由选择算法/协议(RIP,OSPF,BGP)- 生成路由表转发 :从输入到输出链路交换数据包 - 根据路由表进行分组的转发
绿框表示物理层,bit级接收,调制解调
蓝框表示链路级,数据帧封装和解封装
红框:分组交换队列
- 根据数据包头部的信息在输入端口内存中的转发表中查找合适的输出端口
基于目标的转发 :仅仅依赖IP数据报的目标IP地址(传统方法)通用转发 :基于头部字段的任意组合进行转发
基于目标的转发
如果地址范围没有划分的特别规整:最长前缀匹配,当给定目标地址查找转发表时,采用最长地址前缀匹配的目标地址表项,在路由器中经常采用TCAMs( ternary content addressable memories)硬件来完成
输入端口缓存
当交换机构的速率小于输入端口的汇聚速率时->在输入端口可能要排队,通常交换机构的速率是输入端口速率的n倍
Head-of-the-Line(HOL)blocking:排在队头的数据报阻止了队列中其他数据报向前移动
交换结构
- 将分组从输入缓冲区传输到合适的输出端口
- 交换速率:分组可以按照该速率从输入传输到输出
- 3种典型的交换结构
通用内存交换(memory)- 第一代路由器
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制 (数据报通过BUS两遍)
- 一次只能转发一个分组
通过总线交换(bus)
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争:交换速度受限于总线带宽
- 1次处理一个分组
通过互联网络的交换(crossbar等)
- 同时并发转发多个分组,克服总线带宽限制
- Banyan(榕树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器
输出端口
数据报(分组)由于拥塞,缓冲去没有空间可能会被丢弃
- 当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存
- 由调度规则选择排队的数据报进行传输(类似于os中的页面置换算法或者进程调度)
调度机制
调度 : 选择下一个要通过链路传输的分组
FIFO : 按照分组到来的次序发送优先权 : 发送最高优先权的分组Round Robin : 循环选择Weighted Fair Queuing (WFQ) :一般化的Round Robin,在一段时间内,每个队列得到的服务时间权重成正比 丢弃策略
tail drop : 丢弃刚到达的分组priority : 根据优先级丢失分组random :随机丢弃
IP: Internet Protocol
互联网的网络层
IP数据报格式
IP分片和重组
- 网络链路有MTU(最大传输单元) - 链路层帧所携带的最大数据长度,不同的链路类型有不同的MTU
- 大的IP数据报在网络上被分片,一个数据报被分割成若干个小的数据报
- 相同的ID
- 不同的偏移量(偏移量以8个字节为单位)
- 最后一个分片标记为0
- “重组”只在最终的目标主机上进行
- IP头部的信息被用于标识,排序相关分片
IP编址
IP地址 :32位标示,对主机或者路由器的接口编址
接口 :主机/路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也可能拥有多个接口
- IP地址和每个接口关联
一个IP地址和一个接口相关联
子网
IP地址:
子网:
IP地址分类
A类、B类、C类、D类、E类地址
特殊IP地址
一些约定
- 子网部分:全为0 – 本网络
- 主机部分:全为0 – 本主机
- 主机部分:全为1 – 广播地址
内网(专用)IP地址
专用地址 :地址空间的一部份供专用地址使用- 永远不会被当做公用地址来分配, 不会与公用地址重复永远不会被当做公用地址来分配, 不会与公用地址重复
- 路由器不对目标地址是专用地址的分组进行转发
- 专用地址范围
- Class A 10.0.0.0-10.255.255.255 MASK 255.0.0.0
- Class B 172.16.0.0-172.31.255.255 MASK 255.255.0.0
- Class C 192.168.0.0-192.168.255.255 MASK 255.255.255.0
IP编址:CIDR
CIDR : 无类域间路由(classless interdomain routing)
- 子网部分可以在任意的位置
- 地址格式: a.b.c.d/x, 其中 x 是地址中子网号的长度
子网掩码
- 32bits , 0 or 1 in each bit
- 1: bit位置表示子网部分
- 0:bit位置表示主机部分
- 另外的一种表示子网掩码的表达方式 — /# (/22表示前面22个bit位子网部分)
转发表和转发算法
-
获得IP数据报的目标地址 -
对于转发表中的每一个表项
- 若(IP Des addr) & (mask)== destination,则按照表项对应的接口转发数据报
- 如果没有找到,则使用默认表项转发数据报
如何配置IP地址
- 手动配置 – 需要配置四个信息(IP,子网掩码,域名服务器,默认网关)
- DHCP(Dynamic Host Configuration Protocol)自动配置
DHCP
目标:允许主机在加入网络的时候,动态地从服务器那里获得IP地址
- 可以更新对主机在用IP地址租用期
- 重新启动时,允许重新使用以前用过的IP地址
- 支持移动用户加入到该网络(短期在网)
DHCP工作概况:
- 主机广播“DHCP discover” 报文[可选]
- DHCP 服务器用 “DHCP offer”提供报文响应[可选]
- 主机请求IP地址:发送 “DHCP request” 报文
- DHCP服务器发送地址:“DHCP ack” 报文
DHCP返回的信息内容和手工配置需要的四个数据相同
层次编址:路由聚集
NAT:Network Address Translation
所有离开本地网络的数据报具有一个相同的源地址,但是具有不同的端口号
动机:本地网络只有一个有效的IP地址
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的–安全
实现:NAT路由器必须
- 外出数据包:替换源地址和端口号为NAT IP地址和新的端口号,目标IP和端口不变
- 记住每个转换替换对(在NAT转换表中)
- 进入数据包:替换目标IP地址和端口号,采用存储在NAT表中的mapping表项
NAT的一些缺陷
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
- 违反了
end-to-end原则
- 端到端原则:复杂性放到网络边缘
- NAT可能要被一些应用设计者考虑, eg, P2P applications
- 外网的机器无法主动连接到内网的机器上
- 地址短缺问题可以被IPv6 解决
NAT穿越
方案一:静态配置NAT,静态配置源主机ip和端口与NAT网关的端口的映射
方案二:自动化静态NAT端口映射配置(UPnP协议),使用IGD设备,允许NATed主机可以:
- 获知网络的公共IP地址
- 列举存在的端口映射
- 增/删端口映射
方案三:中继(used in Skype)
- NAT后面的服务器建立和中继的连接
- 外部的客户端链接到中继
- 中继在2个连接之间桥接
IPv6
初始动机:ipv4地址不够用
其他动机:
- 头部格式的改变帮助加快处理和转发
- 头部格式改变帮助 QoS (Quality of Service)
IPv6报文格式
Priority: 标示流中数据报的优先级
Flow Label: 标示数据报在一个“flow.” ( “flow”的概念没有被严格的定义)
Next header: 标示上层协议
和IPv4的区别
Checksum : 被移除掉,降低在每一段中的处理速度Options : 允许,但是在头部之外, 被 “Next Header” 字段标示ICMPv6 : ICMP的新版本
- 附加了报文类型, e.g. “Packet Too Big”,IPv6报文不可分片
- 多播组管理功能
从IPv4到IPv6的平移
隧道 :在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
通用转发和SDN
传统的网络层的控制平面
每个路由器上都有实现路由算法元件(它们之间需要相互交互)- 形成传统IP实现方式的控制平面
- 每台设备上既实现控制功能、又实现数据平面
- 控制功能分布式实现
- 路由表-粘连
网络设备控制平面的实现方式特点
互联网网络设备:传统方式都是通过分布式,每台设备的方法来实现数据平面和控制平面功能
垂直集成 :每台路由器或其他网络设备,包括:
- 硬件、在私有的操作系统;
- 互联网标准协议(IP, RIP, IS-IS, OSPF, BGP)的私有实现
- 每个设备都实现了数据平面和控制平面的事情
- 设备基本上只能(分布式升级困难)按照固定方式工作,控制逻辑固化。不同的网络功能需要不同的“middleboxes”:防火墙、负载均衡设备、NAT boxes…
传统方式实现网络功能的问题
- 垂直集成 -> 昂贵、不便于创新的生态
- 分布式、固化设备功能==网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级特性
- 配置错误影响全网运行;升级和维护会涉及到全网设备:管理困难
- 要增加新的网络功能,需要设计、实现以及部署新的特定设备,设备种类繁多
~2005: 开始重新思考网络控制平面的处理方式
- 集中:远程的控制器集中实现控制逻辑
- 远程:数据平面和控制平面的分离
SDN:软件命名网络
一个不同的(通常是远程)控制器和CA交互,控制器决定分组转发的逻辑(可编程),CA所在设备执行逻辑。
主要思路
-
网络设备的数据平面和控制平面分离 -
数据平面-分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻辑)进行PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
-
控制平面-控制器+网络应用
SDN控制平面和数据平面分离的优势
- 水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展
- 集中式实现控制逻辑,网络管理容易
- 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
SDN特点
- 通用“ flow-based” 基于流的匹配+行动 (e.g.,* OpenFlow)
- 控制平面和数据平面的分离
- 控制平面功能在数据交换设备之外实现
- 可编程控制应用在控制器之上以网络应用形式实现各种网络功能
SDN架构:SDN控制器
SDN 控制器(网络OS) :
- 维护网络状态信息
- 通过上面的北向API和网络控制应用交互
- 通过下面的南向API和网络交换机交互
- 逻辑上集中,但是在实现上通常由于性能、可扩展性、容错性以及鲁棒性采用分布式方法
OpenFlow
数据平面抽象
流 :由头部字段所定义
通用转发 :简单的分组处理规则
模式Pattern : 将分组头部字段和流表进行匹配行动 :对于匹配上的分组,可以是丢弃、转发、修改将匹配的分组发送给控制器优先权Priority : 几个模式匹配了,优先采用哪个,消除歧义计数器Counters : #bytes 以及 #packets
流表的表项结构
|