LWIP协议栈详解,lwip协议栈详解pdf
本作品内容为LWIP协议栈详解,格式为 doc ,大小 228904 KB ,页数为 9页
('1.TCP连接的建立和终止TCP是一个面向连接的协议,提供可靠的数据连接。在收发数据之前,需要在双方之间建立一条连接。下面以图①所示为例说明TCP连接的建立和终止。1.1TCP连接的建立1)请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN,在这个例子中为1415531521)。这个SYN段为报文段1。2)服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。这三个报文段完成连接的建立。这个过程也称为三次握手(three-wayhandshake)。图①1.2TCP连接的终止建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(half-close)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。一个TCP连接在收到一个FIN后不能接收数据,但仍能发送数据,反之一个TCP连接在发送一个FIN后不能发送数据,但仍能接收数据。以客户端为主动关闭一方为例说明TCP连接的终止过程。首先客户端发送第一个FIN(报文段4),服务器收到FIN后,返回对该FIN的确认ACK(报文段5),然后通知应用层对方已经关闭连接,然后回复FIN(报文段6)。客户端收到该FIN后再回复一个确认ACK(报文段7),同时客户端关闭本地连接,而服务端收到该ACK后也最终关闭连接。2.TCP的滑动窗口协议2.1使用滑动窗口的原因TCP协议在工作时,如果发送端的TCP协议软件每传输一个数据分组后,必须等待接收端的确认才能够发送下一个分组,由于网络传输的时延,将有大量时间被用于等待确认,导致传输效率低下。为此TCP在进行数据传输时使用了滑动窗口机制。滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。2.2滑动窗口简介图②下面以上图为例说明TCP的滑动窗口协议。图中我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口(offeredwindow),如图所示窗口大小为6,它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:1)称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。2)当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。3)当右边沿向左移动时,我们称之为窗口收缩。HostRequirementsRFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的ACK,则它被认为是一个重复ACK,并被丢弃。如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。3.TCP的超时重传机制3.1TCP的重传超时时间RTO的计算在计算RTO之前需估计往返时间(RTT)。RTT是某个字节的数据被发出到该字节被确认返回的时间间隔。由于路由器和网络流量均会变化,因此RTT可能经常会发生变化,TCP应该跟踪这些变化并相应地改变其超时时间RTO。在一段时间内可能会发送多个数据包,但只能选择其中一包作为计算RTT的值,直到该数据包被确认返回。才开始下一次的RTT估算。计算RTO的算法如下:Err=M-AA←A+gErrD←D+h(Err-D)RTO=A+4DM表示所测量到的RTT,A是被平滑的RTT(均值的估计器),Err是刚得到的测量结果与当前的RTT估计器之差。增量g起平均作用,取为1/8。而D则是被平滑的均值偏差。偏差的增益是h,取值为1/4。A和D均被用于计算下一个重传时间(RTO)。Lwip中有两个参数rttest和rttseq用于计算RTT;rttest表示开始计算RTT的滴答数(500ms一个滴答),rttesq是用于计算RTT的包的序号。下面是lwip中用于计算RTT和RTO的相关代码解析:/RTTestimationcalculations.Thisisdonebycheckingiftheincomingsegmentacknowledgesthesegmentweusetotakearound-triptimemeasurement.if(pcb->rttest&&TCP_SEQ_LT(pcb->rtseq,ackno)){m=tcp_ticks-pcb->rttest;/ThisistakendirectlyfromVJsoriginalcodeinhispaperm=m-(pcb->sa>>3);pcb->sa+=m;if(m<0){m=-m;}m=m-(pcb->sv>>2);pcb->sv+=m;pcb->rto=(pcb->sa>>3)+pcb->sv;pcb->rttest=0;}3.2TCP超时重传超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个500ms的计时器,超时以后如果没有得到发送数据报的ACK报文,那么就重新发送数据。当超过设定的重传次数nrtx都没有相应的ACK返回,那么就主动断开socket连接。代码解析:++pcb->rtime;if(pcb->unacked!=NULL&&pcb->rtime>=pcb->rto){if(pcb->state!=SYN_SENT){pcb->rto=((pcb->sa>>3)+pcb->sv)<
提供LWIP协议栈详解,lwip协议栈详解pdf会员下载,编号:1700665517,格式为 docx,文件大小为9页,请使用软件:wps,office word 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。