打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
网络拥塞控制(八) 外传之如何测量TCP的拥塞窗口 - 海阔天空 - 博客园

网络拥塞控制(八) 外传之如何测量TCP的拥塞窗口

我们一直讲了许多种网络拥塞算法,这些一直都是理论上的算法,到底在实际中窗口的调整是怎么样的呢?对于一个连接来说,如何知道当前的拥塞窗口值是多少呢?

在Linux下,使用内核模块tcpprobe,可以得到TCP连接的参数,但是麻烦的是,该模块需要内核kprobes的支持,如果不怕麻烦的话,当然可以尝试下。我们希望的是能够不需要通过这么复杂的机制,就能够得到内核中TCP连接的参数。在翻遍了proc目录和内核的一些代码后,终于找到了我想要的方法:getsockopt()函数调用。

该选项是Linux平台所独有的,所以在很多书籍,包括《Unix网络编程》这种圣经级的书和Linux的man getsockopt手册中,都没有提到这个选项。

在内核的函数tcp_getsockopt的代码中,可以看到这个选项TCP_INFO,返回了几乎所有的参数,同时还有其他的许多参数可以得到一些其他的信息。具体每个参数的含义可以参考内核中的注释。


 1
void read_cwnd(int tcp_socket)
 2
{
 3
   
struct tcp_info info;
 4
   
int length = sizeof(struct tcp_info);
 5
   
 6
   
if ( getsockopt( tcp_socket, SOL_TCP, TCP_INFO, (void *)&info, (socklen_t *)&length ) == 0 ) {
 7
      printf(
"%u %u %u %u %u %u %u %u %u %u %u %u\n",
 8
            info.tcpi_snd_cwnd,
 9
            info.tcpi_snd_ssthresh,
10
            info.tcpi_rcv_ssthresh,
11
            info.tcpi_rtt,
12
            info.tcpi_rttvar,
13
            info.tcpi_unacked,
14
            info.tcpi_sacked,
15
            info.tcpi_lost,
16
            info.tcpi_retrans,
17
            info.tcpi_fackets,
18
            info.tcpi_ca_state,
19
            info.tcpi_reordering
20
           );
21
   }

22
}

  有了这个选项后,我们就不再停留在各种拥塞算法的理论层面上,就可以从实际中看到TCP的各种算法的优劣,比较有趣的内容就产生了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux系统内核参数优化
TCP连接、断开以及Linux内核参数
计算机经典书籍汇总
【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经
套接字选项(四)_深度探索Linux内核
Linux——linux学习全攻略
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服