第四章 网络层:数据平面
1、导论
1.1 网络层:数据平面
- 本章目标:
- 理解网络服务的基本原理,聚焦于其数据平面
- 互联网中网络层协议的实例和实现
- 网络层服务
- 在发送主机和接收主机对之间传送段(segment)
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
- 网络层协议存在于每一个主机 和路由器
- 路由器检查每一个经过它的IP数据报的头部
-
网络层的关键功能 网络层功能:
1.2 网络层:数据平面、控制平面
- 数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到 输出端口
- 转发功能:
- 传统方式:基于目标地址+转发表
- SDN方式:基于多个字段+流表
- 控制平面
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径
- 2个控制平面方法:
- 传统的路由算法: 在路由器 中被实现
- software-defined networking (SDN): 在远程的服务器中 实现
1.3 网络层:控制平面
-
传统方式:每一路由器(per-router)控制平面 在每一个路由器中的单独路由器算法元件,在控制平面进行交互 -
传统方式:路由和转发的相互作用 -
SDN方式:逻辑集中的控制平面 一个不同的(通常是远程的)控制器与本地控制代理(CAs) -
网络服务模型 Q:从发送方主机到接收方主机传输数据报的“通道” ,网络提供什么样的服务模型? 对于单个数据报的服务:
对于数据报流的服务:
-
连接建立
- 在某些网络架构中是第三个重要的功能
- 在分组传输之前,在两个主机之间,在通过一些 路由器所构成的路径上建立一个网络层连接
- 网络层和传输层连接服务区别:
- ==网络层:==在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 (最大传输单元) –链路层帧所携带的最大数据长度
- 大的IP数据报在网络上被分片 (“fragmented”)
- 一个数据报被分割成若干个小的数据报
- “重组”只在最终的目标主机 进行
- IP头部的信息被用于标识,排序相关分片
3.3 IPV4地址
-
IP编址:引论
-
子网(Subnets)
- IP地址:
- 什么是子网(subnet) ?
- 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同 ,这些节点构成的网络的一部分叫做子网
- 无需路由器介入,子网 内各主机可以在物理上 相互直接到达
- 判断方法:
- 要判断一个子网, 将每一 个接口从主机或者路由 器上分开,构成了一个个 网络的孤岛
- 每一个孤岛(网络)都是一个都可以被称之为 subnet.
- 子网掩码:11111111 11111111 11111111 00000000
- Subnet mask:/24
-
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
- 另外的一种表示子网掩码的表达方式
-
转发表和转发算法
- 获得IP数据报的目标地址
- 对于转发表中的每一个表项
- 如 (IP Des addr) & (mask)== destination, 则按照表项 对应的接口转发该数据报
- 如果都没有找到,则使用默认表项转发数据报
-
如何获得一个IP地址 Q:主机如何一个IP地址?
- 系统管理员将地址配置在一个文件中
- 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
3.5 NAT:Network Address Translation
-
NAT: -
==动机:==本地网络只有一个有效IP地址:
- 不需要从ISP分配一块地址,可用一个IP地址用 于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的 设备地址
- 局域网内部的设备没有明确的地址,对外是不可 见的–安全
-
==实现:==NAT路由器必须:
-
-
NAT:
- 16-bit端口字段:
- 对NAT是有争议的:
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
- 违反了end-to-end 原则
- 端到端原则:复杂性放到网络边缘
- NAT可能要被一些应用设计者考虑, eg, P2P applications
- 外网的机器无法主动连接到内网的机器上
- 地址短缺问题可以被IPv6 解决
- NAT穿越:如果客户端需要连接在NAT后面的服务器,如何操作
-
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个连接之间桥接
3.6 IPv6
-
IPv6:动机
- ==初始动机:==32-bit地址空间将会被很快用完
- 另外的动机:
- 头部格式改变帮助加速处理和转发
- 头部格式改变帮助QoS
- IPv6数据报格式:
-
IPv6 头部(Cont)
-
和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;负载均衡设备
- 未来:不断增加的需求和相应的网络设备
- 需要不同的设备去实现不同的网络功能
- 每台设备集成了控制平面和数据平面的功能
- 控制平面分布式地实现了各种控制平面功能
- 升级和部署网络设备非常困难
-
网络设备控制平面的实现方式特点
-
传统方式实现网络功能的问题
- 问题:
- 垂直集成>昂贵、不便于创新的生态
- 分布式、固化设备功能==网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级特性
- 配置错误影响全网运行;升级和维护会涉及到全网设备:管理困难
- 要增加新的网络功能,需要设计、实现以及部署新的 特定设备,设备种类繁多
- ~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例子:
|