第四章 网络层:数据平面
1、导论
1.1 网络层:数据平面
-
本章目标:
-
理解网络服务的基本原理,聚焦于其
数据平面
- 网络服务模型
- 转发和路由
- 路由器工作原理
- 通用转发
- 互联网中网络层协议的实例和实现
-
理解网络服务的基本原理,聚焦于其
- 网络层服务
- 在发送主机和接收主机对之间传送段(segment)
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
-
网络层协议存在于
每一个
主机 和路由器 - 路由器检查每一个经过它的IP数据报的头部
-
网络层的关键功能
网络层功能:
-
转发:将分组从路由器的输入接口转发到合适的输出接口
-
路由:使用路由算法来决定分组从发送主机到目标接收主机的路径
- 路由选择算法
-
路由选择协议
路由的类比:
-
转发:通过单个路口的过程
-
路由:从源到目的的路由路径规划过程
-
1.2 网络层:数据平面、控制平面
-
数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到 输出端口
-
转发功能:
- 传统方式:基于目标地址+转发表
- SDN方式:基于多个字段+流表
-
控制平面
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径
-
2个控制平面方法:
- 传统的路由算法: 在路由器 中被实现
- software-defined networking (SDN): 在远程的服务器中 实现
1.3 网络层:控制平面
-
传统方式:每一路由器(per-router)控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
-
传统方式:路由和转发的相互作用
-
SDN方式:逻辑集中的控制平面
一个不同的(通常是远程的)控制器与本地控制代理(CAs)
-
网络服务模型
Q:从发送方主机到接收方主机传输数据报的“通道” ,网络提供什么样的服务模型?
对于单个数据报的服务:
- 可靠传送
- 延迟保证,如:少于 40ms的延迟
对于数据报流的服务:
- 保序数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
-
连接建立
-
在某些网络架构中是第三个重要的功能
- ATM, frame relay, X.25
-
在分组传输之前,在两个主机之间,在通过一些 路由器所构成的路径上建立一个网络层连接
- 涉及到路由器
-
网络层和传输层连接服务区别:
- ==网络层:==在2个主机之间,涉及到路径上的一些路由器
- ==传输层:==在2个进程之间,很可能只体现在端系统上 (TCP连接)
-
在某些网络架构中是第三个重要的功能
2、路由器组成
2.1 路由器结构概述
高层面(非常简化的)通用路由器体系结构
-
路由:运行
路由
选择算法/协议(RIP,OSPF,BGP)-生成路由表 -
转发:从输入到输出链路交换数据报-根据路由表进行分组的
转发
2.2 输入端口功能
2.3 最长前缀匹配
- 我们将会在学习IP地址时,简单讲解为什么要 采用最长前缀匹配
-
最长前缀匹配:在路由器中经常采用TCAMs( ternary content addressable memories)硬件来完成
- 内容可寻址:将地址交给TCAM,它可以在一个时 钟周期内检索出地址,不管表空间有多大
- Cisco Catalyst系列路由器: 在TCAM中可以存储多达约为1百万条路由表项
2.4 输入端口缓存
-
当交换机构的速率小于输入端口的汇聚速率时, 在输入端口可能要排队
- 排队延迟以及由于输入缓存溢出造成丢失!
-
Head-of-the-Line (HOL) blocking: 排在队头的数据报 阻止了队列中其他数据报向前移动
2.5 交换结构
-
将分组从输入缓冲区传输到合适的输出端口
-
交换速率:分组可以按照该速率从输入传输到输出
- 运行速度经常是输入/输出链路速率的若干倍
- N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理 想,才不会成为瓶颈
-
3种典型的交换结构
-
通过内存交换
第一代路由器:
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标 地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制 (数据报通过BUS两遍)
- 一次只能转发一个分组
-
通过总线交换
- 数据报通过共享总线,从输入端 口转发到输出端口
- 总线竞争: 交换速度受限于总线带宽
- 1次处理一个分组
- 1 Gbps bus, Cisco 1900; 32 Gbps bus, Cisco 5600;对于接入或企业级路由器,速度足够(但不适合区域或骨干网络)
-
通过互联网络(crossbar等)的交换
- 同时并发转发多个分组,克服总线带宽限制
- Banyan(榕树)网络,crossbar(纵横) 和其它的互联网络被开发,将多个处理器连接成多处理器
- 当分组从端口A到达,转给端口Y;控 制器短接相应的两个总线
- 高级设计:将数据报分片为固定长度的 信元,通过交换网络交换
- Cisco12000:以60Gbps的交换速率通过互联网络
2.6 输出端口
数据报(分组)可能被丢弃,由于拥塞,缓冲区没有空间
-
当数据报从交换机构的到达速度比传输速率快 就需要输出端口
缓存
-
由
调度规则
选择排队的数据报进行传输 -
输出端口排队
- 假设交换速率Rswitch是Rline的N倍(N:输入端口的数量)
- 当多个输入端口同时向输出端口发送时,缓冲该分组(当通 过交换网络到达的速率超过输出速率则缓存)
-
排队带来延迟,由于输出端口缓存溢出则丢弃数据报!
2.7 调度机制
-
==调度:==选择下一个要通过链路传输的分组
-
FIFO (first in first out)scheduling: 按照分组到来的次序发送
-
丢弃策略:如果分组到达一个满的队列,哪个分组将会 被抛弃?
- tail drop:丢失刚到达的分组
- priority:根据优先权丢失/移除分组
- random:随机的丢失/移除
-
丢弃策略:如果分组到达一个满的队列,哪个分组将会 被抛弃?
-
调度策略:优先权
==优先权调度:==发送最高优先权的分组
-
多类,不同类别有不同的 优先权
- 类别可能依赖于标记或者其 他的头部字段, e.g. IP source/dest, port numbers, ds,etc.
- 先传高优先级的队列中的分 组,除非没有
- 高(低)优先权中的分组传 输次序:FIFO
-
多类,不同类别有不同的 优先权
-
调度策略:其他的
- 多类
- 循环扫描不同类型的队列, 发送完一类的一个分组 ,再发送下一个类的一个分组,循环所有类
3、IP:Internet Protocol
3.1 数据报格式
-
互联网的网络层
主机,路由中的网络层功能
-
IP数据报格式
3.2 分片和重组
-
网络链路有MTU (最大传输单元) –链路层帧所携带的最大数据长度
- 不同的链路类型
- 不同的MTU
-
大的IP数据报在网络上被分片 (“fragmented”)
-
一个数据报被分割成若干个小的数据报
- 相同的ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机 进行
- IP头部的信息被用于标识,排序相关分片
-
一个数据报被分割成若干个小的数据报
3.3 IPV4地址
-
IP编址:引论
-
IP 地址:
32位标示,对 主机或者路由器的接口编址 -
==接口:==主机/路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP地址和每一个接口关联
一个IP地址和一个接口相关联
-
-
子网(Subnets)
-
IP地址:
- 子网部分(高位bits)
- 主机部分(低位bits)
-
什么是子网(subnet) ?
- 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同 ,这些节点构成的网络的一部分叫做子网
-
无需路由器介入
,子网 内各主机可以在物理上 相互直接到达
-
判断方法:
- 要判断一个子网, 将每一 个接口从主机或者路由 器上分开,构成了一个个 网络的孤岛
- 每一个孤岛(网络)都是一个都可以被称之为 subnet.
- 子网掩码:11111111 11111111 11111111 00000000
- Subnet mask:/24
-
IP地址:
-
IP地址分类
- Class A:126 networks ,16 million host
- Class B:16382networks ,64 K hosts
- Class C:2 million networks ,254 host
- Class D:multicast
- Class E:reserved for future
-
特殊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 是 地址中子网号的长度
- 200.23.16.0/23
- 子网掩码:11111111 11111111 11111110 00000000
-
子网掩码(subnet mask)
-
32bits , 0 or 1 in each bit
- 1: bit位置表示子网部分
- 0:bit位置表示主机部分
-
原始的A、B、C类网络的子网掩码分别是
- A:255.0.0.0 :11111111 00000000 0000000 00000000
- B:255.255.0.0:11111111 11111111 0000000 00000000
- C:255.255.255.0:11111111 11111111 11111111 00000000
-
CIDR下的子网掩码例子:
- 11111111 11111111 11111100 00000000
-
另外的一种表示子网掩码的表达方式
- 例:/22:表示前面22个bit为子网部分
-
32bits , 0 or 1 in each bit
-
转发表和转发算法
- 获得IP数据报的目标地址
-
对于转发表中的每一个表项
- 如 (IP Des addr) & (mask)== destination, 则按照表项 对应的接口转发该数据报
- 如果都没有找到,则使用默认表项转发数据报
-
如何获得一个IP地址
Q:主机如何一个IP地址?
-
系统管理员将地址配置在一个文件中
- UNIX:/etc/rc.config
- DHCP:Dynamic Host Configuration Protocol:从服务器中动态获得一个IP地址
-
系统管理员将地址配置在一个文件中
3.4 DHCP:Dynamic Host Configuration Protocol
-
==目标:==允许主机在加入网络的时候,动态地从服务器那里获得IP地址:
- 可以更新对主机在用IP地址的租用期-租期快到了
- 重新启动时,允许重新使用以前用过的IP地址
- 支持移动用户加入到该网络(短期在网)
-
DHCP工作概况:
- 主机广播“DHCP discover” 报文[可选]
- DHCP 服务器用 “DHCP offer”提供报文响应[可选]
- 主机请求IP地址:发送 “DHCP request” 报文
- DHCP服务器发送地址:“DHCP ack” 报文
-
DHCP client-server scenario
-
DHCP:不仅仅是IP addresses
DHCP 返回:
- IP 地址
- 第一跳路由器的IP地址(默认网关)
- DNS服务器的域名和IP地址
- 子网掩码 (指示地址部分的网络号和主机号)
-
DHCP:实例
- 联网笔记本需要获取自己的IP地址,第一跳路由器地址和DNS服务器:采用 DHCP协议
- DHCP 请求被封装在UDP段中, 封装在IP数据报中,封装在以太网的帧中
- 以太网帧在局域网范围内广 播 (dest: FFFFFFFFFFFF) ,被运行DHCP服务的路由器收到
- 以太网帧解封装成IP,IP 解封装成UDP,解封装成 DHCP
- DHCP服务器生成DHCP ACK, 包含客户端的IP地址,第一 跳路由器的IP地址和DNS域 名服务器的IP地址
- DHCP服务器封装的报文所在 的帧转发到客户端,在客户 端解封装成DHCP报文
- 客户端知道它自己的IP地 址,DNS服务器的名字和IP 地址,第一跳路由器的IP地址
-
如何获得一个IP地址
Q:如何获得一个网络的子网部分?
A:从ISP获得地址块中分配一个小地址块
-
层次编址: 路由聚集(route aggregation)
-
IP编址:如何获得一块地址
Q:一个ISP如何获得一个地址块?
A:: ICANN: Internet Corporation for Assigned Names and Numbers
- 分配地址
- 管理DNS
- 分配域名,解决冲突
3.5 NAT:Network Address Translation
-
NAT:
-
==动机:==本地网络只有一个有效IP地址:
- 不需要从ISP分配一块地址,可用一个IP地址用 于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的 设备地址
- 局域网内部的设备没有明确的地址,对外是不可 见的–安全
-
==实现:==NAT路由器必须:
-
外出数据包:
替换
源地址和端口号
为NAT IP地址 和新的端口号,目标IP和端口不变 …远端的C/S将会用NAP IP地址,新端口号作为目标地址 -
记住
每个转换替换对(在NAT转换表中)…源IP,端口 VS NAP IP ,新端口
-
进入数据包
:替换
目标IP地址和端口号
,采用存储在NAT表中的mapping表项,用(源IP,端口)
-
-
-
NAT:
-
16-bit端口字段:
- 6万多个同时连接,一个局域网!
-
对NAT是有争议的:
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
-
违反了end-to-end 原则
-
端到端原则:复杂性放到网络边缘
- 无需借助中转和变换,就可以直接传送到目标主机
- NAT可能要被一些应用设计者考虑, eg, P2P applications
- 外网的机器无法主动连接到内网的机器上
-
端到端原则:复杂性放到网络边缘
- 地址短缺问题可以被IPv6 解决
- NAT穿越:如果客户端需要连接在NAT后面的服务器,如何操作
-
16-bit端口字段:
-
NAT 穿越问题
-
客户端需要连接地址为 10.0.0.1的服务器
- 服务器地址10.0.0.1 LAN本地地 址 (客户端不能够使用其作为目标地址)
- 整网只有一个外部可见地址: 138.76.29.7
-
方案1: 静态配置NAT:转发进来的对服务器特定端口连接请求
- e.g., (123.76.29.7, port 2500) 总是转发到10.0.0.1 port 25000
-
方案2: Universal Plug and Play (UPnP) Internet Gateway Device (IGD) 协议. 允许 NATted主机可以:
- 获知网络的公共 IP地址 (138.76.29.7)
- 列举存在的端口映射
- 增/删端口映射 (在租用时间内)
-
中继(used in Skype)
- NAT后面的服务器建立和中继的连接
- 外部的客户端链接到中继
- 中继在2个连接之间桥接
-
客户端需要连接地址为 10.0.0.1的服务器
3.6 IPv6
-
IPv6:动机
- ==初始动机:==32-bit地址空间将会被很快用完
-
另外的动机:
-
头部格式改变帮助加速处理和转发
- TTL-1
- 头部checksum
- 分片
- 头部格式改变帮助QoS
-
头部格式改变帮助加速处理和转发
-
IPv6数据报格式:
- 固定的40 字节头部
- 数据报传输过程中,不允许分片
-
IPv6 头部(Cont)
-
==Priority:==标示流中数据报的优先级
-
Flow Label:
标示数据报在一个“flow.” ( “flow”的概念没有被严格的定义) -
Next header:
标示上层协议
-
-
和IPv4的其它变化
-
Checksum
: 被移除掉,降低在每一段中的处理 速度 -
Options:
允许,但是在头部之外, 被 “Next Header” 字段标示 -
ICMPv6:
ICMP的新版本- 附加了报文类型, e.g. “Packet Too Big”
- 多播组管理功能
-
-
从IPv4到IPv6的平移
-
不是所有的路由器都能够同时升级的
- 没有一个标记日 “flag days”
- 在IPv4和IPv6路由器混合时,网络如何运转?
-
隧道
: 在IPv4路由器之间传输的IPv4数据报中携 带IPv6数据报
隧道:在最开始IPv4主流的时候,使用IPv6的子网就像是一个一个的孤岛,相互之间的信息交流就像是IPv4的的小船载着IPv6的信息,慢慢的IPv6覆盖的范围越来越大,IPv4逐步呗替代
-
不是所有的路由器都能够同时升级的
4、通用转发和SDN
4.1 网络层
-
网络层功能为例的数据平面和控制平面
网络层功能:
-
转发
:对于从某个端口到来的分组转发到合适的输出端口 -
==路由:==决定分组从源端到目标端的路径
- 路由算法
类比:旅游
- ==转发:==一个多岔路口的进入和转出过程
- ==路由:==规划从源到目标的旅游路径
-
-
网络层: 数据平面和控制平面
数据平面
- 本地的、每个路由器的功能
- 决定某个从某个端口进入的分组从从哪个端口输出
- 转发功能
控制平面
- 网络范围的逻辑
- 决定分组端到端穿行于各个路 由器的路径
-
每个路由器(Per Rounte)的控制平面
每个路由器上都有实现路由算法元件(它们之间需要相互交 互)- 形成传统IP实现方式的控制平面
-
数量众多、功能各异的中间盒
-
路由器的网络层功能:
- IP转发:对于到来的分组按照路由表决定如何转发,数 据平面
- 路由:决定路径,计算路由表;处在控制平面
-
还有其他种类繁多网络设备(中间盒):
- 交换机;防火墙;NAT;IDS;负载均衡设备
- 未来:不断增加的需求和相应的网络设备
-
需要不同的设备去实现不同的网络功能
- 每台设备集成了控制平面和数据平面的功能
- 控制平面分布式地实现了各种控制平面功能
- 升级和部署网络设备非常困难
-
路由器的网络层功能:
-
网络设备控制平面的实现方式特点
-
互联网网络设备:传统方式都是通过分布式,每台设备的方法来实现数据平面和控制平面功能
-
垂直集成
:每台路由器或其他网络设备,包括:- 硬件、在私有的操作系统
- 互联网标准协议(IP,RIP,IS-IS,OSPF,BGP)的私有实现
- 从上到下都有一个厂商提供*代价大,被设备上“绑架”)
-
每个设备都实现了数据平面和控制平面的事情
- 控制平面的功能是分布式实现的
-
设备基本上只能(分布式升级困难)按照固定方式工作, 控制逻辑固化。不同的网络功能需要不同的
“middleboxes”:防火墙、负载均衡设备、NAT boxes,。。。
-
-
(数据+控制平面)集成>(控制逻辑)分布->固化
- 代价大;升级困难;管理困难等
-
-
传统方式实现网络功能的问题
-
问题:
- 垂直集成>昂贵、不便于创新的生态
-
分布式、固化设备功能==网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级特性
- 配置错误影响全网运行;升级和维护会涉及到全网设备:管理困难
- 要增加新的网络功能,需要设计、实现以及部署新的 特定设备,设备种类繁多
-
~2005: 开始重新思考网络控制平面的处理方式
- 集中:远程的控制器集中实现控制逻辑
- 远程:数据平面和控制平面的分离
-
问题:
4.2 SDN
-
SDN:逻辑上集中的控制平面
一个不同的(通常是远程)控制器和CA交互,控制器决定分组 转发的逻辑(可编程),CA所在设备执行逻辑。
-
SDN的主要思路
- 网络设备数据平面和控制平面分离
-
数据平面-分组交换机
-
将路由器、交换机和目前大多数网络设备的功能进一步
抽象
成:按照流表(由控制平面设置的控制逻辑)进行PDU (帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞) -
统一化
设备功能:SDN交换机(分组交换机),执行控制逻辑
-
将路由器、交换机和目前大多数网络设备的功能进一步
-
控制平面-控制器+网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
-
SDN控制平面和数据平面分离的优势
-
水平集成
控制平面的
开放实现
(而非私有实 现),创造出好的产业生态,促进发展- 分组交换机、控制器和各种控制逻辑网络应用app可由不同 厂商生产,专业化,引入竞争形成良好生态
-
集中
式实现控制逻辑,网络
管理容易:
- 集中式控制器了解网络状况,编程简单,传统方式困难
- 避免路由器的误配置
-
基于流表的匹配+行动的工作方式允许==“可编程的”==分组交换机
- 实现流量工程等高级特性
- 在此框架下实现各种新型(未来)的网络设备
-
-
流量工程:传统路由比较困难
Q:网管如果需要u到z的流量走uvwz,x到z的流量走xwyz,怎么办?
A:需要定义链路的代价,流量路由算法以此运算( IP路由面 向目标,无法操作) (或者需要新的路由算法)
-
SDN特点
-
SDN架构:数据平面交换机
-
SDN架构:SDN控制器
-
SDN架构:控制应用
-
通用转发和SDN
每个路由表包含一个
流表
(被逻辑上集中的控制器计算和分发)
4.3 OpenFlow
-
OpenFlow数据平面抽象
- 流:由分组(帧)头部字段所定义
-
通用转发:简单的分组处理规则
-
模式
: 将分组头部字段和流表进行匹配 -
行动
:对于匹配上的分组,可以是
丢弃、转发、修改、 将匹配的分组发送给控制器
-
优先权Priority
: 几个模式匹配了,优先采用哪个,消除歧义 -
计数器Counters
:#bytes 以及# packets - 路由器中的流表定义了路由器的匹配+行动规则(流表由控制器计算并下发)
-
-
OpenFlow:流表的表项结构
-
例子:
-
OpenFlow抽象
-
match+action
: 统一化各种网络设备提供的功能 -
路由器:
-
match
:最长前缀匹配 -
action
: 通过一条链 路转发
-
-
交换机
-
match
: 目标MAC地 址 -
action
: 转发或者泛
-
-
防火墙
-
match
: IP地址和 TCP/UDP端口号 -
action
: 允许或者禁止
-
-
NAT
-
match
: IP地址和端口号 -
action
: 重写地址
-
- 目前几乎所有的网络设备都可以在这个 匹配+行动模式 框架进行描述,具体化为各种网络设备包括未来的网络设备
-
-
OpenFlow例子: