计算机网络-第三章传输层课件_第1页
计算机网络-第三章传输层课件_第2页
计算机网络-第三章传输层课件_第3页
计算机网络-第三章传输层课件_第4页
计算机网络-第三章传输层课件_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第三章第三章 传输层传输层2第三章第三章: 传输层传输层目标目标: 理解传输层服务理解传输层服务以后的原则以后的原则: 复用复用/分解复用分解复用 可靠数据传输可靠数据传输 流量控制流量控制 拥塞控制拥塞控制 学习因特网的传输学习因特网的传输层协议层协议: UDP: 无连接传输无连接传输 TCP: 面向连接传面向连接传输输 TCP 拥塞控制拥塞控制3第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构

2、可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制4传输层服务和协议传输层服务和协议 在两个不同的主机上运行在两个不同的主机上运行的应用程序之间提供的应用程序之间提供 逻辑逻辑通信通信 传输层协议运行在端系统传输层协议运行在端系统 发送方发送方: 将应用程序报将应用程序报文分成数据段传递给网文分成数据段传递给网络层络层, 接受方接受方: 将数据段重新将数据段重新组装成报文传递到应用组装成报文传递到应用层层 不只一个传输层协议可以不只一个传输层协议可以用于应用程序用于应用程序 因特网因特网: TCP 和和 UDP应用层

3、应用层传输层传输层网络层网络层链路层链路层物理层物理层应用层应用层传输层传输层网络层网络层链路层链路层物理层物理层networkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysical逻辑的端到端传输逻辑的端到端传输5传输层和网络层传输层和网络层网络层网络层:两个主机之两个主机之间的逻辑通信间的逻辑通信传输层传输层:两个进程之两个进程之间的逻辑通信间的逻辑通信 可靠可靠, 增强的网络层增强的网络层服务服务6Internet 传

4、输层协议传输层协议 可靠按序递交可靠按序递交 (TCP) 拥塞控制拥塞控制 流量控制流量控制 连接建立连接建立 不可靠的无序传递不可靠的无序传递: UDP “尽力传递尽力传递” IP的直接的直接扩展扩展 不提供的服务不提供的服务: 延迟保证延迟保证 带宽保证带宽保证applicationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetwork

5、data linkphysicalnetworkdata linkphysicallogical end-end transport7第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2 多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制8多路复用多路复用/多路分解多路分解applicationtransportnetwork

6、linkphysicalP1applicationtransportnetworklinkphysicalapplicationtransportnetworklinkphysicalP2P3P4P1host 1host 2host 3= 进程进程= 套接字套接字将接收到的数据段传递到将接收到的数据段传递到正确的套接字(多路分解)正确的套接字(多路分解)在接收主机多路分解在接收主机多路分解:从多个套接字收集数据从多个套接字收集数据, 用首部封装数据,然后将用首部封装数据,然后将报文段传递到网络层报文段传递到网络层(多路复用)(多路复用)在发送主机多路复用在发送主机多路复用:9多路分解如何工作多

7、路分解如何工作 主机收到主机收到IP数据报数据报 每个数据报有源每个数据报有源IP地址,地址,目的目的IP地址地址 每个数据报搬运一个数每个数据报搬运一个数据段据段 每个数据段有源和目的每个数据段有源和目的端口号端口号 (回忆(回忆: 对于特定应用程对于特定应用程序具有周知端口号序具有周知端口号) 主机用主机用IP地址和端口号地址和端口号指明数据段属于哪个合指明数据段属于哪个合适的套接字适的套接字源端口源端口 #目的端口目的端口 #32 bits应用程序数据应用程序数据(报文报文)其他首部域其他首部域TCP/UDP 报文段格式报文段格式10无连接多路分解无连接多路分解 用端口号创建套接字用端口

8、号创建套接字:DatagramSocket mySocket1 = new DatagramSocket(9911);DatagramSocket mySocket2 = new DatagramSocket(9922); UDP 套接字由两个因素指套接字由两个因素指定定:(目的目的IP地址地址, 目的端口号目的端口号) 当主机收到当主机收到UDP数据数据段段: 检查数据段中的目的检查数据段中的目的端口号端口号 用端口号指示用端口号指示UDP数数据段属于哪个套接字据段属于哪个套接字 具有不同的源具有不同的源IP地址地址且且/或源端口号,但具或源端口号,但具有相同的目的有相同的目的IP地址地址和

9、目的端口号的和目的端口号的IP数数据报指向同样的套接据报指向同样的套接字字11无连接多路分解无连接多路分解 (续续)DatagramSocket serverSocket = new DatagramSocket(6428);ClientIP:BP2client IP: AP1P1P3serverIP: CSP: 6428DP: 9157SP: 9157DP: 6428SP: 6428DP: 5775SP: 5775DP: 6428请求报文段中提供返回地址(包括请求报文段中提供返回地址(包括IP地址和端口号)地址和端口号)12面向连接的多路分解面向连接的多路分解 TCP 套接字由套接字由4部分

10、指部分指定定: 源源IP地址地址 源端口号源端口号 目的目的IP地址地址 目的端口号目的端口号 接收主机使用所有四个接收主机使用所有四个值将数据段定位到合适值将数据段定位到合适的套接字的套接字 服务器主机支持很多同服务器主机支持很多同时的时的 TCP 套接字套接字: 每个套接字用每个套接字用4部分来部分来表示表示 Web服务器对每个连接服务器对每个连接的客户都有不同的套接的客户都有不同的套接字字 非持久非持久 HTTP 将对每个将对每个请求有一个不同的套接请求有一个不同的套接字字13面向连接的多路分解面向连接的多路分解 (续续)ClientIP:BP1client IP: AP1P2P4ser

11、verIP: CSP: 9157DP: 80SP: 9157DP: 80P5P6P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B14面向连接的多路分解面向连接的多路分解: web服务服务器如何工作?器如何工作?ClientIP:BP1client IP: AP1P2serverIP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B15第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路复

12、多路复用和多路复用用 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制16UDP: 用户数据报协议用户数据报协议 RFC 768 “无修饰无修饰” “不加渲染的不加渲染的” 因特网传输层协议因特网传输层协议 “尽最大努力尽最大努力”服务服务, UDP 数据段可能数据段可能: 丢失丢失 会传递失序的报文到会传递失序的报文到应用程序应用程序无连接无连接: 在在UDP接收者发

13、送者接收者发送者之间没有握手之间没有握手 每个每个UDP 数据段的处数据段的处理独立于其他数据段理独立于其他数据段为什么有为什么有 UDP? 不需要建立连接不需要建立连接 (减少延减少延迟迟) 简单简单: 在发送者接受者之在发送者接受者之间不需要连接状态间不需要连接状态 很小的数据段首部很小的数据段首部 没有拥塞控制没有拥塞控制: UDP 能能够用想象的快的速度传够用想象的快的速度传递递17UDP:用户数据报协议(续)用户数据报协议(续) 经常用于流式多媒体应经常用于流式多媒体应用用 容忍丢失容忍丢失 速率敏感速率敏感 其它其它 UDP 应用应用 DNS SNMP UDP上的可靠传输上的可靠传

14、输: 在应在应用层增加可靠性用层增加可靠性 应用特有的错误恢复应用特有的错误恢复!源端口号源端口号目的端口号目的端口号32 bits应用数据(报文)应用数据(报文)UDP 数据报格式数据报格式长度长度校验和校验和长度以字节为长度以字节为单位,包括报文首单位,包括报文首都和数据都和数据18UDP 校验和校验和发送方发送方: 将数据段看成将数据段看成16bit的的整数序列整数序列 校验和校验和: 数据段内容数据段内容相加相加 (1的补码和的补码和) 发送者将校验和值放发送者将校验和值放入入UDP的校验和域的校验和域接收方接收方: 计算接收到数据段的校验计算接收到数据段的校验和和 检查检查 计算的校

15、验和是否等计算的校验和是否等于校验和域中的值于校验和域中的值: NO 检测到错误检测到错误 YES 没有检测到错误没有检测到错误. 但是可能是错误的但是可能是错误的 ?后面更多后面更多 .目标目标: 检测传输的数据段的检测传输的数据段的 “错误错误” 如如bit丢失丢失)19Internet 校验和例子校验和例子 Note 在加数字的时候,从最高位溢出的在加数字的时候,从最高位溢出的bit必须必须要加到结果上要加到结果上 例例:加两个加两个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

16、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回卷回卷和和校验和校验和20第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制21可靠

17、数据传输原理可靠数据传输原理 在应用层、传输层、链路层都有所应用在应用层、传输层、链路层都有所应用 不可靠信道的特性将决定可靠数据传输协议不可靠信道的特性将决定可靠数据传输协议(rdt)的复杂的复杂性性22可靠数据传输可靠数据传输:sendsidereceivesiderdt_send(): 上层应用调用该函数上层应用调用该函数要求可靠传输数据到接收者要求可靠传输数据到接收者udt_send(): 可靠传输调用该可靠传输调用该函数,在不可靠的信道上传输数函数,在不可靠的信道上传输数据给接收者据给接收者rdt_rcv(): 接收方接收到数据后调接收方接收到数据后调用该函数完成可靠传输用该函数完成

18、可靠传输deliver_data(): 可靠传输调可靠传输调用该函数将数据传给上层应用用该函数将数据传给上层应用23可靠数据传输可靠数据传输:我们将我们将 逐步开发发送方和接收方的可靠数据传输协议逐步开发发送方和接收方的可靠数据传输协议 (rdt) 仅考虑单向数据传输仅考虑单向数据传输 但控制信息将双向流动但控制信息将双向流动! 用有限状态机用有限状态机 (FSM) 来标示发送方和接收方来标示发送方和接收方状态状态1状态状态2事件导致状态转换事件导致状态转换状态转换时执行的动作状态转换时执行的动作状态状态: 在一个状态时,由在一个状态时,由事件唯一的确定状态的转事件唯一的确定状态的转换换事件事

19、件动作动作24Rdt1.0: 完全可靠信道上的可靠数据传完全可靠信道上的可靠数据传输输 在完美可靠的信道上在完美可靠的信道上 没有没有bit错误错误 没有分组丢失没有分组丢失 发送方,接收方分离的发送方,接收方分离的 FSMs : 发送方发送数据到下层信道发送方发送数据到下层信道 接收方从下层信道接收数据接收方从下层信道接收数据等待来自等待来自上层的调上层的调用用packet = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)等待来自等待来自下层的调下层的调用用rdt_rcv

20、(packet)senderreceiver25Rdt2.0: 具有具有bit错误的信道错误的信道 下层信道可能让传输分组中的下层信道可能让传输分组中的bit受损受损 校验和将检测到校验和将检测到bit错误错误问题问题: 如何从错误中恢复如何从错误中恢复确认确认(ACKs): 接收方明确告诉发送方接收方明确告诉发送方 分组接收正确分组接收正确否认否认 (NAKs):接收方明确告诉发送方接收方明确告诉发送方 分组接收出错分组接收出错 发送方收到发送方收到NAK后重发这个分组后重发这个分组 在在 rdt2.0的新机制的新机制 (在在 rdt1.0中没有的中没有的): 差错检测差错检测 接收方反馈接

21、收方反馈: 控制信息控制信息 (ACK,NAK) rcvr-sender26rdt2.0: FSM 规范规范extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待来自下层的等待来自下层的调用调用receiver等待来自上等待来自上层的调用层的调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)rdt_rcv(rcvp

22、kt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)等待等待 ACK 或或NAKsenderrdt_send(data)L L27rdt2.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(rcv

23、pkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待等待 ACK 或或NAK等待下等待下层的调用层的调用rdt_send(data)L L28rdt2.0: 错误场景错误场景Wait for call from abovesnkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)u

24、dt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)Wait for ACK or NAKWait for call from belowrdt_send(data)L L29rdt2.0 有一个致命缺陷有一个致命缺陷!如果如果ACK/NAK混淆了混淆了会发生什么?会发生什么

25、? 发送方并不知道接收方发发送方并不知道接收方发生了什么生了什么! 不能正确重发不能正确重发: 可能重复可能重复处理重复处理重复: 发送方给每个分组加一个发送方给每个分组加一个序号序号 在在 ACK/NAK 混淆时发送混淆时发送方重发当前分组方重发当前分组 接收方丢弃重复的分组接收方丢弃重复的分组(并不向上传递)(并不向上传递)发送方发送一个报文,然后发送方发送一个报文,然后等待接受方的响应等待接受方的响应停止等待停止等待30rdt2.1: 发送方处理混乱的发送方处理混乱的 ACK/NAKs等待来自等待来自上层的上层的调用调用0sndpkt = make_pkt(0, data, checks

26、um)udt_send(sndpkt)rdt_send(data)等待等待 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) & notcorrupt(rcvpkt) & isACK(rcvpkt) udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcv

27、pkt) |isNAK(rcvpkt) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) 等待来自等待来自 上层的上层的调用调用1等待等待 ACK 或或 NAK 1L LL L31rdt2.1: 接收方处理混乱的接收方处理混乱的 ACK/NAKssndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)等待来等待来自下层自下层的的0rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & has_seq0(rcvpkt)rdt_rcv(rcvpkt)

28、 & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)等待来等待来自下层自下层的的1rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq0(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)rdt_

29、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)32rdt2.1: 讨论讨论发送方发送方: 序号序号

30、 加到分组上加到分组上 两个序号两个序号 (0,1) 就可以就可以满足满足. 为什么为什么? 必须检查是否收到混必须检查是否收到混淆的淆的 ACK/NAK 状态加倍状态加倍 状态必须记住当前的状态必须记住当前的报文是报文是1号还是号还是0号号接收方接收方: 必须检查是否接收到必须检查是否接收到重复的报文重复的报文 状态指示状态指示0或者或者1是否是否希望的报文序号希望的报文序号 注意注意:接收方并不知道接收方并不知道它的上一个它的上一个ACK/NAK 是否被发是否被发送方收到送方收到33rdt2.2: 一个不要一个不要NAK的协议的协议 同同 rdt2.1一样的功能一样的功能, 只用只用 AC

31、Ks 不用不用 NAK, 如果上个报文接收正确接收方发送如果上个报文接收正确接收方发送 ACK 接收方必须明确包含被确认的报文的序号接收方必须明确包含被确认的报文的序号 发送方收到重复发送方收到重复 ACK 将导致和将导致和 NAK一样的处一样的处理理: 重发当前报文重发当前报文34rdt2.2: 发送方发送方,接收方片断接收方片断等待来自等待来自上层的调上层的调用用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(

32、rcvpkt) | isACK(rcvpkt,1) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) 等待等待 ACK0sender FSMfragment等待来等待来自下层自下层的的0rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) &am

33、p; (corrupt(rcvpkt) | has_seq1(rcvpkt)udt_send(sndpkt)receiver FSMfragmentL L35rdt3.0: 具有出错和丢失的信道具有出错和丢失的信道新假设新假设: 下层信道还要丢下层信道还要丢失报文失报文 (数据或者数据或者 ACKs) 校验和校验和, 序号序号, 确认确认, 重重发将会有帮助,但是发将会有帮助,但是不够不够方法方法: 发送者等待发送者等待“合理合理的的”确认时间确认时间 如果在这个时间内没有收如果在这个时间内没有收到确认就重发到确认就重发 如果报文(或者确认)只如果报文(或者确认)只是延迟是延迟 (没有丢失没有

34、丢失): 重发将导致重复,但是重发将导致重复,但是使用序号已经处理了这使用序号已经处理了这个问题个问题 接受方必须指定被确认接受方必须指定被确认的报文序号的报文序号 要求倒计时定时器要求倒计时定时器36rdt3.0 发送方发送方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, da

35、ta, checksum)udt_send(sndpkt)start_timerrdt_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_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send

36、(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待来自上等待来自上层的调用层的调用0等待等待 ACK1L Lrdt_rcv(rcvpkt)L LL LL L37rdt3.0 操作操作38rdt3.0 操作操作39rdt3.0的性能的性能 rdt3.0 工作但是性能很差工作但是性能很差 例如例如: 1 Gbps链路链路, 15 ms 端到端传输延迟端到端传输延迟, 1KB 报文报文:Ttransmit=8kb/pkt10*9 b/sec= 8 microsecU sender: 利用率利用率 发送方忙于发送的时间部分发送方忙于发送的时间部分1KB pkt ev

37、ery 30 msec - 33kB/sec throughput over 1 Gbps link网络协议限制了物质资源的使用网络协议限制了物质资源的使用! U sender = .008 30.008 = 0.00027 L / R RTT + L / R = L (packet length in bits)R (transmission rate, bps)=40rdt3.0: 停等操作停等操作首个分组的第首个分组的第1比特被传输比特被传输, t = 0发送方发送方接收方接收方RTT 首个分组的最后首个分组的最后1比特被传输比特被传输, t = L / R首个分组的第首个分组的第1比特

38、到达比特到达首个分组的最后首个分组的最后1个比特到达个比特到达, 发发送送 ACKACK 到达到达, 发送下一个分组发送下一个分组, t = RTT + L / R U sender = .008 30.008 = 0.00027 L / R RTT + L / R = 41流水线技术流水线技术流水线流水线: 发送方允许发送多个发送方允许发送多个 “在路上的在路上的”, 还还没有确认的报文没有确认的报文 序号数目的范围必须增加序号数目的范围必须增加 在发送方在发送方/接收方必须有缓冲区接收方必须有缓冲区 流水线技术的两个通用形式流水线技术的两个通用形式: go-Back-N, 选择重传选择重传

39、42流水线流水线: 增加利用率增加利用率首个分组的第首个分组的第1个比特被传输个比特被传输, t = 0senderreceiverRTT 首个分组的最后首个分组的最后1比特被传比特被传输输, t = L / R首个分组的第首个分组的第1比特到达比特到达首个分组的最后首个分组的最后1比特到达比特到达,发送发送ACKACK到达到达, 发送下一个分组发送下一个分组, t = RTT + L / R第第2分组的最后分组的最后1比特到达比特到达, 发送发送ACK第第3分组的最后分组的最后1比特到达比特到达,发送发送ACK U sender = .024 30.008 = 0.0008 microsec

40、onds 3 * L / R RTT + L / R = 利用率提高了利用率提高了3倍倍43Go-Back-N发送方发送方: 在分组头中规定一个在分组头中规定一个k位的序号位的序号 “窗口窗口”, 允许的连续未确认的报文允许的连续未确认的报文ACK(n): 确认所有的报文直到(包含)序号确认所有的报文直到(包含)序号n - “累积累积ACK”对每个在路上的报文定时对每个在路上的报文定时超时超时(n): 重发窗口中的报文重发窗口中的报文n及以上更高序号的报文及以上更高序号的报文(只有一个定时器记录只有一个定时器记录最早的未被确认报文的发送时间最早的未被确认报文的发送时间)44GBN: 接收方接收

41、方ACK-only: 总是为正确接收的最高序号的分组发送总是为正确接收的最高序号的分组发送ACK。 可能生成重复的可能生成重复的ACKs 只需要记住被期待接收的序号只需要记住被期待接收的序号expectedseqnum 接收到失序分组接收到失序分组: 丢弃丢弃(不缓冲不缓冲) - 没有接收缓冲区没有接收缓冲区! 重发最高序号分组的重发最高序号分组的ACK45GBN操作操作46选择性重传选择性重传 接收方分别确认已经收到的分组接收方分别确认已经收到的分组 必要时,缓冲报文必要时,缓冲报文, 最后按序提交给上层最后按序提交给上层 发送者只重发没有收到确认的分组发送者只重发没有收到确认的分组 对每个

42、没有确认的报文发送者都要启动一个定时对每个没有确认的报文发送者都要启动一个定时器器(每个未被确认的报文都有一个定时器每个未被确认的报文都有一个定时器) 发送窗口发送窗口 N 个连续序号个连续序号 限制被发送的未确认的分组数量限制被发送的未确认的分组数量47选择性重传选择性重传: 发送者,接收者窗口发送者,接收者窗口48选择性重传选择性重传从上层收到数据从上层收到数据 : 如果下一个可用的序号如果下一个可用的序号在发送方窗口内,则将在发送方窗口内,则将数据打包并发送数据打包并发送超时超时(n): 重发分组重发分组n, 重启定时器重启定时器收到收到ACK(n)在在sendbase,sendbase

43、+N内内: 标记分组标记分组n被接收被接收 如果如果n是最小的未确认分是最小的未确认分组,则增加窗口基序号组,则增加窗口基序号到下一个未被确认的序到下一个未被确认的序号号发送方发送方分组分组n的序号在的序号在rcvbase, rcvbase+N-1内内发送发送ACK(n)失序分组失序分组: 缓冲缓冲有序分组有序分组: 交付上层交付上层 (包括已经缓包括已经缓冲的有序分组冲的有序分组), 提高窗口到下一提高窗口到下一个没有接收的分组个没有接收的分组 not-yet-received pkt分组分组n在在rcvbase-N,rcvbase-1内内发送发送ACK(n)其他其他: 忽略忽略接收方接收方

44、49选择性重传的操作选择性重传的操作50选择性重传选择性重传: 两难选择两难选择例子例子: 序号序号: 0, 1, 2, 3 window size=3 在两种情况下接收在两种情况下接收方没有感觉到差别方没有感觉到差别!Q: 序号大小和窗口大序号大小和窗口大小有什么关系小有什么关系?(小(小于或等于序号空间于或等于序号空间大小的一半)大小的一半)51第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路复多路复用和多路复用用 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可

45、靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制52TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581 点到点点到点: 一个发送者一个发送者,一个接收一个接收者者 可靠按序的字节流可靠按序的字节流: 没有没有“信息边界信息边界” 流水线流水线: TCP 拥塞和流量控制拥塞和流量控制设置窗口大小设置窗口大小收发缓冲区收发缓冲区53TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581TCP发送发送数据缓存数据缓存报文段报文段TCP接收接收数据缓存数据缓

46、存进程写进程写数据数据套接字套接字进程读进程读数据数据套接字套接字收发缓冲区收发缓冲区54TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581 全双工数据全双工数据: 同一个连接上的双向数同一个连接上的双向数据流据流 MSS: 最大报文段长最大报文段长 面向连接面向连接: 在数据交换前握手在数据交换前握手(交换交换控制信息控制信息) 初始化发送方初始化发送方和接收方的状态和接收方的状态 流量控制流量控制: 发送方不会淹没接收方发送方不会淹没接收方55TCP 报文段结构报文段结构源端口号源端口号目的端口号目的端口号32 bits数据数据(可变长度可变长度)序号序

47、号确认号确认号接收窗口接收窗口紧急数据指针紧急数据指针检查和检查和FSRPAU首部首部长度长度保留保留未用未用选项选项 (可变长度可变长度)URG: urgent data (generally not used)ACK: ACK #validPSH: push data now(generally not used)RST, SYN, FIN:connection estab(setup, teardowncommands)接收方愿意接收方愿意接收的字节数接收的字节数用数据的首字节用数据的首字节编号填充编号填充差错检测,同差错检测,同UDP中的一样中的一样56TCP 序号和确认序号和确认序号

48、序号: 数据段中第一个字节数据段中第一个字节在数据流中的位置编在数据流中的位置编号号确认确认: 期望从另外一边收到期望从另外一边收到的下一个字节的序号的下一个字节的序号 累计累计ACK问问: 接收方如何处理失序的接收方如何处理失序的数据段数据段 答答: TCP规范没有明规范没有明确规定确规定, 由编程人员由编程人员处理处理Host AHost BSeq=42, ACK=79, data = CSeq=79, ACK=43, data = CSeq=43, ACK=80UsertypesChost ACKsreceipt of echoedChost ACKsreceipt ofC, echoe

49、sback Ctimesimple telnet scenario57TCP 往返时延的估计和超时往返时延的估计和超时问问: 如何设置如何设置 TCP 超时值超时值? 比比 RTT长长 但但 RTT变化变化 太短太短: 不成熟的超时不成熟的超时 不必要的重传不必要的重传 太长太长: 对数据段丢失响应慢对数据段丢失响应慢58TCP往返时延的估计和超时往返时延的估计和超时EstimatedRTT = (1- a a)*EstimatedRTT + a a*SampleRTT上述均值计算被称为上述均值计算被称为:指数加权移动平均指数加权移动平均典型的典型的: a a = 0.125问问: 如何估计如

50、何估计 RTT? 样本样本RTT(SampleRTT): 测量从报文段发送到收到确认测量从报文段发送到收到确认的时间的时间 忽略重传忽略重传 样本样本RTTRTT会变化会变化, ,因此需要一个样本因此需要一个样本RTTRTT均值(均值( estimated estimated RTTRTT) 对收到的样本对收到的样本RTTRTT要根据以下公式进行均值处理要根据以下公式进行均值处理59RTT 估计例子估计例子:RTT: to fantasia.eurecom.fr1001502002503003501815222936435057647178859299106

51、time (seconnds)RTT (milliseconds)SampleRTTEstimated RTT60TCP往返时延的估计和超时往返时延的估计和超时设置超时设置超时 EstimtedRTT 加上加上 “安全余量安全余量” EstimatedRTT变化大变化大 - 更大的安全余量更大的安全余量 SampleRTT 偏离偏离 EstimatedRTT多少的估计多少的估计TimeoutInterval = EstimatedRTT + 4*DevRTTDevRTT = (1-b b)*DevRTT + b b*|SampleRTT-EstimatedRTT|(典型地典型地, b b =

52、0.25) 然后设置超时时间间隔然后设置超时时间间隔:61第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制62TCP 可靠数据传输可靠数据传输 TCP在在IP不可靠服务不可靠服务之上创建之上创建rdt服务服务 流水线技术处理报文流水线技术处理报文段段 累积确认累积确认 TC

53、P 使用单个重发定使用单个重发定时器时器 触发重发触发重发: 超时事件超时事件 重复确认重复确认63TCP 发送方事件发送方事件:从应用程序接收数据从应用程序接收数据: 用序号创造一个数据段用序号创造一个数据段 序号是数据段中第一个序号是数据段中第一个数据字节在字节流中的数据字节在字节流中的位置编号位置编号 如果没有启动定时器,如果没有启动定时器,则启动定时器则启动定时器 (定时器是定时器是最早没有被确认的数据最早没有被确认的数据段发送时启动的段发送时启动的) 设置超时间隔设置超时间隔: TimeOutInterval 超时超时: 重发导致超时的数据重发导致超时的数据段段 重新开始定时器重新开

54、始定时器 收到确认收到确认: 如果确认了还没有确如果确认了还没有确认的数据段认的数据段 更新还没有确认的状更新还没有确认的状态态 还有未完成的数据段,还有未完成的数据段,重新开始定时器重新开始定时器64TCP 发送方发送方(简化的简化的) NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) switch(event) event: data received from application above create TCP segment with sequence number NextSeqNum if (

55、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 start timer event: ACK received, with ACK field value of y if (y SendBase) SendBase = y if (there are currentl

56、y not-yet-acknowledged segments) start timer /* end of loop forever */ 注意注意: SendBase-1: last cumulatively acked byteExample: SendBase-1 = 71;y= 73, so the rcvrwants 73+ ;y SendBase, sothat new data is acked65TCP: 重发场景重发场景Host ASeq=100, 20 bytes dataACK=100time过早的超时设置过早的超时设置Host BSeq=92, 8 bytes dat

57、aACK=120Seq=92, 8 bytes dataSeq=92 timeoutACK=120Host ASeq=92, 8 bytes dataACK=100losstimeout丢失丢失ACK的情况的情况Host BXSeq=92, 8 bytes dataACK=100timeSeq=92 timeoutSendBase= 100SendBase= 120SendBase= 120Sendbase= 10066TCP 重发场景重发场景 (更多更多)Host ASeq=92, 8 bytes dataACK=100losstimeout累积累积ACK的情况的情况Host BXSeq=1

58、00, 20 bytes dataACK=120timeSendBase= 12067TCP ACK 的产生的产生 RFC 1122, RFC 2581接收方的事件接收方的事件期望序号的报文段按序到达期望序号的报文段按序到达. 所有所有在期望序号以前的报文段都在期望序号以前的报文段都被确认被确认期望序号的报文段按序到达期望序号的报文段按序到达.另一个按序报文段等待发送另一个按序报文段等待发送ACK收到一个失序的报文段,高于收到一个失序的报文段,高于期望的序号,检测到缝隙期望的序号,检测到缝隙到达的报文段部分地或者完到达的报文段部分地或者完全地填充接收数据间隔全地填充接收数据间隔TCP 接收方行

59、为接收方行为延迟延迟ACK. 等到等到 500ms看是否有下一个看是否有下一个报文段,如果没有,发送报文段,如果没有,发送ACK立即发送单个累积立即发送单个累积ACK, 确认两个有序的报文段确认两个有序的报文段立即发送重复立即发送重复 ACK, 指出期望的序号指出期望的序号立即发送立即发送 ACK, 证实缝隙低端的证实缝隙低端的报文段已经收到报文段已经收到68快速重传快速重传 超时触发重传存在问超时触发重传存在问题题:超时周期往往太长超时周期往往太长: 重传丢失报文之前要重传丢失报文之前要等待很长时间等待很长时间,因此增因此增加了网络的时延加了网络的时延 发送方可以在超时之前通发送方可以在超时

60、之前通过重复的过重复的ACK检测丢失报检测丢失报文段文段 发送方常常一个接一个地发送方常常一个接一个地发送很多发送很多报文段报文段 如果报文段丢失如果报文段丢失,则发送方则发送方将可能接收到很多重复的将可能接收到很多重复的 ACKs. 如果发送方收到如果发送方收到3个对同个对同样报文段的确认,则发送样报文段的确认,则发送方认为该报文段之后的数方认为该报文段之后的数据已经丢失。据已经丢失。 启动启动快速重传快速重传: 在定时器超在定时器超时之前重发丢失的报文段时之前重发丢失的报文段69 event: ACK received, with ACK 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 (coun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论