计算机网络自顶向下方法(第四版)ppt第3章

上传人:汽*** 文档编号:567596233 上传时间:2024-07-21 格式:PPT 页数:121 大小:2.05MB
返回 下载 相关 举报
计算机网络自顶向下方法(第四版)ppt第3章_第1页
第1页 / 共121页
计算机网络自顶向下方法(第四版)ppt第3章_第2页
第2页 / 共121页
计算机网络自顶向下方法(第四版)ppt第3章_第3页
第3页 / 共121页
计算机网络自顶向下方法(第四版)ppt第3章_第4页
第4页 / 共121页
计算机网络自顶向下方法(第四版)ppt第3章_第5页
第5页 / 共121页
点击查看更多>>
资源描述

《计算机网络自顶向下方法(第四版)ppt第3章》由会员分享,可在线阅读,更多相关《计算机网络自顶向下方法(第四版)ppt第3章(121页珍藏版)》请在金锄头文库上搜索。

1、第3章 运输层Transport Layer 计算机网络:自顶向下方法 (原书第三版)陈鸣译,机械工业出版社,2005年Computer Networking: A Top Down Approach Featuring the Internet, 3rd edition. Jim Kurose, Keith RossAddison-Wesley, July 2004. 1 运输层第3章:运输层我们的目的: r理解运输层服务依据的原理:m复用/分解m可靠数据传输m流量控制m拥塞控制r学习因特网中的运输层协议:mUDP: 无连接传输mTCP: 面向连接传输mTCP 拥塞控制2 运输层第3章 要点

2、r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型3 运输层运输服务和协议r在运行不同主机上应用进程之间提供逻辑通信r运输协议运行在端系统中m发送方:将应用报文划分为段,传向网络层m接收方:将段重新装配为报文,传向应用层r应用可供使用的运输协议不止一个m因特网:TCP和UDP应用层运输层网络层数据链路层物理层网络层数据链路层物理层应用层

3、运输层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层逻辑端到端传输4 运输层运输层 vs. 网络层r网络层: 主机间的逻辑通信r运输层: 进程间的逻辑通信m依赖、强化网络层服务家庭类比:12个孩子向12个孩子发信r进程 = 孩子r应用报文= 信封中的信r主机 = 家庭r运输协议 = Ann和Billr网络层协议= 邮政服务5 运输层因特网运输层协议r可靠的、按序的交付 (TCP)m拥塞控制m流量控制m连接建立r不可靠、不按序交付: UDPm“尽力而为”IP的不提供不必要服务的扩展r不可用的服务: m时延保证m带宽保证应用层运输层网

4、络层数据链路层物理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层逻辑端到端传输6 运输层第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型7 运输层Internet 层的复用与分解8 运输层复用/分解应用层运输层网络层链路层物

5、理层P1应用层运输层网络层链路层物理层应用层运输层network链路层物理层P2P3P4P1主机1主机2主机3= 进程= 套接字将接收到的段交付给正确的套接字在接收主机分解:从多个套接字收集数据,用首部封装数据(以后用于分解 )在发送主机复用:9 运输层分解工作过程r主机接收IP数据报m每个数据报有源无连接, 目的地无连接m每个数据报承载1个运输层段m每个段具有源、目的端口号 (回想: 对特定应用程序的周知端口号)r主机使用IP地址 &端口号将段定向到适当的套接字源端口 #目的端口 #32 bits应用数据(报文)其他首部字段TCP/UDP 段格式10 运输层无连接分解r生成具有端口号的套接字

6、:DatagramSocket mySocket1 = new DatagramSocket(99111);DatagramSocket mySocket2 = new DatagramSocket(99222);rUDP套接字由二元组标识 :( (目的地目的地IPIP地址地址, , 目的地端口号目的地端口号) )r当主机接收UDP段时:m在段中检查目的地端口号m将UDP段定向到具有该端口号的套接字r具有不同源IP地址和/或源端口号的IP数据报 定向到相同的套接字11 运输层无连接分解(续)DatagramSocket serverSocket = new DatagramSocket(642

7、8);客户机IP:BP2客户机 IP: AP1P1P3服务器IP: CSP: 6428DP: 9157SP: 9157DP: 6428SP: 6428DP: 5775SP: 5775DP: 6428SP提供了“返回地址”12 运输层面向连接分解rTCP套接字由四元组标识: m源IP地址m源端口号m目的IP地址m目的端口号r接收主机使用这四个值来将段定向到适当的套接字r服务器主机可能支持许多并行的TCP套接字:m每个套接字由其自己的四元组标识rWeb服务器对每个连接的客户机具有不同的套接字m非持久HTTP将为每个请求具有不同的套接字13 运输层面向连接分解 (续)客户机IP:BP1客户机 IP:

8、 AP1P2P4服务器IP: CSP: 9157DP: 80SP: 9157DP: 80P5P6P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B14 运输层面向连接分解: 多线程Web服务器客户机IP:BP1客户机 IP: AP1P2服务器IP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B15 运输层第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的

9、原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型16 运输层UDP: 用户数据报协议 RFC 768r“没有不必要的,” “基本要素” 互联网传输协议r“尽力而为”服务,UDP段可能:m丢包m对应用程序交付失序r无连接:m在UDP发送方和接收方之间无握手m每个UDP段的处理独立于其他段为何要有 UDP协议?r无连接创建(它将增加时延)r简单:在发送方、接收方无连接状态r段首部小r无拥塞控制: UDP能够尽可能快地传输17 运输

10、层UDP: 其他r常用于流式多媒体应用m丢包容忍m速率敏感r其他UDP应用mDNSmSNMPr经UDP的可靠传输 : 在应用层增加可靠性m应用程序特定的差错恢复!源端口#目的端口#32 bits应用数据(报文)UDP 段格式长度检查和UDP段的长度,包括首部,以字节计18 运输层UDP检查和发送方:r将段内容处理为16比特整数序列r检查和: 段内容的加法(反码和)r发送方将检查和放入UDP检查和字段接收方:r计算接收的段的检查和r核对计算的检查和是否等于检查和字段的值:mNO 检测到差错mYES 无差错检测到。虽然如此,还可能有差错吗?详情见后目的: 在传输的段中检测“差错” (如比特翻转)1

11、9 运输层互联网检查和例子r注意m当数字作加法时,最高位进比特位的进位需要加到结果中r例子: 两个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回卷 和检查和20 运输层第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrd

12、t2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型21 运输层可靠数据传输的原则r在应用层、运输层、数据链路层的重要性m重要的网络主题中的最重要的10个之一!r不可靠信道的特点决定了可靠数据传输 协议 (rdt) 的复杂性22 运输层可靠数据传输: 基本概念发送侧接收侧rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper la

13、yerudt_send(): called by rdt,to transfer packet over unreliable channel to receiverrdt_rcv(): called when packet arrives on rcv-side of channeldeliver_data(): called by rdt to deliver data to upper23 运输层可靠数据传输: 基本概念我们将:r增强研发发送方,可靠数据传输协议 (rdt) 的接收方侧m仅考虑单向数据传输m但控制信息将在两个方向流动!r使用有限状态机 (FSM)来定义发送方和接收方状态1

14、状态2引起状态变迁的事件状态变迁所采取的行动状态: 当位于这个“状态时”,下个状态惟一地由下个事件决定事件动作24 运输层第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型25 运输层Rdt1.0: 经可靠信道的可靠传输r底层信道非常可靠m无比特差错m无分组丢失r装发送方、接收方的单独FSM:m发送方将数据发向底层信道m接收

15、方从底层信道读取数据Wait for call from abovepacket = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)Wait for call from belowrdt_rcv(packet)发送方接收方26 运输层第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞

16、控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型27 运输层Rdt2.0: 具有比特差错的信道runderlying channel may flip bits in packetmchecksum to detect bit errorsrthe question: how to recover from errors:macknowledgements (ACKs): receiver explicitly tells sender that pkt received OKmnegative acknowledgements (NAKs): receiver

17、explicitly tells sender that pkt had errorsmsender retransmits pkt on receipt of NAKrnew mechanisms in rdt2.0 (beyond rdt1.0):merror detectionmreceiver feedback: control msgs (ACK,NAK) rcvr-sender28 运输层rdt2.0: FSM规格参数 等待来自上面的调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deli

18、ver_data(data)udt_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) 等待ACK 或NAK 等待来自下面的调用发送方接收方rdt_send(data)L29 运输层rdt2.0: 无差错时的操作 等待来自上面的调用snkpkt = make_pkt(data, checksum)udt_sen

19、d(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)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt) 等待 ACK 或NAK 等待来自下面的调用rdt_send(data)L30 运输层rdt2.0: 有差错时的情况 等待来自上面的调用snkpkt = mak

20、e_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)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待ACK 或NAK 等待来自下面的调用rdt_send(data)L31 运输层rdt2.0有重大的缺

21、陷!如果ACK/NAK受损,将会出现何种情况?r发送方不知道在接收方会发生什么情况!r不能只是重传:可能导致冗余处理冗余: r发送方对每个分组增加序列号r如果ACK/NAK受损,发送方重传当前的分组r接收方丢弃(不再向上交付)冗余分组发送方发送一个分组,然后等待接收方响应停止等待32 运输层rdt2.1: 发送方, 处理受损的ACK/NAK等待来自上面的调用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)等待 ACK 或 NAK 0udt_send(sndpkt)rdt_rcv(rcvpkt) & ( cor

22、rupt(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) 等待来自上面的调用1等待 ACK 或NAK 1LL33 运输层

23、rdt2.1: 接收方,处理受损的ACK/NAK等待来自下面的调用0sndpkt = 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)等待来自上面的调用1rdt_rcv(rcvpkt

24、) & 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)sndp

25、kt = make_pkt(ACK, chksum)udt_send(sndpkt)sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)34 运输层rdt2.1: 讨论发送方:r序号seq # 加入分组中r两个序号seq. #s (0,1) 将够用. ( 为什么?)r必须检查是否收到的ACK/NAK受损 r状态增加一倍m状态必须“记住”是否“当前的”分组具有0或1序号接收方:r必须检查是否接收到的分组是冗余的m状态指示是否0或1是所期待的分组序号seq #r注意: 接收方不能知道是否它的最后的ACK/NAK在发送方已经接收OK 35 运输层rdt2.2:

26、 一种无NAK的协议r与rdt2.1一样的功能,仅使用ACKr代替NAK,接收方对最后正确接收的分组发送ACKm接收方必须明确地包括被确认分组的序号r在发送方冗余的ACK导致如同NAK相同的动作:重传当前分组36 运输层rdt2.2: 发送方, 接收方片段等待来自上面的调用0sndpkt = 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) & notcorr

27、upt(rcvpkt) & isACK(rcvpkt,0) 等待ACK0发送方FSM片段等待来自下面的调用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) & (corrupt(rcvpkt) | has_seq1(rcvpkt)udt_send(sndpkt)接收方FSM片段L37 运输层第3章 要点r3.1 运输层服务r3.2

28、复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型38 运输层rdt3.0: 具有差错和丢包的信道新假设: 下面的信道也能丢失分组(数据或ACK)m检查和、序号、重传将是有帮助的,但不充分方法: 发送方等待ACK一段“合理的”时间r如在这段时间没有收到ACK则重传r如果分组(或ACK)只是延迟(没有丢失):m重传将是冗余的,但序号的使用已经处理了该情况m接收方必须定

29、义被确认的分组序号r需要倒计时定时器39 运输层rdt3.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, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isA

30、CK(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(sndpkt)start_timertimeoutrdt_rcv(rcvpkt) 等待来自上面的调用0等待 ACK1Lrdt_rcv(rcvpkt)LLL40 运输层rdt3.0 运行情况无丢包时的运行 分组丢失发送方发送方接收方

31、接收方41 运输层rdt3.0运行情况ACK丢失 过早超时 发送方发送方接收方接收方42 运输层rdt3.0的性能rrdt3.0能够工作,但性能不太好r例子: 1 Gbps链路, 15 ms端到端传播时延, 1KB分组:Ttransmit=8kb/pkt10*9 b/sec= 8 microsecmU sender: 利用率 发送方用于发送时间的比率m每30 msec 1KB 分组 - 经1 Gbps 链路有33kB/sec 吞吐量m网络协议限制了物理资源的使用!L (packet length in bits)R (transmission rate, bps)=43 运输层rdt3.0:

32、停等协议的运行传输分组的第一个比特, t = 0发送方接收方RTT 传输分组的最后一个比特, t = L / R分组第一个比特到达传输最后一个比特到达,发送ACKACK 到达,发送下一个分组, t = RTT + L / R44 运输层第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型45 运输层流水线协议流水线: 发送方允

33、许发送多个、“传输中的”,还没有应答的报文段m序号的范围必须增加m发送方和/或接收方设有缓冲r流水线协议的两种形式: 回退回退N帧法(帧法(go-Back-N), 选择性重传(选择性重传(S-R), 46 运输层流水线协议: 增加利用率传输第一个分组比特传输第一个分组比特, t = 0发送者接收者RTT 传输最后一个比特传输最后一个比特, t = L / R第一个分组比特到达第一个分组比特到达分组最后一个比特到达分组最后一个比特到达,发送发送 ACKACK 到达到达, 发送下一个分发送下一个分组组, t = RTT + L / R第二个分组最后比特到达第二个分组最后比特到达,发送发送ACK第三

34、个分组最后比特到达第三个分组最后比特到达,发送发送ACK利用率增加利用率增加3倍倍!47 运输层Go-Back-N发送方发送方:r在分组首部需要K比特序号,2k=Nr“窗口”最大为N, 允许N个连续的没有应答分组rACK(n): 确认所有的(包括序号n)的分组 - “累计ACK”m可能收到重复的ACKs (见接收方)r对每个传输中的分组的用同一个计时器rtimeout(n):若超时,重传窗口中的分组n及所有更高序号的分组48 运输层GBN: 发送方扩展的 FSM等待等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(s

35、ndpktnextseqnum-1)超时rdt_send(data) if (nextseqnum 没有接收缓冲区!m重新确认具有按序的分组Waitudt_send(sndpkt)defaultrdt_rcv(rcvpkt) & notcurrupt(rcvpkt) & hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum+expectedseqnum=1sn

36、dpkt = make_pkt(expectedseqnum,ACK,chksum)L等等待待50 运输层GBN 操作发送方接收方51 运输层选择性重传(Selective Repeat)GBN改善了信道效率,但仍然有不必要重传问题r接收方分别确认所有正确接收的报文段m需要缓存分组, 以便最后按序交付给给上层r发送方只需要重传没有收到ACK的分组m发送方定时器对每个没有确认的分组计时r发送窗口mN个连续的序号m也需要限制已发送但尚未应答分组的序号52 运输层选择性重传: 发送方, 接收方窗口a. 发送方看到的序号b. 接收方看到的序号已经确认可用,还未发送发送,还未确认不可用可接受(窗口内)

37、失序(已缓存)但未被确认 可接受(窗口内)期待,还未收到 不可用 窗口长度N窗口长度N53 运输层选择性重传上层传来数据上层传来数据 :r如果窗口中下一个序号可用, 发送报文段timeout(n):r重传分组n, 重启其计时器ACK(n) 在在sendbase,sendbase+N:r标记分组 n 已经收到r如果n 是最小未收到应答的分组,向前滑动窗口base指针到下一个未确认序号发送方分组分组n在在 rcvbase, rcvbase+N-1r发送 ACK(n)r失序: 缓存r按序: 交付 (也交付所有缓存的按序分组),向前滑动窗口到下一个未收到报文段的序号分组分组n在在rcvbase-N,r

38、cvbase-1rACK(n)其他其他: r忽略 接收方54 运输层选择重传的操作55 运输层选择重传: 困难的问题例子:r序号: 0, 1, 2, 3r窗口长度 = 3r接收方:在(a)和(b)两种情况下接收方没有发现差别!r在 (a)中不正确地将新的冗余的当为新的,而在(b)中不正确地将新的当作冗余的问题: 序号长度与窗口长度有什么关系?回答:窗口长度小于等于序号空间的一半56 运输层可靠数据传输机制及用途总结机制用途和说明检验和用于检测在一个传输分组中的比特错误。定时器用于检测超时/重传一个分组,可能因为该分组(或其ACK)在信道中丢失了。由于当一个分组被时延但未丢失(过早超时),或当一

39、个分组已被接收方收到但从接收方到发送方的ACK丢失时,可能产生超时事件,所以接收方可能会收到一个分组的多个冗余拷贝。序号用于为从发送方流向接收方的数据分组按顺序编号。所接收分组的序号间的空隙可使该接收方检测出丢失的分组。具有相同序号的分组可使接收方检测出一个分组的冗余拷贝。确认接收方用于告诉发送方一个分组或一组分组已被正确地接收到了。确认报文通常携带着被确认的分组或多个分组的序号。确认可以是逐个的或累积的,这取决于协议。否定确认接收方用于告诉发送方某个分组未被正确地接收。否定确认报文通常携带着未被正确接收的分组的序号。窗口、流水线发送方也许被限制仅发送那些序号落在一个指定范围内的分组。通过允许

40、一次发送多个分组但未被确认,发送方的利用率可在停等操作模式的基础上得到增加。我们很快将会看到,窗口长度可根据接收方接收和缓存报文的能力或网络中的拥塞程度,或两者情况来进行设置。57 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议58 运输层TCP概述 RFCs: 793, 1122, 1323, 2018, 258

41、1r全双工数据全双工数据:m同一连接上的双向数据流mMSS: 最大报文段长度mMTU:最大传输单元r面向连接面向连接: m在进行数据交换前,初始化发送方与接收方状态,进行握手(交换控制信息),r流量控制流量控制:m发送方不能淹没接收方r拥塞控制拥塞控制:m抑止发送方速率来防止过分占用网络资源r点到点点到点:m一个发送方, 一个接收方m连接状态与端系统有关,不为路由器所知 r可靠、有序的字节流可靠、有序的字节流:m没有 “报文边界”r流水线流水线:mTCP拥塞和流量控制设置滑动窗口协议r发送和接收缓冲区发送和接收缓冲区59 运输层TCP 报文段结构源端口 #目的端口 #32 bits应用层数据

42、(变长)序号确认号接收窗口紧急数据指针检查和FSRPAU首部长度未用选项 (变长)URG: 紧急数据 (一般不用)ACK: ACK 序号有效PSH: 立即提交数据(一般不用)RST, SYN, FIN:连接建立(建立和拆连)接收方允许的字节数对数据字节计数(并非对报文段计数!)因特网检查和(同 UDP一样)60 运输层TCP序号和确认号序号序号:m报文段中第1个数据字节在字节流中的位置编号确认号确认号:m期望从对方收到下一个字节的序号m累计应答问题:接收方如何处理失序报文段?回答:TCP规范没有说明, 由实现者自行选择实现: 抛弃/缓存 主机主机 A主机主机 BSeq=42, ACK=79,

43、data = CSeq=79, ACK=43, data = CSeq=43, ACK=80用户键入C主机对接收到的C回显给出确认主机对收到的C给出确认, 回显 C时间时间简单的telnet情况捎带确认捎带确认61 运输层TCP往返时延(RTT)的估计与超时问题: 如何设置TCP 超时值?r应大于RTTm但RTT是变化的r太短: 过早超时m不必要的重传r太长: 对报文段的丢失响应太慢问题: 如何估计RTT?rSampleRTT: 从发送报文段到接收到ACK的测量时间m忽略重传rSampleRTT会变化,希望估计的RTT“较平滑”m平均最近的测量值,并不仅仅是当前SampleRTT62 运输层E

44、stimatedRTT = (1- )*EstimatedRTT + *SampleRTTr指数加权移动平均(Exponential weighted moving average)r过去的样本指数级衰减来产生影响r典型值: = 0.125TCP往返时延估计与超时 (续)63 运输层RTT估计的例子64 运输层TCP往返时延估计与超时 (续)设置超时间隔设置超时间隔rEstimtedRTT 加 “安全余量”mEstimatedRTT大变化- 更大的安全余量r首先估算EstimatedRTT与SampleRTT之间差值有多大 : TimeoutInterval = EstimatedRTT +

45、4*DevRTTDevRTT = (1- )*DevRTT + *|SampleRTT-EstimatedRTT|(典型地, = 0.25) 然后估算超时值然后估算超时值:65 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议66 运输层TCP 可靠数据传输rTCP在IP不可靠服务的基础上创建可靠数据传输服务r流水线

46、发送报文段r累计确认rTCP使用单个重传计时器r重传被下列事件触发:m超时事件m重复ACKr先考虑简化的TCP发送方:m 忽略重复ACKm 忽略流量控制,拥塞控制67 运输层TCP 发送方事件1.从应用层接收数据:r根据序号创建报文段r序号是报文段中第一个数据字节的数据流编号r如果未启动,启动计时器 (考虑计时器用于最早的没有确认的报文段)r超时间隔: TimeOutInterval= EstimatedRTT + 4*DevRTT2.超时:r重传导致超时的报文段r重新启动计时器3.收到确认:r如果确认了先前未被确认的报文段 r更新被确认的报文段序号r如果还有未被确认的报文段,重新启动计时器6

47、8 运输层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) eve

48、nt: 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:

49、上次累计的已确认字节例如: SendBase-1 = 71;y= 73, 因此接收方期待73+ ;y SendBase, 因此新数据被确认69 运输层TCP: 重传的情况主机 ASeq=100, 20 bytes dataACK=100时间过早超时的情况主机 BSeq=92, 8 bytes dataACK=120Seq=92, 8 bytes dataSeq=92 超时ACK=120主机 ASeq=92, 8 bytes dataACK=100loss超时丢失确认的情况主机 BXSeq=92, 8 bytes dataACK=100时间Seq=92 超时SendBase= 100SendBa

50、se= 120SendBase= 120Sendbase= 10070 运输层TCP 重传情况(续)主机 ASeq=92, 8 bytes dataACK=100丢包超时累计确认情况主机 BXSeq=100, 20 bytes dataACK=120时间SendBase= 12071 运输层TCP ACK 产生 RFC 1122, RFC 2581接收方事件接收方事件所期望序号的报文段按序到达。所有在期望序号及以前的数据都已经被确认 有期望序号的报文段按序到达。另一个按序报文段等待发送ACK 比期望序号大的失序报文段到达,检测出数据流中的间隔。 部分或者完全填充已接收到数据间隔的报文段到达TC

51、P 接收方行为接收方行为延迟的ACK。对另一个按序报文段的到达最多等待500 ms。如果下一个按序报文段在这个时间间隔内没有到达,则发送一个ACK 立即发送单个累积ACK,以确认两个按序报文段 立即发送冗余ACK,指明下一个期待字节的序号(也就是间隔的低端字节序号) 倘若该报文段起始于间隔的低端,则立即发送ACK 72 运输层快速重传r超时间隔常常相对较长:m重传丢失报文段以前有长时延r通过冗余ACK,检测丢失的报文段m发送方经常一个接一个的发送报文段m如果报文段丢失,将会收到很多重复ACKr如果对相同数据,发送方收到3个ACK, 假定被确认的报文段以后的报文段丢失了:m快速重传: 在定时器超

52、时之前重传73 运输层 事件: 收到ACK, ACK 域的值为 y if (y SendBase) SendBase = y if (当前还有没有确认的报文段) 启动定时器 else 值为 y的重复确认的次数加1 if (值为 y的重复确认的计数= 3) 重传序号位y的报文段 快速重传算法:对已经确认的报文段收到一个重复ACK快速重传74 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UD

53、Pr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议75 运输层TCP 流量控制rTCP连接的接收方有1个接收缓冲区:r匹配速度服务: 发送速率需要匹配接收方应用程序的提取速率r应用进程可能从接收缓冲区读数据缓慢发送方不能发送太多、太快的数据让接收方缓冲区溢出流量控制流量控制76 运输层TCP流控: 工作原理(假设 TCP 接收方丢弃失序的报文段)r缓冲区的剩余空间= RcvWindow= RcvBuffer-LastByteRcvd - LastByteReadr接收方在报文段接收窗口字段中通告其接收缓冲区的剩余空间r发送方要限制未确认的数据不超过RcvWindowLas

54、tByteSent-LastByteAcked linlout拥塞的拥塞的“代价代价”: r比额定的“吞吐量”做更多的工作 (重传)r不必要重传: 链路承载分组的多个拷贝88 运输层拥塞的原因与开销: 情况3 r四个发送者r多跳路径r超时/重传lin问题: 随着 和 的增加将发生什么情况 ?lin有限的共享式输出链路缓存 主机 Alin 原始数据主机 Bloutlin : 原始数据, 重传数据89 运输层拥塞的原因与开销: 情况3 (续) 另一个拥塞的“开销”: r当分组丢失时, 任何用于传输该分组的上游传输能力都被浪费!Host AHost Blout90 运输层拥塞控制方法端到端的拥塞控制

55、:r不能从网络得到明确的反馈r从端系统根据观察到的时延和丢失现象推断出拥塞r这是TCP所采用的方法网络辅助的拥塞控制:r路由器为端系统提供反馈m一个bit指示一条链路出现拥塞(SNA,DECnet,TCP/IP ECN, ATM)m指示发送方按照一定速率发送控制拥塞的两类方法控制拥塞的两类方法:91 运输层案例研究: ATM ABR 拥塞控制ABR: 可用比特率:r“弹性服务” r如果发送方的路径 “欠载”: m发送方应该使用可用的带宽r如果发送方的路径拥塞: m发送方被抑制到最小的保证速率RM (资源管理) 信元:r发送方发送RM 信元, 散布在数据信元中r由交换机设置 RM 信元中的特定比

56、特(“网络辅助”) mNI bit: 速率无增长 (轻度拥塞)mCI bit: 拥塞指示r接收方向发送方返回RM 信元92 运输层rRM信元中的两字节 ER (明确速率)字段m拥塞的交换机会降低RM信元中的ER 值为m发送方以路径上所有交换机的最小支持速率发送r数据信元中的EFCI bit : 被拥塞的交换机设置为1 m如果比RM信元先到达的数据信元的EFCI位为1,接收方将在返回的RM信元的CI位置1案例研究: ATM ABR拥塞控制93 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制m

57、TCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议94 运输层TCP 拥塞控制r端到端控制 (没有网络辅助)r发送方限制传输: LastByteSent-LastByteAcked CongWinr粗略地,r拥塞窗口是动态的, 具有感知到的网络拥塞的函数发送方如何感知网络拥塞?r丢失事件 = 超时或者 3个重复ACKr发生丢失事件后,TCP发送方降低速率(拥塞窗口)三个机制:mmAIMDAIMD(加增倍减算法)加增倍减算法)加增倍减算法)加增倍减算法)mm慢启动慢启动慢

58、启动慢启动mm超时事件后的保守机制超时事件后的保守机制超时事件后的保守机制超时事件后的保守机制速率 = CongWin RTT Bytes/sec95 运输层TCP加增倍减 AIMD乘性减乘性减: 丢包事件后,拥塞窗口值减半加性增加性增: 如没有检测到丢包事件,每个RTT时间拥塞窗口值增加一个MSS (最大报文段长度)长生命周期TCP连接96 运输层TCP慢启动r在连接开始时, 拥塞窗口值 = 1 MSSm例如: MSS= 500 bytes & RTT = 200 msecm初始化速率 = 20 kbpsr可获得带宽可能 MSS/RTTm希望尽快达到期待的速率r当连接开始,以指数快地增加速率

59、,直到第一个丢失事件发生97 运输层TCP 慢启动(续)r当连接开始的时候,速率呈指数式上升,直到第1次报文丢失事件发生为止:m每RTT倍增拥塞窗口值m每收到ACK,增加拥塞窗口r总结: 初始速率很低,但以指数快地增加主机A一个报文段RTT主机B时间两个报文段四个报文段98 运输层改进r收到3个冗余确认后:mCongWin减半m窗口再线性增加r但是超时事件以后:mCongWin值设置为1 MSSm窗口再指数增长m到达一个阈值 (Threshold) 后,再线性增长 3个冗余ACK指示网络还具有某些传送报文段的能力 3个冗余ACK以前的超时,则更为 “严重”基本思想基本思想:99 运输层改进 (

60、续)实现方法实现方法:r设置一个变的阈值Threshold r在丢包事件发生时,阈值Threshold设置为发生丢包以前的CongWin的一半问题: 什么时候从指数增长转变为线性增长? 回答: CongWin达到它超时以前1/2的时候.100 运输层TCP 拥塞控制:小结r当CongWin Threshold时,发送者处于拥塞避免阶段, CongWin线性增长r当出现3个冗余确认时, 阈值Threshold设置为CongWin/2,且CongWin设置为Thresholdr当超时发生时,阈值Threshold设置为CongWin/2,并且CongWin设置为1 MSS. 101 运输层TCP

61、发送方拥塞控制状态事件TCP发送方拥塞控制动作注释慢启动(SS)收到前面未确认数据的ACKCongWin = CongWin + MSS, 如果(CongWin 阈值) 设置状态为“拥塞避免”导致每个RTT CongWin翻倍拥塞避免(CA)收到前面未确认数据的ACKCongWin = CongWin + MSS MSS/ CongWin加性增,每RTT导致CongWin增加1个MSSSS或CA由3个冗余ACK检测到的丢包事件阈值 = CongWin/2, CongWin = 阈值,设置状态为“拥塞避免”快速恢复,实现乘性减。CongWin将不低于1个MSSSS或CA超时阈值 = CongWi

62、n/2, CongWin = 阈值,设置状态为“慢启动”进入慢启动SS或CA冗余ACK对确认的报文段增加冗余ACK计数CongWin和阈值不改变102 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议103 运输层TCP 吞吐量r作为窗口长度和RTT的函数,TCP的平均吞吐量是什么?m忽略慢启动r设当丢包发生时窗口长

63、度是Wr如果窗口为 W,吞吐量是 W/RTTr当丢包发生后,窗口降为 W/2,吞吐量为 W/2RTT.r一个连接的平均吞吐量为0 .75 W/RTT104 运输层TCP 未来r举例: 1500 字节的报文段, 100ms RTT, 要达到10 Gbps 的吞吐量r要求窗口长度 W = 83,333 包括传输中的报文段r根据丢包率,则一个连接的平均吞吐量为:r丢包率L = 210-10 (难以达到)r需要高速下的TCP新版本!105 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐

64、量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议106 运输层公平目标: 如果K个 TCP 会话 共享带宽为 R的链路瓶颈, 每个会话应有R/K的平均链路速率 TCP 连接 1瓶颈路由器容量 RTCP 连接2TCP 公平107 运输层为什么TCP能保证公平性?两个竞争会话:r随着吞吐量的增加,按照斜率1加性增加r等比例地乘性降低吞吐量RR平等的带宽共享连接1吞吐量连接2吞吐量丢失: 以2倍因子减少窗口拥塞避免:加性增108 运输层公平性(续)公平性和UDPr多媒体应用通常不用T

65、CPm不希望拥塞控制抑制速率r使用UDPm音频/视频以恒定速率发送, 能容忍报文丢失r研究领域: TCP友好(TCP friendly)公平性和并行TCP 连接r不能防止2台主机之间打开多个并行连接.rWeb浏览器以这种方式工作r例子:支持9个连接的速率R的链路: m新应用请求一个TCP连接, 则得到 R/10的带宽。m新应用请求11个TCP连接, 则得到R/2 的带宽!109 运输层第3章 要点r3.5 面向连接的传输: TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2

66、 复用与分解r3.3 无连接传输: UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议110 运输层时延模型问题: 从发送一个请求到从该Web服务器收到一个对象,需要多长时间? 忽略拥塞,时延受如下影响:r创建TCP连接r数据传输时延r慢启动假设如下符号 :r假定客户机和服务器间有一条速率为R的链路rS: MSS (bits)rO: 对象大小 (bits)r没有重传(没有丢失, 没有破坏)窗口长度:r首先假设: 固定的拥塞窗口, W个报文段r然后动态窗口, 构模慢启动过程111 运输层固定的拥塞窗口(1)第一种情况:WS/R RTT + S/R: 窗口中所有数据发送完

67、之前,收到对第一个报文段的确认时延 = 2RTT + O/R112 运输层固定的拥塞窗口(2)第二种情况:rWS/R RTT + S/R: 发送完窗口中的报文段,等待确认的到来时延 = 2RTT + O/R+ (K-1)S/R + RTT - WS/R多减部分113 运输层TCP 时延模型: 慢启动 (1)现在假设窗口根据慢启动方式增长一个对象的传输时延是: 其中 P 是 TCP 在服务器中闲置的时间数量:- 其中 Q 是服务器闲置的时间数量 如果对象是无限大小.- 并且 K 是对象占用窗口的数量.114 运输层TCP 时延模型: 慢启动(2)例子: O/S = 15 报文段 K = 4 窗口

68、 Q = 2 P = minK-1,Q = 2服务器空闲 P=2次时延组成: 2 RTT 用于连接建立和请求 O/R 用于传输对象 由于慢启动导致服务器的空闲服务器空闲: P = minK-1,Q times115 运输层TCP时延模型 (3)116 运输层TCP时延模型 (4)对无穷大对象,计算空闲次数Q是类似的.回想 K = 包含对象的窗口数量我们如何计算 K ?117 运输层HTTP构模r假设Web 页面有下列组成:m1 个基本的HTML页面 (O bits的大小)mM个图片 (每个 O bits的大小)r非持久HTTP: mM+1个连续的TCP 连接m响应时间 = (M+1)O/R +

69、 (M+1)2RTT + 空闲时间总和r持久HTTP:m2 RTT 用于请求和接受基本HTML 文件m1 RTT用于请求和接受 M个图片m响应时间 = (M+1)O/R + 3RTT + 空闲时间总和r有X个并行连接的非持久HTTPm假设 M/X为整数.m1 TCP 连接用于基本文件mM/X 个并行连接的集合用于图片.m响应时间 = (M+1)O/R + (M/X + 1)2RTT + 空闲时间总和118 运输层HTTP 响应时间 (秒)RTT = 100 msec, O = 5 Kbytes, M=10 and X=5对于窄带, 连结和响应时间由传输时间确定持久连接仅比并行连接有少许改进.119 运输层HTTP 响应时间 (秒)RTT =1 sec, O = 5 Kbytes, M=10 and X=5对较大的 RTT, 响应时间是TCP建立连接和慢启动时延决定。 持久连接此时则能有重大改进: 特别对于高时延宽带积的网络120 运输层第三章 小结r运输层服务依据的原则:m多路复用与多路分解m可靠数据传送m流量控制m拥塞控制m连接管理r因特网中的实例和实现mUDPmTCP下一章:r离开网络的 “边缘” (应用层,运输层)r进入网络的“核心” 121 运输层

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 文学/艺术/历史 > 人文/社科

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号