1 / 38

TCP in Mobile Ad Hoc Networks (MANETs)

TCP in Mobile Ad Hoc Networks (MANETs). Wireless Network Lab. TCP 拥塞控制窗口变化的是加法增大、乘法减小 (AIMD) : 较好地保证流之间的公平性,因为一旦丢包,窗口立即减半退避,可以为其他流留有足够的空间,从而保证整个的公平性; 拥塞发生时,窗口乘法减小,可快速解除拥塞。. TCP 拥塞控制策略: 慢启动 (Slow Start) 拥塞避免 (Congestion Avoidance) 超时重传 (RTO) 快速重传 (Fast Retransmit ) 快速恢复 (Fast Recovery)

robbin
Download Presentation

TCP in Mobile Ad Hoc Networks (MANETs)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TCP in Mobile Ad Hoc Networks(MANETs) Wireless Network Lab.

  2. TCP拥塞控制窗口变化的是加法增大、乘法减小(AIMD):TCP拥塞控制窗口变化的是加法增大、乘法减小(AIMD): • 较好地保证流之间的公平性,因为一旦丢包,窗口立即减半退避,可以为其他流留有足够的空间,从而保证整个的公平性; • 拥塞发生时,窗口乘法减小,可快速解除拥塞。

  3. TCP拥塞控制策略: 慢启动(Slow Start) 拥塞避免(Congestion Avoidance) 超时重传(RTO) 快速重传(Fast Retransmit ) 快速恢复(Fast Recovery) 拥塞窗口(CWND):拥塞控制 通告/接收窗口(RWND):流量控制 发送窗口(SWND) = min(RWND, CWND)

  4. TCP在无线Ad hoc网络中的应用与挑战 • TCP协议是为有线网络设计的,它在有线网络中表现很好,该协议通过增加拥塞窗口来不断探测网络的可用带宽,拥塞窗口决定了网络中未确认的分组数量。 • 拥塞控制算法依赖于分组的丢失和网络的拥塞程度,一般使用反馈机制,如通过超时重传和连续重复的ACK(确认分组)来检测分组丢失,判断拥塞,然后通过减少拥塞窗口来解除拥塞,而且当发生超时重传后,使用指数退避算法来确定重传的超时值。

  5. Ad hoc网络是一种自组织无线网络,与传统的带固定设备的无线网络相比(如WLAN),显著特点是网络中没有固定的通信基础设施,网络中的所有节点均可自由移动,且每个节点既作为终端又作为路由器,可提供包的存储转发功能。 Ad hoc网络的一些本质特性使TCP应用于其中时面临一些问题。 传统的TCP认为所有的包丢失都是由网络拥塞造成的。一旦检测到丢包事件,TCP会减少窗口来降低发送速率,从而避免或减轻网络拥塞。但是在Ad hoc无线网络中,许多因素都会导致包的丢失。

  6. 可能会导致丢包的因素: (1)传输介质的某些本质特性会导致包的丢失: collision(hidden terminal),bit error ratio (2)路由变化会导致包的丢失 node mobility,heavy contention (3)链路竞争会导致包的丢失 access medium

  7. 传统的TCP本身是没有能力区分数据包丢失原因的,而是一旦发现丢包,就进行拥塞控制减小拥塞窗口,这种不恰当、不合时宜地拥塞控制、拥塞避免和超时重传,会导致TCP吞吐量的严重下降。传统的TCP本身是没有能力区分数据包丢失原因的,而是一旦发现丢包,就进行拥塞控制减小拥塞窗口,这种不恰当、不合时宜地拥塞控制、拥塞避免和超时重传,会导致TCP吞吐量的严重下降。 无线Ad hoc下TCP研究重点: 让TCP具备区分丢包原因的能力,能够实时感知网络状态,根据网络状态调整拥塞窗口。

  8. 目前针对Ad Hoc 网络的传输层/TCP问题提出了许多协议: 基于网络层的方案 基于网络层的方法就是TCP发送端利用网络层提供的反馈信息,以较为准确地判断网络中路由发生变化的信息,从而采取相应的措施以提高TCP性能。 典型的方法有:TCP-F( TCPFeedback )、ELFN(显示通知)和ATCP(子层)等。

  9. 基于端到端的方案 针对TCP自身的端到端特性,结合某种判断方法,来对丢包和收到重复的ACK等现象加以判别以进行相应处理。 典型的方案: 固定重传超时(fixed RTO)、动态延迟ACK (Dynamic delay ACK)和TCP错序检测与响应(TCP Door,TCP Detecting out of order and Response)等。

  10. TCP 与 NS2 模拟

  11. NS2原理:离散事件模拟器,事件对象化 对象配置: 每一个对象都有一些可以被指定的配置参数,这些配置参数是此对象的实例变量。它们在NS启动时被赋予缺省值,在NS软件包的ns/tcl/lib子目录中有一个启动文件ns-deafult.tcl,此文件中有NS中各个类的缺省参数值。 可以通过set命令来得到缺省参数值,也可以自主设置一个类的所有对象的值。

  12. 用NS进行仿真的基本步骤如下: (1)产生事件调度器:产生一个仿真实例;用at调度时间;用run命令开始调度。 (2)打开跟踪机制:打开一个nam文件或trace文件跟踪链路上的包。 (3)产生需要进行仿真的网络:配置网络参数如路由协议、物理层协议、路由器队列长度等:创建节点;确定网络拓扑等。 (4)产生传输层连接:设定连接的源端和目的端,并选择传输agent的类型,建立连接。 (5)业务生成:确定连接上的传输业务类型,如FTP,CBR等;把业务附加到一个agent上. (6)传输应用层数据:用at调度时间来确定何时进行业务的传输。 (7)开始仿真:调用命令使仿真开始。

  13. 网络的拓扑结构 ---通过指定三个基本的拓扑单位来实现:nodes、links、agents。 simulator类中的node函数用来创建节点,并给每个节点自动分配一个唯一的地址。 Simplex-link函数用来在两个节点之间建立单向连接。Duplex-link用来建立两个节点之间的双向连接。

  14. Agents 是驱动仿真程序的对象。它可以被想象为在节点上运行的进程,节点可以是端主机或路由器。网络业务源端和业务接收端、动态路由模型以及各种不同的协议模块都是agents的实例。通过实例化一个agents类的子类对象可以创建一个agents , agents/type表示子类对象,其中type表示是哪一种agents 。 创建 agents ,用simulator类中attach-agents函数将这个agents与一个节点相连。

  15. 在仿真中,一些agent必须有相连的业务源,也有一些agent能够生成自身的数据。使用attach-source和attach-traffic将业务源连接到agent上。在仿真中,一些agent必须有相连的业务源,也有一些agent能够生成自身的数据。使用attach-source和attach-traffic将业务源连接到agent上。 #=================================== # Agents Definition #=================================== set tcp_(0) [$ns_ create-connection TCP $node_(0) TCPSink $node_(1) 0] $tcp_(0) set window_ 32 $tcp_(0) set packetSize_ 512 set ftp_(0) [$tcp_(0) attach-source FTP] $ns_ at 0.0 "$ftp_(0) start"

  16. TCP Agent 主要有两种:单向agent 和双向agent。 单向agent 可以进一步分为一系列的发送器(采 用不同的拥塞控制机制技术)和接受器(”sink”); 双向agent 可以被看作为一个发送器和一个接收器的统一体

  17. 现存的单向TCP 发送agent 如下: ·Agent/TCP - a “tahoe” TCP sender ·Agent/TCP/Reno - a “Reno” TCP sender ·Agent/TCP/Newreno - Reno with a modification ·Agent/TCP/Sack1 - TCP with selective repeat (follows RFC2018) ·Agent/TCP/Vegas - TCP Vegas ·Agent/TCP/Fack - Reno TCP with “forward acknowledgment” 现存的TCP 接收agent : ·Agent/TCPSink - TCP sink with one ACK per packet ·Agent/TCPSink/DelAck - TCP sink with configurable delay per ACK ·Agent/TCPSink/Sack1 - selective ACK sink (follows RFC2018) ·Agent/TCPSink/Sack1/DelAck - Sack1 with DelAck

  18. #建立一个TCP Reno的FTP连接 set tcp1 [new Agent/TCP/Reno] $tcp1 set window_ 24 $tcp1 set fid_ 2 $ns attach-agent $n2 $tcp1 set tcp1sink [new Agent/TCPSink] $ns attach-agent $n3 $tcp1sink $ns connect $tcp1 $tcp1sink set ftp1 [new Application/FTP] $ftp1 attach-agent $tcp1

  19. #建立一个TCP Vegas的FTP连接 $set tcp0 [new Agent/TCP/Vegas]$tcp0 set v_alpha_ 1$tcp0 set v_beta_ 3$tcp0 set window_ 24$tcp0 set fid_ 1$ns attach-agent $n0 $tcp0set tcp0sink [new Agent/TCPSink]$ns attach-agent $n1 $tcp0sink$ns connect $tcp0 $tcp0sinkset ftp0 [new Application/FTP]$ftp0 attach-agent $tcp0

  20. Configuration Parameters Agent/TCP set window_ 20 ;# max bound on window size Agent/TCP set windowInit_ 1 ;# initial/reset value of cwnd Agent/TCP set windowOption_ 1 ;# cong avoid algorithm (1: standard) Agent/TCP set windowConstant_ 4 ;# used only when windowOption != 1 Agent/TCP set windowThresh_ 0.002 ;# used in computing averaged window Agent/TCP set overhead_ 0 ;# !=0 adds random time between sends Agent/TCP set ecn_ 0 ;# TCP should react to ecn bit Agent/TCP set packetSize_ 1000 ;# packet size used by sender (bytes) Agent/TCP set bugFix_ true ;# see explanation Agent/TCP set slow_start_restart_ true ;# see explanation Agent/TCP set tcpTick_ 0.1 ;# timer granulatiry in sec (.1 is NONSTANDARD) Agent/TCP set maxrto_ 64 ;# bound on RTO (seconds) Agent/TCP set dupacks_ 0 ;# duplicate ACK counter Agent/TCP set ack_ 0 ;# highest ACK received

  21. TCP under NS2 Functions for Sending Data: Functions for Window Management Functions for Processing ACKs

  22. send_much (force, reason, maxburst ): 它试图发送 当前发送窗口所允许的最大数量的信息包。总量被限定为maxburst_。 output (seqno, reason): 它发送具有指定序列号的信息包。如果迄今为止给定的序列号是最大的,则此函数将更新发送序列号变量maxseq_以容纳之。它还把TCP 报头分成了不同的域(序列号,时间标记,传送原因)。如果计时器未定,则此函数也设定重传计时器。

  23. Functions for Window Management 有效发送窗口在任何时刻都是由函数window()所创建。它设定最小拥塞窗口和变量wnd_。其中wnd_表示接收器的advertised 窗口。 opencwnd(): 在接收到新ACK 的时候,可以调用此函数来打开拥塞窗口。 在慢启动的情况下,每收到一个ACK,此函数就增大一次cwnd_。在拥塞避免的情况下,标准配置把cwnd_增大其倒数。在拥塞避免时,还设置了其它窗口增长选项,但是它们只是试验性的(并非正式的)。

  24. closecwnd(int how): 此函数可以用来减小拥塞窗口。 调用准则:进行快速重传;计时器终止;拥塞报告(设置ECN 比特)。 它的引数how 表明将会怎样缩小拥塞窗口。0 值用于Tahoe TCP 重传超时和快速重传,但是它常常会导致TCP 进入慢启动状态 并把ssthresh_减小为当前窗口的1/2。值1 在Reno TCP 中用于设置恢复(避免返回到慢启动状态)。值2 用于根据ECN 指示缩小窗口使拥塞窗口复位到其初始值(常导致慢启动)但不改变ssthresh_。

  25. Functions for Processing ACKs recv():ACK 的主要接收路径。 注:只用到一个信息流方法。故只有净ACK 包(即无数据)才能调用此函数。它在ts_peer_中保存了来向ACK 的时间标记(timestamp)检测ECN 比特(在合适的时候缩小发送窗口)。如果ACK 是新的,则调用newack(),否则检查他是否为前一个ACK seen 的重复。若如此,它则进行快速重传:先关闭窗口,复位重传计时器,调用send_much 发送信息包。

  26. newack(): 处理新ACK(具有比此前ACK 号更大号的ACK)。它调用newtimer()设立新的重传计时器。

More Related