网络拥塞控制(八) 外传之如何测量TCP的拥塞窗口
2009-03-20 23:31
435 查看
我们一直讲了许多种网络拥塞算法,这些一直都是理论上的算法,到底在实际中窗口的调整是怎么样的呢?对于一个连接来说,如何知道当前的拥塞窗口值是多少呢?
在Linux下,使用内核模块tcpprobe,可以得到TCP连接的参数,但是麻烦的是,该模块需要内核kprobes的支持,如果不怕麻烦的话,当然可以尝试下。我们希望的是能够不需要通过这么复杂的机制,就能够得到内核中TCP连接的参数。在翻遍了proc目录和内核的一些代码后,终于找到了我想要的方法:getsockopt()函数调用。
该选项是Linux平台所独有的,所以在很多书籍,包括《Unix网络编程》这种圣经级的书和Linux的man getsockopt手册中,都没有提到这个选项。
在内核的函数tcp_getsockopt的代码中,可以看到这个选项TCP_INFO,返回了几乎所有的参数,同时还有其他的许多参数可以得到一些其他的信息。具体每个参数的含义可以参考内核中的注释。
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,
info.tcpi_rcv_ssthresh,
info.tcpi_rtt,
info.tcpi_rttvar,
info.tcpi_unacked,
info.tcpi_sacked,
info.tcpi_lost,
info.tcpi_retrans,
info.tcpi_fackets,
info.tcpi_ca_state,
info.tcpi_reordering
);
}
}
有了这个选项后,我们就不再停留在各种拥塞算法的理论层面上,就可以从实际中看到TCP的各种算法的优劣,比较有趣的内容就产生了。
在Linux下,使用内核模块tcpprobe,可以得到TCP连接的参数,但是麻烦的是,该模块需要内核kprobes的支持,如果不怕麻烦的话,当然可以尝试下。我们希望的是能够不需要通过这么复杂的机制,就能够得到内核中TCP连接的参数。在翻遍了proc目录和内核的一些代码后,终于找到了我想要的方法:getsockopt()函数调用。
该选项是Linux平台所独有的,所以在很多书籍,包括《Unix网络编程》这种圣经级的书和Linux的man getsockopt手册中,都没有提到这个选项。
在内核的函数tcp_getsockopt的代码中,可以看到这个选项TCP_INFO,返回了几乎所有的参数,同时还有其他的许多参数可以得到一些其他的信息。具体每个参数的含义可以参考内核中的注释。
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,
info.tcpi_rcv_ssthresh,
info.tcpi_rtt,
info.tcpi_rttvar,
info.tcpi_unacked,
info.tcpi_sacked,
info.tcpi_lost,
info.tcpi_retrans,
info.tcpi_fackets,
info.tcpi_ca_state,
info.tcpi_reordering
);
}
}
有了这个选项后,我们就不再停留在各种拥塞算法的理论层面上,就可以从实际中看到TCP的各种算法的优劣,比较有趣的内容就产生了。
相关文章推荐
- 网络拥塞控制(八) 外传之如何测量TCP的拥塞窗口
- Tcp 网络拥塞控制
- 网络拥塞控制TCP拥塞控制算法
- 网络拥塞控制之TCP拥塞控制算法
- 网络基础 — TCP的流量控制和拥塞控制
- TCP/IP中的拥塞窗口控制机制
- TCP拥塞控制窗口有效性验证机制
- TCP的工作原理,TCP的流量控制原理,滑动窗口,拥塞窗口,ACK累计确认等
- 应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题
- 网络拥塞控制(四) TCP拥塞控制的其他算法
- tcp窗口滑动以及拥塞控制
- TCP拥塞控制窗口有效性验证机制
- TCP是如何运用窗口进行流量控制
- tcp窗口滑动以及拥塞控制
- TCP:浅析拥塞控制窗口、慢启动、拥塞避免在linux内核中的实现
- TCP 网络拥塞控制
- TCP的工作原理,TCP的流量控制原理,滑动窗口,拥塞窗口,ACK累计确认等
- 网络编程基础(6)-协议概要-TCP的拥塞控制
- TCP的窗口滑动机制与拥塞控制
- tcp窗口滑动以及拥塞控制