未来网络
csdn_ggboy
这个作者很勤快,但是什么都没有留下
展开
-
p4 cpu的交互
实验目的控制交换机将包克隆到cpu,并接收和处理来自cpu的包对于p4文件,需要处理来自cpu的包并且根据接收的端口号转发,如果不是来自cpu的包,将包发到cpu对于拓扑文件,需要对交换机开启cpu接口对于控制器,需要增加cpu_seesion,并且监听包的接收,然后解析包的结构并将数据发送回交换机...原创 2022-03-11 23:53:11 · 426 阅读 · 0 评论 -
如何配置p4环境
首先,我使用了p4-utils的镜像文件,包含了所需要的很多组件Installation — P4-Utils 1.0 documentation这是一个qcow2文件,想要导入到vm或者virtualbox需要进行转化通过qemu-img工具转换镜像格式_镜像服务 IMS_最佳实践_转换镜像格式_华为云这样就可以导入了。不知道为什么导入以后是命令行的形式,没有图形界面,我下载了图形界面(4条消息) Ubuntu16.04只有桌面背景,没有桌面图标_ljl1015ljl的博客-CSDN博.原创 2022-03-07 09:58:59 · 1138 阅读 · 2 评论 -
P4_learning——srv6基础实验
实验背景报文转发流程采用示例说明SRv6的报文转发流程。如图所示,假设有报文需要从主机1转发到主机2,主机1将报文发送给节点A处理。节点A、B、D、E均支持SRv6,节点C不支持SRv6,只支持IPv6。我们在源节点A上进行网络编程,希望报文经过B-C、C-D链路,送达节点E,由E节点送达主机2。报文转发流程分为以下几步:源节点A将SRv6路径信息封装在SRH中,指定B-C,C-D链路的SID,另外封装E点发布的SID A5::10(此SID对应于节点E的一个IPv4 VPN),共3个SID,原创 2022-03-01 16:02:23 · 2208 阅读 · 10 评论 -
P4_learning——controller
控制器通过控制器下发规则拓扑{ "program": "ip_forward.p4", "switch": "simple_switch", "compiler": "p4c", "options": "--target bmv2 --arch v1model --std p4-16", "switch_cli": "simple_switch_CLI", "cli": true, "pcap_dump": true, "enable_log": true, "t原创 2022-02-28 10:57:31 · 392 阅读 · 0 评论 -
P4-learning——ecmp
ecmp充分利用链路,实现负载均衡拓扑{ "program": "p4src/ecmp.p4", "switch": "simple_switch", "compiler": "p4c", "options": "--target bmv2 --arch v1model --std p4-16", "switch_cli": "simple_switch_CLI", "cli": true, "pcap_dump": true, "enable_log": true,原创 2022-02-19 14:55:38 · 802 阅读 · 0 评论 -
P4-learning——send_to_cpu
send_to_cpu编写p4语言时不用写匹配规则,可以由控制器编写规则拓扑{ "program": "send_to_cpu.p4", "switch": "simple_switch", "compiler": "p4c", "options": "--target bmv2 --arch v1model --std p4-16", "switch_cli": "simple_switch_CLI", "cli": true, "pcap_dump": true,原创 2022-02-18 21:30:51 · 401 阅读 · 0 评论 -
P4-learning——recirculate
数据包循环数据包将要从egress出去时再循环进入交换机p4文件#include <core.p4>#include <v1model.p4>typedef bit<48> macAddr_t;typedef bit<9> egressSpec_t; header ethernet_t { bit<48> dstAddr; bit<48> srcAddr; bit<16> ether原创 2022-02-18 12:11:06 · 516 阅读 · 0 评论 -
P4语言——链路层实战
参考文章实现简单的交换机文件在03-L2_Basic_forwarding编写p4文件/* -*- P4_16 -*- */#include <core.p4>#include <v1model.p4>/************************************************************************************************ H E A D E R S ********************原创 2022-02-10 21:30:43 · 353 阅读 · 0 评论 -
P4_learning——Reflector & Repeater
Packet Reflector第一个练习很简单,我们在前一篇文章已经见过了它的代码实现,本质上其实就是把源地址和目标地址调换一下,再把 packet 从哪里来的就送回哪里去。但这个练习的主要目的,是为了让我们熟悉开发环境,包括如何建立一个虚拟的网络。文件描述这个练习用到的文件有三个:p4app.json:这个文件用来描述我们要建立的网络拓扑结构;send_receive.py:这段 python 脚本用于发送和接收 packets;reflector.p4:这个就是我们要完成的 P4 代码。原创 2022-02-09 19:29:17 · 369 阅读 · 0 评论 -
P4——link_monitor
练习:链路监测本练习的目的是编写一个P4程序,使主机能够监视网络中所有链路的使用情况。 这个练习建立在基本的IPv4转发练习的基础上,所以在尝试这个练习之前,请确保完成这个练习。 具体地说,我们将修改基本的P4程序来处理源路由探测包,使其能够在每个跳点获取出口链路利用率,并将其交付给主机进行监视。 我们的探测包将包含以下三种报头类型:// Top-level probe header, indicates how many hops this probe// packet has traversed原创 2022-02-09 12:04:18 · 783 阅读 · 0 评论 -
P4语言——mri
练习:多跳监测本教程的目的是用带内网络遥测(INT)的缩小版扩展基本的L3转发,我们称之为多跳路由检查(MRI)。磁共振成像允许用户跟踪路径和队列长度,每个包经过。 为了支持这个功能,您需要编写一个P4程序,将ID和队列长度附加到每个包的头栈。 在目的端,交换机ID的顺序与路径对应,每个ID后面跟着交换机端口的队列长度。P4文件/* -*- P4_16 -*- */#include <core.p4>#include <v1model.p4>const bit<原创 2022-02-09 11:58:29 · 1787 阅读 · 0 评论 -
P4语言——load_balance
练习:负载均衡在本练习中,您将基于等价多路径转发的简单版本实现一种形式的负载均衡。 您将实现的交换机将使用两个表将数据包随机转发到两个目标主机中的一个。 第一个表将使用一个哈希函数(应用于由源和目的IP地址、IP协议、源和目的TCP端口组成的5元组)从两个主机中选择一个。 第二个表将使用计算得到的哈希值将数据包转发给选定的主机。拓扑图代码{ "hosts": { "h1": {"ip": "10.0.1.1/24", "mac": "08:00:00:00:01:01",原创 2022-02-09 10:42:38 · 913 阅读 · 0 评论 -
P4语言——calc
练习:计算器本教程的目标是使用P4编写的自定义协议头来实现一个基本的计算器。 报头将包含一个要执行的操作和两个操作数。 当交换机接收到计算器包头时,它将对操作数执行操作,并将结果返回给发送者。P4文件 0 1 2 3 +----------------+----------------+----------------+---------------+ | P |原创 2022-02-09 10:09:33 · 522 阅读 · 0 评论 -
P4语言——qos
练习:qos本教程的目的是扩展基本的L3转发 ,使用区别服务实现服务质量(QOS)。 Diffserv简单且可扩展。 它对网络流量进行分类和管理,并在现代IP网络上提供QOS。拓扑图代码{ "hosts": { "h1": {"ip": "10.0.1.1/31", "mac": "08:00:00:00:01:01", "commands":["route add default gw 10.0.1.0 dev eth0",原创 2022-02-08 23:20:08 · 1887 阅读 · 0 评论 -
P4语言——source_routing
练习:源路由本练习的目的是实现源路由。 使用源路由,源主机引导网络中的每个交换机将数据包发送到特定的端口。 主机在数据包中放置一个输出端口堆栈。 在本例中,我们只是将堆栈放在Ethernet报头之后,并选择一个特殊的etherType来表示。 每个交换机从堆栈中弹出一个项目,并根据指定的端口号转发数据包。拓扑图代码{ "hosts": { "h1": {"ip": "10.0.1.1/24", "mac": "08:00:00:00:01:11",原创 2022-02-08 20:42:27 · 796 阅读 · 0 评论 -
P4语言——ecn
练习四:显式拥塞通知(ECN)的实现。发送的数据报包含了网络中每个路由器的队列深度,实现拥塞通知拓扑图控制平面代码{ "target": "bmv2", "p4info": "build/ecn.p4info", "bmv2_json": "build/ecn.json", "table_entries": [ { "table": "MyIngress.ipv4_lpm", "match": { "hdr.ipv4.dstAddr"原创 2022-02-03 20:30:46 · 642 阅读 · 0 评论 -
P4语言——p4runtime
练习三:使用p4runtime使用p4runtime而不是json文件控制交换机的table。控制平面代码#!/usr/bin/env python2import argparseimport grpcimport osimport sysfrom time import sleep# Import P4Runtime lib from parent utils dir# Probably there's a better way of doing this.sys.path.app原创 2022-02-03 20:25:40 · 1924 阅读 · 0 评论 -
P4语言——basic_tunnel
练习二:自定义头部定义一种新的header,实现ipv4转发和自定义头部协议转发的优先级控制平面代码下发给交换机table。除了定义ipv4转发的地址与行为匹配,还定义了自定义header的转发行为匹配。{ "target": "bmv2", "p4info": "build/basic_tunnel.p4info", "bmv2_json": "build/basic_tunnel.json", "table_entries": [ { "table": "My原创 2022-02-03 20:10:29 · 1894 阅读 · 0 评论 -
P4语言——basic
练习一:Basic本练习的目的是编写一个P4程序 实现了基本的转发。 为了简单起见,我们只要实现IPv4转发。对于IPv4转发,交换机必须完成以下操作更新源MAC地址和目的MAC地址减少IP报头中的生存时间(time-to-live, TTL)将数据包发送到适当的端口你的开关将有一个单表,控制平面将用静态规则填充。 每个规则将一个IP地址映射到下一跳的MAC地址和输出端口。 我们已经定义了控制平面的规则,所以只需要实现数据平面P4程序的逻辑。查看控制平面的代码{ "target"原创 2022-02-01 23:32:34 · 640 阅读 · 0 评论 -
P4语言详解
p4c是一款 p4编译器。BMv2是支持P4编程的软件交换机。PI是P4 runtime的实现,用于Control Plane对数据平面的控制。mininet的功能是构建一个虚拟的网络拓扑。 它通过linux内核的一些特性(net命名空间),在一个主机上划分出多个虚拟网络空间,各个网络空间之间相互隔离,有自己的端口, ip等等。mininet让一个或者多个vhost(虚拟主机), 软件交换机(如ovs, bmv2)等 以进程的状态分别绑定在这些网络空间之中,共同构成一个进程级别的虚拟网络拓扑。需要..原创 2022-01-30 22:14:19 · 2851 阅读 · 0 评论 -
P4语言入门
P4简介P4语言在设计之初,就是为了实现以下三个特性:(1)协议无关性网络设备不与任何特定的网络协议绑定,用户可以使用P4语言描述任何网络数据平面协议和数据包处理行为。这一特性通过自定义包解析器、匹配-动作表的匹配流程和流控制程序实现。(2)目标无关性用户不需要关心底层硬件的细节就可实现对数据包的处理方式的编程描述。这一特性通过P4前后端编译器实现,前端编译器将P4高级语言程序转换成中间表示IR,后端编译器将IR编译成设备配置,自动配置目标设备。(3)可重构性允许用户随时改变包解析和处理的程序原创 2022-01-30 00:42:15 · 4421 阅读 · 0 评论 -
SRv6网络编程阅读笔记
SRv6技术原创 2021-11-25 18:42:15 · 4254 阅读 · 0 评论