计算机网络:网络层——数据平面
导论
网络层服务
- 在发送主机和接收主机对之间传送段(segment)
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
- 网络层协议存在于每一个主机和路由器
- 路由器检查每一个经过它的IP数据报的头部
网络层的关键功能
- 网络层功能:
- 转发: 将分组从路由器的输入接口转发到合适的输出接口
- 路由: 使用路由算法来决定分组从发送主机到目标接收主机的路径
- 旅行的类比:
- 转发: 通过单个路口的过程
- 路由: 从源到目的的路由路径规划过程
网络层:数据平面、控制平面
数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到输出端口(局部功能)
- 转发功能:
- 传统方式:
基于目标地址 + 转发表
- SDN方式:
基于多个字段 + 流表
控制平面
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径(全局功能)
- 2个控制平面方法:
- 传统的路由算法:在路由器中被实现
- s o f t w a r e − d e f i n e d n e t w o r k i n g ( S D N ) software-defined networking(SDN) software−definednetworking(SDN):远程的服务器中实现
网络服务模型
对于单个数据报的服务
对于多个数据流的服务
- 保序数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
IP协议没有提供连接功能,既不能保证最小的带宽,也不能保证端到端时延,它提供的是尽力而为服务。
ATM网络体系结构提供了确保按序时延、有界时延和确保最小带宽。
路由器组成
路由器结构概括
高层面(非常简化的)通用路由器体系架构
- 路由:运行路由选择算法/协议( R I P , O S P F , B G P RIP, OSPF, BGP RIP,OSPF,BGP)——生成路由表
- 转发:从输入到输出链路交换数据报——根据路由表进行分组的转发
输入端口功能
物理层:Bit级的接收
数据链路层:链路层协议动作、解封装
分布式交换:
- 根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找合适的输出端口(匹配+行动)
- 基于目标的转发:仅仅依赖于IP数据报的目标IP地址(传统方法)
- 通用转发:基于头部字段的任意集合进行转发
最长前缀匹配
- 当给定目标地址查找转发表时,采用
最长地址前缀匹配
的目标地址表项
- 最长前缀匹配:在路由器中经常采用 T C A M s ( t e r n a r y c o n t e n t a d d r e s s a b l e m e m o r i e s ) TCAMs(ternary content addressable memories) TCAMs(ternarycontentaddressablememories) 硬件来完成
- 内容可寻址:将地址交给 T C A M TCAM TCAM,它可以在一个时钟周期内检索出地址,不管表空间有多大
Cisco Catalyst系列路由器
:在 T C A M TCAM TCAM 中可以存储多达约为1百万条路由表项
输入端口缓存
- 当交换机构的速率小于输入端口的汇聚速率时,在输入端口可能要排队
Head-of-the-Line(HOL)blocking
:排在队头的数据报阻止了队列中其他数据报向前移动
交换结构
- 将分组从输入缓冲区传输到合适的输出端口
- 交换速率:分组可以按照该速率从输入传输到输出
- 运行速度经常是输入/输出链路速率的若干倍
- N个输入端口:交换结构的交换速度是输入线路速度的N倍比较理想,不会成为瓶颈
- 三种典型的交换结构
通过内存交换
第一代路由器
:
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找传发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制(数据报通过BUS两遍)
- 一次只能转发一个分组
通过总线交换
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争:交换速度受限于总线带宽
- 一次处理一个分组
- 处理速度可达到 1 G b p s 1Gbps 1Gbps,32 G b p s Gbps Gbps 等等,对于接入和企业级路由器,速度足够(但是不适用区域或骨干网络)
通过互联网络(crossbar等)的交换
- 同时并发转发多个分组,克服总线带宽限制
- B a n y a n Banyan Banyan(榕树)网络, c r o s s b a r crossbar crossbar(纵横)网络和其他的互联网被开发,将多个处理器连接成多处理器
- 当分组从端口 A A A 到达,转给端口 Y Y Y,控制器短接相应的两个总线
- 高级设计:将数据报分片为固定长度的信元,通过交换网络交换
Cisco12000
:以 60 G b p s 60Gbps 60Gbps 的交换速率通过互联网络
输出端口
- 当数据报从交换结构的到达速度比传输速率快就需要输出端口缓存
- 由调度规则选择排队的数据进行传输
- 假设交换速率 R s w i t c h R_{switch} Rswitch 是 R l i n e R_{line} Rline 的N倍(N:输入端口的数量)
- 当多个输入端口同时向输出端口发送时,缓冲该分组(当通过交换网络到达的速率超过输出速率则缓存)
排队带来延迟,由于输出端口缓存溢出则丢弃数据报!
有 N N N 个流,缓存大小等于 R T T × C N \frac{RTT \times C}{\sqrt{N}} N RTT×C (推荐)
调度机制
- 调度:选择下一个要通过链路传输的分组
- 先进先出 FIFO(first in first out)scheduling:按照分组到来的次序发送
丢弃策略
:
- t a i l d r o p tail drop taildrop:丢弃刚到达的分组
- p r i o r i t y priority priority:根据优先权丢失/移除分组
- r a n d o m random random:随机地丢弃/移除分组
- 优先权调度:发送最高优先权的分组
- 先传高优先级的队列中的分组,除非没有
- 高(低)优先权中的分组传输次序:
FIFO
- 循环和排队(Round Robin(RR)scheduling):
- 在循环排队规则下,分组像使用优先权排队那样被分类,类之间不存在服务优先权,循环调度器在这些类之间轮流提供服务。
- 循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
- 加权公平排队(Weighted Fair Queuing,WFQ):
- 一般化的 R o u n d R o b i n Round Robin RoundRobin
- 在一段时间內,每个队列得到的服务时间是: W i X I G M A ( W i ) × t \frac{W_i}{XIGMA(W_i) \times t} XIGMA(Wi)×tWi ,和权重成正比
- 每个类在每一个循环中获得不同权重的服务量
IP:Internet Protocol
互联网的网络层
主机,路由器中的网络层功能:
IPV4数据报格式
IP分片和重组(Fragmentation & Reassembly)
- 网络链路有 MTU(最大传输单元)-
链路层帧所携带的最大数据单元
- 不同的链路类型
- 不同的 M T U MTU MTU
- 大的 I P IP IP 数据报在网络上被分片(“ f r a g m e n t e d fragmented fragmented ”)
- 一个数据报被分割成若干个小的数据报
- 相同的 I D ID ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行
- I P IP IP头部的信息被用于标识,排序相关分片
例子
- 4000字节数据报:20字节头部,3980字节数据
- M T U = 1500 b y t e s MTU = 1500bytes MTU=1500bytes
- 第一片:20字节头部 + 1480字节数据(1480字节应用数据),偏移量:0
- 第二片:20字节头部 + 1480字节数据(1480字节应用数据),偏移量:1480 / 8 = 185(为了方便计算,以8个字节为单位)
- 第三片:20字节头部 + 1020字节数据(应用数据),偏移量:2960 / 8 = 370
IP分片小程序
IP编址:引论
- IP地址:32位标示,对主机或者路由器的接口编址
- 接口:主机/路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能拥有多个接口
IP地址和每一个接口相关联
- 一个IP地址和一个接口相关联
子网(Subnets)
- IP地址:子网部分(高位bits),主机部分(低位bits)
- 什么是子网?
- 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网
- 无需路由接入,子网内各主机可以在物理上相互直接到达
- 要判断一个子网,将每个接口从主机或者路由器上分开,构成了一个个网络的孤岛,每一个孤岛(网络)都是一个subnet
IP编址:CIDR
CIDR:Classless InterDomain Routing(无类域间路由)
- 子网部分可以在任意的位置
- 地址格式: a . b . c . d / x a.b.c.d/x a.b.c.d/x , 其中 x x x 是 地址中子网号的长度
子网掩码(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
C I D R CIDR CIDR 下的子网掩码例子:
- 11111111 11111111 11111100 00000000
- 另外的一种表示子网掩码的表达方式
/#
例:/22表示前面22个bit为子网部分
DHCP: Dynamic Host Configuration Protocol
目标:允许主机在加入网络的时候,动态地从服务器那里获得IP地址:
- 可以更新对主机在用IP地址的租用期
- 重新启动时,允许重新使用以前用过的IP地址
- 支持移动用户加入到该网络(短期在网)
D H C P DHCP DHCP 工作概况:
- 主机广播 “
DHCP discover
” 报文[可选]
- D H C P DHCP DHCP 服务器用 “
DHCP offer
” 提供报文响应[可选]
- 主机请求 I P IP IP 地址:发送 “
DHCP request
” 报文
- D H C P DHCP DHCP 服务器发送地址:“
DHCP ack
” 报文
D H C P DHCP DHCP 返回
- I P IP IP 地址
- 第一跳路由器的 I P IP IP 地址(默认网关)
- D N S DNS DNS 服务器的域名和 I P IP 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地址
层次编址:路由聚集(route aggregation)
NAT: Network Address Translation
所有离开本地网络的数据报具有一个相同的源地址NAT IP address:138.76.29.7,但是具有不同的端口号
本网发送的数据报源地址是10.0.0.0/24到达本网节点的目标地址为10.0.0.0/24
NAT穿越问题
在外网的客户端需要连接内网的服务器时,会发生NAT穿越的情况
客户端需要连接地址为10.0.0.1的服务器,因为10.0.0.1的地址为内网地址 (客户端不能够使用其作为目标地址),整网只有一个外部可见地址:138.76.29.7,客户端无法得知内网的准确地址
方案一:静态配置NAT,转发进来的对服务器特定端口连接请求
e.g:123.76.29.7, port 2500 总是转发到10.0.0.1 port 25000
方案二: U n i v e r s a l P l u g a n d P l a y ( U P n P ) I n t e r n e t G a t e w a y D e v i c e ( I G D ) Universal Plug and Play(UPnP)Internet Gateway Device(IGD) UniversalPlugandPlay(UPnP)InternetGatewayDevice(IGD)协议. 允许 N A T NAT NAT t e d ted ted 主机可以:
- 获知网络的公共 I P IP IP 地址(138.76.29.7)
- 列举存在的端口映射
- 增/删端口映射 (在租用时间内)
eg:自动化静态 N A T NAT NAT 端口映射配置
方案三: 中继 ( u s e d i n S k y p e used in Skype usedinSkype )
- N A T NAT NAT 后面的服务器建立和中继的连接
- 外部的客户端连接到中继
- 中继在2个连接之间桥接
IPV6
IPV6头部
P r i o r i t y Priority Priority :标示流中数据报的优先级
F l o w Flow Flow L a b e l Label Label :标示数据报在一个“flow.”( “flow”的概念没有被严格的定义)
N e x t Next Next h e a d e r header header :标示上层协议
和IPv4 的其它变化
- C h e c k s u m Checksum Checksum :被移除掉,降低在每一段中的处理速度
- O p t i o n s Options Options :允许,但是在头部之外, 被 “Next Header” 字段标示
- I C M P v 6 ICMPv6 ICMPv6 :ICMP的新版本
- 附加了报文类型, e.g:“Packet Too Big”
- 多播组管理功能
隧道
通用转发和SDN
网络层功能为例的数据平面和控制平面
网络层功能:
转发
: 对于从某个端口到来的分组转发到合适的输出端口
路由
: 决定分组从源端到目标端的路径(路由算法)
类比: 旅行
转发: 一个多岔路口的进入和转出过程
路由: 规划从源到目标的旅行路径
数据平面
- 本地的、每个路由器的功能
- 决定某个从某个端口进入的分组从从哪个端口输出
- 转发功能
控制平面
- 网络范围的逻辑
- 决定分组端到端穿行于各个路由器的路径
通用转发
每个路由器上都有实现路由算法元件(它们之间需要相互交互)- 形成传统IP实现方式的控制平面
- 每台设备上既实现控制功能、又实现数据平面
- 控制功能分布式实现
- 路由表-粘连
路由器的网络层功能:
传统方式实现网络功能的问题
-
垂直集成 > 昂贵、不便于创新的生态
-
分布式、固化设备功能 == 网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级特性
- 配置错误影响全网运行;升级和维护会涉及到全网设备:管理困难
- 要增加新的网络功能,需要设计、实现以及部署新的特定设备,设备种类繁多
SDN:逻辑上集中的控制平面
一个不同的(通常是远程)控制器和分组交换机交互,控制器决定分组转发的逻辑(可编程),分组交换机所在设备执行逻辑。
SDN的主要思路
-
网络设备数据平面和控制平面分离
-
数据平面:分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步
抽象成
:按照流表(由控制平面设置的控制逻辑)进行PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞
)
统一化
设备功能: S D N SDN SDN 交换机(分组交换机),执行控制逻辑
-
控制平面:控制器 + 网络应用
SDN控制平面和数据平面分离的优势
SDN特点
每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)
SDN架构:数据平面交换机
数据平面交换机:
- 快速,简单,商业化交换设备采用硬件实现通用转发功能
- 流表被控制器计算和安装
- 基于南向API(例如 O p e n F l o w OpenFlow OpenFlow ), S D N SDN SDN 控制器访问基于流的交换机
- 也定义了和控制器的协议(
OpenFlow
)
SDN 架构: SDN控制器
SDN 控制器(网络OS):
- 维护网络状态信息
- 通过上面的北向API和网络控制应用交互
- 通过下面的南向API和网络交换机交互
- 逻辑上集中,但是在实现上
- 通常由于性能、可扩展性、容错性以及鲁棒性采用分布式方法
SDN 架构:控制应用
网络控制应用:
OpenFlow 数据平面抽象
流: 由分组(帧)头部字段所定义
通用转发: 简单的分组处理规则
- 模式:将分组头部字段和流表进行
匹配
- 行动:对于匹配上的分组,可以是
丢弃、转发、修改、将匹配的分组发送给控制器
- 优先权Priority:几个模式匹配了,优先采用哪个,消除歧义
- 计数器Counters:#bytes 以及 #packets
路由器中的流表定义了路由器的匹配 + 行动规则(流表由控制器计算并下发)
OpenFlow 流表的表项结构
示例:
OpenFlow 抽象
m a t c h + a c t i o n match+action match+action:统一化各种网络设备提供的功能
-
路由器
- m a t c h match match : 最长前缀匹配
- a c t i o n action action :通过一条链路转发
-
防火墙
- m a t c h match match : IP地址和TCP/UDP端口号
- a c t i o n action action :允许或者禁止
-
交换机
- m a t c h match match :目标MAC地址
- a c t i o n action action :转发或者泛洪
-
NAT
- m a t c h match match :IP地址和端口号
- a c t i o n action action :重写地址和删除地址
例子:
来自H5和H6的数据报应该被发向H3或者H4通过 s1然后经由 s2