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

目录

  • 一. 实验目的
  • 二.前置知识略概
  • 三. 实验过程
    • 1. Topo
    • 2. Egress
  • 三. 实验结果
    • 1.启动监听服务端
    • 2.发送数据包
    • 3.查看h2.log的数据
    • 4.Iperf模拟Flood超过门限
  • 四.为什么要在Egress上进行ecn的配置

一. 实验目的

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

P4学习(七)实验四:Explicit Congestion Notification_第1张图片

2. Egress

P4学习(七)实验四:Explicit Congestion Notification_第2张图片

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


来看看standard_metadata里面的字段

P4学习(七)实验四:Explicit Congestion Notification_第3张图片
每个字段的含义:

  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.启动监听服务端

P4学习(七)实验四:Explicit Congestion Notification_第4张图片

2.发送数据包

P4学习(七)实验四:Explicit Congestion Notification_第5张图片

3.查看h2.log的数据

P4学习(七)实验四:Explicit Congestion Notification_第6张图片

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

4.Iperf模拟Flood超过门限

P4学习(七)实验四:Explicit Congestion Notification_第7张图片
P4学习(七)实验四:Explicit Congestion Notification_第8张图片

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

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

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

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

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

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

你可能感兴趣的:(p4,SDN,P4,网络,网络协议)