P4-tutorials 所有总结

之前已经做完了4个实验,通过4个实验已经可以自己写协议包,发送自己要的协议

Tutorials
1.Basic
实验目的:实现一个简单的ipv4转发拓扑。
实验拓展:自添加流表到交换机的json文件中,实现拓展拓扑。
总结:解析器是用来分类数据、Action和teble是交换机上可以有的属性,数据会一一匹配交换机上所有的流表。该实验就是很简单的ipv4转发数据。在该实验的基础上可以自定义ipv4转发的拓扑。
总结:软件交换机主要是发送的数据格式要与交换机定义的数据头格式对应,用p4runtime将流表下发给交换机,实验一较简单就不多做详述了。
2.Basic_tunnel
实验目的:根据一个新的协议转发数据,mytunnel的权重大于ipv4
实验简单的拓展:在实验的基础上自己在mytunnel新增一位dst_ip 增加一位,修改发送的数据包的代码,多发送一位数据。修改交换机的数据解析头,转发数据,就可以转发自定义的一位数据。下图dst_ip即是自己定义的数据为一个常量0x1001,也可以修改交换机流表根据自定义的这节数据转发数据。

 


实验总结:完成一个协议和转发的过程,关键有三点
1.发送的数据要与自定义的协议包头一一对应,即软件交换机解析的包头要与发送的数据包头是相对应,总结:发送数据包的代码和交换机的代码要匹配。
2.要将拓扑每一个转发都与交换机中的表匹配,h1 ping h2 在经过交换机s1时要修改数据的源地址和目的地址。
3.P4代码要转为json,要将已经写好的流表通过p4runtime下发到交换机中,写好的数据要在对应的端口发送出去,因为实验都是脚本执行,更多的时修改p4代码和数据包发送的代码,因此第三步被忽略,但是如果要完全自定义一个拓扑,需要上述过程,但是也可以利用实验的脚本。

 

所以下述实验从两个角度分析:一是交换机定义的数据格式和转发的流表、二是数据发送的格式。

3.Calc

 

 

 

以这个实验为例,详细总结一下设计过程
(1)数据类型
首先是一个二层转发,只涉及到ethernet_t,根据ethernet_t中etherType匹配不同的数据包
若是0x0080则根据流表直接转发,则数据格式是ethernet_t + 数据内容
若是0x1234则在交换机流表中找到匹配域,执行计算,则数据格式是ethernet_t +p4calc_t+数据内容


定义的数据包结构只能由上述数据头类型组成,由数据头中的关键字决定是哪种数据包
2.解析
在解析器过程主要有三种函数
(1)transition select 判断数据包头中的关键字如下图
(2)packet.extract(hdr.p4calc); 若根据上述函数解析到了该状态则数据包头会有p4calc
(3)accept 和接收到的数据包头匹配到了
总结:交换机接到数据会根据关键字分类不同的数据类型,当接收到的数据包头和解析器定义的一种数据头完全匹配时则accept。因此在修改数据包头时同时要修改发送的数据包头交换机才能接收到该数据。

 

3.流表的定义
从上述两个部分已经定义了数据包头接收到了对应的数据,下面要给交换机设定特有的流表。再通过p4runtime将该流表的匹配域和表对应的动作写入交换机,整个流程就完成了。

 

4.发送自定义数据包
以上交换机流表操作已经结束,接下来是收发数据。

 

通过本周实验,熟悉了怎么设计一个简单的协议,但是再收发数据scapy函数上还是比较生疏。
4.ECN协议
   Outline:判断ipv4中是否有enc位,若有则ecn位为1或2,若数据包的队列大小大于阈值,则交换机会将该值改为3,接受方会将该值返还给发送方,让发送方降低速率。Differences:判断队列的大小、接收方接收到3会给发送方一个降低速率的值,实验4和实验3在我看来区别不大就简略说明了。


 

 

 

 

 


 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值