p4 的软件定义网络实验教学方案设计 ·...

4
ISSN1672-4305 CN12-1352 / N LABORATORY SCIENCE 23 3 2020 6 Vol. 23 No. 3 Jun. 2020 基于 P4 的软件定义网络实验教学方案设计 黄家玮, 李威赫, 王伟平, 李远洋, ( 中南大学 计算机学院, 湖南 长沙 410083) : 为了增强软件定义网络课程实验的灵活性和可扩展性, 使用 Mininet 模拟器作为基础架构, 并结合 P4 语言, 搭建了基于真实操作系统内核的轻量级虚拟化实验环境以通过编写 P4 程序来实现集中控制交换 机数据转发的实验为例, 介绍了 P4 语言的主要组成部分以及用法, 展示了实验环境中网络拓扑的配置路由 的配置、 P4 程序的编写和用户交互流程关键词: 软件定义网络; P4; Mininet 模拟器; 实验教学 中图分类号:G482 文献标识码:A doi:10. 3969 / j. issn. 1672-4305. 2020. 03. 023 Experiment teaching design of Software Defined Network based on P4 HUANG Jiawei, LI Weihe, WANG Weiping, LI Yuanyang, PENG Shu ( School of Computer Science and Engineering, Central South University, Changsha 410083, China) Abstract: In order to enhance the flexibility and scalability of the Software Defined Network course experiment, the Mininet-based infrastructure and P4 language are used to build a lightweight virtual- ized experimental environment based on the real operating system kernel. Taking the experiment of writing P4 program to centrally control the data forwarding of the switch as an example, the experiment introduces the main components and usage of P4 language and shows the network topology configura- tion, routing configuration, the way of writing P4 program and user interaction process. Key words: Software Defined Network; P4; Mininet; experimental teaching 收稿日期:2018-11-12 修改日期:2019-04-17 作者简介:黄家玮,博士,教授,主要研究方向为计算机网络算法 和协议优化。 E-mail:jiaweihuang@ csu. edu. cn 基金项目: 国家自然科学基金项目 ( 项目编号: 61872387; 61572530) ;赛尔网络下一代互联网技术创新项目( 目编号:NGII20170107) ;湖南省普通高等学校教学改 革研究项目( 项目编号:2016jy41); 教育部产学合作 协同育人项目( 项目编号:2017xp094) 。 软件定义网络( Software Defined Network, SDN) 作为下一代新型网络的代表技术, 自问世之初就受 到了国内外学术界和工业界的广泛关注。 SDN 基本思想是把当前网络互连节点中决定报文如何转 发的复杂控制逻辑从交换机 / 路由器等设备中分离 出来, 通过其核心技术 OpenFlow 使交换机 / 路由器 的控制层面与转发层面实现功能上的解耦 [1] , 然而 OpenFlow 协议的设计使其无法对底层转发设备的 数据平面进行编程实现, 缺乏充足的可编程能力除此之外, 由于 OpenFlow 的匹配域都是协议相关 ,因此增加协议的匹配域便需要对协议栈和底层 交换机进行较为复杂的修改 [2] 不支持弹性增加 匹配域这样的弊端让 OpenFlow 协议版本难以稳定 和推广,使得 OpenFlow 难以大规模的进行应用针对 OpenFlow 协议所存在的问题,斯坦福大学 Nick McKeown 教授等人提出了一种新的数据包 处理语言 P4 ( Programming Protocol - Independent Packet Processors)。 P4 协议独立数据包处理编 程语言”,不但能够指导数据流的转发行为,而且能 够对交换机等底层转发设备的数据处理流程进行软 件编程定义,能够大大地提高网络灵活性,实现真正 意义上的 SDN [3] 为了帮助学生掌握基于 P4 的软件定义网络的 工作原理, 笔者利用 P4 环境中的软件交换机 Bmv2,基于 Mininet 模拟软件构建了基于真实操作 系统内核的轻量级虚拟实验平台,提供了易配置

Upload: others

Post on 24-Sep-2020

14 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: P4 的软件定义网络实验教学方案设计 · 验,熟悉基于P4的软件定义网络架构,掌握其工作 流程。 1 基于P4的软件定义网络实验模拟软件 目前,基于P4的软件定义网络实验所使用的

  ISSN1672-4305

CN12-1352 N实    验    室    科    学

LABORATORY 

SCIENCE第 23 卷  第 3 期  2020 年 6 月

Vol 23  No 3

  Jun 2020

基于 P4 的软件定义网络实验教学方案设计

黄家玮 李威赫

王伟平 李远洋 彭  澍

(中南大学

计算机学院 湖南

长沙  410083)

摘  要 为了增强软件定义网络课程实验的灵活性和可扩展性 使用 Mininet 模拟器作为基础架构 并结合

P4 语言 搭建了基于真实操作系统内核的轻量级虚拟化实验环境 以通过编写 P4 程序来实现集中控制交换

机数据转发的实验为例 介绍了 P4 语言的主要组成部分以及用法 展示了实验环境中网络拓扑的配置 路由

的配置 P4 程序的编写和用户交互流程关键词 软件定义网络 P4 Mininet 模拟器 实验教学

中图分类号G482    文献标识码A    doi10 3969 j issn 1672-4305 2020 03 023

Experiment

teaching

design

of

Software

Defined

Network

based

on

P4

HUANG

Jiawei

LI

Weihe

WANG

Weiping

LI

Yuanyang

PENG

Shu(School

of

Computer

Science

and

Engineering

Central

South

University

Changsha

410083

China)

Abstract In

order

to

enhance

the

flexibility

and

scalability

of

the

Software

Defined

Network

course

experiment

the

Mininet-based

infrastructure

and

P4

language

are

used

to

build

a

lightweight

virtual-ized

experimental

environment

based

on

the

real

operating

system

kernel

Taking

the

experiment

of

writing

P4

program

to

centrally

control

the

data

forwarding

of

the

switch

as

an

example

the

experiment

introduces

the

main

components

and

usage

of

P4

language

and

shows

the

network

topology

configura-tion

routing

configuration

the

way

of

writing

P4

program

and

user

interaction

processKey

words Software

Defined

Network

P4

Mininet

experimental

teaching

                                              

  

  

  

  

                          

  

  

  

  

 

收稿日期2018-11-12  修改日期2019-04-17作者简介黄家玮博士教授主要研究方向为计算机网络算法

和协议优化 E-mailjiaweihuang csu edu cn基金项目 国 家 自 然 科 学 基 金 项 目 ( 项 目 编 号 61872387

61572530)赛尔网络下一代互联网技术创新项目(项

目编号NGII20170107)湖南省普通高等学校教学改

革研究项目(项目编号2016jy41)教育部产学合作

协同育人项目(项目编号2017xp094)

    软件定义网络(Software

Defined

Network

SDN)作为下一代新型网络的代表技术自问世之初就受

到了国内外学术界和工业界的广泛关注 SDN 的

基本思想是把当前网络互连节点中决定报文如何转

发的复杂控制逻辑从交换机 路由器等设备中分离

出来通过其核心技术 OpenFlow 使交换机 路由器

的控制层面与转发层面实现功能上的解耦[1] 然而

OpenFlow 协议的设计使其无法对底层转发设备的

数据平面进行编程实现缺乏充足的可编程能力

除此之外由于 OpenFlow 的匹配域都是协议相关

的因此增加协议的匹配域便需要对协议栈和底层

交换机进行较为复杂的修改[2] 不支持弹性增加

匹配域这样的弊端让 OpenFlow 协议版本难以稳定

和推广使得 OpenFlow 难以大规模的进行应用针对 OpenFlow 协议所存在的问题斯坦福大学

的 Nick

McKeown 教授等人提出了一种新的数据包

处理语言 P4 ( Programming

Protocol - Independent

Packet

Processors) P4 是ldquo协议独立数据包处理编

程语言rdquo不但能够指导数据流的转发行为而且能

够对交换机等底层转发设备的数据处理流程进行软

件编程定义能够大大地提高网络灵活性实现真正

意义上的 SDN[3] 为了帮助学生掌握基于 P4 的软件定义网络的

工作原理 笔者利用 P4 环境中的软件交换机

Bmv2基于 Mininet 模拟软件构建了基于真实操作

系统内核的轻量级虚拟实验平台提供了易配置易

黄家玮等基于 P4 的软件定义网络实验教学方案设计

扩展成本低的 SDN 实验环境 学生可以通过实

验熟悉基于 P4 的软件定义网络架构掌握其工作

流程

1  基于 P4 的软件定义网络实验模拟软件

目前基于 P4 的软件定义网络实验所使用的

软件主要是 MininetBmv2 和 P4cMininet 是斯坦福大学于 2010 年基于 Linux

Container 架构开发的一款轻量级的软件定义网络仿

真平台[4] 使用者可以通过 Mininet 在一台机器上

搭建一个软件定义网络环境模拟完整的网络主机链路和交换机 Mininet 支持 OpenFlowOpenvSwith

等各种协议目前被作为各个版本的 OpenFlow 协议

演示和测试的官方演示平台[5-6] 另一种支持

OpenFlow 协议的离散事件网络仿真器是 NS-3 NS-3 是一个免费的网络模拟器由 GNU

GPLv2 许可

证授权可公开用于研究开发和使用 与之相比Mininet 具有轻量级的模板库和灵活的控制器并且

还提供了 Python

API在实际生产中能够很轻便的

对底层代码进行修改[7] 因此本文采用 Mininet平台来进行仿真实验

Bmv2(Behavior-Model

Version

2)是由 C++语言

所编写用来模拟 P4 数据平面的软件交换机P4c(P4

Compiler)是 Bmv2 的后端编译器该模

块以 P4 程序作为输入输出一个可以载入到软件

交换机 Bmv2 的 JSON 配置文件在 P4 的工作流程中Bmv2 和 P4c 之间的关系

如图 1 所示[ 8-10 ] 首先 P4 程序经过编译器 P4c 编

译后输出 JSON 格式的交换机配置文件和运行时的

API再把配置文件加载到目的交换机 Bmv2 中最后目的交换机按照流控制程序进行包的查表操作

5B

P4c JSO

P4

-

5B

c 5B+ON

gtG5

A

0

Bmv2

M

M API

Fgtgt1

M

gt

BgtN

1

图 1  P4 语言的工作流程

2  实验方案

2 1 

实验目的

实验基于 Mininet 仿真平台通过编写相应的

P4 程序和流表来实现对数据包转发控制 通过以

此实验为例来说明基于 P4 的软件定义网络的主要

工作流程2 2  实验内容

实验内容包括编写相应的 P4 程序来操控交换

机控制层面对网络中数据包的转发操作编写与 P4程序所对应的流表来操控数据层面上数据包的转发

行为并通过构建网络拓扑和联通测试过程帮助学

生理解 P4 语言的使用流程2 3  实验过程

2 3 1 

拓扑创建

实验拓扑由四台主机 H1H2H3H4 和四台交

换机 s1s2s3s4 所组成如图 2 所示

图 2  所要创建的网络拓扑

拓扑结构由 Python 脚本来完成配置网络拓扑

的定义为 MyTopo 类通过形如 s1 = self addSwitch(lsquos1rsquo

sw_path

=

sw_path

json_path

=

json_path

thrift_ port

=

_ THRIFT _ BASE _ PORT

+

1

pcap _dump

=

True

device_id

=

i)代码来创建四台交换

机 s1s2s3s4 其中可以通过设定不同的 json _path 来为不同的交换机导入不同的 P4 文件thrift起到 CLI 和底层交换机沟通的作用在交换机 Bmv2启动时需要指定相应的 thrift_port 来用以配置流表

的状态信息开启 pcap_dump 用以将捕获到的所有

网络数据包的信息存储到文件当中 通过形如 h1 =self addHost(h1ip = 10 0 0 1 mac = 000000000001 )代码来创建四台主机 h1h2h3h42 3 2 

编写 P4 程序

P4 程序一般由头部 ( Header) 解析器 ( Par-ser)匹配动作( Match -Action)控制程序( Control

Program)和逆解析器(Deparser)五部分组成(1)头部( Header) 是用于识别数据包一般包

括数据包的类型长度等信息 在本实验中用到了

以太网的头部该头部的定义如下

98

header

ethernet_t

bitlt48gt

dstAddr 目标地址

bitlt48gt

srcAddr 源地址

bitlt16gt

etherType 以太网类型

(2)解析器( Parser)是用于让编译器能够明白

人所编写的程序代码 当数据包刚刚到达交换机的

时候不能够立刻进行 Match -Action 的匹配操作解析器会对程序代码进行加工和处理使其变成

Match-Action 可以匹配的元数据(Metadata)(3)匹配-动作( Match -Action) 是用于定义相

应的表( Table)和动作( Action)在 Table 中可以使

用这些 Action 去对数据包做出相应的处理 在本

实验中需要对数据包的转发进行控制所定义的转

发动作如下action

set_nhop( bitlt9gt

port)

定义名为 set_nhop 的

动作

  standard_metadata egress_spec

=

port 指定数据包

出端口

  hdr ipv4 ttl

=

hdr ipv4 ttl

-

1

将数据包的生存时

间值减 1

在 set_nhop 动作中使用了 P4 提供的标准元

数据 standard_metadata 中的指定出端口 egress_spec来确定数据包从交换机的哪个端口发出

定义 forward 表在匹配目的 IP 地址后使用

set_nhop 来控制相应数据包的转发行为table

forward

定义名为 forward 的表

actions

=

  set_nhop

使用所定义的 set_nhop 动作key

=

  hdr ipv4 dstAddr

exact 精确匹配目的 IP 地址size

=

5600

(4)控制程序一般由两部分组成Ingress 和 E-gress分别代表了一个数据包的进入和离开 当解

析器(Parser)处理完数据包之后会得到相应的包

信息比如一些元数据 Metadata这些得到的信息会

交给 Ingress 来处理 Ingress 会将数据包送至不同

的流表(Table)更新数据包头部( Header)的内容设置数据包的出端口等然后将数据包送至队列中在 Egress 阶段会将队列中的信息读出再一次的

处理并且将数据包发出丢弃复制或是重新处理

(Recirculate) 本实验所用到的控制程序代码

如下apply

  if

(hdr ipv4 isValid()

ampamp

hdr ipv4 ttl

gt

0)

 

forward apply() 

根据 P4 程序为每个交换机编写相应的流表

后使用不同的 thrift_port 将流表规则下发到各个交

换机中交换机 s1 的流表下发如下sudo

simple_switch_CLI

--thrift-port

22222

lt

s1-com-mands txt

交换机 s1 的流表 s1-commands txt 的内容如下table_add

forward

set_nhop

10 0 0 1 = gt

1table_add

forward

set_nhop

10 0 0 2 = gt

2table_add

forward

set_nhop

10 0 0 3 = gt

3table_add

forward

set_nhop

10 0 0 4 = gt

4

(5)逆解析器( Deparser)是用于将由解析器解

析生成的元数据转化成序列化的分组数据 本实验

中定义的逆解析器如下control

DeparserImpl( packet_out

packet

in

headers

hdr)

apply

packet emit(hdr ethernet)packet emit(hdr ipv4)packet emit(hdr tcp)

2 3 3  连通测试

运行相应的 P4 程序为各个交换机下发流表

后在 Mininet 上为各个主机之间配置地址解析协

议通过形如图 3 的方式为 h1 和 h2 之间配置地址

解析协议

图 3  为 h1 和 h2 之间配置地址解析协议

在 Mininet 中执行 pingall 命令测试网络的连通

性由图 4 可知各个主机之间互相连通

图 4  执行 pingall 操作检测网络连通性

2 3 4 

转发控制

在 Mininet 中为主机 h1h3 开启两个 xterm 窗

口发送 iperf 数据流将 h1 作为客户机发送端h3 作

为服务器接收端对 h1 进行 iperf

-c

10 0 0 3 的配

置对 h3 进行 iperf

-s 的配置 同时启用 Wireshark

09                    

黄家玮等基于 P4 的软件定义网络实验教学方案设计

抓包工具分别对 s1 交换机 1 号端口和 s4 交换机 3号端口的数据包进行抓取发现由于从 h1 到 h3 的

数据包经过了四个交换机根据 action 中的每经过

一个交换机TTL 便减一的操作由抓包结果发现

TTL 值从 64 变成了 61如图 5图 6 所示

图 5  s1 交换机 1 号端口抓包结果(TTL64)

图 6  s4 交换机 3 号端口抓包结果(TTL61)

在 s1 的流表 s1 -commands txt 中将 h1h2 到

h4 的转发表项 table_add

forward

set_nhop

10 0 0 4

= gt

4 去除后此时 h1h2 无法和 h4 相连通 在

Mininet 中进行 pingall 操作所得到的结果如图 7所示

3  结语

在基于 P4 的软件定义网络的包转发实验中

图 7  去除 s1 中的部分流表项后执行 pingall 操作

学生通过创建拓扑和编写相应的 P4 程序搭建了

一个完整的虚拟化实验网络 学生通过本课程实

验不仅可以了解 P4 语言的使用规则和工作原理还可以对网络设备进行直接的操作能够很好地提

高学生的应用能力

参考文献(References)

[1]   张朝昆崔勇唐翯祎等 软件定义网络( SDN)研究进展[ J] 软件学报201526(1)62-81

[2]   McKeown

N

Anderson

T

Balakrishnan

H

et

al

OpenFlow

En-abling

innovation

in

campus

networks[J]

ACM

SIGCOMM

Com-puter

Communication

Review

2008

38(2)

69-74[3]   Bosshart

P

Daly

D

Gibb

G

et

al

P4Programming

Protocol-

Independent

Packet

Processors [ J]

ACM

SIGCOMM

Computer

Communication

Review201444(3)87-95[4]   黄家玮刘敬玲徐文茜等 软件定义网络的实验教学方案设

计[J] 计算机教育2017(3)152-154[5]   李艳郝志安李宁等 基于 mininet 的 SDN 架构仿真研究

[J] 计算机与网络2014(5)57-59[6]   Nunes

B

Mendonca

M

Nguyen

X

et

al

A

Survey

of

Software-

Defined

Networking

Past

Present

and

Future

of

Programmable

Networks[J]

Communications

Surveys

amp

Tutorials201416(3)1617-1634

[7]   Bholebawa

I

Jha

R

Dalal

U

Performance

Analysis

of

Proposed

OpenFlow-Based

Network

Architecture

Using

Mininet[ J]

Wire-less

Personal

Communications201686(2)943-958[8]   赵敏田野 P4 与 POF 协议无关可编程网络技术比较研究

[J] 网络新媒体技术2018(1)54-58[9]   刘争争毕军周禹等 基于 P4 的主动网络遥测机制[ J] 通

信学报2018(39)162-169[10]   尼克middot麦克欧文金昶勳 用 P4 对数据平面进行编程[ J] 中

国计算机学会通讯201612(7)12-20

10509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979(上接第 87 页)参考文献(References)

[1]   吴桂峰唐鸿儒陈东雷 基于 Multisim 和 LabVIEW 的电路课

程虚拟实验平台的构架[ J] 当代教育实践与教学研究2016(1)90-91

[2]   杨絮王宇李洋等 通信工程专业创新实验虚拟平台建设与

实践[J] 科技创新导报2016(24)138-139[3]   廖柏林毛凯文刘畅等 基于 LabVIEW 的电子电路虚拟实

验平台设计与实现[J] 科技视界2017(2)29

[4]   宋铭 LabVIEW 编程详解[M]

北京电子工业出版社2017[5]   周晓东胡仁喜 LabVIEW

2015 中文版虚拟仪器从入门到精

通[M] 北京机械工业出版社2016[6]   位凯朋蒲永红刘志坚等 基于 LabVIEW 的单管放大电路

参数测试虚拟实验设计[J] 课程教育研究2017(5)48[7]   贾立新 数字电路[M] 3 版 北京电子工业出版社2017[8]   阎石 数字电子技术基础[ M] 6 版 北京高等教育出版社

2016

19

Page 2: P4 的软件定义网络实验教学方案设计 · 验,熟悉基于P4的软件定义网络架构,掌握其工作 流程。 1 基于P4的软件定义网络实验模拟软件 目前,基于P4的软件定义网络实验所使用的

黄家玮等基于 P4 的软件定义网络实验教学方案设计

扩展成本低的 SDN 实验环境 学生可以通过实

验熟悉基于 P4 的软件定义网络架构掌握其工作

流程

1  基于 P4 的软件定义网络实验模拟软件

目前基于 P4 的软件定义网络实验所使用的

软件主要是 MininetBmv2 和 P4cMininet 是斯坦福大学于 2010 年基于 Linux

Container 架构开发的一款轻量级的软件定义网络仿

真平台[4] 使用者可以通过 Mininet 在一台机器上

搭建一个软件定义网络环境模拟完整的网络主机链路和交换机 Mininet 支持 OpenFlowOpenvSwith

等各种协议目前被作为各个版本的 OpenFlow 协议

演示和测试的官方演示平台[5-6] 另一种支持

OpenFlow 协议的离散事件网络仿真器是 NS-3 NS-3 是一个免费的网络模拟器由 GNU

GPLv2 许可

证授权可公开用于研究开发和使用 与之相比Mininet 具有轻量级的模板库和灵活的控制器并且

还提供了 Python

API在实际生产中能够很轻便的

对底层代码进行修改[7] 因此本文采用 Mininet平台来进行仿真实验

Bmv2(Behavior-Model

Version

2)是由 C++语言

所编写用来模拟 P4 数据平面的软件交换机P4c(P4

Compiler)是 Bmv2 的后端编译器该模

块以 P4 程序作为输入输出一个可以载入到软件

交换机 Bmv2 的 JSON 配置文件在 P4 的工作流程中Bmv2 和 P4c 之间的关系

如图 1 所示[ 8-10 ] 首先 P4 程序经过编译器 P4c 编

译后输出 JSON 格式的交换机配置文件和运行时的

API再把配置文件加载到目的交换机 Bmv2 中最后目的交换机按照流控制程序进行包的查表操作

5B

P4c JSO

P4

-

5B

c 5B+ON

gtG5

A

0

Bmv2

M

M API

Fgtgt1

M

gt

BgtN

1

图 1  P4 语言的工作流程

2  实验方案

2 1 

实验目的

实验基于 Mininet 仿真平台通过编写相应的

P4 程序和流表来实现对数据包转发控制 通过以

此实验为例来说明基于 P4 的软件定义网络的主要

工作流程2 2  实验内容

实验内容包括编写相应的 P4 程序来操控交换

机控制层面对网络中数据包的转发操作编写与 P4程序所对应的流表来操控数据层面上数据包的转发

行为并通过构建网络拓扑和联通测试过程帮助学

生理解 P4 语言的使用流程2 3  实验过程

2 3 1 

拓扑创建

实验拓扑由四台主机 H1H2H3H4 和四台交

换机 s1s2s3s4 所组成如图 2 所示

图 2  所要创建的网络拓扑

拓扑结构由 Python 脚本来完成配置网络拓扑

的定义为 MyTopo 类通过形如 s1 = self addSwitch(lsquos1rsquo

sw_path

=

sw_path

json_path

=

json_path

thrift_ port

=

_ THRIFT _ BASE _ PORT

+

1

pcap _dump

=

True

device_id

=

i)代码来创建四台交换

机 s1s2s3s4 其中可以通过设定不同的 json _path 来为不同的交换机导入不同的 P4 文件thrift起到 CLI 和底层交换机沟通的作用在交换机 Bmv2启动时需要指定相应的 thrift_port 来用以配置流表

的状态信息开启 pcap_dump 用以将捕获到的所有

网络数据包的信息存储到文件当中 通过形如 h1 =self addHost(h1ip = 10 0 0 1 mac = 000000000001 )代码来创建四台主机 h1h2h3h42 3 2 

编写 P4 程序

P4 程序一般由头部 ( Header) 解析器 ( Par-ser)匹配动作( Match -Action)控制程序( Control

Program)和逆解析器(Deparser)五部分组成(1)头部( Header) 是用于识别数据包一般包

括数据包的类型长度等信息 在本实验中用到了

以太网的头部该头部的定义如下

98

header

ethernet_t

bitlt48gt

dstAddr 目标地址

bitlt48gt

srcAddr 源地址

bitlt16gt

etherType 以太网类型

(2)解析器( Parser)是用于让编译器能够明白

人所编写的程序代码 当数据包刚刚到达交换机的

时候不能够立刻进行 Match -Action 的匹配操作解析器会对程序代码进行加工和处理使其变成

Match-Action 可以匹配的元数据(Metadata)(3)匹配-动作( Match -Action) 是用于定义相

应的表( Table)和动作( Action)在 Table 中可以使

用这些 Action 去对数据包做出相应的处理 在本

实验中需要对数据包的转发进行控制所定义的转

发动作如下action

set_nhop( bitlt9gt

port)

定义名为 set_nhop 的

动作

  standard_metadata egress_spec

=

port 指定数据包

出端口

  hdr ipv4 ttl

=

hdr ipv4 ttl

-

1

将数据包的生存时

间值减 1

在 set_nhop 动作中使用了 P4 提供的标准元

数据 standard_metadata 中的指定出端口 egress_spec来确定数据包从交换机的哪个端口发出

定义 forward 表在匹配目的 IP 地址后使用

set_nhop 来控制相应数据包的转发行为table

forward

定义名为 forward 的表

actions

=

  set_nhop

使用所定义的 set_nhop 动作key

=

  hdr ipv4 dstAddr

exact 精确匹配目的 IP 地址size

=

5600

(4)控制程序一般由两部分组成Ingress 和 E-gress分别代表了一个数据包的进入和离开 当解

析器(Parser)处理完数据包之后会得到相应的包

信息比如一些元数据 Metadata这些得到的信息会

交给 Ingress 来处理 Ingress 会将数据包送至不同

的流表(Table)更新数据包头部( Header)的内容设置数据包的出端口等然后将数据包送至队列中在 Egress 阶段会将队列中的信息读出再一次的

处理并且将数据包发出丢弃复制或是重新处理

(Recirculate) 本实验所用到的控制程序代码

如下apply

  if

(hdr ipv4 isValid()

ampamp

hdr ipv4 ttl

gt

0)

 

forward apply() 

根据 P4 程序为每个交换机编写相应的流表

后使用不同的 thrift_port 将流表规则下发到各个交

换机中交换机 s1 的流表下发如下sudo

simple_switch_CLI

--thrift-port

22222

lt

s1-com-mands txt

交换机 s1 的流表 s1-commands txt 的内容如下table_add

forward

set_nhop

10 0 0 1 = gt

1table_add

forward

set_nhop

10 0 0 2 = gt

2table_add

forward

set_nhop

10 0 0 3 = gt

3table_add

forward

set_nhop

10 0 0 4 = gt

4

(5)逆解析器( Deparser)是用于将由解析器解

析生成的元数据转化成序列化的分组数据 本实验

中定义的逆解析器如下control

DeparserImpl( packet_out

packet

in

headers

hdr)

apply

packet emit(hdr ethernet)packet emit(hdr ipv4)packet emit(hdr tcp)

2 3 3  连通测试

运行相应的 P4 程序为各个交换机下发流表

后在 Mininet 上为各个主机之间配置地址解析协

议通过形如图 3 的方式为 h1 和 h2 之间配置地址

解析协议

图 3  为 h1 和 h2 之间配置地址解析协议

在 Mininet 中执行 pingall 命令测试网络的连通

性由图 4 可知各个主机之间互相连通

图 4  执行 pingall 操作检测网络连通性

2 3 4 

转发控制

在 Mininet 中为主机 h1h3 开启两个 xterm 窗

口发送 iperf 数据流将 h1 作为客户机发送端h3 作

为服务器接收端对 h1 进行 iperf

-c

10 0 0 3 的配

置对 h3 进行 iperf

-s 的配置 同时启用 Wireshark

09                    

黄家玮等基于 P4 的软件定义网络实验教学方案设计

抓包工具分别对 s1 交换机 1 号端口和 s4 交换机 3号端口的数据包进行抓取发现由于从 h1 到 h3 的

数据包经过了四个交换机根据 action 中的每经过

一个交换机TTL 便减一的操作由抓包结果发现

TTL 值从 64 变成了 61如图 5图 6 所示

图 5  s1 交换机 1 号端口抓包结果(TTL64)

图 6  s4 交换机 3 号端口抓包结果(TTL61)

在 s1 的流表 s1 -commands txt 中将 h1h2 到

h4 的转发表项 table_add

forward

set_nhop

10 0 0 4

= gt

4 去除后此时 h1h2 无法和 h4 相连通 在

Mininet 中进行 pingall 操作所得到的结果如图 7所示

3  结语

在基于 P4 的软件定义网络的包转发实验中

图 7  去除 s1 中的部分流表项后执行 pingall 操作

学生通过创建拓扑和编写相应的 P4 程序搭建了

一个完整的虚拟化实验网络 学生通过本课程实

验不仅可以了解 P4 语言的使用规则和工作原理还可以对网络设备进行直接的操作能够很好地提

高学生的应用能力

参考文献(References)

[1]   张朝昆崔勇唐翯祎等 软件定义网络( SDN)研究进展[ J] 软件学报201526(1)62-81

[2]   McKeown

N

Anderson

T

Balakrishnan

H

et

al

OpenFlow

En-abling

innovation

in

campus

networks[J]

ACM

SIGCOMM

Com-puter

Communication

Review

2008

38(2)

69-74[3]   Bosshart

P

Daly

D

Gibb

G

et

al

P4Programming

Protocol-

Independent

Packet

Processors [ J]

ACM

SIGCOMM

Computer

Communication

Review201444(3)87-95[4]   黄家玮刘敬玲徐文茜等 软件定义网络的实验教学方案设

计[J] 计算机教育2017(3)152-154[5]   李艳郝志安李宁等 基于 mininet 的 SDN 架构仿真研究

[J] 计算机与网络2014(5)57-59[6]   Nunes

B

Mendonca

M

Nguyen

X

et

al

A

Survey

of

Software-

Defined

Networking

Past

Present

and

Future

of

Programmable

Networks[J]

Communications

Surveys

amp

Tutorials201416(3)1617-1634

[7]   Bholebawa

I

Jha

R

Dalal

U

Performance

Analysis

of

Proposed

OpenFlow-Based

Network

Architecture

Using

Mininet[ J]

Wire-less

Personal

Communications201686(2)943-958[8]   赵敏田野 P4 与 POF 协议无关可编程网络技术比较研究

[J] 网络新媒体技术2018(1)54-58[9]   刘争争毕军周禹等 基于 P4 的主动网络遥测机制[ J] 通

信学报2018(39)162-169[10]   尼克middot麦克欧文金昶勳 用 P4 对数据平面进行编程[ J] 中

国计算机学会通讯201612(7)12-20

10509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979(上接第 87 页)参考文献(References)

[1]   吴桂峰唐鸿儒陈东雷 基于 Multisim 和 LabVIEW 的电路课

程虚拟实验平台的构架[ J] 当代教育实践与教学研究2016(1)90-91

[2]   杨絮王宇李洋等 通信工程专业创新实验虚拟平台建设与

实践[J] 科技创新导报2016(24)138-139[3]   廖柏林毛凯文刘畅等 基于 LabVIEW 的电子电路虚拟实

验平台设计与实现[J] 科技视界2017(2)29

[4]   宋铭 LabVIEW 编程详解[M]

北京电子工业出版社2017[5]   周晓东胡仁喜 LabVIEW

2015 中文版虚拟仪器从入门到精

通[M] 北京机械工业出版社2016[6]   位凯朋蒲永红刘志坚等 基于 LabVIEW 的单管放大电路

参数测试虚拟实验设计[J] 课程教育研究2017(5)48[7]   贾立新 数字电路[M] 3 版 北京电子工业出版社2017[8]   阎石 数字电子技术基础[ M] 6 版 北京高等教育出版社

2016

19

Page 3: P4 的软件定义网络实验教学方案设计 · 验,熟悉基于P4的软件定义网络架构,掌握其工作 流程。 1 基于P4的软件定义网络实验模拟软件 目前,基于P4的软件定义网络实验所使用的

header

ethernet_t

bitlt48gt

dstAddr 目标地址

bitlt48gt

srcAddr 源地址

bitlt16gt

etherType 以太网类型

(2)解析器( Parser)是用于让编译器能够明白

人所编写的程序代码 当数据包刚刚到达交换机的

时候不能够立刻进行 Match -Action 的匹配操作解析器会对程序代码进行加工和处理使其变成

Match-Action 可以匹配的元数据(Metadata)(3)匹配-动作( Match -Action) 是用于定义相

应的表( Table)和动作( Action)在 Table 中可以使

用这些 Action 去对数据包做出相应的处理 在本

实验中需要对数据包的转发进行控制所定义的转

发动作如下action

set_nhop( bitlt9gt

port)

定义名为 set_nhop 的

动作

  standard_metadata egress_spec

=

port 指定数据包

出端口

  hdr ipv4 ttl

=

hdr ipv4 ttl

-

1

将数据包的生存时

间值减 1

在 set_nhop 动作中使用了 P4 提供的标准元

数据 standard_metadata 中的指定出端口 egress_spec来确定数据包从交换机的哪个端口发出

定义 forward 表在匹配目的 IP 地址后使用

set_nhop 来控制相应数据包的转发行为table

forward

定义名为 forward 的表

actions

=

  set_nhop

使用所定义的 set_nhop 动作key

=

  hdr ipv4 dstAddr

exact 精确匹配目的 IP 地址size

=

5600

(4)控制程序一般由两部分组成Ingress 和 E-gress分别代表了一个数据包的进入和离开 当解

析器(Parser)处理完数据包之后会得到相应的包

信息比如一些元数据 Metadata这些得到的信息会

交给 Ingress 来处理 Ingress 会将数据包送至不同

的流表(Table)更新数据包头部( Header)的内容设置数据包的出端口等然后将数据包送至队列中在 Egress 阶段会将队列中的信息读出再一次的

处理并且将数据包发出丢弃复制或是重新处理

(Recirculate) 本实验所用到的控制程序代码

如下apply

  if

(hdr ipv4 isValid()

ampamp

hdr ipv4 ttl

gt

0)

 

forward apply() 

根据 P4 程序为每个交换机编写相应的流表

后使用不同的 thrift_port 将流表规则下发到各个交

换机中交换机 s1 的流表下发如下sudo

simple_switch_CLI

--thrift-port

22222

lt

s1-com-mands txt

交换机 s1 的流表 s1-commands txt 的内容如下table_add

forward

set_nhop

10 0 0 1 = gt

1table_add

forward

set_nhop

10 0 0 2 = gt

2table_add

forward

set_nhop

10 0 0 3 = gt

3table_add

forward

set_nhop

10 0 0 4 = gt

4

(5)逆解析器( Deparser)是用于将由解析器解

析生成的元数据转化成序列化的分组数据 本实验

中定义的逆解析器如下control

DeparserImpl( packet_out

packet

in

headers

hdr)

apply

packet emit(hdr ethernet)packet emit(hdr ipv4)packet emit(hdr tcp)

2 3 3  连通测试

运行相应的 P4 程序为各个交换机下发流表

后在 Mininet 上为各个主机之间配置地址解析协

议通过形如图 3 的方式为 h1 和 h2 之间配置地址

解析协议

图 3  为 h1 和 h2 之间配置地址解析协议

在 Mininet 中执行 pingall 命令测试网络的连通

性由图 4 可知各个主机之间互相连通

图 4  执行 pingall 操作检测网络连通性

2 3 4 

转发控制

在 Mininet 中为主机 h1h3 开启两个 xterm 窗

口发送 iperf 数据流将 h1 作为客户机发送端h3 作

为服务器接收端对 h1 进行 iperf

-c

10 0 0 3 的配

置对 h3 进行 iperf

-s 的配置 同时启用 Wireshark

09                    

黄家玮等基于 P4 的软件定义网络实验教学方案设计

抓包工具分别对 s1 交换机 1 号端口和 s4 交换机 3号端口的数据包进行抓取发现由于从 h1 到 h3 的

数据包经过了四个交换机根据 action 中的每经过

一个交换机TTL 便减一的操作由抓包结果发现

TTL 值从 64 变成了 61如图 5图 6 所示

图 5  s1 交换机 1 号端口抓包结果(TTL64)

图 6  s4 交换机 3 号端口抓包结果(TTL61)

在 s1 的流表 s1 -commands txt 中将 h1h2 到

h4 的转发表项 table_add

forward

set_nhop

10 0 0 4

= gt

4 去除后此时 h1h2 无法和 h4 相连通 在

Mininet 中进行 pingall 操作所得到的结果如图 7所示

3  结语

在基于 P4 的软件定义网络的包转发实验中

图 7  去除 s1 中的部分流表项后执行 pingall 操作

学生通过创建拓扑和编写相应的 P4 程序搭建了

一个完整的虚拟化实验网络 学生通过本课程实

验不仅可以了解 P4 语言的使用规则和工作原理还可以对网络设备进行直接的操作能够很好地提

高学生的应用能力

参考文献(References)

[1]   张朝昆崔勇唐翯祎等 软件定义网络( SDN)研究进展[ J] 软件学报201526(1)62-81

[2]   McKeown

N

Anderson

T

Balakrishnan

H

et

al

OpenFlow

En-abling

innovation

in

campus

networks[J]

ACM

SIGCOMM

Com-puter

Communication

Review

2008

38(2)

69-74[3]   Bosshart

P

Daly

D

Gibb

G

et

al

P4Programming

Protocol-

Independent

Packet

Processors [ J]

ACM

SIGCOMM

Computer

Communication

Review201444(3)87-95[4]   黄家玮刘敬玲徐文茜等 软件定义网络的实验教学方案设

计[J] 计算机教育2017(3)152-154[5]   李艳郝志安李宁等 基于 mininet 的 SDN 架构仿真研究

[J] 计算机与网络2014(5)57-59[6]   Nunes

B

Mendonca

M

Nguyen

X

et

al

A

Survey

of

Software-

Defined

Networking

Past

Present

and

Future

of

Programmable

Networks[J]

Communications

Surveys

amp

Tutorials201416(3)1617-1634

[7]   Bholebawa

I

Jha

R

Dalal

U

Performance

Analysis

of

Proposed

OpenFlow-Based

Network

Architecture

Using

Mininet[ J]

Wire-less

Personal

Communications201686(2)943-958[8]   赵敏田野 P4 与 POF 协议无关可编程网络技术比较研究

[J] 网络新媒体技术2018(1)54-58[9]   刘争争毕军周禹等 基于 P4 的主动网络遥测机制[ J] 通

信学报2018(39)162-169[10]   尼克middot麦克欧文金昶勳 用 P4 对数据平面进行编程[ J] 中

国计算机学会通讯201612(7)12-20

10509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979(上接第 87 页)参考文献(References)

[1]   吴桂峰唐鸿儒陈东雷 基于 Multisim 和 LabVIEW 的电路课

程虚拟实验平台的构架[ J] 当代教育实践与教学研究2016(1)90-91

[2]   杨絮王宇李洋等 通信工程专业创新实验虚拟平台建设与

实践[J] 科技创新导报2016(24)138-139[3]   廖柏林毛凯文刘畅等 基于 LabVIEW 的电子电路虚拟实

验平台设计与实现[J] 科技视界2017(2)29

[4]   宋铭 LabVIEW 编程详解[M]

北京电子工业出版社2017[5]   周晓东胡仁喜 LabVIEW

2015 中文版虚拟仪器从入门到精

通[M] 北京机械工业出版社2016[6]   位凯朋蒲永红刘志坚等 基于 LabVIEW 的单管放大电路

参数测试虚拟实验设计[J] 课程教育研究2017(5)48[7]   贾立新 数字电路[M] 3 版 北京电子工业出版社2017[8]   阎石 数字电子技术基础[ M] 6 版 北京高等教育出版社

2016

19

Page 4: P4 的软件定义网络实验教学方案设计 · 验,熟悉基于P4的软件定义网络架构,掌握其工作 流程。 1 基于P4的软件定义网络实验模拟软件 目前,基于P4的软件定义网络实验所使用的

黄家玮等基于 P4 的软件定义网络实验教学方案设计

抓包工具分别对 s1 交换机 1 号端口和 s4 交换机 3号端口的数据包进行抓取发现由于从 h1 到 h3 的

数据包经过了四个交换机根据 action 中的每经过

一个交换机TTL 便减一的操作由抓包结果发现

TTL 值从 64 变成了 61如图 5图 6 所示

图 5  s1 交换机 1 号端口抓包结果(TTL64)

图 6  s4 交换机 3 号端口抓包结果(TTL61)

在 s1 的流表 s1 -commands txt 中将 h1h2 到

h4 的转发表项 table_add

forward

set_nhop

10 0 0 4

= gt

4 去除后此时 h1h2 无法和 h4 相连通 在

Mininet 中进行 pingall 操作所得到的结果如图 7所示

3  结语

在基于 P4 的软件定义网络的包转发实验中

图 7  去除 s1 中的部分流表项后执行 pingall 操作

学生通过创建拓扑和编写相应的 P4 程序搭建了

一个完整的虚拟化实验网络 学生通过本课程实

验不仅可以了解 P4 语言的使用规则和工作原理还可以对网络设备进行直接的操作能够很好地提

高学生的应用能力

参考文献(References)

[1]   张朝昆崔勇唐翯祎等 软件定义网络( SDN)研究进展[ J] 软件学报201526(1)62-81

[2]   McKeown

N

Anderson

T

Balakrishnan

H

et

al

OpenFlow

En-abling

innovation

in

campus

networks[J]

ACM

SIGCOMM

Com-puter

Communication

Review

2008

38(2)

69-74[3]   Bosshart

P

Daly

D

Gibb

G

et

al

P4Programming

Protocol-

Independent

Packet

Processors [ J]

ACM

SIGCOMM

Computer

Communication

Review201444(3)87-95[4]   黄家玮刘敬玲徐文茜等 软件定义网络的实验教学方案设

计[J] 计算机教育2017(3)152-154[5]   李艳郝志安李宁等 基于 mininet 的 SDN 架构仿真研究

[J] 计算机与网络2014(5)57-59[6]   Nunes

B

Mendonca

M

Nguyen

X

et

al

A

Survey

of

Software-

Defined

Networking

Past

Present

and

Future

of

Programmable

Networks[J]

Communications

Surveys

amp

Tutorials201416(3)1617-1634

[7]   Bholebawa

I

Jha

R

Dalal

U

Performance

Analysis

of

Proposed

OpenFlow-Based

Network

Architecture

Using

Mininet[ J]

Wire-less

Personal

Communications201686(2)943-958[8]   赵敏田野 P4 与 POF 协议无关可编程网络技术比较研究

[J] 网络新媒体技术2018(1)54-58[9]   刘争争毕军周禹等 基于 P4 的主动网络遥测机制[ J] 通

信学报2018(39)162-169[10]   尼克middot麦克欧文金昶勳 用 P4 对数据平面进行编程[ J] 中

国计算机学会通讯201612(7)12-20

10509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979105097910509791050979(上接第 87 页)参考文献(References)

[1]   吴桂峰唐鸿儒陈东雷 基于 Multisim 和 LabVIEW 的电路课

程虚拟实验平台的构架[ J] 当代教育实践与教学研究2016(1)90-91

[2]   杨絮王宇李洋等 通信工程专业创新实验虚拟平台建设与

实践[J] 科技创新导报2016(24)138-139[3]   廖柏林毛凯文刘畅等 基于 LabVIEW 的电子电路虚拟实

验平台设计与实现[J] 科技视界2017(2)29

[4]   宋铭 LabVIEW 编程详解[M]

北京电子工业出版社2017[5]   周晓东胡仁喜 LabVIEW

2015 中文版虚拟仪器从入门到精

通[M] 北京机械工业出版社2016[6]   位凯朋蒲永红刘志坚等 基于 LabVIEW 的单管放大电路

参数测试虚拟实验设计[J] 课程教育研究2017(5)48[7]   贾立新 数字电路[M] 3 版 北京电子工业出版社2017[8]   阎石 数字电子技术基础[ M] 6 版 北京高等教育出版社

2016

19