After several days of work and debug, I implement TCP BBR algorithms on ns3.33.
 One thing is to get instant rtt instead of smothed rtt.
 The second is I notice some difference in tcp-rate-ops.cc (ns3) by comparison with tcp_rate.c (linux tcp stack).

const TcpRateOps::TcpRateSample &
TcpRateLinux::GenerateSample (uint32_t delivered, uint32_t lost, bool is_sack_reneg,uint32_t priorInFlight, const Time &minRtt){if (m_rateSample.m_priorTime == Seconds (0) || is_sack_reneg){NS_LOG_INFO ("PriorTime is zero, invalidating sample");m_rateSample.m_delivered = -1;m_rateSample.m_interval = Seconds (0);m_rateSampleTrace (m_rateSample);return m_rateSample;}if (m_rateSample.m_interval < minRtt){NS_LOG_INFO ("Sampling interval is invalid");m_rateSample.m_interval  = Seconds (0);m_rateSample.m_priorTime = Seconds (0); // To make rate sample invalidm_rateSampleTrace (m_rateSample);return m_rateSample;}                              }

 When m_priorTime is reset as zero in TcpRateSample, m_rateSample.m_ackElapsed will sample a time intervel equal to Simulator::Now (). And m_rateSample.m_priorTime will be update and the acked packet is valid (m_rateSample.m_priorTime!=Seconds(0)) in GenerateSample. A quite low bandwidth value will be sampled. Such low bandwidth will be used by long term bandwidth sampling in BBR algorithm. The flow will gain lower bandwidth here after and weird behavior will be observed.

void
TcpRateLinux::SkbDelivered (TcpTxItem * skb){if (m_rateSample.m_priorDelivered == 0|| skbInfo.m_delivered > m_rateSample.m_priorDelivered){m_rateSample.m_ackElapsed       = Simulator::Now () - m_rateSample.m_priorTime;m_rateSample.m_priorDelivered   = skbInfo.m_delivered;m_rateSample.m_priorTime        = skbInfo.m_deliveredTime;m_rateSample.m_isAppLimited     = skbInfo.m_isAppLimited;m_rateSample.m_sendElapsed      = skb->GetLastSent () - skbInfo.m_firstSent;m_rateSampleTrace (m_rateSample);m_rate.m_firstSentTime          = skb->GetLastSent ();}
}

 So change is made on SkbDelivered function:

  if (m_rateSample.m_priorDelivered == 0|| skbInfo.m_delivered > m_rateSample.m_priorDelivered){m_rateSample.m_priorDelivered   = skbInfo.m_delivered;m_rateSample.m_priorTime        = skbInfo.m_deliveredTime;m_rateSample.m_isAppLimited     = skbInfo.m_isAppLimited;m_rateSample.m_sendElapsed      = skb->GetLastSent () - skbInfo.m_firstSent;m_rate.m_firstSentTime          = skb->GetLastSent ();}m_rateSample.m_ackElapsed        = Simulator::Now () - m_rateSample.m_priorTime;m_rateSampleTrace (m_rateSample);

The third change is in tcp_socket_base.cc

uint32_t
TcpSocketBase::SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck){m_rateOps->SkbSent(outItem, isStartOfTransmission&&(m_tcb->m_highTxMark==m_tcb->m_nextTxSequence));
}

 I test three TCP BBR flows on a 6Mbps, 50 one way propagation delay p2p link.

Result:

 Estimated bandwidth at sender:

 Taces rtt of each flow:

  The code is uploaded to github [6].
Reference:
[1] Reproduce-TCP-BBR-in-ns-3
[2] linux bbr
[3] ns-3-dev-git
[4] test quic bbr on ns3
[5] evaluation BBRv2 on ns3
[6] tcp-bbr-ns3 code

implement tcp bbr on ns3 (在ns3上实现TCP BBR)相关推荐

  1. linux tcp窗口大小设置,在Ubuntu服务器上更改TCP窗口大小

    有没有办法在ubuntu服务器上以大于默认的TCP窗口大小开始? 我看到/ proc / sys / net / ipv4 /中有一些参数: /proc/sys/net/ipv4/tcp_window ...

  2. TCP/IP协议栈在MSP430单片机上的实现

    引言 随着信息技术的不断发展,以及人们对日常生活舒适度.方便度要求的提高,信息家电.智能仪表等产品越来越频繁的出现在我们的生活当中:人们也越来越热衷于把家电.仪表等设备连接到Internet 中,从而 ...

  3. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数      问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:     对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完 ...

  4. 在Linux上搭建TCP通信测试服务器

    在Linux上搭建TCP通信测试服务器 前言 在 Linux平台上搭建TCP通信测试服务器的方法多种多样,本文就列举出来非常简单的服务器搭建方法. 搭建TCP通信测试服务器的主要作用就是为了验证TCP ...

  5. 【NS3】NS3安装 visualizer模块安装 (Windows+VMware+Kali) 2022.2

    NS3安装(Windows+VMware+Kali) 2022.2 文章目录 NS3安装(Windows+VMware+Kali) 2022.2 VMware安装 导入kali 换源 环境搭建 NS3 ...

  6. 网络编程(Tcp/Udp实现聊天、文件上传)

    网络编程 1.1 概述 计算机网络是指将位置不同的多台[计算机 通过通信线路连接起来,实现资源共享和信息传递的计算机系统 1.2 网络通信的要素 ip和端口 网络通信协议(tcp/udp) 1.3 I ...

  7. Linux服务器上测试TCP/UDP端口的连通性

    目录 说明 测试tcp端口的连通性: 使用nc命令来测试udp端口的连通性: 使用nc命令来测试tcp端口的连通性: 使用案例如下: 说明 翻译自: How to Test Port[TCP/UDP] ...

  8. linux系统怎么测试udp端口通不通,怎么在Linux服务器上测试TCP/UDP端口的连通性?...

    翻译自: How to Test Port[TCP/UDP] Connectivity from a Linux Server (文档 ID 2212626.1) 适用于: Linux OS - Ve ...

  9. wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍TCP排序方法,分享一个Windows版的TCP排序工具." 在分析协议的过程中,不可避免地需要抓包. 无论抓包条件如何优越, ...

  10. Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...

    TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...

最新文章

  1. 揭阳电网要求计算机二级吗,2018年3月广东省揭阳市计算机等级考试考务通知
  2. 开机logo切换逻辑深入研究
  3. 解决在linux跑连接sql server老版本会报错的问题
  4. font-familly:' 阿里巴巴-普惠体 '【永久免费 】 - 下载与使用
  5. 请听一个故事------gt;百度员工离职总结:如何做个好员工
  6. PX4板载计算机外部控制
  7. LTE系统各种指标概念(EVM,ACLR)
  8. 信使广告终结者 绿色
  9. FPGA写约束文件+固化+上板抓信号方法(vivado软件)
  10. python json模块_python json模块使用详情
  11. 深度实战Electron,开发本地音乐播放器
  12. 系统总裁SC系统封装WIN7
  13. [0.0]-AutoSAR零基础学习-专栏介绍
  14. Android 将PDF文件转Bitmap,并将Bitmap以图片的方式保存到相册
  15. 小米手机开启“启用MIUI优化”,导致Android Studio无法成功直接安装
  16. 博通wifi 芯片配置工具wl 详解
  17. c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
  18. 软件的生命周期的若干阶段
  19. 从微信端跳到外部浏览器进行apk文件下载最新解决方案
  20. [BUAA软工第二次]个人作业-软件案例分析

热门文章

  1. 熊掌号必备SEO知识4:已开通熊掌号,站点换域名了怎么办?
  2. java-php-net-python-四六级考试报名系统计算机毕业设计程序
  3. LOCAL_PRIVILEGED_MODULE 详解(2)
  4. 根据域名反向查询ip地址服务器
  5. Windows安装Apache服务器及证书
  6. 【JAVA今法修真】 第二章 一气化三清 线程分心念
  7. 恶意软件伪装成PDF传播、新冠病毒变种成钓鱼攻击诱饵|12月3日全球网络安全热点
  8. 计蒜客:幼儿园买玩具(C++)
  9. 计算机硬件英语对话,关于电脑问题的英语对话
  10. 解决Maven打包报错Could not transfer artifact xxx.xxx找不到依赖的问题