第3章 运输层.ppt

上传人:s****8 文档编号:69239873 上传时间:2022-12-31 格式:PPT 页数:163 大小:3.63MB
返回 下载 相关 举报
第3章 运输层.ppt_第1页
第1页 / 共163页
第3章 运输层.ppt_第2页
第2页 / 共163页
点击查看更多>>
资源描述

《第3章 运输层.ppt》由会员分享,可在线阅读,更多相关《第3章 运输层.ppt(163页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、层和网络层的区别运输层和网络层的区别q网络层:不同主机之间的逻辑通信q运输层:应用进程之间的逻辑通信类似于家庭间通信:12个孩子要与另一个家庭的12个孩子相互通信n进程=孩子们n进程间报文=信封中的信笺n主机=家庭的房子n运输协议=张三 和 李四n网络层协议=邮局提供的服务第三章 运输层2022年12月31日53.1 概述和运输层服务n上例中的几种特殊场景上例中的几种特殊场景q张三和李四生病了,无法工作,换成张五和李六n不同的运输层协议可能提供不一样的服务q邮局不承诺信件送抵的最长时间n运输层协议能够提供的服务受到底层网络协议的服务模型的限制q邮局不承诺平信一定安全可靠的送达,可能在路上丢失,

3、但张三、李四可在较长时间内没有受到对方的回信时,再次誊写信件,寄出n在网络层不提供某些服务的情况下,运输层自己提供第三章 运输层2022年12月31日63.1 概述和运输层服务n因特网上的运输层协议因特网上的运输层协议q用户数据报协议UDP(数据报)q传输控制协议TCP(报文段)q所提供的服务n进程间数据交付详见3.2节n差错检测详见3.3节和第五章n可靠的数据传输详见3.4节和3.5节n拥塞控制详见3.6节和3.7节第三章 运输层2022年12月31日73.2 多路复用与多路分解应用层运输层网络层TCP 报文段UDP用户数据报应用进程TCP 复用IP 复用UDP 复用TCP 报文段UDP用户

4、数据报 应用进程端口端口TCP 分用UDP 分用IP 分用发送方接收方第三章 运输层2022年12月31日83.2 多路复用与多路分解n端口端口q端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程(或者线程)q从这个意义上讲,端口是用来标志应用层的进程(或者线程)q端口用一个 16 bit 端口号进行标志第三章 运输层2022年12月31日93.2 多路复用与多路分解n套接字套接字qTCP 使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将 TCP 连接的端点称为套接字(socket)。q套

5、接字和端口、IP 地址的关系是:IP 地址131.6.23.13 端口号1500 131.6.23.13,1500套接字(socket)第三章 运输层2022年12月31日103.2 多路复用与多路分解n报文段(数据报)的投送报文段(数据报)的投送q主机收到IP包n每个数据包都有源IP地址和目的IP地址n每个数据包都携带一个传输层的数据报文段n每个数据报文段都有源、目的端口号q主机根据“IP地址端口号”将报文段定向到相应的套接字源端口#目的端口#32 位应用数据(报文)其他首部字段TCP/UDP 报文段格式第三章 运输层n无连接的复用与分用无连接的复用与分用q根据端口号创建socket:Dat

6、agramSocket mySocket1=new DatagramSocket(99111);DatagramSocket mySocket2=new DatagramSocket(99222);qUDP socket 由一个二元组来标识:(目的目的IP地址地址,目的端口号目的端口号)q当主机收到UDP报文段时:n检查报文段中的目的端口号n将UDP报文段定向到相应的套接字q具有不同源IP地址和/或源端口的IP包定向到相同的套接字3.2 多路复用与多路分解第三章 运输层无连接的复用与分用(续)DatagramSocket serverSocket=new DatagramSocket(6428

7、);客户IP:BP2客户 IP:AP1P1P3服务器IP:CSP:6428DP:9157SP:9157DP:6428SP:6428DP:5775SP:5775DP:6428SP 提供提供“返回地址返回地址”(完整的返回地址是源(完整的返回地址是源IP地址和源端口号)地址和源端口号)第三章 运输层2022年12月31日133.2 多路复用与多路分解n面向连接的复用和分用面向连接的复用和分用qTCP 套接字由一个四元组来标识(源IP地址,源端口号,目的IP地址,目的端口号)q接收方主机根据这四个值将报文段定向到相应的套接字q服务器主机同时支持多个并发的TCP套接字:n每一个套接字都由其四元组来标识

8、qWeb服务器为每一个客户连接都产生不同的套接字n非持久HTTP对每一个请求都建立不同的套接字(会影响性能)第三章 运输层2022年12月31日143.2 多路复用与多路分解n举例:多线程的举例:多线程的WEB服务器服务器P1客户 IP:A客户IP:BP2服务器IP:CP4P3SP:9157DP:80S-IP:AD-IP:CSP:9157DP:80D-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B第三章 运输层2022年12月31日153.3 无连接传输:UDPn一个最简单的运输层协议必须提供一个最简单的运输层协议必须提供q多路复用/多路分解服务q差错检查实际上这就是实际

9、上这就是UDP所提供的功能(所提供的功能(RFC 768)第三章 运输层2022年12月31日163.3 无连接传输:UDPnUDP处理数据的流程处理数据的流程q发送方n从应用进程得到数据n附加上为多路复用/多路分解所需的源和目的端口号及差错检测信息,形成报文段(数据报)n递交给网络层,尽力而为的交付给接收主机q接收方n从网络层接收报文段(数据报)n进行差错检测n根据目的端口号,将数据交付给相应的应用进程UDP通信事先无需握手,是通信事先无需握手,是无连接的无连接的第三章 运输层2022年12月31日173.3 无连接传输:UDPnUDP的优势的优势q无需建立连接建立连接会增加时延q简单发送方

10、和接收方无需维护连接状态q段首部开销小TCP:20Byte vs UDP:8Byteq无拥塞控制UDP 可按需要随时发送第三章 运输层2022年12月31日183.3 无连接传输:UDPn部分采用部分采用UDP协议的应用协议的应用q远程文件服务器(NFS)q流式多媒体q因特网电话q网络管理(SNMP)q选路协议(RIP)q域名解析(DNS)第三章 运输层2022年12月31日193.3 无连接传输:UDPnUDP大量应用可能导致的严重后果大量应用可能导致的严重后果q路由器中大量的分组溢出q显著减小TCP通信的速率,甚至挤垮TCP会话n使用使用UDP的可靠数据传输的可靠数据传输q在应用层实现数据

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

12、入UDP校验和字段中q接收方n计算接收到的报文段的校验和n检查计算结果是否与收到报文段的校验和字段中的值相同q不同 检测到错误q相同 没有检测到错误(但仍可能存在错误)第三章 运输层2022年12月31日223.3 无连接传输:UDPn例子例子:将两个将两个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 1 0 0 0

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

14、过不可靠通道传给接收方rdt_rcv():当分组到达接收方时调用deliver_data():由 rdt 调用,将数据交付上层第三章 运输层2022年12月31日263.4 可靠数据传输的原理我们将要:n逐步地开发可靠数据传输协议(rdt)的发送方和接收方n只考虑单向数据传输(unidirectional data transfer)的情况q但控制信息是双向传输的!n用有限状态机(FSM)来描述发送方和接收方状态1状态2事件引起状态变迁状态转换过程中的动作状态:由事件引起一个状态到另一个状态的变迁。事件动作第三章 运输层2022年12月31日273.4 可靠数据传输的原理n可靠信道上的可靠传输

15、可靠信道上的可靠传输 rdt 1.0q底层信道完全可靠n不会产生比特错误n不会丢失分组q分别为发送方和接收方建立FSMn发送方将数据发送给底层信道n接收方从底层信道接收数据packet=make_pkt(data)udt_send(packet)rdt_send(data)extract(packet,data)deliver_data(data)等待来自下层的调用rdt_rcv(packet)发送方发送方接收方接收方等待来自上层的调用第三章 运输层Rdt1.0:时序图发送方接收方DATADATADATADATA送主机送主机送主机送主机时间第三章 运输层2022年12月31日293.4 可靠数

16、据传输的原理n信道可能导致比特出现差错时信道可能导致比特出现差错时rdt 2.xq第一个版本rdt 2.0n假设q分组比特可能受损q所有传输的分组都将按序被接收,不会丢失n处理机制q如何判断分组受损差错检测q如何通知发送方分组是否受损接收方反馈(ACK和NAK)q在得知分组受损后,发送方如何处理出错重传第三章 运输层2022年12月31日303.4 可靠数据传输的原理nrdt 2.0的有限状态机FSM等待来自上层的调用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_s

17、end(ACK)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&corrupt(rcvpkt)等待 ACK 或 NAK等待来自下层的调用发送方发送方接收方接收方rdt_send(data)L第三章 运输层2022年12月31日313.4 可靠数据传输的原理等待来自上层的调用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extr

18、act(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&corrupt(rcvpkt)等待 ACK 或 NAK等待来自下层的调用rdt_send(data)L发送方发送方接收方接收方rdt2.0:无差错的情况无差错的情况第三章 运输层2022年12月31日323.4 可靠数据传输的原理等

19、待来自上层的调用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&corrupt(rcvpkt)等待 ACK 或 NAK等待来自下层的调用rdt_send(data)L发送方发送方接

20、收方接收方rdt2.0:有差错的情况有差错的情况第三章 运输层2022年12月31日333.4 可靠数据传输的原理n如何实现重传q使用缓冲区缓存已发出但未收到反馈的报文段n新的问题q需要多大的缓冲区呢?n接收方和发送方各一个报文段大小的缓冲区即可第三章 运输层Rdt2.0:时序图发送方接收方DATA送主机ACKDATA送主机ACK(a)正常情况发送方接收方DATANAKDATA送主机ACK(b)数据出错重传出错时间第三章 运输层rdt2.0 的致命缺陷的致命缺陷!如果ACK/NAK受损会出现什么情况?n发送方不知道接收方发生了什么!n如果只考虑重传:可能会出现大量重复分组。n接收方无法知道所收

21、到的分组是新的还是一次重传。发送方发出一个分组,然后发送方发出一个分组,然后等待接收方的应答等待接收方的应答停止等待停止等待(stop-and-wait)3.4 可靠数据传输的原理第三章 运输层2022年12月31日363.4 可靠数据传输的原理q第二个版本rdt 2.1n问题的引入qACK和NAK分组可能受损,而rdt 2.0没有考虑该情况n解决问题的几种思路q在人类的对话中,如果听不清楚对方所述,会回问一句“刚才你说什么来着?”但如果这句话仍然没有听清楚呢?怎么办?双方对着问“刚才你说什么来着?”这就可能进入了一个难以解困的死循环q增加足够的检查和比特,使发送方不仅可以检查比特差错,还可以

22、恢复比特差错q收到出错的反馈时,不管三七二十一,直接重发当前数据分组,但这就需要对数据分组进行编号,以示识别第三章 运输层rdt2.1:在具有比特差错信道上的有NAK的可靠数据传输协议n对重复分组的处理:q发送方对每一个分组增加序号(equence number)q发送方收到受损ACK/NAK时,重传当前数据分组q接收方丢弃重复分组(不向上递交)3.4 可靠数据传输的原理第三章 运输层2022年12月31日383.4 可靠数据传输的原理nrdt 2.1的发送方等待来自上层的调用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(d

23、ata)等待 ACK 或 NAK 0udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isNAK(rcvpkt)sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isNAK(rcvpkt)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt)

24、等待来自上层的调用1等待ACK 或 NAK 1LL第三章 运输层2022年12月31日393.4 可靠数据传输的原理nrdt 2.1的接收方等待来自下层的0rdt_rcv(rcvpkt)¬ corrupt(rcvpkt)&has_seq0(rcvpkt)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)等待来自下层的1rdt_rcv(rcvpkt)¬corrupt(rcv

25、pkt)&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)¬ corrupt(rcvpkt)&has_seq1(rcvpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(snd

26、pkt)sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)第三章 运输层rdt2.1 时序图发送方接收方DATA0送主机ACKDATA1送主机ACK(a)正常情况发送方接收方DATA0NAKDATA0送主机ACK(b)数据出错重传出错发送方接收方DATA0ACKDATA0送主机ACK(c)ACK/NAK出错重传DATA1重复ACK送主机出错第三章 运输层rdt2.1:讨论发送方:n分组中增加序号n两个序号(0,1)是否足够,为什么?n如果收到乱序的ACK/NAK必须进行检查

27、n状态数是以前的两倍q状态必须反映出当前正在发送的分组的序号是0还是1接收方:n如果收到重复的分组必须检查q状态必须反映出当前希望接收的分组的序号是0还是1n注意:接收方不知道它最后发出的ACK/NAK是否被发送方正确接收第三章 运输层2022年12月31日423.4 可靠数据传输的原理q第三个版本rdt 2.2n针对rdt 2.1的改进q只使用ACKq取消NAK,接收方对最后一个正确收到的分组发送 ACK接收方必须明确指出被确认的分组的序号q发送方收到的重复的ACK将按照NAK来进行处理重传正确的分组第三章 运输层2022年12月31日433.4 可靠数据传输的原理等待来自上层的调用0snd

28、pkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isACK(rcvpkt,1)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt,0)等待ACK0发送方部分发送方部分FSM等待来自下层的0rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make

29、_pkt(ACK1,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|has_seq1(rcvpkt)udt_send(sndpkt)接收方部分接收方部分 FSML第三章 运输层rdt2.2 时序图发送方接收方DATA0ACK0DATA0ACK0重传DATA1重复ACK1送主机出错发送方接收方DATA0ACK0DATA1送主机ACK0(b)数据出错重传出错发送方接收方DATA0送主机ACK0DATA1送主机ACK1(a)正常情况送主机DATA1ACK1(c)ACK出错第三章 运输层2022年12月31日453.4 可靠数据传输的原理

30、n信道不但出错,而且丢包时信道不但出错,而且丢包时rdt 3.0q假设n底层信道不但可能出现比特差错,而且可能会丢包q需解决的问题n怎样检测丢包n发生丢包后,如何处理q检查和技术、序号、ACK、重传如何判断数据报丢失了呢?如何判断数据报丢失了呢?最简单的方法就是:最简单的方法就是:耐心的等待耐心的等待!第三章 运输层rdt3.0:在具有比特差错的丢包信道上的可靠数据传输解决方法:发送方对ACK等待“适当的”时间n如果在这个时间内没有收到ACK则重传n如果分组或ACK仅仅是延迟到达(而非丢失):q重传将造成重复,但序号可以解决这个问题q接收方必须指出确认的分组序号n需要倒计时的计时器第三章 运输

31、层2022年12月31日473.4 可靠数据传输的原理sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)等待ACK0rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isACK(rcvpkt,1)等待来自上层的调用1sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt,0)rdt_rcv(rcvpk

32、t)&(corrupt(rcvpkt)|isACK(rcvpkt,0)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt,1)stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待来自上层的调用0等待 ACK1Lrdt_rcv(rcvpkt)LLLRdt 3.0的发送方的发送方第三章 运输层2022年12月31日483.4 可靠数据传输的原理qrdt 3.0举例下续下续第三章 运输层2022年12

33、月31日493.4 可靠数据传输的原理第三章 运输层2022年12月31日503.4 可靠数据传输的原理nrdt 3.0的性能分析的性能分析q1Gbps 的链路,15ms 的端到端延迟,分组大小为1KB Ttransmit=8kb/pkt109 b/sec=8 sL(比特为单位的分组大小)R(传输速率,bps)=n每30ms内只能发送1KB:1 Gbps 的链路只有33kB/sec 的吞吐量n网络协议限制了物理资源的利用率!第三章 运输层2022年12月31日513.4 可靠数据传输的原理qrdt 3.0性能低下的原因首个分组的第首个分组的第1个比特被传输个比特被传输,t=0发送方发送方接收方

34、接收方RTT 首个分组的最后首个分组的最后1比特被传输比特被传输,t=L/R首个分组的第首个分组的第1个比特到达个比特到达首个分组的最后首个分组的最后1个比特到达个比特到达,发送发送ACKACK 到达到达,发送下一个分组发送下一个分组,t=RTT+L/R第三章 运输层2022年12月31日523.4 可靠数据传输的原理q提高性能的一种可行方法:流水线技术n允许发送方发送多个分组而无需等待确认q必须增大序号范围q协议的发送方和接收方必须对分组进行缓存第三章 运输层2022年12月31日533.4 可靠数据传输的原理n流水线技术对性能提升的原理图发送方发送方接收方接收方RTT 利用率提高3倍!首个

35、分组的第首个分组的第1个比特被传输个比特被传输,t=0首个分组的最后首个分组的最后1比特被传输比特被传输,t=L/RACK 到达到达,发送下一个分组发送下一个分组,t=RTT+L/R首个分组的第首个分组的第1个比特到达个比特到达首个分组的最后首个分组的最后1个比特到达个比特到达,发送发送ACK第第2个分组的最后个分组的最后1个比特到达个比特到达,发送发送ACK第第3个分组的最后个分组的最后1个比特到达个比特到达,发送发送ACK第三章 运输层2022年12月31日543.4 可靠数据传输的原理n流水线技术工作原理q分组首部用k-比特字段表示序号q已被传输但还未确认的分组的许可序号范围可以看作是一

36、个在序号范围内大小为N的“窗口(window)”第三章 运输层2022年12月31日553.4 可靠数据传输的原理q问题:当流水线技术中丢失一个分组后,如何进行重传nGo-Back-N(GBN)协议:其后分组全部重传n选择重传(SR)协议:仅重传该分组第三章 运输层2022年12月31日563.4 可靠数据传输的原理nGo-Back-N协议协议等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1)timeoutrdt_send(data)if(nextseqnum 接收方无缓存!q重

37、发按序到达的最高序号分组的ACK第三章 运输层2022年12月31日603.4 可靠数据传输的原理nGo-Back-N的滑动窗口大小q发送端 2k-1q接收端 1第三章 运输层2022年12月31日613.4 可靠数据传输的原理n选择重传(选择重传(SR)协议)协议发送基序号发送基序号下一个序下一个序号号窗口长度窗口长度N已被确已被确认认发送,还发送,还未确认未确认可用,还可用,还未发送未发送不可用不可用不可用不可用失序失序(已缓存已缓存)但未被确认但未被确认可接收可接收(窗口内窗口内)期待,还未收期待,还未收到到窗口长度窗口长度N接收基序号接收基序号(a)发送方看到的序号发送方看到的序号(b

38、)接收方看到的序号接收方看到的序号第三章 运输层2022年12月31日623.4 可靠数据传输的原理n选择重传(选择重传(SR)协议)协议从上层收到数据:n如果下一个可用于该分组的序号在窗口内,则将数据打包并发送超时(n):n重传分组n,重置定时器收到确认(n)在 sendbase,sendbase+N范围内n标记分组 n 为已接收n如果n是发送窗口基序号sendbase,则将窗口基序号前推到下一个未确认序号发送方发送方第三章 运输层2022年12月31日633.4 可靠数据传输的原理n选择重传(选择重传(SR)协议)协议分组序号n在rcvbase,rcvbase+N-1范围内n发送n的确认A

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

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

41、1 2 3 4 5 分组2收到,分组2、3、4、5交付,ACK2发送丢失丢失第三章 运输层2022年12月31日653.4 可靠数据传输的原理0 1 2 3 0 1 20 1 2 3 0 1 20 1 2 3 0 1 20 1 2 3 0 1 20 1 2 3 0 1 20 1 2 3 0 1 2分组分组0分组分组1分组分组20 1 2 3 0 1 2超时重传分组超时重传分组0分组分组0接收具有接收具有序号序号0的分组的分组ACK0ACK1ACK2(a)发送方窗口发送方窗口接收方窗口接收方窗口0 1 2 3 0 1 20 1 2 3 0 1 20 1 2 3 0 1 20 1 2 3 0 1

42、20 1 2 3 0 1 20 1 2 3 0 1 2分组分组0分组分组1分组分组20 1 2 3 0 1 2分组分组0接收具有接收具有序号序号0的分组的分组ACK0ACK1ACK2(b)发送方窗口发送方窗口接收方窗口接收方窗口0 1 2 3 0 1 2分组分组3结论:接收方窗口2k-1第三章 运输层2022年12月31日663.5 面向连接的传输:TCPnTCP的特点的特点q面向连接nTCP连接仅存于端系统,中间路由器对此毫不知情q全双工服务n可双向同时传输数据q点对点连接n仅存在于两个端系统之间,无第三者“插足”q三次握手n建立连接,协商参数q可靠的字节流n最大报文段长MSS第三章 运输层

43、2022年12月31日673.5 面向连接的传输:TCPnTCP连接连接端口发送 TCP 报文段TCPTCP接收缓存发送缓存报文段报文段报文段端口发送端接收端向发送缓存写入数据块从接收缓存读取数据块应用进程应用进程第三章 运输层2022年12月31日683.5 面向连接的传输:TCPnTCP报文段首部结构报文段首部结构20 字节的固定首部TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充第三章 运输层2022年12月31日693.5 面向连接

44、的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。第三章 运输层2022年12月31日703.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填

45、 充序号字段占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节在整个报文字节流中的序号。第三章 运输层2022年12月31日713.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充确认号字段占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。第三章 运输层2022年12月31日723.5 面向连接的传输:TCPnTCP序列号和确

46、认序列号序列号和确认序列号主机 A主机 BSeq=42,ACK=79,data=CSeq=79,ACK=43,data=CSeq=43,ACK=80用户键入用户键入C主机确认收到主机确认收到回显的回显的 C主机确认收到主机确认收到C,回显回显C时间简单的Telnet例子第三章 运输层2022年12月31日733.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充首部长度占 4 bit,它指示以32bit为单位的TCP

47、首部长度。第三章 运输层2022年12月31日743.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充保留字段占 6 bit,保留为今后使用,但目前应置为 0。第三章 运输层2022年12月31日753.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16

48、24 31填 充紧急比特 URG 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送。(一般不使用)第三章 运输层2022年12月31日763.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充确认比特 ACK 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。第三章 运输层2022年12月31日773.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度

49、检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充推送比特 PSH(PuSH)接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。第三章 运输层2022年12月31日783.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充复位比特 RS

50、T(ReSeT)当 RST 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。第三章 运输层2022年12月31日793.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充同步比特 SYN 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。第三章 运输层2022年12月31日803.5 面向连接的传输:TCPTCP首部目 的 端 口首部长度检

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁