第 4 章 网络层:数据平面
本章目标:
理解网络服务的基本原理,聚焦于其数据平面
网络服务模型
转发和路由
路由器工作原理
通用转发
互联网中网络层协议的实例和实现
文章目录
- 4.1 导论
- 4.2 路由器组成
- 4.3 IP: Internet Protocol
- 4.4 通用转发和SDN
4.1 导论
数据平面
控制平面
网络层服务
在发送主机和接收主机对之间 传送段**(segment)**
在发送端将段封装到数据报中
在接收端,将段上交给传输层 实体
网络层协议存在于每一个主机 和路由器
路由器检查每一个经过它的IP 数据报的头部
![image-20211001100723126](https://i-blog.csdnimg.cn/blog_migrate/d0473976d4710e47391ee95f7ffc7df7.png)
网络层的关键功能
网络层功能:
转发: 将分组从路由器的输入接口转发到合适的输出接口
路由: 使用路由算法来决定分组从发送主机到目标接收主机的路径
路由选择算法
路由选择协议
旅行的类比:
- 转发: 通过单个路口的过程 —— 数据平面
- 路由: 从源到目的的路由路径规划过程 —— 控制平面
网络层:数据平面、控制平面
-
数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到输出端口
- 转发功能:
- 传统方式:基于目标 地址+转发表
- SDN方式:基于多个字段+流表
-
控制平面
- 网络范围内的逻辑
- 决定数据报如何在路由器之间 路由,决定数据报从源到目标主机之间的端到端路径
- 2个控制平面方法:
- 传统的路由算法: 在路由器中被实现 —— 功能单一:根据目标的IP地址进行转发
- software-defined networking (SDN): 在远程的服务器中实现
软件定义网 —— 匹配很多字段,功能更多:泛洪、转发、修改字段
传统方式:每-路由器(Per-router)控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
紧耦合,难以修改
SDN方式:逻辑集中的控制平面
一个不同的(通常是远程的)控制器与本地控制代理(CAs) 交互
网络操作系统运行在集中的控制器上
网络服务模型
Q: 从发送方主机到接收方主机传输数据报的“通道” ,网络提供什么样的服务模型?
- 对于单个数据报的服务:
- 可靠传送
- 延迟保证,如:少于 40ms的延迟
- 对于数据报流的服务:
- 保序数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
连接建立
在某些网络架构中是第三个重要的功能
ATM, frame relay, X.25
在分组传输之前,在两个主机之间,在通过一些 路由器所构成的路径上建立一个网络层连接
涉及到路由器
网络层和传输层连接服务区别:
网络层: 在2个主机之间,涉及到路径上的一些路由器 —— 有连接
传输层: 在2个进程之间,很可能只体现在端系统上 (TCP连接) —— 面向连接
一些网络层服务模型
4.2 路由器组成
路由器结构概况 (传统)
高层面(非常简化的)通用路由器体系架构
- 路由:运行路由选择算法/协议 (RIP, OSPF, BGP) - 生成 路由表
- 转发:从输入到输出链路交换数据报 - 根据路由表进行分组的转发
输入端口功能
输入端口有个队列
输入端口缓存
- 当交换机构的速率小于输入端口的汇聚速率时, 在输入端口可能要排队
- 排队延迟以及由于输入缓存溢出造成丢失!
- 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;控制器短接相应的两个总线
- 高级设计:将数据报分片为固定长度的信元,通过交换网络交换
- Cisco12000:以60Gbps的交换速率通过互联网络
输出端口
当数据报从交换机构的到达速度比传输速率快 就需要输出端口缓存
由调度规则选择排队的数据报进行传输
优先权调度-谁会获得最优性能, 网络中立?
输出端口排队
- 假设交换速率Rswitch是Rline的N倍(N:输入端口的数量)
- 当多个输入端口同时向输出端口发送时,缓冲该分组(当通 过交换网络到达的速率超过输出速率则缓存)
- 排队带来延迟,由于输出端口缓存溢出则丢弃数据报!
需要多少缓存?
调度机制
调度: 选择下一个要通过链路传输的分组
- FIFO (first in first out) scheduling: 按照分组到来的次序发送
- 现实例子?
- 丢弃策略: 如果分组到达一个满的队列,哪个分组将会 被抛弃?
- tail drop: 丢弃刚到达的分组
- priority: 根据优先权丢失/移除分组
- random: 随机地丢弃/移除
调度策略:优先权
优先权调度:发送最高优先 权的分组
- 多类,不同类别有不同的 优先权
- 类别可能依赖于标记或者其 他的头部字段, e.g. IP source/dest, port numbers, ds,etc.
- 先传高优先级的队列中的分 组,除非没有
- 高(低)优先权中的分组传 输次序:FIFO
- 现实生活中的例子?
有红的不传绿的
调度策略:其他的
Round Robin (RR) scheduling:
多类
循环扫描不同类型的队列, 发送完一类的一个分组 ,再发送下一个类的一个分组,循环所有类
现实例子?
Weighted Fair Queuing (WFQ):
一般化的Round Robin
*在一段时间内,每个队列得到的服务时间是: Wi /(XIGMA(Wi )) t ,和权重成正比
每个类在每一个循环中获得不同权重的服务量
现实例子
4.3 IP: Internet Protocol
互联网的网络层
主机,路由器中的网络层功能:
IP协议主要实现的是数据平面的转发功能
IP 数据报格式
、
16-bit identifier flgs fragment offset —— 分片/重组使用
IP 分片和重组(Fragmentation & Reassembly)
- 网络链路有MTU (最大传输单元) –链路层帧所携带的最大数据长度
- 不同的链路类型 —— Access链路、Trunk链路、
- 不同的MTU
- 大的IP数据报在网络上被分片 (“fragmented”)
- 一个数据报被分割成若干个小 的数据报
- 相同的ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行
- IP头部的信息被用于标识,排序相关分片
- 一个数据报被分割成若干个小 的数据报
flagflag —— 标识后面还有没有
IP 编址: 引论
- IP 地址: 32位标示,对 主机或者路由器的接口编址
- 接口: 主机/路由器和物 理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP地址和每一个接口关联
- 一个IP地址和一个接口相关联
子网(Subnets)
- IP地址:
- 子网部分(高位bits)
- 主机部分(低位bits)
- 什么是子网(subnet) ?
- 一个子网内的节点(主 机或者路由器)它们的 IP地址的高位部分相同 ,这些节点构成的网络的一部分叫做子网
- 无需路由器介入,子网内各主机可以在物理上相互直接到达 —— 只需要交换机即可,一跳可达
长途链路 —— 点到点的形式 中国到日本的链路
计算机局域网 —— 多点连接的方式
方法:
要判断一个子网, 将每一个接口从主机或者路由 器上分开,构成了一个个网络的孤岛
每一个孤岛(网络)都 是一个都可以被称之为 subnet.
子网掩码:11111111 11111111 11111111 00000000
Subnet mask: /24
IP 地址分类
Class A:126 networks ,16 million hosts
Class B:16382networks ,64 K hosts
Class C:2 million networks ,254 host
Class D:multicast
Class E:reserved for future
全0全1不用
特殊IP地址
- 一些约定:
- 子网部分: 全为 0—本网络 127 Loopback —— 回路地址
- 主机部分: 全为0—本主机
- 主机部分: 全为1–广播地址,这个网络的所有主机
- 全为1——在本地网络广播
- 特殊IP地址
内网(专用)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 是 地址中子网号的长度
子网掩码(subnet mask)
- 32bits ,0 or 1 in each bito
- 1: bit位置表示子网部分
- 0:bit位置表示主机部分
- 原始的A、B、C类网络的子网掩码分别是
- A:255.0.0.0 : 11111111 00000000 00000000 00000000
- B:255,255.0.0:11111111 11111111 0000000 00000000
- C:255,255,255.0:11111111 11111111 11111111 00000000
- CIDR下的子网掩码例子:
- 1111111111111111 11111100 0o0000oo
- 另外的一种表示子网掩码的表达方式
- /#
- 例:/22:表示前面22个bit为子网部分
转发表和转发算法
- 获得IP数据报的目标地址
- 对于转发表中的每一个表项
- 如 (IP Des addr) & (mask)== destination, 则按照表项 对应的接口转发该数据报
- 如果都没有找到,则使用默认表项转发数据报
如何获得一个IP地址 主机
Q: 主机如何获得一个IP地址?
- 系统管理员将地址配置在一个文件中
- Wintel: control-panel->network- >configuration->tcp/ip->properties
- UNIX: /etc/rc.config
- DHCP: Dynamic Host Configuration Protocol: 从服务器中动态获得一个IP地址
- “plug-and-play
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 服务器,要确认用哪一个
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获得地址块中分配一个小地址块
ISP’s block 11001000 00010111 00010000 00000000 200.23.16.0/20
Organization 0 11001000 00010111 00010000 00000000 200.23.16.0/23
Organization 1 11001000 00010111 00010010 00000000 200.23.18.0/23
Organization 2 11001000 00010111 00010100 00000000 200.23.20.0/23
… …… …. ….
Organization 7 11001000 00010111 00011110 00000000 200.23.30.0/23
层次编址: 路由聚集(route aggregation) 聚集
层次编址: 特殊路由信息(more specific routes)
匹配冲突时候,采取的是最长前缀匹配
IP 编址: 如何获得一块地址 ISP
Q: 一个ISP如何获得一个地址块?
A: ICANN: Internet Corporation for Assigned Names and Numbers
- 分配地址
- 管理DNS
- 分配域名,解决冲突
NAT: Network Address Translation 网络地址转换(内网)
- 动机: 本地网络只有一个有效IP地址: 分配更多地址
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知 外界
- 可以改变ISP(地址变化)而不需要改变内部的 设备地址
- 局域网内部的设备没有明确的地址,对外是不可 见的–安全
实现: NAT 路由器必须:
- 外出数据包:替换源地址和端口号为NAT IP地址 和新的端口号,
目标IP和端口不变 …远端的C/S将会用NAP IP地址,新端口号作为目标地址 - 记住每个转换替换对(在NAT转换表中)
… 源IP,端口 vs NAP IP ,新端口 - 进入数据包:替换目标IP地址和端口号,
采用存储在NAT表中的mapping表项,用(源IP,端口)
实际上就是用外网的某个IP代替内网里面的网络号,
出去的时候替换 原来IP 和 端口号
进来的时候替换 目标IP 和 端口号
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)
- 列举存在的端口映射
- 增/删端口映射 (在租用时间内 )
-
i.e., 自动化静态NAT端口映射配 置
- 方案 3: 中继 (used in Skype)
- NAT后面的服务器建立和中继的连接
- 外部的客户端链接到中继
- 中继在2个连接之间桥接
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数据报
隧道(Tunneling)
IPv6: 应用
- Google: 8% 的客户通过IPv6访问谷歌服务
- NIST: 全美国1/3的政府域支持IPv6
- 估计还需要很长时间进行部署
- 20年以上!
- 看看过去20年来应用层面的变化: WWW, Facebook, streaming media, Skype, …
- 为什么?
4.4 通用转发和SDN
网络层功能为例的数据平面和控制平面
网络层功能:
- 转发: 对于从某个端口 到来的分组转发到合适的 输出端口
- 路由: 决定分组从源端 到目标端的路径
- 路由算法
类比: 旅行
- 转发: 一个多岔路口的进入和转出过程
- 路由: 规划从源到目标的旅行路径
数据平面 细节
- 本地的、每个路由器的 功能
- 决定某个从某个端口进 入的分组从从哪个端口 输出
- 转发功能
控制平面 整体
- 网络范围的逻辑
- 决定分组端到端穿行于各个路 由器的路径
每个路由器(Per Route)的控制平面 (传统)
每个路由器上都有实现路由算法元件(它们之间需要相互交 互)- 形成传统IP实现方式的控制平面
控制平面式分布式的,由各个路由器的各自完成,难于管理
数量众多、功能各异的中间盒
- 路由器的网络层功能:
- IP转发:对于到来的分组按照路由表决定如何转发,数 据平面
- 路由:决定路径,计算路由表;处在控制平面
- 还有其他种类繁多网络设备(中间盒):
- 交换机;防火墙;NAT;IDS;负载均衡设备
- 未来:不断增加的需求和相应的网络设备
- 需要不同的设备去实现不同的网络功能
- 每台设备集成了控制平面和数据平面的功能
- 控制平面分布式地实现了各种控制平面功能
- 升级和部署网络设备非常困难
网络设备控制平面的实现方式特点
-
互联网网络设备:传统方式都是通过分布式,每台 备的方法来实现数据平面和控制平面功能
- 垂直集成:每台路由器或其他网络设备,包括:
- 1)硬件、在私有的操作系统;
- 2)互联网标准协议(IP, RIP, IS-IS, OSPF, BGP)的私有实现
- 从上到下都由一个厂商提供(代价大、被设备上“绑架”“)
- 每个设备都实现了数据平面和控制平面的事情
- 控制平面的功能是分布式实现的
- 设备基本上只能(分布式升级困难)按照固定方式工作, 控制逻辑固化。不同的网络功能需要不同的 “middleboxes”:防火墙、负载均衡设备、NAT boxes, .
- 垂直集成:每台路由器或其他网络设备,包括:
-
(数据+控制平面)集成>(控制逻辑)分布->固化
- 代价大;升级困难;管理困难等
传统方式实现网络功能的问题
- 问题:
- 垂直集成>昂贵、不便于创新的生态
- 分布式、固化设备功能==网络设备种类繁多
- 无法改变路由等工作逻辑,无法实现流量工程等高级 特性
- 配置错误影响全网运行;升级和维护会涉及到全网设 备:管理困难
- 要增加新的网络功能,需要设计、实现以及部署新的 特定设备,设备种类繁多
- ~2005: 开始重新思考网络控制平面的处理方式
- 集中:远程的控制器集中实现控制逻辑
- 远程:数据平面和控制平面的分离
SDN:逻辑上集中的控制平面 (新)
一个不同的(通常是远程)控制器和CA交互,控制器决定分组 转发的逻辑(可编程),CA所在设备执行逻辑。
SDN的主要思路
- 网络设备数据平面和控制平面分离
- 数据平面-分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽 象成:按照流表(由控制平面设置的控制逻辑)进行PDU (帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻 塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制 逻辑
- 控制平面-控制器+网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
SDN控制平面和数据平面分离的优势
- 水平集成控制平面的开放实现(而非私有实 现),创造出好的产业生态,促进发展
- 分组交换机、控制器和各种控制逻辑网络应用app可由不同 厂商生产,专业化,引入竞争形成良好生态
- 集中式实现控制逻辑,网络管理容易:
- 集中式控制器了解网络状况,编程简单,传统方式困难
- 避免路由器的误配置
- 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
- 实现流量工程等高级特性
- 在此框架下实现各种新型(未来)的网络设备
类比: 主框架到PC的演变
要买硬件 就要买操作系统 就要买专用的软件
流量工程: 传统路由比较困难
Q: 网管如果需要u到z的流量走uvwz,x到z的流量走xwyz,怎么办?
A: 需要定义链路的代价,流量路由算法以此运算**( IP路由面向目标,无法操作)** (或者需要新的路由算法)!
链路权重只是控制旋钮,错!
流量工程:困难
Q: 如果网管需要将u到z的流量分成2路:uvwz 和uxyz ( 负载均衡),怎么办?(IP路由面向目标)
A: 无法完成(在原有体系下只有使用新的路由选择算法 ,而在全网部署新的路由算法是个大的事情)
Q:如果需要w对蓝色的和红色的流量采用不同的路由,怎么办?
A: 无法操作 (基于目标的转发,采用LS, DV 路由)
SDN特点
SDN 架构
SDN 架构: 数据平面交换机
数据平面交换机
- 快速,简单,商业化交换设备 采用硬件实现通用转发功能
- 流表被控制器计算和安装
- 基于南向API(例如OpenFlow ),SDN控制器访问基于流的交换机
- 定义了哪些可以被控制哪些不能
- 也定义了和控制器的协议 (e.g., OpenFlow)
SDN 架构: SDN控制器
SDN 控制器(网络OS):
- 维护网络状态信息
- 通过上面的北向API和网络 控制应用交互 向上
- 通过下面的南向API和网络 交换机交互 向下
- 逻辑上集中,但是在实现上通常由于性能、可扩展性、 容错性以及鲁棒性采用分布式方法
SDN 架构: 控制应用
网络控制应用:
- 控制的大脑: 采用下层提供 的服务(SDN控制器提供的 API),实现网络功能
- 路由器 交换机
- 接入控制 防火墙
- 负载均衡
- 其他功能
- 非绑定:可以被第三方提供 ,与控制器厂商以通常上不 同,与分组交换机厂商也可 以不同
通用转发和SDN
每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)
OpenFlow协议
通用flow-bascd基于流的匹配+行动(c.g,DpcnFlow)
OpenFlow,一种网络通信协议,属于数据链路层,能够控制网上交换器或路由器的转发平面(forwarding plane),借此改变网络数据包所走的网络路径。
OpenFlow能够启动远程的控制器,经由网络交换器,决定网络数据包要由何种路径通过网络交换机。这个协议的发明者,将它当成软件定义网络(Software-defined networking)的启动器。 [1]
OpenFlow允许从远程控制网络交换器的数据包转送表,透过新增、修改与移除数据包控制规则与行动,来改变数据包转送的路径。比起用访问控制表(ACLs) 和路由协议,允许更复杂的流量管理。同时,OpenFlow允许不同供应商用一个简单,开源的协议去远程管理交换机(通常提供专有的接口和描述语言)。
OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。
OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。
OpenFlow 数据平面抽象
- 流: 由分组(帧)头部字段所定义
- 通用转发: 简单的分组处理规则
- 模式: 将分组头部字段和流表进行匹配
- 行动:对于匹配上的分组,可以是丢弃、转发、修改、 将匹配的分组发送给控制器
- 优先权Priority: 几个模式匹配了,优先采用哪个,消除歧 义
- 计数器Counters: #bytes 以及 #packets
OpenFlow: 流表的表项结构
例子 基于目标的转发
OpenFlow 抽象
OpenFlow 例子
问题: 转发表(基于目标的转发)和 流表(通用转发)是如何计算出 来的? 答案: 通过控制平面(下一章)
</article>