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发送的信息。

  • 相关阅读:
    Cxx11 stdchrono库详解
    Oracle中文乱码
    Javascript 编程小技巧总结(部分内容借鉴他人)
    从文档流角度理解浏览器页面渲染引擎对元素定位的解析
    JS重点特性——闭包详解
    用一段JS代码来比较各浏览器的极限内存与运算速度
    前端开发人员需知——浏览器详解
    Js变量定义——fn里 var与不var的区别
    Js文字特效—文字段逐个变色循环
    html5 canvas画图之图形随拖动而复制(有操作指示)
  • 原文地址:https://www.cnblogs.com/linzhenyuyuchen/p/8259566.html
Copyright © 2011-2022 走看看