TCP拥塞控制算法内核实现剖析

TCP拥塞控制算法内核实现剖析

ID:43985033

大小:682.03 KB

页数:49页

时间:2019-10-17

TCP拥塞控制算法内核实现剖析_第1页
TCP拥塞控制算法内核实现剖析_第2页
TCP拥塞控制算法内核实现剖析_第3页
TCP拥塞控制算法内核实现剖析_第4页
TCP拥塞控制算法内核实现剖析_第5页
资源描述:

《TCP拥塞控制算法内核实现剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、TCP拥塞控制算法内核实现剖析分类:LinuxKernel2011-12-0517:10内核版札2.6.37主要源文件:linux・2.6.37/net/ipv4/Tcp_cong.c一、RENO及拥塞控制算法基础1.1RENO拥塞控制算法structsock*sk和structtcp_sock*tp的转换[cpp]viewplaincopy1.在include/linux/Tcp.h中,2.staticinlinestructtcp_sock*tcp_sk(conststruetsock*sk)?・{4.return(structtcp_sock*)sk;5・}6.7.给

2、出structsock*sk,8.structtcp_sock壮p=tcp_sk(sk);tcp_sock结构viewplaincopystruettcp_sock{3.•••4・u32window_clamp;/*Maximalwindowtoadvertise*/5.u32rcv_ssthresh;/*Currentwindowclamp*/6."7u32rcv_wnd;/*Currentreceiverwindow*//•8・•••/*sndwll记录发送窗口更新时,造成窗口更新的那个数据报的第一个序号。9.*它主耍用丁•在卜•一次判断是否需耍更新发送窗口。10.*/

3、11.u32snd_wll;/*Sequeneeforwindowupdate*/12.u32snd_wnd;/*发送窗口的人小,肓接取值丁•来自对方的数据报的TCP首部*/13./*Maximalwindoweverseenfrompeer记录來自对方通告的窗口的最大值14./*Firstbytewewantanackfor发送窗口的左边沿*/15.u32max_window;u32snd_una;16.•••17.18•*Slowstartandcongestioncontrol19.*/20.u32snd_ssthresh;/*Slowstartsizethresho

4、ld*/21.u32snd_cwnd;/*Sendingcongestionwindow*/22./*农示在当前的拥塞控制撕口中己经发送的数据段的个数*/23-u32snd_cwnd_cnt;/*Linearincreasecounter*/24.u32snd_cwnd_clamp;/*Donotallowsnd_cwndtogrowabovethis*/25.•••26.u32mss_cache;/*cachedeffectivemss,notincludingSACKS*/27.u32bytes^acked;/*AppropriateByteCounting-RFC34

5、65*/28••••29.}拥塞避免算法关键部分cpp]viewplaincopyI-2.3.4.5.6./*Intheorythisistp・>snd_cwnd+=1voidtcp_cong_avoid_ai(structtcp_sock{if(tp・>snd_cwnd_cnt>=w){if(tp->snd_cwndsnd_cwnd++/tp->snd_cwnd(oralternativew)*tp,u32w)>snd_cwnd_clamp)7.tp->snd_cwnd_cnt=0;8.}else{9.tp->snd_cwnd_cnt++;10.}11.}12.

6、EXPORT_SYMBOL_GPL(tcp_cong_avoid_ai);慢启动算法tcpmax_ssthresh参数白勺含义tcp_max_ssthresh参数是实现RFC3742时引入的,离现在已经冇4年的时间了。07年5月内核实现了这个RFC。但是,tcp的这个参数在内核文档(ip-sysctl.txt)中找不到任何的说明。慢启动阶段,就是为前拥塞窗II值比慢启动阈值(snd_ssthresh)小的时候,所处的阶段就叫做慢启动阶段。当我们收到一个新的ACK时,则会调用tcp_slow_start()这个函数,并且为拥靈窗口增加1.(Linux中拥塞窗口的值代表数据包的

7、个数,而不是实际的发送字节数目。实际町以发送的字节数等丁•可以发送的数据包个数*MSSo)直到慢启动阶段出现数据包的丢失。而引入了tcp.max.ssthresh这个参数后,则可以控制在慢启动阶段拥塞窗口增加的频度。默认这个参数不打开,如果这个参数的值设置为1000,则当拥塞窗口值大于1000时,则没收到一个ACK,并不再增加拥塞窗口一个单位了,而是约收到2个ACK才增加一个窗口单位。注意:收到2ACK并不是决定值!!石要根据当前的拥塞窗口值,tcp^max.ssthresh值进行判断。参见tcp.txt(docu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。