1

When i use tcp_probe module to collect cwnd for a TCP connection, the cwnd will stop to increase by around 1467(packets). Can anyone explain the reason for this ? or what is limiting the cwnd on earth ?

The TCP connection is a download a 2G file from host1 (192.168.0.2) to host2 (192.168.0.25), here is my commands for this connection.

@host1: python -m SimpleHTTPServer

@host2: wget http://192.168.0.2:8000/test_2G

Here is the command for using tcp_probe to collect the cwnd:

@host1: modprobe tcp_probe port=800 full=1

Here are some other info you may want to know:

@host1:

#ifconfig eth4
eth4      Link encap:Ethernet  HWaddr 90:E2:BA:14:BE:AC  
      inet addr:192.168.0.2  Bcast:192.255.255.255  Mask:255.0.0.0
      inet6 addr: fe80::92e2:baff:fe14:beac/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:15263651 errors:0 dropped:0 overruns:0 frame:0
      TX packets:31145880 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:5000 
      RX bytes:1008133254 (961.4 MiB)  TX bytes:47154490579 (43.9 GiB)
      Memory:fb780000-fb800000 
#cat /proc/sys/net/ipv4/tcp_mem
770373  1027165 1540746
#cat /proc/sys/net/core/rmem_default
212992
#cat /proc/sys/net/core/rmem_max
12582912
#cat /proc/sys/net/core/wmem_default
425984
#cat /proc/sys/net/core/wmem_max
12582912
#cat /proc/sys/net/ipv4/tcp_wmem
10240   87380   12582912
#cat /proc/sys/net/ipv4/tcp_rmem
10240   87380   12582912
Perth Charles
  • 141
  • 1
  • 1
  • 6

1 Answers1

0

After digged in the kernel code, i find out the CWND wouldn't invoke the increase function if the tcp is limited by application instead of network capacity.

All the magic is caused by the function tcp_is_cwnd_limited in the file tcp_cong.c. Every congestion algorithm will return directly if tcp is NOT limited by cwnd. :)

Perth Charles
  • 141
  • 1
  • 1
  • 6