![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
P4
文章平均质量分 84
勉族
这个作者很懒,什么都没留下…
展开
-
P4 实验---- ARP 转发
实验内容这次实验的主要内容是如何让P4 交换机能支持处理ARP数据包。我们在P4 tutorials的实验中都是提前把ARP记录写入了host缓存里,如果没有提前准备的ARP记录,那么真实的h1 ping h2流程是:h1 发出ARP request广播询问网络中h2 IP地址所对应的Mac,h2 收到arp request后,发送 ARP replay单播回应h1,此时h2也知道h1 IP和Mac,h1 知道了h2的Mac就可以封装二层帧头,发送单播icmp request,h2收到icm原创 2022-05-15 15:58:16 · 1461 阅读 · 0 评论 -
P4 Tutorials---- source routing后记(补充IPv4转发)
实验内容针对P4 Tutorials---- source routing实验最后提出的问题。如何使压入标签的动作在第一跳网络设备上执行,这样应该使更贴近现实中的网络场景。实验前,我们先看一下h1 ping h2是不通的。因为和./send.py 发的带标签的包不同,直接ping的是普通的ipv4包,但是switch现在没有转发ipv4报文的逻辑。逻辑示意图:我们这次实验要做是ipv4的数据包进入后在第一个switch压入指导转发的标签栈,后面的switch就所需要做的是弹出标签,从相应的端口送原创 2022-04-25 21:27:04 · 669 阅读 · 0 评论 -
P4 Tutorials---- source routing
实验介绍:这次实验主要是练习source routing。源主机在数据包中压入标签栈以指导网络中每一个switch传送数据包到特定的端口。在这个例子中,我们把标签压在Ethernet header后,并设定一个特殊的etherType加以区分。每一个switch弹出标签并从相应端口送出数据包。官方网站:https://github.com/p4lang/tutorials/tree/master/exercises/source_routingSwitch必须可以解析source routing 标签原创 2022-04-20 22:27:54 · 1154 阅读 · 0 评论 -
P4 tutorials----ECN
学习内容:在Basic Forwarding实验的基础上扩展ECN功能。关于ECN的概念可以参考:RoCE网络简单来说,Host1的IPv4报文携带ECN置位(01或者10),如果Switch队列长度达到了阈值时,Switch会将ECN位重新置位为11。Host2收到ECN置位11后,会发送CNP报文通知Host1降速。从而达到拥塞避免的效果。和之前的实验一样,我们只关注数据平面的逻辑。控制平面已经提前定义好了。步骤1:运行不完整的开始代码在tutorials/exercises/ecn目录下的原创 2022-04-11 21:23:12 · 961 阅读 · 0 评论 -
P4 simple switch安装&测试
P4 tutorials的实验都是通过mininet模拟网络环境进行测试。你可能觉得mininet的环境不够真实,能不能直接用一台Linux虚拟机当作Switch呢?答案当然是可以的!今天这篇文章主要介绍如何搭建一台Linux虚拟机当作Switch使用。准备工作准备一台Ubuntu20.4的虚拟机,作为Switch。另外你也可以在准备两台虚拟机作为Host来做ping测试。在VirtualBox或者VMware环境搭建网络如下:不过这样准备3台虚拟机有点麻烦,我们只需要ping测试一下联通原创 2022-04-09 21:42:36 · 2687 阅读 · 11 评论 -
P4 tutorials MRI(INT)
实验说明实验的目标是使用简化版的带内遥测(INT)扩展基本L3转发,我们称之为多跳路有检查(MRI)。MRI可以追踪数据包转发路径和队列长度。为了支持这个功能,我们需要编写P4程序,将一个ID和队列长度添加到每个数据包的头堆栈。Switch ID的顺序相当于路径,每一个ID后面跟随着端口队列长度。和之前的实验一样,我们已经定义好了控制平面,所以实验只需要关注P4数据平面的逻辑。步骤一:运行(不完整)初始代码mri.p4只是初步实现了L3转发功能,我们的任务是扩展代码,使其能够自定义支持MRI的报文原创 2022-04-05 18:56:32 · 2243 阅读 · 4 评论 -
P4学习----Metadata
元数据是用来携带数据和配置性和西,元数据的申明与包头类似,但在实例化的时候有所不同,而且包头和元数据在字段值的约束上存在一定的差别。元数据分为两种,一种是用来携带P4程序运行过程中产生的数据的用户自定义元数据(User-Defined Metadata),如首部字段的运算结果等。另一种是固有元数据(Intrinsic Metadata),用于携带交换机自身的配置信息,如数据包进入交换机时的端口号等。自定义元数据开发者自定义metadata,定义方式和header一样。然后可以直接应用在Action原创 2022-04-01 10:19:02 · 1228 阅读 · 0 评论 -
P4学习----Control
在 P4 裡面有两个主要的 control flow,ingress 以及 egress,这两个 control flow 分别代表了一个数据包的进入以及离开。当 Parser 处理完数据包之后,会将相关的信息,例如解析出来的 header 以及 metadata 储存,然后交由 ingress 处理,ingress 会将封包送往不同的 table、更改数据包 header 内容、设定输出的 port 等等,最后再丢到一个 Queue 中。Egress 则是会将 Queue 的信息拿出来,再一次的处理并原创 2022-03-31 14:04:41 · 1020 阅读 · 0 评论 -
P4学习----Table (Match + Action)
Match-action tables是P4程序员用于规定包处理的主要结构。ActionAction是一个包含按顺序执行命令块的过程。例如,以下声明将数据包的出端口设置为参数提供的值。actions包含code和data。code在P4程序中,而data在table entries中提供,通常在控制平面填充。其他参数受数据平面的约束。actions 是读写正在处理的data的code片段。actions可能包含可由控制平面写入和由数据平面读取的data值。actions是控制平面可以动态影响数据平原创 2022-03-30 13:48:08 · 2450 阅读 · 0 评论 -
P4学习----Types and Parsers
Header是定义哪些数据报文的header可以使用,Parser是对headers里面的信息解析出来变成P4理解的数据结构。解析过程中存在若干个状态,状态之间可以转换。Header Types数据包通常包括一系列headers,每个header都是一系列字段。例如,以太网数据包具有以下结构:P4提供一种表示header的内置类型可以使用标准的“.”符号访问header的每个组件,例如,如果可变以太网的类型为ethernet_t,则为ethernet.dstAddr表示目标地址。header原创 2022-03-29 21:01:25 · 634 阅读 · 0 评论 -
P4 tutorials----p4runtime
学习内容:使用P4Runtime实现控制平面。这次的实验我们将开始用P4Runtime给交换机下发流表,而不是像之前两个Basic实验用swicth CLI方式静态下发了。我们还是继续沿用basic_tunneling实验里的P4程序,名称改为 advanced_tunnel.p4,然后增加两个计数器(ingressTunnelCounter, egressTunnelCounter)和两个新action(myTunnel_ingress, myTunnel_egress)。我们启动mycontro原创 2022-03-26 17:37:33 · 2898 阅读 · 3 评论 -
P4 tutorials实验后补习理论知识
这是P4所提供的最简单易理解的编程结构,V1Model。从图上可以看出,数据包的处理过程像一条流水线一样,它由5个模块组成,分别是:Parser:解析器,对数据包根据预先定义好的格式进行解析,并提取头部的各个字段,在这里可能会根据不同的头部进行匹配。比如如果三层包头的协议字段是0x0800则是ip报文,如果是0x0806则是arp报文,则会进行不同的处理。Ingress:Ingress流水线部分,数据处理逻辑的入口。TM:Traffic Manager,在这里定义核心的处理逻辑,并且会对一些元数据进.原创 2022-03-23 16:49:36 · 1563 阅读 · 0 评论 -
P4 tutorials----Basic Tunneling
学习内容:这次实验我们给switch添加支持隧道转发的功能。我们需要定义一个新的header type封装IP包头,修改交换机代码以支持识别这种新的封装从而指导转发。新的header type包括 protocol ID和destination ID,分别用于标识被封装包的类型和路由开始的代码文件basic_tunnel.p4,这里面只是基于IP转发,就像之前的basic_forwarding实验。关于控制平面P4程序定义了一个包处理pipeline,控制平面给每一个table插出rules。当r原创 2022-03-20 16:53:28 · 1430 阅读 · 0 评论 -
P4 Tutorial 安装
P4作为一门编程语言对于网络工程师来说还是有一定的入门难度的。不过还好万能的互联网上无所不有,P4 Tutorial 就是一个非常好的学习P4的项目。今天主要学习并实践一下P4 Tutorial所需环境的安装,并在此记录。简单的方法还是通过虚机方式安装。准备工作在电脑上安装 VirtualBox和Vagrant 两个软件。VirtualBox是运行虚拟机的软件,Vagrant是一个虚拟机的管理工具。对于Vagrant反正我是我太熟悉!具体怎么使用可以参考这篇文章:https://zhuanla原创 2022-03-19 16:20:44 · 1766 阅读 · 0 评论 -
P4 tutorials----Basic Forwarding
通过实验实现对P4的初步了解。 p4lang /tutorials 提供了不错的学习帮助。原创 2022-03-19 16:11:15 · 1919 阅读 · 1 评论