tcp拥塞控制的4算法,tcp协议栈优化1-增加TCP初始拥塞窗口

 2023-09-25 阅读 15 评论 0

摘要:看linux3.0 network代码,发现TCP initcwd(初始拥塞窗口)默认已经调为10,同时,TCP rcvwnd初始接收窗口也已调为10。 tcp initcwd初始化函数---函数tcp_init_cwnd(),宏TCP_INIT_CWND tcp rcvwnd初始化函数 ---函数tcp_select_initial_wind
看linux3.0 network代码,发现TCP initcwd(初始拥塞窗口)默认已经调为10,同时,TCP rcvwnd初始接收窗口也已调为10。 
    tcp initcwd初始化函数---函数tcp_init_cwnd(),宏TCP_INIT_CWND 
    tcp rcvwnd初始化函数 ---函数tcp_select_initial_window(),宏TCP_DEFAULT_INIT_RCVWND 
   (注:tcp允许发送包个数由 发送端拥塞窗口 和 接收端接收窗口 决定,接收端通过tcp头部window字段通知发送端接收窗口大小) 
    linux为什么要调大tcp initcwnd,请参见http://lwn.net/Articles/427104/ 和 http://tools.ietf.org/html/draft-hkchu-tcpm-initcwnd-01; 
   (注:wf和我在09年已经进行了研究,并在线上业务中调大initcwnd,当时觉得该参数适用场景不具普遍性;没想到google能对其进行量化的研究,并推动IETF接受该调整,值得我们学习) 

     国内外 互联网公司(google/baidu/taobao等)已在合适业务中调大了TCP初始拥塞窗口,调大有2种方法: 
    1. ip route方式,ip routechange default via <gateway> dev eth0initcwnd<iw>(记得2.6.32版本以上支持),该方式仅对通过该路由的TCP连接有效; 
    2. sysctl参数,自己在内核中增加一个控制initcwnd的proc参数,该方式对于所有tcp连接有效;(我们当年采用了该方式) 
    
   适用场景:短连接+发送数据量小(拥塞控制尚处于slowstart阶段,传输就完毕了) 
   效果:我知道的几个应用效果为传输速度可以提高10%~20%;但有好处也有坏处,TCP重传率会增加(初始拥塞窗口越大,重传率越高) 

   代码研究: 
    我们将分析“tcp三次握手”过程中,客户端和服务端 拥塞窗口(snd_cwnd)的变化;,。 
   客户端: 
        创建socket - 函数tcp_v4_init_sock - snd_cwnd=2; 
        发送syn - 函数tcp_v4_connect - snd_cwnd=2 没有变化; 
        收到syn_ack发送ack - 函数tcp_rcv_synsent_state_process 调用 函数tcp_init_metrics 调用 snd_cwnd = tcp_init_cwnd(tp, dst); 
    服务端: 
        linux tcp/ip协议栈中 服务端收到三次握手的最后一个ack,才会创建socket; 
        收到ack - 函数tcp_create_openreq_child中创建socket,snd_cwnd=2 - 函数tcp_rcv_state_process,当前socket状态为TCP_SYN_RECV,调用 函数tcp_init_metrics 调用 snd_cwnd = tcp_init_cwnd(tp, dst); 
     
     注:函数tcp_init_metrics根据socket所在路由中设置的tcp参数 初始化 该socket;同时,该路由条目所在socket在关闭时,会通过函数tcp_update_metrics,更新路由中的tcp参数(sysctl_tcp_nometrics_save为是否更新的开关);路由条目中所有的tcp参数在rtnetlink.h中定义,如RTAX_RTT/RTAX_REORDERING等。 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/94593.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息