1.第一章节新开一页(插入—>分隔符—>分节符类型:下一页);2.正文目录应用(插入—>引用—>索引和目录)的方式自动生成;3.页眉应该包括惠州学院本科毕业论文字样及章节名称、页码应用外侧的方式,奇数页号在右,偶数页号在左;4.论文的章节一级标题格式(字体:中文:黑体,英文:Times New Roman,三号,段落:左右缩进0字符,段前40磅,段后24磅,行距固定20磅)及二、三级标题格式可以套用模板中的格式;5.正方的中文(宋体,小四)、英文格式(Times New Roman,小四);6.段落格式(左右缩进0字符,首行缩进2字符,段前段后0行,行距固定20磅);7.论文中除软件截图外,其他图绘制时使用工具VISIO2000或2003;8.图例说明放在图片正下文,图 2-1 说明文字:2为章节,1为图片序号表格说明放在表格正上方:表 2-1 说明文字:2为章节,1为图片序号格式为楷体五号,如:图3-1 k=1(即OriginalRED)算法平均队列长度与丢弃概率图9.参考文献格式:参考文献必须在文中用上标标出引用位置[38][19] S. Floyd.A Report on Some Recent Developments in TCP Congestion Control.IEEE Communication Magazine,2001,39(4):84~90[22] S. Floyd .An Extension to the Selective Acknowledgement (SACK) Option for TCP.RFC 2883,July 2000[27] 栾宝宽,方蕾,冯永浩. 基于DDS 的信号发生器的设计与实现. 电子工程师,2005,31(10):38~39[37] 李东生,张勇,许四毛. Protel 99 SE 电路设计技术入门与应用. 北京:电子工业出版社,2002[38] 潘永雄,沙河,刘向阳. 电子线路CAD实用教程. 西安:西安电子科技大学出版社,200310.第二章TCP拥塞控制及主动队列管理AQM算法当前网络上的传输主要是通过TCP完成的。
由于可以提供可靠的传输服务,TCP被广泛应用于HTTP、FTP、TELNET以及SMTP等应用程序中。
实际上,在采用了Jacobson的拥塞避免算法后,TCP的应用更加广泛。
该机制帮助发送端决定网络中的可用带宽,从而调整其发送速率。
该方法的基本思想是在可用带宽耗尽前慢慢的增加其发送速率,在拥塞被探测到的时候降低发送速率。
TCP使用拥塞窗口(CWND)来调节其发送速率,线性增加窗口大小来增大发送速率,积式减少窗口大小来缓解网络拥塞。
这种流量控制和拥塞控制的策略,被称作和式增加积式减少(AIMD),可以防止网络过载,已经成为网络鲁棒性和稳定性的一个至关重要的因素。
2.1 基本机制TCP拥塞控制的基础是AIMD(Additive Increase Multiplicative Decrease),在一个分组的往返时间中,每发生一个分组的丢失则拥塞窗口减半,否则拥塞窗口加一。
另一个非常重要的组成部分是重传计时器,即在时间到时仍然没有收到答复,则超时重传。
第三个基本的机制是慢启动机制。
发送端不是一开始就以一个网络可能无法支持的高速率来发送,而是通过这种机制来试探网络可提供的带宽。
第四个TCP拥塞控制机制是ACK时钟。
TCP拥塞控制的基本机制主要包括如下的几个部分:慢启动、拥塞避免、快速重传和快速恢复。
TCP拥塞控制是通过控制一些重要参数的改变而实现的。
TCP用于拥塞控制的参数主要有:(1) 拥塞窗口(CWND):拥塞控制的关键参数,它描述源端在拥塞控制情况下一次最多能发送的分组的数量。
(2) 通告窗口(AWIN):接收端给源端预设的发送窗口大小,它只在TCP连接的建立阶段发挥作用。
(3) 发送窗口(WIN):源端每次实际发送数据的窗口大小。
(4) 慢启动门限值(SSTHRESH):拥塞控制中慢启动阶段和拥塞避免阶段的分界点。
(5) 回路响应时间(RTT):源端从发送一个TCP分组,到收到接收端确认的时间间隔。
(6) 超时重传计数器(RTO):描述分组从发送到失效的时间间隔,是判断分组丢失与否及网络是否拥塞的重要参数。
通常设为2RTT或5RTT。
(7) 快速重传门限值(TCPrexmtthresh):能触发快速重传的源端收到重复确认包ACK的个数。
当此个数超过TCPrexmtthresh时,网络就进入快速重传阶段。
TCPrexmtthresh缺省值为3。
发送端维护一个拥塞窗口(CWND)状态变量,表示根据当前网络的拥塞情况确定的可以发送的分组数量。
最大窗口表示当前可以发送的最大分组数量,会被设置为拥塞窗口和通告窗口(表示接收端的接收能力)中的较小者。
2.1.1 慢启动阶段新的TCP连接建立的时候,由于TCP源端无法知道当前网络的拥塞情况,发送端通过将拥塞窗口设置为1然后指数增加窗口大小的方式来探测网络情况,直到以下三种情况之一发生:超时(或3个重复ACK)、到达通告窗口或者到达慢启动门限值。
这个阶段就是慢启动阶段,在该阶段中,TCP源端发送数据的速率是呈指数增加的:每接收到一个分组的ACK,TCP源端就发送两个分组到网络中。
首先发送一个分组,接收到该份组的ACK后,发送两个分组,然后在接收到它们的ACK后,发送4个分组,形式如同1、2、4、8、16…2n,一直到出现超时、到达通告窗口或者到达慢启动门限值三种情况之一时,慢启动阶段结束,进入拥塞避免阶段。
2.1.2 拥塞避免阶段在几种不同情况触发的拥塞避免阶段中,TCP采取了不同的处理方式。
当拥塞窗口到达慢启动门限值时,TCP进入拥塞避免阶段,TCP源端在每次收到一个ACK时只将CWND增加1/CWND;当发现超时或收到3个相同ACK确认帧时,即认为网络发生拥塞,在这种情况下,慢启动门限值被设置为当前CWND的一半;若是由超时引起的拥塞发生时,CWND被置为1。
如果CWND<=SSTHRESH,则TCP重新进入慢启动过程;如果CWND>SSTHRESH,则TCP执行拥塞避免算法,CWND在每次收到一个ACK时只增加1/CWND个分组。
2.1.3 快速重传和恢复阶段当分组超时时,CWND被设置为1,重新进入慢启动,这会导致过大地减小发送窗口尺寸,降低TCP连接的吞吐量。
因此快速重传和恢复就是在源端收到3个或3个以上重复ACK时,就断定分组已经被丢失,并重传分组,同时将SSTHRESH设置为当前CWND的一半,而不必等到RTO超时。
需要指出的是,有很多种不同的TCP的算法如Tahoe[19],Reno[20],Newreno[21],Sack[22][23] and Vegas[24]等,虽然在不同阶段采取的方式不尽相同,但在其拥塞控制机制中都保留了两个基本的要素:(1) TCP源端以分组丢失作为网络内部发生拥塞的一个指示,通过将拥塞窗口至少降低一半来响应该指示。
拥塞窗口的减少意味着降低有效发送速率以缓减拥塞。
(2) 在拥塞避免阶段,即线性阶段,TCP源端在每一个RTT之内将拥塞窗口最多增加一个分组。
某些算法的TCP在获得较大可用带宽的情况下对拥塞的响应更积极且具有更小的侵略性。
比如:TCP Tahoe在拥塞情况下将拥塞窗口降到1,而不是当前值的一半。
某些TCP应用在每次接收到两个分组后发送一个ACK,这就使得在拥塞避免阶段其拥塞窗口在每个RTT之内的增加值将小于1。
然而,这两个基本要素给了我们一个TCP发送速率的上界。
2.2 TCP拥塞控制的几种算法如前所述,TCP拥塞控制有多种算法,各算法在控制发送速率以及响应的方式上存在一些差别。
我们将介绍几种很有影响的机制。
2.2.1 TahoeTahoe是最初的支持拥塞控制的TCP协议,协议主要包括慢启动和拥塞避免以及快速重传三部分。
(1) 慢启动在新的TCP连接开始的时候,慢启动使得发送端能够逐渐的增大自己发送到网络的分组的速度以探测网络拥塞情况。
利用状态变量CWND来表示发送端的拥塞窗口大小,初始值设置为1,当发送端每收到一个ACK,将CWND增加1。
设置慢启动的CWND增长的上限——慢启动门限值SSTHRESH,当慢启动中CWND增长到SSTHRESH,则停止慢启动,进入拥塞避免阶段。
若在进入拥塞避免之前发生重传超时(RTO),则发送端重新进入慢启动,并设置SSTHRESH为CWND/2。
(2) 拥塞避免在CWND>SSTHRESH的时候,发送端从慢启动进入拥塞避免阶段,其间每个RTT中CWND增加大约1,当发生重传超时的时候,发送端重新进入慢启动阶段,并且将SSTHRESH设置为CWND/2。
(3) 快速重传在Tahoe中,源端在收到3个或3个以上重复ACK时,就断定分组已经被丢失,并重传分组,同时将SSTHRESH设置为当前CWND的一半。
2.2.2 RenoReno是在Tahoe基础上提出的,由于Tahoe中一旦发生丢包将重新开始慢启动,发送速率会急剧减小,产生发送速率的抖动,因此增加了快速重传和快速恢复两个阶段。
快速恢复使得发送窗口不至于减小太多,而快速重传实现丢失分组的迅速恢复。
但Reno算法仍有不足。
首先,源端在检测到拥塞后,要重传从分组丢失到检测到丢失时发送的全部分组(即Go-back-N算法),而这中间有些分组被正确地传到接收端,而不必重传。
另外,在大多数TCP实现中,RTO计数器的值被认为是RTT的均值和方差的估计值的函数。
理论上,RTT的测量比较简单。
它只是分组从发出到确认ACK返回源端的时间。
但由于TCP使用的是用一个ACK确认所有已收到数据的“累积”确认方式,所以实际中RTT的估计往往很复杂。
2.2.3 New RenoNew Reno[25-28]是对Reno的改进,在Reno算法的基础上在第一步增加新的变量Recover,用于在第5步中收到局部确认(Partial ACK)或者新的ACK时执行不同的操作。
具体步骤如下:(1) 如果收到3个重复的ACK,并且发送端没有处在快速恢复阶段,将SSTHRESH的值设置成不超过Max,并用变量Recover记录最大已发送分组的序列号。
(2) 重传丢失的分组,设置CWND=SSTHRESH+3。
(3) 每接收到一个重传丢失分组的ACK,将CWND加1。
(4) 在当前发送窗口和接收端通告窗口允许的情况下,发送一个分组。
(5) 当一个ACK包含了新的分组序列号,这个ACK确认了在第2步中重传的分组或者随后的重传分组。
如果这个ACK足以确认所有包括序号为Recover的分组,可以将CWND设置为在第一步中计算的SSTHRESH的值;如果此ACK确认的分组序号小于Recover,则表明,这是一个Partial ACK,重传其序号后第一个没有得到确认的分组,如果用Sum表示此ACK可以确认接收端收到的分组的个数,将CWND减小Sum,反映此Sum个分组离开了网络,通过这种方法确保在退出快速恢复的时候SSTHRESH个分组在网络中。