zoukankan      html  css  js  c++  java
  • P4

    P4是一门SDN数据平面的编程语言,用于定义转发设备处理数据报的整个过程.

    一个完整的P4语言包含以下几个组成部分:

    (1)首部(header): 定义数据报首部结构
    (2)解析器(parser): 根据首部定义解析数据包
    (3)流表(table): 用于处理数据报的流表结构
    (4)动作(action): 用于处理数据报的动作
    (5)控制程序(control program): P4语言的“main”函数

    1.协议无关性: P4灵活定义数据报协议格式和交换机的解析过程,使P4交换机能够处理基于新协议的数据报,解耦于特定协议。

    header p4_route {
    	fields {
    		srcIP : 32;
    		dstIP : 32;
    		srcPort : 16;
    		dstPort : 16;
    	}
    }
    

    2.设备独立性: 无需关心底层细节。

    过去,写硬件代码(Verilog等)非常痛苦,需要了解底层细节,掌握特定硬件的机理。

    现在,只要懂一些C语言的编程,即可上手P4语言,写出高层次的处理流程描述代码,通过编译器再转换为硬件代码。

    3.可重配置性: 能够在运行时改动交换机内部处理数据报的行为。

    P4实验

    环境:
    1.BMv2 P4交换机
    2.P4c-bm 编译器

    工具:
    1.scapy 使用python编写的收发数据包的工具库
    2.simple_switch_CLI P4交换机的控制台

    实验原理:
    本次实验通过P4实现了一个较为简单的路由协议: EasyRoute,该协议通过在数据包首部字段中指定特定交换机的输出端口,实现简单的路由。
    在发送数据包时,通过Dijkstra算法计算得到到达终点的最短路径,将这条路径上所有需要经过的交换机以及输出端口记录在数据包首部中,数据包通过这些信息进行路由。

    EasyRoute协议字段:
    1.preamble(8 bytes): 用于区别EasyRoute数据包和其他数据包
    2.num_valid(4 bytes): 用于记录首部中合法端口的数目
    3.port_n(1 bytes): 数据包的输出端口
    4.data: 用于记录我们希望发送的数据

    实验步骤:

    1.启动mininet仿真网络:
    $ ./run_demo.sh


    2.启动h1和h3的控制终端:
    mininet> xterm h1 h3
    3.在h1的终端上执行:
    $ ./send.py h1 h3
    4.在h3的终端上执行:
    $ ./receive.py
    5.在h1的终端上编辑文本信息,并发送,在h3的终端界面上就能够 看见h1发送的信息。

  • 相关阅读:
    利用表格分页显示数据的js组件datatable的使用
    css和javascript代码写在页面中的位置说明
    jqueryui组件progressbar进度条和日期组件datepickers的简单使用
    漏洞扫描工具Nessu的安装和简单使用
    jqueryui插件slider的简单使用
    html常用标签表单和表格等及css的简单入门
    通过flask实现web页面简单的增删改查bootstrap美化版
    jquery简单使用入门
    bootstrap简单使用布局、栅格系统、modal标签页等常用组件入门
    Centos7.3_x86_64通过systemctl控制tomcat8.0.46启动和停止
  • 原文地址:https://www.cnblogs.com/linzhenyuyuchen/p/8259566.html
Copyright © 2011-2022 走看看