P4 Tutorials---- source routing

实验介绍:

这次实验主要是练习source routing。源主机在数据包中压入标签栈以指导网络中每一个switch传送数据包到特定的端口。在这个例子中,我们把标签压在Ethernet header后,并设定一个特殊的etherType加以区分。每一个switch弹出标签并从相应端口送出数据包。
官方网站:https://github.com/p4lang/tutorials/tree/master/exercises/source_routing
Switch必须可以解析source routing 标签。每个标签包含bos(栈底)和端口号。bos是1表示为堆栈的最后一个标签。在ingress方向,switch弹出标签和设置相应出端口。在最后一跳恢复到etherType为TYPE_IPV4。

步骤一:运行不完整代码

和之前的P4 Tutorials实验一样,我们一开始先运行一个不完整的框架代码。
1.sudo make run
在这里插入图片描述

这一步包括:

  • 编译source_routing.p4,
  • 实例化mininet,建立实验网络拓扑如下:
  • 分配IP地址

在这里插入图片描述

2.在mininet终端下输入xterm h1 h2
在这里插入图片描述

3.在h2输入 ./receive.py 作为server端接收数据包
在这里插入图片描述

4.在h1输入./send.py 作为客户端发送数据包
在这里插入图片描述

5.键入端口列表:2 3 2 2 1。数字代表出端口,对照拓扑图数据包应该依次通过h1,s1,s2,s3,s1,s2,h2。
我们可以看到数据包etherType 1234,后面是5个标签,最下面的标签bos 1 表示栈底。
然而h2并没有收到数据包。
在这里插入图片描述

6.q退出发包程序,exit退出mininet。

步骤二:执行source routing

补充不完整代码中的逻辑。替换TODO部分。
完整的代码可以在这里找到:https://github.com/p4lang/tutorials/tree/master/exercises/source_routing/solution
一个完整的source_routing.p4代码包含以下部分:
1.Header type 定义Ethernet(ethernet_t),IPv4(ipv4_t)和source route(srcRoute_t)。
在这里插入图片描述

2.解析ethernet和source routing
parse_srcRouting 是循环提取src.Routes直到栈底bos 1,转到parse_ipv4。
在这里插入图片描述

3.用mark_to_drop() 作为丢包的action。
4.命名为srcRoute_nhop 的action,
为下一跳设置出端口
弹出一层标签
在这里插入图片描述

5.apply :
source routes有效:如果是栈底修改etherType为IPV4,不是栈底调用action srcRoute_nhop;
source routes无效则丢弃。
在这里插入图片描述

6.逆解析器,按顺序将字段插入出向数据包
7.package 实例化。

步骤三:运行解决方案

修改好source_routing.p4后,重新按照步骤一操作一遍。
这次h2可以收到数据包,端口顺序是2 3 2 2 1,h2收到数据包的ttl是59。
在这里插入图片描述

深入思考

如何能使switch同时支持IPv4转发和source routing转发?
上述实验是在host端压入标签控制转发路径,如何使压入标签的动作在第一跳网络设备上执行,这样应该使更贴近现实中的网络场景。

这个任务我们放到下次实验来完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值