华中科技大学计算机网络ppt课件 第3章 运输层.ppt

上传人:牧羊曲112 文档编号:1926301 上传时间:2022-12-26 格式:PPT 页数:130 大小:2.35MB
返回 下载 相关 举报
华中科技大学计算机网络ppt课件 第3章 运输层.ppt_第1页
第1页 / 共130页
华中科技大学计算机网络ppt课件 第3章 运输层.ppt_第2页
第2页 / 共130页
华中科技大学计算机网络ppt课件 第3章 运输层.ppt_第3页
第3页 / 共130页
华中科技大学计算机网络ppt课件 第3章 运输层.ppt_第4页
第4页 / 共130页
华中科技大学计算机网络ppt课件 第3章 运输层.ppt_第5页
第5页 / 共130页
点击查看更多>>
资源描述

《华中科技大学计算机网络ppt课件 第3章 运输层.ppt》由会员分享,可在线阅读,更多相关《华中科技大学计算机网络ppt课件 第3章 运输层.ppt(130页珍藏版)》请在三一办公上搜索。

1、计算机网络,第3章 运输层,2022年12月26日,2,目 录,概述和运输层服务多路复用与多路分解无连接传输 : UDP可靠数据传输的原理面向连接的传输 : TCP拥塞控制原理TCP拥塞控制,2022年12月26日,3,3.1 概述和运输层服务,运输层的功能为不同主机上运行的应用进程之间提供逻辑通信(logical communication)运输层协议的工作内容发送方:把应用数据划分成 报文段(segments),交给网络层接收方:把报文段重组成应用数据,交付给应用层,2022年12月26日,4,3.1 概述和运输层服务,运输层和网络层的区别网络层: 不同主机之间的逻辑通信运输层: 应用进程

2、之间的逻辑通信,类似于家庭间通信:12个孩子要与另一个家庭的12个孩子相互通信进程 = 孩子们进程间报文 = 信封中的信笺主机 = 家庭的房子运输协议 = 张三 和 李四网络层协议 = 邮局提供的服务,2022年12月26日,5,3.1 概述和运输层服务,上例中的几种特殊场景张三和李四生病了,无法工作,换成张五和李六不同的运输层协议可能提供不一样的服务邮局不承诺信件送抵的最长时间运输层协议能够提供的服务受到底层网络协议的服务模型的限制邮局不承诺平信一定安全可靠的送达,可能在路上丢失,但张三、李四可在较长时间内没有受到对方的回信时,再次誊写信件,寄出在网络层不提供某些服务的情况下,运输层自己提供

3、,2022年12月26日,6,3.1 概述和运输层服务,因特网上的运输层协议用户数据报协议UDP(数据报)传输控制协议TCP(报文段)所提供的服务进程间数据交付差错检测可靠的数据传输拥塞控制,2022年12月26日,7,3.2 多路复用与多路分解,应用层,运输层,网络层,TCP 报文段,UDP用户数据报,应用进程,TCP 复用,IP 复用,UDP 复用,TCP 报文段,UDP用户数据报,应用进程,端口,端口,TCP 分用,UDP 分用,IP 分用,发送方,接收方,2022年12月26日,8,3.2 多路复用与多路分解,端口端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层

4、,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程(或者线程)从这个意义上讲,端口是用来标志应用层的进程(或者线程)端口用一个 16 bit 端口号进行标志,2022年12月26日,9,3.2 多路复用与多路分解,套接字TCP 使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将 TCP 连接的端点称为套接字(socket) 。套接字和端口、IP 地址的关系是:,2022年12月26日,10,3.2 多路复用与多路分解,报文段(数据报)的投送主机收到IP包每个数据包都有源IP地址和目的IP地址每个数据包都携带一个传输层的数据报文段每个数据报文段都有源、目的端口号主

5、机根据“IP地址端口号”将报文段定向到相应的套接字,源端口 #,目的端口 #,32 位,应用数据 (报文),其他首部字段,TCP/UDP 报文段格式,2022年12月26日,11,3.2 多路复用与多路分解,面向连接到复用和分用TCP 套接字由一个四元组来标识 (源IP地址,源端口号,目的IP地址,目的端口号)接收方主机根据这四个值将报文段定向到相应的套接字服务器主机同时支持多个并发的TCP套接字:每一个套接字都由其四元组来标识Web服务器为每一个客户连接都产生不同的套接字非持久HTTP对每一个请求都建立不同的套接字(会影响性能),2022年12月26日,12,3.2 多路复用与多路分解,举例

6、:多线程的WEB服务器,客户 IP: A,P2,服务器IP: C,P4,P3,2022年12月26日,13,3.3 无连接传输 : UDP,一个最简单的运输层协议必须提供多路复用/多路分解服务差错检查,实际上这就是UDP所提供的功能(RFC 768),2022年12月26日,14,3.3 无连接传输 : UDP,UDP处理数据的流程发送方从应用进程得到数据附加上为多路复用/多路分解所需的源和目的端口号及差错检测信息,形成报文段(数据报)递交给网络层,尽力而为的交付给接收主机接收方从网络层接收报文段(数据报)根据目的端口号,将数据交付给相应的应用进程,UDP通信事先无需握手,是无连接的,2022

7、年12月26日,15,3.3 无连接传输 : UDP,UDP的优势无需建立连接建立连接会增加时延简单发送方和接收方无需维护连接状态段首部开销小TCP:20Byte vs UDP:8Byte无拥塞控制UDP 可按需要随时发送,2022年12月26日,16,3.3 无连接传输 : UDP,部分采用UDP协议的应用远程文件系统(NFS)流式多媒体因特网电话网络管理(SNMP)选路协议(RIP)域名解析(DNS),2022年12月26日,17,3.3 无连接传输 : UDP,UDP大量应用可能导致的严重后果路由器中大量的分组溢出显著减小TCP通信的速率,甚至挤垮TCP会话使用UDP的可靠数据传输在应用

8、层实现数据的可靠传输增加了应用进程的实现难度,2022年12月26日,18,3.3 无连接传输 : UDP,UDP报文段(数据报)的结构,源端口 #,目的端口 #,32 位,应用数据 (报文),长度,检查和,包括首部在内的UDP报文段长度, (以字节为单位),2022年12月26日,19,3.3 无连接传输 : UDP,UDP的检查和目标检测收到的报文段的“差错” (例如, 出现突变的比特)发送方把报文段看作是16比特字的序列检查和:对报文段的所有16比特字的和进行1的补运算发送方将计算校验和的结果写入UDP校验和字段中增加伪首部: (源IP地址(4字节)、目的IP地址(4字节) 、0 (1字

9、节) 、17 (UDP协议号,1字节) 、UDP长度(2字节))接收方计算接收到的报文段的校验和检查计算结果是否与收到报文段的校验和字段中的值相同不同 检测到错误相同 没有检测到错误(但仍可能存在错误),2022年12月26日,20,3.3 无连接传输 : UDP,例子: 将两个16比特字相加,1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 11 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 11 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0

10、1 0 0 0 0 1 1,回卷,和,检查和,注意:最高有效位的进位要回卷加到结果当中,2022年12月26日,21,3.4 可靠数据传输的原理,可靠数据传输在应用层、运输层和链路层都很重要网络中最重要的top-10问题之一!,2022年12月26日,22,3.4 可靠数据传输的原理,不可靠信道的特性决定了可靠数据传输协议(rdt)的复杂性。,2022年12月26日,23,3.4 可靠数据传输的原理,发送方,接收方,rdt_send(): 由上层(如应用层)调用,将数据发送给接收方的上层,udt_send(): 由 rdt调用,将分组通过不可靠信道传给接收方,rdt_rcv(): 当分组到达接

11、收方时调用,deliver_data(): 由 rdt 调用,将数据交付上层,2022年12月26日,24,3.4 可靠数据传输的原理,我们将要:逐步地开发可靠数据传输协议(rdt)的发送方和接收方只考虑单向数据传输(unidirectional data transfer)的情况但控制信息是双向传输的用有限状态机 (FSM) 来描述发送方和接收方,事件引起状态变迁,状态转换过程中的动作,状态: 由事件引起一个状态到另一个状态的变迁。,2022年12月26日,25,3.4 可靠数据传输的原理,可靠信道上的可靠传输 rdt 1.0底层信道完全可靠不会产生比特错误不会丢失分组分别为发送方和接收方建

12、立FSM发送方将数据发送给底层信道接收方从底层信道接收数据,packet = make_pkt(data)udt_send(packet),rdt_send(data),extract (packet,data)deliver_data(data),等待来自下层的调用,rdt_rcv(packet),发送方,接收方,等待来自上层的调用,2022年12月26日,26,3.4 可靠数据传输的原理,信道可能导致比特出现差错时rdt 2.x第一个版本rdt 2.0假设分组比特可能受损所有传输的分组都将按序被接收,不会丢失处理机制如何判断分组受损差错检测如何通知发送方分组是否受损接收方反馈(ACK和NA

13、K)在得知分组受损后,发送方如何处理出错重传,2022年12月26日,27,3.4 可靠数据传输的原理,rdt 2.0的有限状态机FSM,等待来自上层的调用,snkpkt = make_pkt(data, checksum)udt_send(sndpkt),extract(rcvpkt,data)deliver_data(data)udt_send(ACK),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt),rdt_rcv(rcvpkt) & isACK(rcvpkt),udt_send(sndpkt),rdt_rcv(rcvpkt) & isNAK(rcvpkt),发

14、送方,接收方,rdt_send(data),L,2022年12月26日,28,3.4 可靠数据传输的原理,等待来自上层的调用,snkpkt = make_pkt(data, checksum)udt_send(sndpkt),extract(rcvpkt,data)deliver_data(data)udt_send(ACK),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt),rdt_rcv(rcvpkt) & isACK(rcvpkt),udt_send(sndpkt),rdt_rcv(rcvpkt) & isNAK(rcvpkt),等待来自下层的调用,rdt_sen

15、d(data),L,发送方,接收方,rdt2.0: 无差错的情况,2022年12月26日,29,3.4 可靠数据传输的原理,等待来自上层的调用,snkpkt = make_pkt(data, checksum)udt_send(sndpkt),extract(rcvpkt,data)deliver_data(data)udt_send(ACK),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt),rdt_rcv(rcvpkt) & isACK(rcvpkt),udt_send(sndpkt),rdt_rcv(rcvpkt) & isNAK(rcvpkt),等待来自下层的调

16、用,rdt_send(data),L,发送方,接收方,rdt2.0: 有差错的情况,2022年12月26日,30,3.4 可靠数据传输的原理,如何实现重传使用缓冲区缓存已发出但未收到反馈的报文段新的问题需要多大的缓冲区呢?接收方和发送方各一个报文段大小的缓冲区即可,2022年12月26日,31,3.4 可靠数据传输的原理,第二个版本rdt 2.1问题的引入ACK和NAK分组可能受损,而rdt 2.0没有考虑该情况解决问题的几种思路在人类的对话中,如果听不清楚对方所述,会回问一句“刚才你说什么来着?”但如果这句话仍然没有听清楚呢?怎么办?双方对着问“刚才你说什么来着?”这就可能进入了一个难以解困

17、的死循环增加足够的检查和比特,使发送方不仅可以检查比特差错,还可以恢复比特差错收到出错的反馈时,不管三七二十一,直接重发当前数据分组,但这就需要对数据分组进行编号,以示识别,2022年12月26日,32,3.4 可靠数据传输的原理,rdt 2.1的发送方,等待来自上层的调用0,sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt),rdt_send(data),udt_send(sndpkt),rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) ),sndpkt = make_pkt(1, da

18、ta, checksum)udt_send(sndpkt),rdt_send(data),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt),udt_send(sndpkt),rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) ),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt),L,L,2022年12月26日,33,3.4 可靠数据传输的原理,rdt 2.1的接收方,rdt_rcv(rcvpkt) & not corrupt(rcvp

19、kt) & has_seq0(rcvpkt),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt),extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq0(rcvpkt),extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(snd

20、pkt),rdt_rcv(rcvpkt) & (corrupt(rcvpkt),sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt),rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & has_seq1(rcvpkt),rdt_rcv(rcvpkt) & (corrupt(rcvpkt),sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt),sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt),sndpkt = make_pkt(NAK, chks

21、um)udt_send(sndpkt),2022年12月26日,34,3.4 可靠数据传输的原理,第三个版本rdt 2.2针对rdt 2.1的改进只使用ACK取消NAK,接收方对最后一个正确收到的分组发送 ACK接收方必须明确指出被确认的分组的序号发送方收到的重复的ACK将按照NAK来进行处理重传正确的分组,2022年12月26日,35,3.4 可靠数据传输的原理,sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt),rdt_send(data),udt_send(sndpkt),rdt_rcv(rcvpkt) & ( corrupt(rcv

22、pkt) | isACK(rcvpkt,1) ),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0),发送方部分FSM,rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt),extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt),rdt_rcv(rcvpkt) & (corrupt(rcvpkt) | has_seq1(rcvpkt),udt_send(sndpkt

23、),接收方部分 FSM,L,2022年12月26日,36,3.4 可靠数据传输的原理,针对rdt 2.x的进一步讨论rdt 2.x实际上也解决了流控问题,2022年12月26日,37,3.4 可靠数据传输的原理,信道不但出错,而且丢包时rdt 3.0假设底层信道不但可能出现比特差错,而且可能会丢包需解决的问题怎样检测丢包发生丢包后,如何处理检查和技术、序号、ACK、重传,如何判断数据报丢失了呢?,最简单的方法就是:耐心的等待,2022年12月26日,38,3.4 可靠数据传输的原理,sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)star

24、t_timer,rdt_send(data),rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,1) ),sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timer,rdt_send(data),rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0),rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,0) ),rdt_rcv(rcvpkt) & notcorrupt(rcvp

25、kt) & isACK(rcvpkt,1),stop_timer,stop_timer,udt_send(sndpkt)start_timer,timeout,udt_send(sndpkt)start_timer,timeout,rdt_rcv(rcvpkt),L,rdt_rcv(rcvpkt),L,L,L,Rdt 3.0的发送方,2022年12月26日,39,3.4 可靠数据传输的原理,rdt 3.0举例,2022年12月26日,40,3.4 可靠数据传输的原理,d,),过早超时,c,),丢失,ACK,2022年12月26日,41,3.4 可靠数据传输的原理,rdt 3.0的性能分析1Gb

26、ps 的链路, 15ms 的端到端延迟, 分组大小为1KB,每30ms内只能发送1KB : 1 Gbps 的链路只有33kB/sec 的吞吐量网络协议限制了物理资源的利用率!,2022年12月26日,42,3.4 可靠数据传输的原理,rdt 3.0性能低下的原因,首个分组的第1个比特被传输, t = 0,发送方,接收方,RTT,首个分组的最后1比特被传输, t = L / R,首个分组的第1个比特到达,首个分组的最后1个比特到达,发送ACK,ACK 到达, 发送下一个分组, t = RTT + L / R,2022年12月26日,43,3.4 可靠数据传输的原理,提高性能的一种可行方法:流水线

27、技术允许发送方发送多个分组而无需等待确认必须增大序号范围协议的发送方和接收方必须对分组进行缓存,2022年12月26日,44,3.4 可靠数据传输的原理,流水线技术对性能提升的原理图,发送方,接收方,RTT,利用率提高3倍!,首个分组的第1个比特被传输, t = 0,首个分组的最后1比特被传输, t = L / R,ACK 到达, 发送下一个分组, t = RTT + L / R,首个分组的第1个比特到达,首个分组的最后1个比特到达,发送ACK,第2个分组的最后1个比特到达,发送ACK,第3个分组的最后1个比特到达,发送ACK,2022年12月26日,45,3.4 可靠数据传输的原理,流水线技

28、术工作原理分组首部用k比特字段表示序号已被传输但还未确认的分组的许可序号范围可以看作是一个在序号范围内大小为N的“窗口(window)”,2022年12月26日,46,3.4 可靠数据传输的原理,问题:当流水线技术中丢失一个分组后,如何进行重传Go-Back-N(GBN)协议:其后分组全部重传选择重传(SR)协议:仅重传该分组,2022年12月26日,47,3.4 可靠数据传输的原理,GBN时序图,2022年12月26日,48,3.4 可靠数据传输的原理,Go-Back-N协议特点ACK(n): 接收方对序号n之前包括n在内的所有分组进行确认 - “累积 ACK”对所有已发送但未确认的分组统一

29、设置一个定时器超时(n): 重传分组n和窗口中所有序号大于n的分组失序分组: 丢弃 (不缓存) - 接收方无缓存重发按序到达的最高序号分组的ACK,2022年12月26日,49,3.4 可靠数据传输的原理,Go-Back-N协议,start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1),timeout,rdt_send(data),if (nextseqnum base+N) sndpktnextseqnum = make_pkt(nextseqnum,data,chksum) udt_s

30、end(sndpktnextseqnum) if (base = nextseqnum) start_timer nextseqnum+ else refuse_data(data),base = getacknum(rcvpkt)+1If (base = nextseqnum) stop_timer else start_timer,rdt_rcv(rcvpkt) & notcorrupt(rcvpkt),base=1nextseqnum=1,rdt_rcv(rcvpkt) & corrupt(rcvpkt),L,发送方的FSM图,L,2022年12月26日,50,3.4 可靠数据传输的原理

31、,Go-Back-N协议,等待,udt_send(sndpkt),default,rdt_rcv(rcvpkt) & notcurrupt(rcvpkt) & hasseqnum(rcvpkt,expectedseqnum),extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum+,expectedseqnum=1sndpkt = make_pkt(0,ACK,chksum),L,接收方的FSM图,2022年12月26日,51

32、,3.4 可靠数据传输的原理,Go-Back-N的滑动窗口大小发送端 2k-1接收端 1,2022年12月26日,52,3.4 可靠数据传输的原理,选择重传(SR)协议,2022年12月26日,53,3.4 可靠数据传输的原理,选择重传(SR)协议,从上层收到数据 :如果下一个可用于该分组的序号在窗口内,则将数据打包并发送超时(n):重传分组n, 重置定时器收到确认(n) 在 sendbase,sendbase+N范围内标记分组 n 为已接收如果n是发送窗口基序号sendbase,则将窗口基序号前推到下一个未确认序号,2022年12月26日,54,3.4 可靠数据传输的原理,选择重传(SR)协

33、议,分组序号n在rcvbase, rcvbase+N-1范围内发送n的确认ACK(n)如果分组序号不连续(失序):将其缓存按序分组: 将该分组以及以前缓存的序号连续的分组一起交付给上层, 将窗口前推到下一个未收到的分组分组序号n 在 rcvbase-N,rcvbase-1范围内:虽然曾经确认过,仍再次发送n的确认ACK(n)其他情况: 忽略该分组,2022年12月26日,55,3.4 可靠数据传输的原理,0 1 2 3,4 5 6 7 8 9,分组0 发送,0 1 2 3,4 5 6 7 8 9,分组1 发送,0 1 2 3,4 5 6 7 8 9,分组2 发送,0 1 2 3,4 5 6 7

34、 8 9,分组3 发送,窗口满,1 2 3 4,0 5 6 7 8 9,ACK0收到,分组4 发送,1 2 3 4,0 5 6 7 8 9,分组0 收到,交付,ACK0发送,2 3 4 5,0 1 6 7 8 9,ACK1收到,分组5 发送,2 3 4 5,0 1 6 7 8 9,分组2 超时,重发分组2,2 3 4 5,0 1 6 7 8 9,ACK3收到,无分组可发,2 3 4 5,0 1 6 7 8 9,分组1 收到,交付,ACK1发送,2 3 4 5,0 1 6 7 8 9,分组3 收到,缓存,ACK3发送,2 3 4 5,0 1 6 7 8 9,分组4 收到,缓存,ACK4发送,2

35、3 4 5,0 1 6 7 8 9,分组5 收到,缓存,ACK5发送,6 7 8 9,0 1 2 3 4 5,分组2收到,分组2、3、4、5交付,ACK2发送,丢失,2022年12月26日,56,3.4 可靠数据传输的原理,结论:接收方窗口2k-1,2022年12月26日,57,3.5 面向连接的传输 : TCP,TCP的特点面向连接TCP连接仅存于端系统,中间路由器对此毫不知情全双工服务可双向同时传输数据点对点连接仅存在于两个端系统之间,无第三者“插足”三次握手建立连接,协商参数可靠的字节流最大报文段长MSS,2022年12月26日,58,3.5 面向连接的传输 : TCP,TCP连接,20

36、22年12月26日,59,3.5 面向连接的传输 : TCP,TCP报文段首部结构,2022年12月26日,60,3.5 面向连接的传输 : TCP,源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。,2022年12月26日,61,3.5 面向连接的传输 : TCP,序号字段占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节在整个报文字节流中的序号。,2022年12月26日,62,3.5 面向连接的传输 : TCP,确认号字段占 4 字节,是期望收到对方的下一个

37、报文段的数据的第一个字节的序号。,2022年12月26日,63,3.5 面向连接的传输 : TCP,TCP序列号和确认序列号,主机 A,主机 B,Seq=42, ACK=79, data = C,Seq=79, ACK=43, data = C,Seq=43, ACK=80,用户键入C,主机确认收到回显的 C,主机确认收到C,回显C,简单的Telnet例子,2022年12月26日,64,3.5 面向连接的传输 : TCP,首部长度占 4 bit,它指示以32bit为单位的TCP首部长度。,2022年12月26日,65,3.5 面向连接的传输 : TCP,保留字段占 6 bit,保留为今后使用,

38、但目前应置为 0。,2022年12月26日,66,3.5 面向连接的传输 : TCP,紧急比特 URG 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送。(一般不使用),2022年12月26日,67,3.5 面向连接的传输 : TCP,确认比特 ACK 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。,2022年12月26日,68,3.5 面向连接的传输 : TCP,推送比特 PSH (PuSH) 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。,2022年12月26日,

39、69,3.5 面向连接的传输 : TCP,复位比特 RST (ReSeT) 当 RST 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。,2022年12月26日,70,3.5 面向连接的传输 : TCP,同步比特 SYN 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。,2022年12月26日,71,3.5 面向连接的传输 : TCP,终止比特 FIN (FINal) 用来释放一个连接。当FIN 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。,2022年12月26日,72,3.5 面向连接的传输

40、: TCP,窗口字段 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。,2022年12月26日,73,3.5 面向连接的传输 : TCP,检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部(源IP地址(4字节)、目的IP地址(4字节) 、0 (1字节) 、6 (TCP协议号,1字节) 、TCP长度(2字节) )。,2022年12月26日,74,3.5 面向连接的传输 : TCP,紧急指针字段 占 1

41、6 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。,2022年12月26日,75,3.5 面向连接的传输 : TCP,选项字段 长度可变。定义了最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 此外还定义了时间戳选项。,MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。,2022年12月26日,76,3.5 面向连接的传输 : TCP,填充字段 这是为了使整个首部长度是 4 字节的整数倍。,2022年12月

42、26日,77,3.5 面向连接的传输 : TCP,TCP超时的设置如何设置TCP的超时应该大于RTT但 RTT是变化的太短:造成不必要的重传太长:对丢包反应太慢,2022年12月26日,78,3.5 面向连接的传输 : TCP,如何估算 RTT样本RTT(SampleRTT): 对报文段从发出到收到该报文段的确认之间的时间进行测量忽略重传样本RTT会有波动,要使得估算RTT更平滑,需要将最近几次的测量进行平均,而非仅仅采用最近一次的SampleRTT,参考值: = 0.125,2022年12月26日,79,3.5 面向连接的传输 : TCP,RTT估计样本与RTT估计,2022年12月26日,

43、80,3.5 面向连接的传输 : TCP,考虑RTT的波动,估计EstimatedRTT与SampleRTT的偏差,DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT| (参考值, = 0.25),TimeoutInterval = EstimatedRTT + 4*DevRTT,TCP中的超时间隔为,2022年12月26日,81,3.5 面向连接的传输 : TCP,可靠的TCP数据传输IP协议是不可靠的TCP采用了3.4节阐述的数据可靠传输的方法特别之处TCP编号采用按字节编号,而非按报文段编号TCP仅采用唯一的超时定时器,2022年12月26日,

44、82,3.5 面向连接的传输 : TCP,NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) switch(event) event: data received from application above create TCP segment with sequence number NextSeqNum if (timer currently not running) start timer pass segment to IP NextSeqNum = NextSeqNum + length(data)

45、event: timer timeout retransmit not-yet-acknowledged segment with smallest sequence number start timer event: ACK received, with ACK field value of y if (y SendBase) SendBase = y if (there are currently not-yet-acknowledged segments) start timer /* end of loop forever */,从应用程序接收数据将数据封装入报文段中,每个报文段都包含

46、一个序号序号是该报文段第一个数据字节的字节流编号启动定时器超时间隔: TimeOutInterval,超时重传认为超时的报文段重启定时器,收到ACK如果是对以前的未确认报文段的确认更新SendBase如果当前有未被确认的报文段,TCP还要重启定时器,2022年12月26日,83,3.5 面向连接的传输 : TCP,TCP的几种重传情况,由于ACK丢失而重传,时间,由于超时过短而重传,只重传第一个,2022年12月26日,84,3.5 面向连接的传输 : TCP,2022年12月26日,85,3.5 面向连接的传输 : TCP,超时间隔加倍每一次TCP重传均将下一次超时间隔设为先前值的两倍超时间

47、隔由EstimatedRTT和DevRTT决定收到上层应用的数据收到对未确认数据的ACK,2022年12月26日,86,3.5 面向连接的传输 : TCP,快速重传超时周期往往太长增加重发丢失分组的延时通过重复的ACK检测丢失报文段发送方常要连续发送大量报文段如果一个报文段丢失,会引起很多连续的重复ACK.如果发送收到一个数据的3个ACK,它会认为确认数据之后的报文段丢失快速重传: 在超时到来之前重传报文段,2022年12月26日,87,3.5 面向连接的传输 : TCP,产生TCP ACK的建议(RFC1122、2581),接收方事件所期望序号的报文段按序到达。所有在期望序号及其以前的数据都

48、已经被确认有期望序号的报文段按序到达。另一个按序报文段等待发送ACK比期望序号大的失序报文段到达,检测出数据流中的间隔能部分或完全填充接收数据间隔的报文段到达,TCP接收方 动作延迟的ACK。对另一个按序报文段的到达最多等待500ms。如果下一个按序报文段在这个时间间隔内没有到达,则发送一个ACK立即发送单个累积ACK,以确认两个按序报文段 立即发送冗余ACK,指明下一个期待字节的序号(也就是间隔的低端字节序号)倘若该报文段起始于间隔的低端,则立即发送ACK,2022年12月26日,88,3.5 面向连接的传输 : TCP,快速重传的算法,event: ACK received, with A

49、CK field value of y if (y SendBase) SendBase = y if (there are currently not-yet-acknowledged segments) start timer else increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) resend segment with sequence number y ,重复的ACK报文,快速重传,2022年12月26日,89,3.5 面向连接的传输 : TCP,TCP流量控制背

50、景TCP接收方有一个缓存,所有上交的数据全部缓存在里面应用进程从缓冲区中读取数据可能很慢目标发送方不会由于传得太多太快而使得接收方缓存溢出手段接收方在反馈时,将缓冲区剩余空间的大小填充在报文段首部的窗口字段中,通知发送方,2022年12月26日,90,3.5 面向连接的传输 : TCP,窗口值的计算,LastByteRcvd LastByteRead RcvBuffer,接收方:,RcvWindows = RcvBuffer LastByteRcvd - LastByteRead,发送方:,LastByteSent LastByteAcked RcvWindow,2022年12月26日,91,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号