欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    [计算机网络:自顶向下方方法](中文版ppt课件)第三章.ppt

    • 资源ID:1465650       资源大小:2.71MB        全文页数:121页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [计算机网络:自顶向下方方法](中文版ppt课件)第三章.ppt

    运输层,1,第3章 运输层Transport Layer,计算机网络:自顶向下方法 (原书第三版)陈鸣译,机械工业出版社,2005年Computer Networking: A Top Down Approach Featuring the Internet, 3rd edition. Jim Kurose, Keith RossAddison-Wesley, July 2004.,运输层,2,第3章:运输层,我们的目的: 理解运输层服务依据的原理:复用/分解可靠数据传输流量控制拥塞控制,学习因特网中的运输层协议:UDP: 无连接传输TCP: 面向连接传输TCP 拥塞控制,运输层,3,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,4,运输服务和协议,在运行不同主机上应用进程之间提供逻辑通信运输协议运行在端系统中发送方:将应用报文划分为段,传向网络层接收方:将段重新装配为报文,传向应用层应用可供使用的运输协议不止一个因特网:TCP和UDP,运输层,5,运输层 vs. 网络层,网络层: 主机间的逻辑通信运输层: 进程间的逻辑通信依赖、强化网络层服务,家庭类比:12个孩子向12个孩子发信进程 = 孩子应用报文= 信封中的信主机 = 家庭运输协议 = Ann和Bill网络层协议= 邮政服务,运输层,6,因特网运输层协议,可靠的、按序的交付 (TCP)拥塞控制流量控制连接建立不可靠、不按序交付: UDP“尽力而为”IP的不提供不必要服务的扩展不可用的服务: 时延保证带宽保证,运输层,7,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,8,Internet 层的复用与分解,运输层,9,复用/分解,= 进程,= 套接字,将接收到的段交付给正确的套接字,从多个套接字收集数据,用首部封装数据(以后用于分解 ),运输层,10,分解工作过程,主机接收IP数据报每个数据报有源无连接, 目的地无连接每个数据报承载1个运输层段每个段具有源、目的端口号 (回想: 对特定应用程序的周知端口号)主机使用IP地址 &端口号将段定向到适当的套接字,源端口 #,目的端口 #,32 bits,应用数据(报文),其他首部字段,TCP/UDP 段格式,运输层,11,无连接分解,生成具有端口号的套接字:DatagramSocket mySocket1 = new DatagramSocket(99111);DatagramSocket mySocket2 = new DatagramSocket(99222);UDP套接字由二元组标识 :(目的地IP地址, 目的地端口号),当主机接收UDP段时:在段中检查目的地端口号将UDP段定向到具有该端口号的套接字具有不同源IP地址和/或源端口号的IP数据报 定向到相同的套接字,运输层,12,无连接分解(续),DatagramSocket serverSocket = new DatagramSocket(6428);,SP提供了“返回地址”,运输层,13,面向连接分解,TCP套接字由四元组标识: 源IP地址源端口号目的IP地址目的端口号接收主机使用这四个值来将段定向到适当的套接字,服务器主机可能支持许多并行的TCP套接字:每个套接字由其自己的四元组标识Web服务器对每个连接的客户机具有不同的套接字非持久HTTP将为每个请求具有不同的套接字,运输层,14,面向连接分解 (续),客户机IP:B,服务器IP: C,SP: 9157,DP: 80,D-IP:C,S-IP: A,D-IP:C,S-IP: B,D-IP:C,S-IP: B,运输层,15,面向连接分解: 多线程Web服务器,客户机IP:B,服务器IP: C,SP: 9157,DP: 80,P4,D-IP:C,S-IP: A,D-IP:C,S-IP: B,D-IP:C,S-IP: B,运输层,16,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,17,UDP: 用户数据报协议 RFC 768,“没有不必要的,” “基本要素” 互联网传输协议“尽力而为”服务,UDP段可能:丢包对应用程序交付失序无连接:在UDP发送方和接收方之间无握手每个UDP段的处理独立于其他段,为何要有 UDP协议?无连接创建(它将增加时延)简单:在发送方、接收方无连接状态段首部小无拥塞控制: UDP能够尽可能快地传输,运输层,18,UDP: 其他,常用于流式多媒体应用丢包容忍速率敏感其他UDP应用DNSSNMP经UDP的可靠传输 : 在应用层增加可靠性应用程序特定的差错恢复!,源端口#,目的端口#,32 bits,应用数据(报文),UDP 段格式,长度,检查和,UDP段的长度,包括首部,以字节计,运输层,19,UDP检查和,发送方:将段内容处理为16比特整数序列检查和: 段内容的加法(反码和)发送方将检查和放入UDP检查和字段,接收方:计算接收的段的检查和核对计算的检查和是否等于检查和字段的值:NO 检测到差错YES 无差错检测到。虽然如此,还可能有差错吗?详情见后,目的: 在传输的段中检测“差错” (如比特翻转),运输层,20,互联网检查和例子,注意当数字作加法时,最高位进比特位的进位需要加到结果中例子: 两个16-bit整数相加,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 0 1 1,回卷,和,检查和,运输层,21,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,22,可靠数据传输的原则,在应用层、运输层、数据链路层的重要性重要的网络主题中的最重要的10个之一!,不可靠信道的特点决定了可靠数据传输 协议 (rdt) 的复杂性,运输层,23,可靠数据传输: 基本概念,发送侧,接收侧,运输层,24,可靠数据传输: 基本概念,我们将:增强研发发送方,可靠数据传输协议 (rdt) 的接收方侧仅考虑单向数据传输但控制信息将在两个方向流动!使用有限状态机 (FSM)来定义发送方和接收方,引起状态变迁的事件,状态变迁所采取的行动,状态: 当位于这个“状态时”,下个状态惟一地由下个事件决定,运输层,25,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,26,Rdt1.0: 经可靠信道的可靠传输,底层信道非常可靠无比特差错无分组丢失装发送方、接收方的单独FSM:发送方将数据发向底层信道接收方从底层信道读取数据,Wait for call from above,packet = make_pkt(data)udt_send(packet),rdt_send(data),extract (packet,data)deliver_data(data),Wait for call from below,rdt_rcv(packet),发送方,接收方,运输层,27,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,28,Rdt2.0: 具有比特差错的信道,underlying channel may flip bits in packetchecksum to detect bit errorsthe question: how to recover from errors:acknowledgements (ACKs): receiver explicitly tells sender that pkt received OKnegative acknowledgements (NAKs): receiver explicitly tells sender that pkt had errorssender retransmits pkt on receipt of NAKnew mechanisms in rdt2.0 (beyond rdt1.0):error detectionreceiver feedback: control msgs (ACK,NAK) rcvr-sender,运输层,29,rdt2.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),发送方,接收方,rdt_send(data),L,运输层,30,rdt2.0: 无差错时的操作,等待来自上面的调用,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_send(data),L,运输层,31,rdt2.0: 有差错时的情况,等待来自上面的调用,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_send(data),L,运输层,32,rdt2.0有重大的缺陷!,如果ACK/NAK受损,将会出现何种情况?发送方不知道在接收方会发生什么情况!不能只是重传:可能导致冗余,处理冗余: 发送方对每个分组增加序列号如果ACK/NAK受损,发送方重传当前的分组接收方丢弃(不再向上交付)冗余分组,发送方发送一个分组,然后等待接收方响应,运输层,33,rdt2.1: 发送方, 处理受损的ACK/NAK,等待来自上面的调用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, data, 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,运输层,34,rdt2.1: 接收方,处理受损的ACK/NAK,sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt),rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & 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(sndpkt),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),运输层,35,rdt2.1: 讨论,发送方:序号seq # 加入分组中两个序号seq. #s (0,1) 将够用. ( 为什么?)必须检查是否收到的ACK/NAK受损 状态增加一倍状态必须“记住”是否“当前的”分组具有0或1序号,接收方:必须检查是否接收到的分组是冗余的状态指示是否0或1是所期待的分组序号seq #注意: 接收方不能知道是否它的最后的ACK/NAK在发送方已经接收OK,运输层,36,rdt2.2: 一种无NAK的协议,与rdt2.1一样的功能,仅使用ACK代替NAK,接收方对最后正确接收的分组发送ACK接收方必须明确地包括被确认分组的序号在发送方冗余的ACK导致如同NAK相同的动作:重传当前分组,运输层,37,rdt2.2: 发送方, 接收方片段,sndpkt = 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) & 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),接收方FSM片段,L,运输层,38,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,39,rdt3.0: 具有差错和丢包的信道,新假设: 下面的信道也能丢失分组(数据或ACK)检查和、序号、重传将是有帮助的,但不充分,方法: 发送方等待ACK一段“合理的”时间如在这段时间没有收到ACK则重传如果分组(或ACK)只是延迟(没有丢失):重传将是冗余的,但序号的使用已经处理了该情况接收方必须定义被确认的分组序号需要倒计时定时器,运输层,40,rdt3.0发送方,sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_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(rcvpkt) & 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,运输层,41,rdt3.0 运行情况,无丢包时的运行,分组丢失,发送方,发送方,接收方,接收方,运输层,42,rdt3.0运行情况,ACK丢失,过早超时,发送方,发送方,接收方,接收方,运输层,43,rdt3.0的性能,rdt3.0能够工作,但性能不太好例子: 1 Gbps链路, 15 ms端到端传播时延, 1KB分组:,T,transmit,=,8kb/pkt,10*9 b/sec,= 8 microsec,U sender: 利用率 发送方用于发送时间的比率每30 msec 1KB 分组 - 经1 Gbps 链路有33kB/sec 吞吐量网络协议限制了物理资源的使用!,L (packet length in bits),R (transmission rate, bps),=,运输层,44,rdt3.0: 停等协议的运行,传输分组的第一个比特, t = 0,发送方,接收方,RTT,传输分组的最后一个比特, t = L / R,分组第一个比特到达,传输最后一个比特到达,发送ACK,ACK 到达,发送下一个分组, t = RTT + L / R,运输层,45,第3章 要点,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,运输层,46,流水线协议,流水线: 发送方允许发送多个、“传输中的”,还没有应答的报文段序号的范围必须增加发送方和/或接收方设有缓冲,流水线协议的两种形式: 回退N帧法(go-Back-N), 选择性重传(S-R),运输层,47,流水线协议: 增加利用率,传输第一个分组比特, t = 0,发送者,接收者,RTT,传输最后一个比特, t = L / R,第一个分组比特到达,分组最后一个比特到达,发送 ACK,ACK 到达, 发送下一个分组, t = RTT + L / R,第二个分组最后比特到达,发送ACK,第三个分组最后比特到达,发送ACK,利用率增加3倍!,运输层,48,Go-Back-N,发送方:在分组首部需要K比特序号,2k=N“窗口”最大为N, 允许N个连续的没有应答分组,ACK(n): 确认所有的(包括序号n)的分组 - “累计ACK”可能收到重复的ACKs (见接收方)对每个传输中的分组的用同一个计时器timeout(n):若超时,重传窗口中的分组n及所有更高序号的分组,运输层,49,GBN: 发送方扩展的 FSM,start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1),超时,rdt_send(data),if (nextseqnum base+N) sndpktnextseqnum = make_pkt(nextseqnum,data,chksum) udt_send(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,运输层,50,GBN: 接收方扩展 FSM,只有ACK: 对发送正确接收的分组总是发送具有最高按序序号的ACK可能产生冗余的ACKs仅仅需要记住期望的序号值(expectedseqnum)对失序的分组: 丢弃 (不缓存) - 没有接收缓冲区!重新确认具有按序的分组,Wait,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(expectedseqnum,ACK,chksum),L,等待,运输层,51,GBN 操作,发送方,接收方,运输层,52,选择性重传(Selective Repeat),GBN改善了信道效率,但仍然有不必要重传问题接收方分别确认所有正确接收的报文段需要缓存分组, 以便最后按序交付给给上层发送方只需要重传没有收到ACK的分组发送方定时器对每个没有确认的分组计时发送窗口N个连续的序号也需要限制已发送但尚未应答分组的序号,运输层,53,选择性重传: 发送方, 接收方窗口,a. 发送方看到的序号,b. 接收方看到的序号,已经确认,可用,还未发送,发送,还未确认,不可用,可接受(窗口内),失序(已缓存)但未被确认 可接受(窗口内),期待,还未收到,不可用,窗口长度N,窗口长度N,运输层,54,选择性重传,上层传来数据 :如果窗口中下一个序号可用, 发送报文段timeout(n):重传分组n, 重启其计时器ACK(n) 在sendbase,sendbase+N:标记分组 n 已经收到如果n 是最小未收到应答的分组,向前滑动窗口base指针到下一个未确认序号,分组n在 rcvbase, rcvbase+N-1发送 ACK(n)失序: 缓存按序: 交付 (也交付所有缓存的按序分组),向前滑动窗口到下一个未收到报文段的序号分组n在rcvbase-N,rcvbase-1ACK(n)其他: 忽略,运输层,55,选择重传的操作,运输层,56,选择重传: 困难的问题,例子:序号: 0, 1, 2, 3窗口长度 = 3接收方:在(a)和(b)两种情况下接收方没有发现差别!在 (a)中不正确地将新的冗余的当为新的,而在(b)中不正确地将新的当作冗余的问题: 序号长度与窗口长度有什么关系?回答:窗口长度小于等于序号空间的一半,运输层,57,可靠数据传输机制及用途总结,运输层,58,第3章 要点,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,运输层,59,TCP概述 RFCs: 793, 1122, 1323, 2018, 2581,全双工数据:同一连接上的双向数据流MSS: 最大报文段长度MTU:最大传输单元面向连接: 在进行数据交换前,初始化发送方与接收方状态,进行握手(交换控制信息),流量控制:发送方不能淹没接收方拥塞控制:抑止发送方速率来防止过分占用网络资源,点到点:一个发送方, 一个接收方连接状态与端系统有关,不为路由器所知 可靠、有序的字节流:没有 “报文边界”流水线:TCP拥塞和流量控制设置滑动窗口协议发送和接收缓冲区,运输层,60,TCP 报文段结构,URG: 紧急数据 (一般不用),ACK: ACK 序号有效,PSH: 立即提交数据(一般不用),RST, SYN, FIN:连接建立(建立和拆连),接收方允许的字节数,对数据字节计数(并非对报文段计数!),因特网检查和(同 UDP一样),运输层,61,TCP序号和确认号,序号:报文段中第1个数据字节在字节流中的位置编号确认号:期望从对方收到下一个字节的序号累计应答问题:接收方如何处理失序报文段?回答:TCP规范没有说明, 由实现者自行选择实现: 抛弃/缓存,主机 A,主机 B,Seq=42, ACK=79, data = C,Seq=79, ACK=43, data = C,Seq=43, ACK=80,用户键入C,主机对接收到的C回显给出确认,主机对收到的C给出确认, 回显 C,简单的telnet情况,捎带确认,运输层,62,TCP往返时延(RTT)的估计与超时,问题: 如何设置TCP 超时值?应大于RTT但RTT是变化的太短: 过早超时不必要的重传太长: 对报文段的丢失响应太慢,问题: 如何估计RTT?SampleRTT: 从发送报文段到接收到ACK的测量时间忽略重传SampleRTT会变化,希望估计的RTT“较平滑”平均最近的测量值,并不仅仅是当前SampleRTT,运输层,63,EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT,指数加权移动平均(Exponential weighted moving average)过去的样本指数级衰减来产生影响典型值: = 0.125,TCP往返时延估计与超时 (续),运输层,64,RTT估计的例子,运输层,65,TCP往返时延估计与超时 (续),设置超时间隔EstimtedRTT 加 “安全余量”EstimatedRTT大变化- 更大的安全余量首先估算EstimatedRTT与SampleRTT之间差值有多大 :,TimeoutInterval = EstimatedRTT + 4*DevRTT,DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT|(典型地, = 0.25),然后估算超时值:,运输层,66,第3章 要点,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,运输层,67,TCP 可靠数据传输,TCP在IP不可靠服务的基础上创建可靠数据传输服务流水线发送报文段累计确认TCP使用单个重传计时器,重传被下列事件触发:超时事件重复ACK先考虑简化的TCP发送方: 忽略重复ACK 忽略流量控制,拥塞控制,运输层,68,TCP 发送方事件,1.从应用层接收数据:根据序号创建报文段序号是报文段中第一个数据字节的数据流编号如果未启动,启动计时器 (考虑计时器用于最早的没有确认的报文段)超时间隔: TimeOutInterval= EstimatedRTT + 4*DevRTT,2.超时:重传导致超时的报文段重新启动计时器3.收到确认:如果确认了先前未被确认的报文段 更新被确认的报文段序号如果还有未被确认的报文段,重新启动计时器,运输层,69,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) event: timer timeout retransmit not-yet-acknowledged segment with smallest sequence number y start timer event: ACK received, with ACK field value of y if (y SendBase) /* 累计确认到Y */ SendBase = y if (there are currently not-yet-acknowledged segments) start timer /* end of loop forever */,注释: SendBase-1: 上次累计的已确认字节例如: SendBase-1 = 71;y= 73, 因此接收方期待73+ ;y SendBase, 因此新数据被确认,运输层,70,TCP: 重传的情况,主机 A,Seq=100, 20 bytes data,ACK=100,过早超时的情况,主机 B,Seq=92, 8 bytes data,ACK=120,Seq=92, 8 bytes data,ACK=120,Seq=92 超时,SendBase= 100,SendBase= 120,SendBase= 120,Sendbase= 100,运输层,71,TCP 重传情况(续),主机 A,Seq=92, 8 bytes data,ACK=100,丢包,超时,累计确认情况,主机 B,X,Seq=100, 20 bytes data,ACK=120,时间,SendBase= 120,运输层,72,TCP ACK 产生 RFC 1122, RFC 2581,接收方事件所期望序号的报文段按序到达。所有在期望序号及以前的数据都已经被确认 有期望序号的报文段按序到达。另一个按序报文段等待发送ACK 比期望序号大的失序报文段到达,检测出数据流中的间隔。 部分或者完全填充已接收到数据间隔的报文段到达,TCP 接收方行为延迟的ACK。对另一个按序报文段的到达最多等待500 ms。如果下一个按序报文段在这个时间间隔内没有到达,则发送一个ACK 立即发送单个累积ACK,以确认两个按序报文段 立即发送冗余ACK,指明下一个期待字节的序号(也就是间隔的低端字节序号) 倘若该报文段起始于间隔的低端,则立即发送ACK,运输层,73,快速重传,超时间隔常常相对较长:重传丢失报文段以前有长时延通过冗余ACK,检测丢失的报文段发送方经常一个接一个的发送报文段如果报文段丢失,将会收到很多重复ACK,如果对相同数据,发送方收到3个ACK, 假定被确认的报文段以后的报文段丢失了:快速重传: 在定时器超时之前重传,运输层,74,事件: 收到ACK, ACK 域的值为 y if (y SendBase) SendBase = y if (当前还有没有确认的报文段) 启动定时器 else 值为 y的重复确认的次数加1 if (值为 y的重复确认的计数= 3) 重传序号位y的报文段 ,快速重传算法:,对已经确认的报文段收到一个重复ACK,快速重传,运输层,75,第3章 要点,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,运输层,76,TCP 流量控制,TCP连接的接收方有1个接收缓冲区:,匹配速度服务: 发送速率需要匹配接收方应用程序的提取速率,应用进程可能从接收缓冲区读数据缓慢,运输层,77,TCP流控: 工作原理,(假设 TCP 接收方丢弃失序的报文段)缓冲区的剩余空间= RcvWindow= RcvBuffer-LastByteRcvd - LastByteRead,接收方在报文段接收窗口字段中通告其接收缓冲区的剩余空间发送方要限制未确认的数据不超过RcvWindowLastByteSent-LastByteAcked 或= RcvWindow保证接收缓冲区不溢出,运输层,78,第3章 要点,3.5 面向连接的传输: TCP报文段结构可靠数据传输流量控制连接管理3.6 拥塞控制的原则3.7 TCP拥塞控制机制TCP吞吐量TCP公平性时延模型,3.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原则rdt1rdt2rdt3流水线协议,运输层,79,TCP 连接管理,回想: TCP 发送方与接收方在交换报文段前要先建连接初始化 TCP 变量:序号缓冲区和流控信息 (如RcvWindow)客户机: 连接的发起方 Socket clientSocket = new Socket(hostname,port number); 服务器: 接受客户请求 Socket connectionSocket = welcomeSocket.accept();,运输层,80,TCP 连接管理,三次握手:步骤 1: 客户机向服务器发送 TCP SYN报文段指定初始序号没有数据步骤 2: 服务器收到SYN报文段, 用SYNACK报文段回复服务器为该连接分配缓冲区和变量指定服务器初始序号步骤 3: 客户机接收到 SYNACK, 用ACK报文段回复,可能包含数据,SYN, SEQ = x,SYN, SEQ = y, AC

    注意事项

    本文([计算机网络:自顶向下方方法](中文版ppt课件)第三章.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开