P4官方实验4. Explicit congestion notification
Explicit congestion notification
显式拥塞通知。
ECN支持端到端的网络拥塞通知来防止丢包。如果一个终端支持ECN,它会将ipv4.ecn的值设为1或2.对这样的包,每一个switch可能改变它的值为3,如果队列长度大于一个阈值。接受者会将值复制给发送者,并且发送者会减慢发送速度。
在这个实验中,我们要完成:
把ipv包头中的8bits tos域改成6 bits diffserv和2 bits ecn
在出路由中对比当前的queue length和ECN_THRESHOLD,如果队列长度大于这个阈值,那么就会设置ecn = 3,而不是1和2.
修改checksum对应部分,将tos改成diffserv和ecn。
修改包头
如英文注释,只需要把tos部分改成diffserv和ecn
header ipv4_t {bit<4> version;bit<4> ihl;bit<6> diffserv; //transform tos into these two lines: diffserv and ecnbit<2> ecn;bit<16> totalLen;bit<16> identification;bit<3> flags;bit<13> fragOffset;bit<8> ttl;bit<8> protocol;bit<16> hdrChecksum;ip4Addr_t srcAddr;ip4Addr_t dstAddr;
}
修改出路由
语法和C语言很像,下面if部分都是我们添加的。
control MyEgress(inout headers hdr,inout metadata meta,inout standard_metadata_t standard_metadata) {apply {/** TODO:* - if ecn is 1 or 2* - compare standard_metadata.enq_qdepth with threshold * and set hdr.ipv4.ecn to 3 if larger*/if (hdr.ipv4.ecn == 1 || hdr.ipv4.ecn == 2) { //these 4 lines are added.if (standard_metadata.enq_qdepth > ECN_THRESHOLD)hdr.ipv4.ecn = 3;}}
}
修改checksum
照着改就行了,没什么难的
control MyComputeChecksum(inout headers hdr, inout metadata meta) {apply {/* TODO: replace tos with diffserve and ecn */update_checksum(hdr.ipv4.isValid(),{ hdr.ipv4.version,hdr.ipv4.ihl,hdr.ipv4.diffserv, //trans tos into ~hdr.ipv4.ecn, //trans tos into ~hdr.ipv4.totalLen,hdr.ipv4.identification,hdr.ipv4.flags,hdr.ipv4.fragOffset,hdr.ipv4.ttl,hdr.ipv4.protocol,hdr.ipv4.srcAddr,hdr.ipv4.dstAddr },hdr.ipv4.hdrChecksum,HashAlgorithm.csum16);}
}
改完,对着readme运行就行了,可以看到其中的确有一段tos变成了0x3,说明网络的确发生了拥塞。
P4官方实验4. Explicit congestion notification相关推荐
- P4官方实验3.P4Runtime
Implementing a Control Plane using P4Runtime 使用P4Runtime来发送流表项到交换机,而不是使用交换机命令行接口. 在mycontroller.py中, ...
- P4 tutorials实验后补习理论知识
学习完P4 tutorials----Basic Forwarding和Basic Tunneling两个实验,也急需补充些理论知识. 透过实验的现象,再看理论也不是很枯燥难懂. 什么是P4 P4是& ...
- P4/tutorials/exercises 官方练习
写在前面 Basic Forwarding (基础ipv4转发) Basic Tunneling(隧道) P4Runtime(控制器) Explicit Congestion Notification ...
- 【网络教程】Iptables官方教程-学习笔记5--IPTABLES MATCH
这篇博客介绍iptables和netfilter中所有可用的匹配,章节比较厂,没必要去学习每个匹配的具体细节,大致了解下即可,后续要用到再深入掌握它. 一 .Iptables 的匹配(match) 在 ...
- 计算机网flags,计算机网络原理实验_使用网络协议分析仪Wireshark
一.实验名称 使用网络协议分析仪Wireshark 二.实验目的: 1. 掌握安装和配置网络协议分析仪Wireshark的方法: 2. 熟悉使用Wireshark工具分析网络协议的基本方法,加深对协 ...
- 计算机科学导论(5):计算机网络
原文链接:计算机科学导论(5):计算机网络 | 远行的舟 参考:① 纪录片 <互联网时代> ② <计算机科学导论> ③ <TCP/IP 入门经典> ④ 维基百科 ⑤ ...
- [转载] QoS的基本原理
转自:http://support.huawei.com/huaweiconnect/enterprise/thread-302081.html 1 前言 QoS(Quality of Service ...
- 内核编译配置选项含义
Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...
- 19. RDMA之iWARP Soft-iWARP
转自:https://zhuanlan.zhihu.com/p/449189540 说到RDMA,自然绕不开现在流行的三大协议:Infiniband.RoCE以及iWARP.相信读者读过本专栏前面的文 ...
- 【RDMA】19. RDMA之iWARP Soft-iWARP
[RDMA]RDMA 学习资料总目录_bandaoyu的博客-CSDN博客SavirRDMA 分享1. RDMA概述https://blog.csdn.net/bandaoyu/article/det ...
最新文章
- P1803 凌乱的yyy / 线段覆盖(选择不相交区间,贪心)
- [转]VC6.0无法打开文件和无法向工程添加文件的解决办法
- 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)
- php根据设备判断访问,PHP判断设备访问来源
- dubbo和mq的使用场景
- Linux——Linux下安装tree
- ASP.NET2.0中控件的简单异步回调
- 关于在win8下开发c或者c++时,某些特殊情况
- java 从后往前截取_java 字符串截取的实例详解
- 计算机网络实验 网络命令的使用,计算机网络常用网络命令 实验报告.doc
- 人工智能、机器学习、神经网络和深度学习的发展历程(下)
- 百度广告屏蔽及游戏推广屏蔽
- macos修改WIFI共享功能的默认网段
- 去面试了几家BATJ等N家互联网大厂
- 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会...
- 两种方式实现线程通信:三个线程交替打印AABBCC
- 8B10B编解码原理与FPGA代码
- 【自动化】DCS PLC区别;PLC常见的六大应用
- 整理 Sublime 格式
- 计算机在言语康复的应用,一种儿童嗓音言语矫治的计算机技术
热门文章
- PAT甲级 1032 Sharing
- mysql is marked_快速解决MySQL:Table xxx is marked as crashed and should be repaired五个办法...
- Barefoot Networks 宣布 P4 Studio—下一代软件开发环境
- 吴恩达 (Andrew Ng) 是一个怎样的人
- 在css中sticky定位的特性,CSS定位属性sticky详解
- 【openpyxl】插入图表(折线图)
- HttpServletRequest获取路径的几个方法
- Keepalived之——*** WARNING - this build will not support IPVS with IPv6.解决方案
- 一款炫丽的网页播放器插件
- 极限编程:价值观、原则和实践