Explicit congestion notification

显式拥塞通知。

ECN支持端到端的网络拥塞通知来防止丢包。如果一个终端支持ECN,它会将ipv4.ecn的值设为1或2.对这样的包,每一个switch可能改变它的值为3,如果队列长度大于一个阈值。接受者会将值复制给发送者,并且发送者会减慢发送速度。

在这个实验中,我们要完成:

  1. 把ipv包头中的8bits tos域改成6 bits diffserv和2 bits ecn

  2. 在出路由中对比当前的queue length和ECN_THRESHOLD,如果队列长度大于这个阈值,那么就会设置ecn = 3,而不是1和2.

  3. 修改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相关推荐

  1. P4官方实验3.P4Runtime

    Implementing a Control Plane using P4Runtime 使用P4Runtime来发送流表项到交换机,而不是使用交换机命令行接口. 在mycontroller.py中, ...

  2. P4 tutorials实验后补习理论知识

    学习完P4 tutorials----Basic Forwarding和Basic Tunneling两个实验,也急需补充些理论知识. 透过实验的现象,再看理论也不是很枯燥难懂. 什么是P4 P4是& ...

  3. P4/tutorials/exercises 官方练习

    写在前面 Basic Forwarding (基础ipv4转发) Basic Tunneling(隧道) P4Runtime(控制器) Explicit Congestion Notification ...

  4. 【网络教程】Iptables官方教程-学习笔记5--IPTABLES MATCH

    这篇博客介绍iptables和netfilter中所有可用的匹配,章节比较厂,没必要去学习每个匹配的具体细节,大致了解下即可,后续要用到再深入掌握它. 一 .Iptables 的匹配(match) 在 ...

  5. 计算机网flags,计算机网络原理实验_使用网络协议分析仪Wireshark

    一.实验名称  使用网络协议分析仪Wireshark 二.实验目的: 1. 掌握安装和配置网络协议分析仪Wireshark的方法: 2. 熟悉使用Wireshark工具分析网络协议的基本方法,加深对协 ...

  6. 计算机科学导论(5):计算机网络

    原文链接:计算机科学导论(5):计算机网络 | 远行的舟 参考:① 纪录片 <互联网时代> ② <计算机科学导论> ③ <TCP/IP 入门经典> ④ 维基百科 ⑤ ...

  7. [转载] QoS的基本原理

    转自:http://support.huawei.com/huaweiconnect/enterprise/thread-302081.html 1 前言 QoS(Quality of Service ...

  8. 内核编译配置选项含义

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...

  9. 19. RDMA之iWARP Soft-iWARP

    转自:https://zhuanlan.zhihu.com/p/449189540 说到RDMA,自然绕不开现在流行的三大协议:Infiniband.RoCE以及iWARP.相信读者读过本专栏前面的文 ...

  10. 【RDMA】19. RDMA之iWARP Soft-iWARP

    [RDMA]RDMA 学习资料总目录_bandaoyu的博客-CSDN博客SavirRDMA 分享1. RDMA概述https://blog.csdn.net/bandaoyu/article/det ...

最新文章

  1. P1803 凌乱的yyy / 线段覆盖(选择不相交区间,贪心)
  2. [转]VC6.0无法打开文件和无法向工程添加文件的解决办法
  3. 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)
  4. php根据设备判断访问,PHP判断设备访问来源
  5. dubbo和mq的使用场景
  6. Linux——Linux下安装tree
  7. ASP.NET2.0中控件的简单异步回调
  8. 关于在win8下开发c或者c++时,某些特殊情况
  9. java 从后往前截取_java 字符串截取的实例详解
  10. 计算机网络实验 网络命令的使用,计算机网络常用网络命令 实验报告.doc
  11. 人工智能、机器学习、神经网络和深度学习的发展历程(下)
  12. 百度广告屏蔽及游戏推广屏蔽
  13. macos修改WIFI共享功能的默认网段
  14. 去面试了几家BATJ等N家互联网大厂
  15. 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会...
  16. 两种方式实现线程通信:三个线程交替打印AABBCC
  17. 8B10B编解码原理与FPGA代码
  18. 【自动化】DCS PLC区别;PLC常见的六大应用
  19. 整理 Sublime 格式
  20. 计算机在言语康复的应用,一种儿童嗓音言语矫治的计算机技术

热门文章

  1. PAT甲级 1032 Sharing
  2. mysql is marked_快速解决MySQL:Table xxx is marked as crashed and should be repaired五个办法...
  3. Barefoot Networks 宣布 P4 Studio—下一代软件开发环境
  4. 吴恩达 (Andrew Ng) 是一个怎样的人
  5. 在css中sticky定位的特性,CSS定位属性sticky详解
  6. 【openpyxl】插入图表(折线图)
  7. HttpServletRequest获取路径的几个方法
  8. Keepalived之——*** WARNING - this build will not support IPVS with IPv6.解决方案
  9. 一款炫丽的网页播放器插件
  10. 极限编程:价值观、原则和实践