P4学习(七)实验四:Explicit Congestion Notification

文章探讨了在Egress节点配置ECN(ExplicitCongestionNotification)的原因,包括实时网络状态感知、处理效率提升、拥塞精确识别和减少跨交换机标记不一致性。实验过程涉及在数据包离开交换机时修改ecn字段,以适应网络状况并优化TCP/IP流量管理。
摘要由CSDN通过智能技术生成

一. 实验目的

ECN allows end-to-end notification of network congestion without dropping packets. If an end-host supports ECN, it puts the value of 1 or 2 in the ipv4.ecn field. For such packets, each switch may change the value to 3 if the queue size is larger than a threshold. The receiver copies the value to sender, and the sender can lower the rate.


需求提取;

1.在header中增加ecn的field
2. 动态调整ecn的value,以适应网络状况

二.前置知识略概

一种网络通信协议的功能,用于在网络出现拥堵时提供拥堵通知。ECN 允许网络中继设备(如路由器)在检测到即将发生拥堵时,通过标记数据包来通知发送端和接收端。这样,数据发送方可以降低其发送速率,以减轻网络拥堵,从而提高网络整体性能。

在 TCP/IP 协议中,ECN 通过在 IP 头部和 TCP 头部中设置特定的位来实现。当ECN被启用且网络设备感知到拥堵趋势时,它会标记经过的数据包。接收方收到标记的数据包后,会通过 TCP 确认消息通知发送方。随后,发送方降低其发送速率,以减轻对网络的负担。这个过程帮助避免了传统的拥塞控制机制中的丢包,从而提高了数据传输的效率和稳定性。

三. 实验过程

1. Topo

在这里插入图片描述

2. Egress

在这里插入图片描述

这个没啥好说的,就是改个字段的值而已


来看看standard_metadata里面的字段

在这里插入图片描述
每个字段的含义:

  1. ingress_port: 数据包进入交换机的端口号。
  2. egress_spec: 决定数据包将从哪个端口离开交换机的指定字段。
  3. egress_port: 数据包实际离开交换机的端口号。
  4. clone_spec: 用于指定克隆操作的参数,如克隆的数据包应该发送到哪个端口或组。
  5. instance_type: 数据包类型的指示器,例如,正常数据包、克隆的数据包、多播数据包等。
  6. drop: 一个标记位,如果设置为1,则数据包会被丢弃。
  7. recirculate_port: 如果数据包需要重新进入处理流程,这个字段指定它应该进入的端口。
  8. packet_length: 数据包的总长度。
  9. enq_timestamp: 数据包被放入传输队列时的时间戳。
  10. enq_qdepth: 数据包入队时队列的深度。
  11. deq_timedelta: 数据包在队列中等待的时间长度。
  12. deq_qdepth: 数据包出队时队列的深度。
  13. ingress_global_timestamp: 数据包进入交换机时的全局时间戳。
  14. lf_field_list: 用于逻辑复制操作的字段列表的标识符。
  15. mcast_grp: 指定数据包所属的多播组。
  16. resubmit_flag: 如果这个位被设置,数据包将被重新提交给 ingress 处理流程。
  17. egress_rid: 出口复制 ID,用于多播和复制操作。
  18. checksum_error: 指示数据包是否有校验和错误。

更多的自己去specification里找

三. 实验结果

1.启动监听服务端

在这里插入图片描述

2.发送数据包

在这里插入图片描述

3.查看h2.log的数据

在这里插入图片描述

0x1:我们取的是tos的后两位作为cen的filed字段,所以这里的ecn=1;

4.Iperf模拟Flood超过门限

在这里插入图片描述
在这里插入图片描述

四.为什么要在Egress上进行ecn的配置

注:此内容可能有错误,仅为个人整理资料的答案

  1. 网络状态的实时感知:Egress 阶段更接近于数据包实际离开交换机的时刻,因此在这个点进行标记可以基于最新的网络状态信息(如队列长度、传输速率等)。这有助于更准确地判断是否需要进行拥塞通知。

  2. 避免不必要的处理延迟:如果在 ingress 或 parse 阶段进行标记,每个进入交换机的数据包都需要经过拥塞检测处理,即使这些数据包可能不会遇到任何拥塞。这可能导致不必要的处理延迟。相比之下,只在出口处处理那些实际可能会引起拥塞的数据包,可以更高效地利用处理资源。

  3. 拥塞的精确识别和响应:在 egress 阶段,交换机可以根据特定出口的队列情况来判断是否存在拥塞。不同出口可能面临不同的网络条件,因此在 egress 阶段进行标记可以更精确地识别和响应各个出口的拥塞情况。

  4. 减少跨交换机的标记不一致性:如果在 ingress 阶段进行标记,随着数据包经过网络中的多个交换机,每个交换机都可能基于自身的状态对数据包进行重新标记,导致标记的不一致性。而在 egress 阶段标记可以减少这种不一致性,因为标记是基于数据包即将离开网络的那一点的状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值