Computer Network Notes 4:Network Layer (1)
导论
网络层服务
在发送主机和接收主机对之间传送段 (segment)
在发送端将段封装到数据报中
在接收端,将段上交给传输层实体
网络层协议存在于每一个主机和路由器
路由器检查每一个经过它的 IP 数据报的头部
网络层的关键功能
转发:将分组从路由器的输入接口转发到合适的输出接口
路由:使用路由算法来决定分组从发送主机到目标接收主机的路径
- 路由选择算法
- 路由选择协议
数据平面与控制平面
数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到输出端口
- 转发功能
- 传统方式:基于目标地址 + 转发表
- SDN 方式:集于多个字段 + 流表
控制平面
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源道目标主机之间的端到端路径
- 2 个控制平面方法
- 传统的路由算法:在路由器中被实现
- software-defined networking (SND):在远程的服务器中实现
传统方式
每-路由器(Per-router)控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
控制平面、数据平面紧紧耦合
路由和转发的相互作用
SDN 方式
逻辑集中的控制平面
一个不同的(通常是远程的)控制器与本地控制代理(CAs)交互
网络服务模型
对于单个数据报的服务
- 可靠传送
- 延迟保证,如:少于 40 ms 的延迟
对于数据报流的服务
- 保存数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
连接建立
在某些网络架构中是第三个重要的功能
- ATM, frame relay, X.25
在分组传输之前,在两个主机之间,再通过一些路由器所构成的路径上建立一个网络层连接
- 涉及到路由器
网络层和传输层连接服务区别
- 网络层:在 2 个主机之间,涉及到路径上的一些路由器
- 传输层:在 2 个进程之间,很可能只体现在端系统上 (TCP 连接)
路由器组成
路由器结构概况
高层面(非常简化的)通用路由器体系架构:
- 路由:运行路由选择算法/协议(RIP, OSPF, BGP)-生成路由表
- 转发:从输入到输出链路交换数据报-根据路由表进行分组的转发
输入端口功能
物理层:Bit 级的接收
数据链路层:链路层协议动作、解封装
分布式交换:
- 根据数据报头部信息,如目的地址,在输入端口内存中的转发表中查找合适的输出端口 (匹配 + 行动)
- 基于目的的转发:仅仅依赖于 IP 数据包的目标 IP 地址 (传统方法)
- 通用转发:基于头部字段的任意集合进行转发
输入端口缓存
当交换机构的速率小于输入端口的汇聚速率时,在输入端口可能要排队:排队延迟以及由于输入缓存溢出造成丢失
Head-of-the-line (HOL) blocking:排在队头的数据报阻止了队列中其它数据报向前移动
交换结构
将分组从输入缓冲区传输到合适的输出端口
交换速率:分组可以按照该速率从输入传输到输出
- 运行速度经常是输入/输出链路速率的若干倍
- N个输入端口:交换机构的交换速率是输入线路速度的 N 倍比较理想,才不会成为瓶颈
3 种典型的交换机构:
通过内存交换
第一代路由器:
- 在 CPU 直接控制下的交换,采用传统的计算机
- 分组倍拷贝到系统内存,CPU 从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制 (数据报通过 BUS 两遍)
- 一次只能转发一个分组
通过总线交换
数据报通过共享总线,从输入端口转发到输出端口
总线竞争:交换速度受限于总线带宽
1 次处理一个分组
1 Gbps bus, Cisco 1900;32 Gbps bus, Cisco 5600;对于接入或企业级路由器,速度足够,但不适合区域或骨干网络
通过互联网络 (crossbar 等) 的交换
同时并发转发多个分组,克服总线带宽限制
Banyan (榕树) 网络,crossbar (纵横) 和其它的互联网络被开发,将多个处理器连接成多处理器
当分组从端口 A 到达,转给端口 Y:控制器短接相应的两个总线
高级设计:将数据报分片为固定长度的信元,通过交换网络交换
Cisco 12000:以 60 Gbps 的交换速率通过互联网络
输出端口
当数据报从交换机构的到达速度比传输速度快,就需要输出端口缓存
- 数据报 (分组) 可能会被丢弃,由于拥塞,缓冲区没有空间
由调度规则选择排队的数据报进行传输
- 优先权调度-谁会获得最优性能,网络中立?
输出端口排队
假设交换速率 Rswitch 是 Rline 的 N 倍 (N:输入端口的数量)
当多个输入端口同时向输出端口发送时,缓冲该分组 (当通过交换网络到达的速率超过输出速率则缓存)
排队带来延迟,由于输出端口缓存溢出则丢弃数据报
调度机制
调度:选择下一个要通过链路传输的分组
FIFO (first in first out) scheduling:按照分组到来次序发送
- 丢弃策略:如果分组到达一个满的队列,哪个分组将会被抛弃
- tail drop:丢弃刚到达的分组
- priority:根据优先权丢失/移除分组
- random:随机丢弃/移除
优先权
优先权调度:发送最高优先权的分组
多类,不同类别有不同的优先权
- 类别可能依赖于标记或其它的头部字段,eg. IP source/dest, port numbers, ds, etc.
- 先传最高优先级的队列中的分组,除非没有
- 高(低)优先权种的分组传输次序:FIFO
其它
Round Robin(RR) scheduling:
- 多类
- 循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
Weighted Fair Queuing (WFQ):
- 一般化的 Round Robin
- 在一段时间内,每个队列得到的任务时间是:Wi/(XIGMA(Wi)) * t,和权重成正比
- 每个类在一个循环中获得不同权重的服务量
IP Internet Protocol
互联网的网络层
主机,路由器种的网络层功能:
IP 数据报格式
IPv4 数据报格式:
IP 分片和重组 (Fragmentation & Reassembly)
网络链路有 MTU (最大传输单元) - 链路层帧所携带的最大数据长度
- 不同的链路类型
- 不同的 MTU
大的 IP 数据报在网络上被分片 (fragmented)
- 一个数据报被分割成若干个小数据报
- 相同的 ID
- 不同的偏移量
- 最后一个分片标记为 0
- “重组” 只在最终的目标主机进行
- IP 头部的信息被用于标识、排序相关分片
IP 编址
IP 地址:32 位标示,对主机或路由器的接口编址
接口:主机/路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP 地址和每一个接口关联
一个 IP 地址和一个接口相关联
这些接口如何连接:
- 有线以太网网口链接到以太网络交换机连接
- 无线 WiFi 接口被 WiFi 基站连接
子网 (Subsets)
IP 地址:
- 子网部分 (高位 bits)
- 主机部分 (低位 bits)
子网:
- 一个子网内的节点 (主机或者路由器),它们的 IP 地址的高位部分相同,这些节点构成的网络的一部分叫做子网
- 无需路由器介入,子网内个主机可以在物理上相互直接到达
方法:
- 要判断一个子网,将每一个接口从主机或者路由器上分开,构成了一个个网络的孤岛
- 每一个孤岛 (网络) 都可以被称之为 subset
子网掩码:11111111 11111111 11111111 00000000
subset mask:/24
IP 地址分类
单播地址:
Class A: 126 networks, 16 million hosts
Class B: 16382 networks, 64 K hosts
Class C: 2 million networks, 254 host
组播地址:
Class D: multicast
预留:
Class E: reserved for future
特殊 IP 地址
一些约定:
- 子网部分:全为 0 — 本网络
- 主机部分:全为 0 — 本主机
- 主机部分:全为 1 — 广播地址,这个网络的所有主机
- 127.x.x.x: 回路地址/测试地址
内网 (专用) 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 是地址中子网号的长度
转发表和转发算法
目标子网号 | 掩码 | 下一跳 | 端口
- 获得 IP 数据报的目标地址
- 对于转发表中的每一个表项
- 如 (IP Des addr) & (mask) == destination,则按照表项对应的接口转发该数据报
- 如果没有找到,则使用默认表项转发数据报
如何获得一个 IP 地址
主机如何获得
系统管理员将地址配置在一个文件中
- Wintel: control-panel -> network -> configuration -> tcp/ip -> properties
- UNIX: /etc/rc.config
DHCP (Dynamic Host Configuration Protocol):从服务器中动态获得一个 IP 地址 - plug-and-play
DHCP
目标:允许主机在加入网络的时候,动态地从服务器哪里获得 IP 地址:
- 可以更新对主机在用 IP 地址的租用期 - 租期快到了
- 重新启动时,允许重新使用以前用过的 IP 地址
- 支持移动用户加入到该网络 (短期在网)
工作概况:
- 主机广播 “DHCP discover” 报文 [可选]
- DHCP 服务器用 “DHCP offer” 提供报文相应 [可选]
- 主机请求 IP 地址:发送 “DHCP request” 报文
- DHCP 服务器发送地址:“DHCP ack” 报文
DHCP client-server scenario:
获得一个网络的子网部分
从 ISP 获得地址块中分配一个小地址块
一个 ISP 如何获得一个地址块?
ICANN: Internet Corporation for Assigned Names and Numbers
- 分配地址
- 管理 DNS
- 分配域名,解决冲突
层次编址
路由聚集 (route aggregation):
层次编址允许路由信息的有效广播
支持有空洞的、大概的聚集
特殊路由信息 (more specific routes):
ISPs-R-Us 拥有一个对组织 1 更加精确的路由
匹配时,多个匹配采用最长匹配 (最精确)
NAT: Network Address Translation
网络间地址转换:出去时将所有内网地址转换为同一个机构 IP 地址,转回来时再由机构 IP 地址转回主机
动机:本地网络只有一个有效 IP 地址
- 不需要从 ISP 分配一块地址,可用一个 IP 地址用于所有的 (局域网) 设备 —— 省钱
- 在局域网改变设备地址的情况下无须通知外界
- 可以改变 ISP (地址变化) 而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的 —— 安全
实现:NAT 路由器必须
- 外出数据包:替换源地址和端口号为 NAT IP 地址和新的端口号,目标 IP 和端口号不变
- 远端的 C/S 将会用 NAP IP 地址,新端口号作为目标地址
- 记住每个转换替换对 (在 NAT 转换表中)
- 源 IP,端口 vs NAP IP,新端口
- 进入数据包:替换目标 IP 地址和端口号,采用存储在 NAT 表中的mapping 表项,用 (源 IP,端口)
16-bit 端口字段:6 万多个同时连接,要给局域网
NAT 争议:
- 路由器之应该对第 3 层做信息处理,而这里对端口号 (4 层) 做了处理
- 违反了 end-to-end 原则
- 端到端原则:复杂性放到网络边缘,无需借助中转和变换,就可以直接传送到目标主机
- NAT 可能要被一些应用设计者考虑,eg. P2P applications
- 外网的机器无法主动连接到内网的机器上
- 地址短缺问题可以被 IPv6 解决
- NAT 穿越:如果客户端要连接 NAT 后面的服务器,如何操作
IPv6
动机:
- 初始动机:32-bit 地址空间将会很快用完
- 头部格式改变帮助加速处理和转发
- TTL-1
- 头部 checksum
- 分片
- 头部格式改变帮助 QoS
IPv6 数据报格式:
- 固定的 40 字节头部
- 数据报传输过程中不允许分片 (源主机分片)
IPv6 头部 (Cont)
- Priority:标示流中数据报的优先级
- Flow Label:表示数据包在一个 “flow” (“flow” 的概念没有被严格定义)
- Next header:标示上层协议
- Checksum:被移除,降低在每一段中的处理速度
- Options:允许,但是在头部之外,被 “Next Header” 字段标示
- ICMPv6:ICMP 的最新版本
- 附加了报文类型,eg. Packet too big
- 多播组管理功能
IPv4 到 IPv6 的平移
不是所有的路由器都能够同时升级
- 没有一个标记日 “flag days”
- 在 IPv4 和 IPv6 路由器混合时,网络如何运转?
隧道:在 IPv4 路由器之间传输的 IPv4 数据报中写代 IPv6 数据报
通用转发和 SDN
网络层功能为例的数据平面和控制平面
网络层功能:
- 转发:对于从某个端口到来的分组转发到合适的输出端口
- 路由:决定分组从源端到目标端的路径 (路由算法)
每个路由器 (Per Route) 的控制平面:每个路由器上都有实现路由算法原件 (它们之间需要相互交互) - 形成传统 IP 实现方式的控制平面
- 每台设备上既实现控制功能,又实现数据平面
- 控制功能分布式实现
- 路由表 - 粘连
缺陷:数量众多、功能各异的中间盒
- 路由器的网络层功能:
- IP 转发:对于到来的分组按照路由表决定如何转发;数据平面
- 路由:决定路径,计算路由表;处在控制平面
- 还有其他种类繁多网络设备 (中间盒):
- 交换机;防火墙;NAT;IDS;负载均衡设备
- 未来:不断增加的需求和相应的网络设备
- 需要不同设备实现不同的网络功能
- 每台设备继承了控制平面和数据平面的功能
- 控制平面分布式地实现了各种控制平面功能
- 升级和部署网络设备非常困难
网络设备控制平面的实现方式特点
互联网网络设备:传统方式都是通过分布式,每台设备的方法来实现数据平面和控制平面功能
- 垂直集成:每台路由器或其它网络设备,包括:
- 硬件、在私有的操作系统
- 互联网标准协议 (IP, RIP, IS-IS, OSPF, BGP) 的私有实现
- 从上到下都有一个厂商提供 (代价大、被设备上 “绑架”)
- 每个设备都实现了数据平面和控制平面的事情
- 控制平面的功能是分布式实现的
- 设备基本上只能 (分布式升级困难) 按照固定方式工作,控制逻辑固化。不同的网络功能需要不哦那个的 “middle boxes”:防火墙、负载均衡设备、NAT boxes
(数据 + 控制平面) 集成 -> (控制逻辑) 粉不 -> 固化
- 代价大;升级困难;管理困难
问题:
- 垂直集成 > 昂贵、不便于创新的生态
- 分布式、货设备功能 == 网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级特性
- 配置错误影响全网运行;升级和维护会涉及到全网设备;管理困难
- 要增加新的网络功能,需要设计、实现以及不舒心的特定设备,设备种类繁多
解决:重新思考网络控制平面的处理方式
- 集中:远程的控制器集中实现控制逻辑
- 远程:数据平面和控制平面的分离
SDN:逻辑上集中的控制平面
一个不同的 (通常是远程) 控制器和 CA 交互,控制器决定分组转发的逻辑 (可编程),CA 所在设备执行逻辑
特点:
- 通用 “flow-based” 基于流的匹配 + 行动,eg. OpenFlow
- 控制平面和数据平面分离
- 控制平面功能在数据交换设备之外实现
- 可编程控制应用:在控制器之上以网络应用形式实现各种网络功能
SDN 的主要思路
网络设备数据平面和控制平面分离
数据平面 - 分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表 (由控制平面设置的控制逻辑) 进行 PDU (帧、分组) 的动作 (包括转发、丢弃、拷贝、翻红、阻塞)
- 统一化设备功能:SDN 交换机 (分组交换机),执行控制逻辑
控制平面 - 控制器 + 网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
SDN 控制平面和数据平面分离的优势
水平集成控制平面的开放实现 (而非私有实现),创造出更好的产业生态,促进发展
- 分组交换机、控制器和各种控制逻辑网络应用 app 可由不同厂商生产,专业化,引入竞争形成良好生态
集中式实现控制逻辑,网络管理容易
- 集中式控制器了解网络状况,编程简单
- 避免路由器的误配置
基于流表的匹配 + 行动的工作方式允许可编程的分组交换机
- 实现流量工程等高级特性
- 在此框架下实现各种新型 (未来) 的网络设备
SDN 架构
SDN 控制器 (网络OS)
- 维护网络状态信息
- 通过上面的北向 API 和网络控制应用交互
- 通过下面的南向 API 和网络交换机交互
- 逻辑上集中,但是在是线上通常由于性能、可扩展性、容错性以及鲁棒性采用分布式方法
网络控制应用
- 控制的大脑:采用下层提供的服务 (SDN 控制器提供的 API),实现网络功能
- 路由器 交换机
- 接入控制 防火墙
- 负载均衡
- 其它功能
- 非绑定:可以被第三方提供,与控制器厂商可以通常上不同,与分组交换机厂商也可以不同
通用转发和 SDN
每个路由器包含一个流表 (被逻辑上集中的控制器计算和分发)
OpenFlow 数据平面抽象
流:由分组 (帧) 头部字段所定义
通用转发:简单的分组处理规则
- 模式:将分组头部字段和流表进行匹配
- 行动:对于匹配上的分组,可以是丢弃、转发、修改、将匹配的分组发送给控制器
- 优先权 Priority:计歌模式匹配了,优先采用哪个,消除歧义
- 计数器 Counters: #bytes 以及 #packets
路由器中的流表定义了路由器的匹配 + 行动规则 (流表由控制器计算并下发)
OpenFlow 抽象
match + action:统一化各种网络设备提供的功能
目前几乎所有网络设备都可以在这个匹配 + 行动模式框架进行描述,具体化为各种网络设备包括未来的网络设备
路由器
- match:最长前缀匹配
- action:通过一条链路转发
交换机:
- match:目标 MAC 地址
- action:转发或泛洪
防火墙
- match:IP 地址和 TCP/UDP 端口号
- action:允许或者禁止
NAT
- match:IP 地址和端口号
- action:重写地址和端口号