计算机网络自顶向下方法第三章讲义_第1页
计算机网络自顶向下方法第三章讲义_第2页
计算机网络自顶向下方法第三章讲义_第3页
计算机网络自顶向下方法第三章讲义_第4页
计算机网络自顶向下方法第三章讲义_第5页
已阅读5页,还剩97页未读, 继续免费阅读

下载本文档

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

文档简介

1、计 算 机 网 络 20142014年年9 9月月 国防科技学院国防科技学院 第第3 3章章 运输层运输层2 第第3 3章章 运输层运输层 计算机网络 第第3 3章章 运输层运输层3 应用层:包含大量应用普遍需要的协议,支 持网络应用 uFTP, SMTP, HTTP 运输层: 主机到主机数据传输,负责从应用 层接收消息,并传输应用层的message,到 达目的后将消息上交应用。 uTCP, UDP 网络层: 从源到目的地数据报的选路 uIP, 选路协议 链路层: 在邻近网元之间传输数据 uPPP, 以太网 物理层: 物理层负责将链路层帧中每一位(bit) 从链路的一端传输到另一端。 应用层

2、运输层运输层 网络层 链路层 物理层 TCP/IP五层模型 第第3 3章章 运输层运输层4 我们的目的: 理解运输层服务依据的 原理: uMultiplexing(多路复 用)/demultiplexing(多路 分解) u可靠数据传输 uflow control(流量控制) ucongestion control(拥塞 控制) 学习因特网中的运输 层协议: uUDP: 无连接传输 uTCP: 面向连接传输 uTCP 拥塞控制 第3章:运输层 第第3 3章章 运输层运输层5 3.1 运输层服务运输层服务 3.2 复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原理 3.5 面向

3、连接的传输: TCP 3.6 拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层6 在运行不同主机上应用进 程之间提供逻辑通信 运输协议运行在端系统中 u发送方:将应用报文 ( messages )划分为报文 段(segments),传向网 络层 u接收方:将段重新装配为报 文,传向应用层 应用程序可供使用的运输 协议不止一个 u因特网:TCP和UDP 应用层 运输层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 应用层 运输层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 网络层 数据链路层 物理层网络层 数据链路层 物理层 网络层 数据链路层 物理层

4、逻辑端到端传输 运输服务和协议 动画:多层通信实质 第第3 3章章 运输层运输层7 网络层: 主机间的逻辑通信 运输层: 进程间的逻辑通信 u依赖、强化网络层服务 家庭类比: 12个孩子向12个孩子发信 进程 = 孩子 应用报文= 信封中的信 主机 = 家庭 运输协议 = Ann和Bill 网络层协议= 邮政服务 运输层 vs. 网络层 第第3 3章章 运输层运输层8 可靠的、按序的交付 (TCP) u拥塞控制 u流量控制 u连接建立 不可靠、无序的交付: UDP u差错检测 不可用的服务: u时延保证 u带宽保证 应用层 运输层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 应用层

5、 运输层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 网络层 数据链路层 物理层网络层 数据链路层 物理层 网络层 数据链路层 物理层 逻辑端到端传输 因特网运输层协议 第第3 3章章 运输层运输层9 3.1 运输层服务 3.2 复用与分解复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原理 3.5 面向连接的传输: TCP 3.6 拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层10 应用层 运输层 网络层 链路层 物理层 P1 应用层 运输层 网络层 链路层 物理层 应用层 运输层 网络层 链路层 物理层 P2 P3 P4 P1 主机1主机2

6、 主机3 = 进程= 套接字 将接收到的段交付给相应的套接字 (一路到多路,向上) 在接收主机分解: 从多个套接字收集数据, 用首部封装数据(多路到 一路,向下) 在发送主机复用: 多路复用/多路分解 第第3 3章章 运输层运输层11 主机接收IP数据报 u每个数据报有源IP地址, 目的IP地址 u每个数据报承载1个运 输层报文段 u每个段具有源、目的端 口号 (回想: 对特定应用程序 的周知端口号) 源端口 #目的端口 # 32 bits 应用数据 (报文) 其他首部字段 TCP/UDP 报文段格式 分解工作过程 主机使用IP地址 &端口号将报 文段导向到相应的套接字 第第3 3章章 运输层

7、运输层12 UDP套接字由二元组全面标识 : 当主机接收UDP段时: u在段中检查目的地端口号 u将UDP段定向到具有该端口号的套接字 具有不同源IP地址和/或源端口号的IP数据报(目的IP 地址和端口号相同)定向到相同的套接字 无连接多路复用与分解 第第3 3章章 运输层运输层13 客户机 IP:B P2 客户机 IP: A P1 P1 P3 服务器 IP: C SP: 6428 DP: 9157 SP: 9157 DP: 6428 SP: 6428 DP: 5775 SP: 5775 DP: 6428 SP提供了“返回地址” 无连接多路复用与分解(续) = 进程= 套接字 第第3 3章章

8、运输层运输层14 TCP套接字由四元组(4- tuple)标识: u源IP地址 u源端口号 u目的IP地址 u目的端口号 接收主机使用这四个值来 将段定向到适当的套接字 服务器主机可能支持许多 并行的TCP套接字: u每个套接字由其自己的四元 组标识 Web服务器对每个连接的 客户机具有不同的套接字 u非持久HTTP将为每个请求具 有不同的套接字 面向连接多路复用与分解 第第3 3章章 运输层运输层15 客户机 IP:B P1 客户机 IP: A P1 P2P4 服务器 IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P5P6P3 D-IP:C S-IP: A D-

9、IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B 面向连接多路复用与分解(续) = 进程= 套接字 第第3 3章章 运输层运输层16 客户机 IP:B P1 客户机 IP: A P1 P2 服务器IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P4P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B 面向连接分解: 多线程Web服务器 = 进程= 套接字 第第3 3章章 运输层运输层17 3.1 运输层服务 3.2 复用与分解 3.3 无连接传输无连接传输

10、: UDP 3.4 可靠数据传输的原理 3.5 面向连接的传输:TCP 3.6 拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层18 “尽力而为”服务,UDP 段可能: u丢包 u对应用程序交付失序 无连接 u在UDP发送方和接收方 之间无握手 u每个UDP段的处理独立 于其他段 为何要有 UDP协议? 无连接创建(它将增加时 延) 简单:在发送方、接收 方无连接状态 段首部小 无拥塞控制: UDP能够尽 可能快地传输 UDP: 用户数据报协议 第第3 3章章 运输层运输层19 常用于流媒体应用程序 u丢包容忍 u速率敏感 其他UDP应用 uDNS uSNMP 经UDP的可

11、靠传输 : 在 应用层增加可靠性 u应用程序特定的差错 恢复! 源端口#目的端口# 32 bits 应用数据 (报文) UDP 段格式 长度检查和 UDP段的长 度,包括首 部,以字节 计 checksum :校验和 ,检查和 UDP报文段结构 第第3 3章章 运输层运输层20 发送方: 将段内容处理为16比特 整数序列 检查和: 段内容的加法 (反码和) 发送方将检查和放入 UDP检查和字段 接收方: 计算接收的段的检查和 核对计算的检查和是否等 于检查和字段的值: uNO 检测到差错 uYES 无差错检测到。 虽然如此,还可能有差错吗? 目的: 在传输的段中检测“差错” (如比特翻 转)

12、UDP检查和 第第3 3章章 运输层运输层21 注意 u当数字作加法时,最高位进比特位的进位需要加到 结果中 例子: 两个16-bit整数相加 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 回卷 和 检查和 检查和例子 计算步骤: 求和,回卷,求反 第第3 3章章 运输层运输层22 3.1 运输层服务 3

13、.2 复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原理可靠数据传输的原理 3.5 面向连接的传输 3.6 拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层23 在应用层、运输层、数据链路层的重要性 u网络中需解决的最重要的10个问题之一! 不可靠信道的特点决定了可靠数据传输协议的复杂性 可靠数据传输的原理 第第3 3章章 运输层运输层24 发送侧接收侧 rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layer udt_sen

14、d(): called by rdt, to transfer packet over unreliable channel to receiver rdt_rcv(): called when packet arrives on rcv-side of channel deliver_data(): called by rdt to deliver data to upper 可靠数据传输:描述函数熟悉 第第3 3章章 运输层运输层25 我们将: 逐渐递增地研究可靠数据传输协议 (rdt) 的发送方 和接收方 u仅考虑单向数据传输 u但控制信息将在两个方向流动! 使用有限状态机 (FSM)来

15、定义发送方和接收方 状态 1 状态 2 引起状态变迁的事件 状态变迁所采取的行动 状态: 当位于这个“状态 时”,下个状态惟一地 由下个事件决定 事件 动作 事件 有限状态机描述方法 第第3 3章章 运输层运输层26 3.1 运输层服务 3.2 复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原理可靠数据传输的原理 urdt1.0,rdt2.0,rdt3.0协议协议 3.5 面向连接的传输 3.6 拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层27 底层信道完全可靠 u无比特差错 u无分组丢失 发送方、接收方具有各自的FSM: u发送方将数据发向底层信道

16、u接收方从底层信道读取数据 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) 发送方 接收方 rdt1.0:完全可靠信道上的可靠数据传输 第第3 3章章 运输层运输层28 Rdt2.0: 具有比特差错的信道 具有比特差错的底层信道 u有比特差错 u无分组丢失 数据出错后处理方式 u检错重传 rdt2.0新增加机制(与rdt

17、1.0比较) u检错 u反馈:ACK, NAK u重传 第第3 3章章 运输层运输层29 等待来自 上面的调用 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) udt_send(NAK) rdt_rcv

18、(rcvpkt) & corrupt(rcvpkt) 等待ACK 或NAK 等待来自 下面的调用 发送方 接收方 rdt_send(data) L 发送方发出发送方发出1个分组,等待个分组,等待 接收方响应后再继续发送接收方响应后再继续发送 。(类似。(类似rdt2.0) 停等协议停等协议 rdt2.0: FSM描述 第第3 3章章 运输层运输层30 等待来自 上面的调用 snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv

19、(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) L rdt2.0: 无差错时的操作 第第3 3章章 运输层运输层31 等待来自 上面的调用 snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extra

20、ct(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) L rdt2.0: 有差错时的情况 第第3 3章章 运输层运输层32 如果ACK/NAK受损,将

21、会 出现何种情况? 发送方不知道在接收方会 发生什么情况! 不能只是重传:可能导致 重复( duplicate ) 处理重复(序号机制): 发送方对每个分组增加序 列号 如果ACK/NAK受损,发 送方重传当前的分组 接收方丢弃(不再向上交 付)重复的分组 rdt2.0有重大的缺陷! 第第3 3章章 运输层运输层33 等待来自 上面的调 用0 sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) 等待 ACK 或 NAK 0 udt_send(sndpkt) rdt_rcv(rcvpkt) & ( corrup

22、t(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 1

23、 L L rdt2.1: 发送方, 处理受损的ACK/NAK 第第3 3章章 运输层运输层34 等待来自 下面的调 用0 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_sen

24、d(sndpkt) 等待来 自上面 的调用1 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(r

25、cvpkt) rdt_rcv(rcvpkt) & (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt2.1: 接收方,处理受损的ACK/NAK 第第3 3章章 运输层运输层35 发送方: 序号seq # 加入分组中 两个序号seq. #s (0,1) 将 够用. ( 为什么?) 必须检查是否收到的 ACK/NAK受损 状态增加一倍 u状态必须“记住”是否 “当前的”分组具有0或1 序号 接收方: 必须检查是否接收到

26、的分 组是冗余的 u状态指示是否0或1是所期 待的分组序号seq # 注意: 接收方不能知道是 否它的最后的ACK/NAK 在发送方已经接收OK rdt2.1: 讨论 第第3 3章章 运输层运输层36 与rdt2.1一样的功能,仅使用ACK 代替NAK,接收方对最后正确接收的分组发送ACK u接收方必须明确地包括被确认分组的序号 在发送方重复的ACK导致如同NAK相同的动作:重传当 前分组 rdt2.2: 一种无NAK的协议 第第3 3章章 运输层运输层37 等待来自 上面的调 用0 sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) r

27、dt_send(data) udt_send(sndpkt) rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) | isACK(rcvpkt,1) ) rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) 等待ACK 0 发送方FSM 片段 等待来 自下面 的调用 0 rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum

28、) udt_send(sndpkt) rdt_rcv(rcvpkt) & (corrupt(rcvpkt) | has_seq1(rcvpkt) udt_send(sndpkt) 接收方FSM 片段 L rdt2.2: 发送方, 接收方片段 第第3 3章章 运输层运输层38 rdt3.0: 具有差错和丢包的信道 具有差错和丢包的底层信道 u有比特差错 u有分组丢失 现有机制(检错、反馈、重传、序号)还不够 增加定时机制:发送方等待ACK一段“合理的”时间 u如在这段时间没有收到ACK则重传 u如果分组(或ACK)只是延迟(没有丢失),重传将是冗余的,但序 号的使用已经处理了该情况 第第3 3章

29、章 运输层运输层39 sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) 等待 ACK0 rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) | isACK(rcvpkt,1) ) 等待来自 上面的调 用1 sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpk

30、t,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) 等待来自 上面的调 用0 等待 ACK1 L rdt_rcv(rcvpkt) L L L rdt3.0发送方 第第3 3章章 运输层运输层40

31、无丢包时的运行 分组丢失 发送方 发送方 接收方 接收方 rdt3.0 运行情况 第第3 3章章 运输层运输层41 ACK丢失 过早超时 发送方发送方 接收方接收方 rdt3.0运行情况 第第3 3章章 运输层运输层42 rdt3.0能够工作,但性能不太好 例子: 1 Gbps链路, 15 ms端到端传播时延, 1KB分组: T transmit = 8kb/pkt 10*9 b/sec = 8 microsec mU sender: 利用率 发送方用于发送时间的比率 m每30 msec 1KB 分组 - 经1 Gbps 链路有33kB/sec 吞吐量 m网络协议限制了物理资源的使用! U s

32、ender = .008 30.008 = 0.00027 L / R RTT + L / R = L (packet length in bits) R (transmission rate, bps) = rdt3.0的性能 第第3 3章章 运输层运输层43 传输分组的第一个比特, t = 0 发送方接收方 RTT 传输分组的最后一个比特, t = L / R 分组第一个比特到达 传输最后一个比特到达,发送ACK ACK 到达,发送下一个分 组, t = RTT + L / R U sender = .008 30.008 = 0.00027 L / R RTT + L / R = rdt

33、3.0: 停等协议的运行 第第3 3章章 运输层运输层44 流水线: 发送方允许发送多个、“传输中的”,还没有应答的报文 段 u序号的范围必须增加 u发送方和/或接收方设有缓冲 流水线协议的两种形式: 回退回退N帧法(帧法(Go-Back-N), 选择性重传(选择性重传(SR), 流水线协议 第第3 3章章 运输层运输层45 传输第一个分组比特传输第一个分组比特, t = 0 发送者接收者 RTT 传输最后一个比特传输最后一个比特, t = L / R 第一个分组比特到达第一个分组比特到达 分组最后一个比特到达分组最后一个比特到达,发送发送 ACK ACK 到达到达, 发送下一个分组发送下一个

34、分组 , t = RTT + L / R 第二个分组最后比特到达第二个分组最后比特到达,发送发送ACK 第三个分组最后比特到达第三个分组最后比特到达,发送发送ACK U sender = .024 30.008 = 0.0008 microsecon ds 3 * L / R RTT + L / R = 利用率增加利用率增加3倍倍! 流水线协议: 增加利用率 第第3 3章章 运输层运输层46 滑动窗口协议 Go-Back-N和选择重传都是滑动窗口协议 发送方和接收方都具有一定容量的缓冲区(即窗口), 允许发送站连续发送多个幀而不需要等待应答 发送窗口就是发送端允许连续发送的帧的序号表,发送 端

35、可以不等待应答而连续发送的最大帧数称为发送窗口 的尺寸 接收窗口是接收方允许接收的帧的序号表,凡落在接收 窗口内的帧,接收方都必须处理,落在接收窗口外的帧 被丢弃。接收方每次允许接收的帧数称为接收窗口的尺 寸 第第3 3章章 运输层运输层47 特征:累计ACK,全部重传 ACK(n): 确认所有的(包括序号n)的分组 - “累计ACK” 若超时,重传窗口中的未被确认的第一个分组n及所有更高 序号的分组 Go-Back-N 发送窗口尺寸为N;接收窗口尺寸为1。 1234567891011 发送窗口 接收窗口 1234567891011 简单来说:位于发送窗口内的分组才允许被发送,位于 接收窗口内

36、的分组才能被接收,关键是窗口如何滑动。 第第3 3章章 运输层运输层48 Go-Back-N正常传输时(示意) 动画 第第3 3章章 运输层运输层49 Go-Back-N丢失帧时(示意) 第第3 3章章 运输层运输层50 Go-Back-N 理解累计ACK和回退N个重传 发送方 u发送窗口滑动的条件:收到1个确认分组 u超时重传时,回退N个重传,通常重传多个分组 接收方 u接收窗口滑动的条件:收到期望序号的分组 u累计ACKs:s为期望收到的下一分组序号 u对失序分组的处理:丢弃,重发(已按序接收分组的) ACK Go-Back-N不足:(效率明显高于停等协议)但仍有不 必要重传的问题 第第3

37、 3章章 运输层运输层51 发送方接收方 GBN例子(书) 第第3 3章章 运输层运输层52 特征:独立ACK,重传单个分组 独立ACK: 对每个分组使用单独的确认 需N个定时器,若某个分组超时,则重传该分组 接收窗口为N,对非按序到达的分组进行缓存 选择重传SR 发送窗口尺寸为N;接收窗口尺寸为N。 1234567891011 发送窗口 接收窗口 1234567891011 第第3 3章章 运输层运输层53 选择重传的操作 第第3 3章章 运输层运输层54 选择重传的理解 理解单独ACK和单个分组重传 发送方 u发送窗口滑动的条件:收到最低位置分组的确认 u超时重传时,仅重传超时的单个分组

38、接收方 u接收窗口滑动的条件:收到最低位置的分组 u单独ACK u对失序分组的处理:接收窗口内缓存,发对应ACK; 接收窗口外丢弃 第第3 3章章 运输层运输层55 例子: 序号: 0, 1, 2, 3 窗口长度 = 3 接收方:在(a)和(b)两种情况下接 收方没有发现差别! 在 (a)中不正确地将新的冗余的当 为新的,而在(b)中不正确地将新 的当作冗余的 问题: 序号长度与窗口长度有什么关 系? 回答:窗口长度小于等于序号空间的一 半 选择重传: 困难的问题 第第3 3章章 运输层运输层56 机制用途和说明 检验和用于检测在一个传输分组中的比特错误。 定时器用于检测超时/重传一个分组,可

39、能因为该分组(或其ACK)在信道中丢失了。由于当一 个分组被时延但未丢失(过早超时),或当一个分组已被接收方收到但从接收方到 发送方的ACK丢失时,可能产生超时事件,所以接收方可能会收到一个分组的多个 冗余拷贝。 序号用于为从发送方流向接收方的数据分组按顺序编号。所接收分组的序号间的空隙可使该 接收方检测出丢失的分组。具有相同序号的分组可使接收方检测出一个分组的冗余 拷贝。 确认接收方用于告诉发送方一个分组或一组分组已被正确地接收到了。确认报文通常携带着 被确认的分组或多个分组的序号。确认可以是逐个的或累积的,这取决于协议。 否定确认接收方用于告诉发送方某个分组未被正确地接收。否定确认报文通常

40、携带着未被正确接 收的分组的序号。 窗口、流水线发送方也许被限制仅发送那些序号落在一个指定范围内的分组。通过允许一次发送多个 分组但未被确认,发送方的利用率可在停等操作模式的基础上得到增加。我们很快 将会看到,窗口长度可根据接收方接收和缓存报文的能力或网络中的拥塞程度,或 两者情况来进行设置。 可靠数据传输机制及用途总结 第第3 3章章 运输层运输层57 3.1 运输层服务 3.2 复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原理 3.5 面向连接的传输:TCP 3.6 拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层58 Robert E. KahnV

41、inton G. Cerf 罗伯特卡恩 温顿瑟夫 2004年图灵奖 TCP/IP协议发明者 第第3 3章章 运输层运输层59 全双工数据全双工数据: u同一连接上的双向数据流 uMSS: 最大报文段长度 uMTU:最大传输单元 面向连接面向连接: u在进行数据交换前,初始化 发送方与接收方状态,进行 握手(交换控制信息), 流量控制流量控制: u发送方不能淹没接收方 拥塞控制拥塞控制: u抑止发送方速率来防止过分 占用网络资源 点到点点到点: u一个发送方, 一个接收方 u连接状态与端系统有关,不 为路由器所知 可靠、有序的字节流可靠、有序的字节流 流水线流水线: uTCP拥塞和流量控制设置滑

42、 动窗口协议 发送和接收缓冲区发送和接收缓冲区 socket door TCP send buffer TCP receive buffer socket door segment application writes data application reads data TCP概述 第第3 3章章 运输层运输层60 源端口 #目的端口 # 32 bits 应用层数据 (变长) 序号 确认号 接收窗口 紧急数据指针检查和 FSRPAU 首部 长度 未 用 选项 (变长) URG: 紧急数据 (一般不用) ACK: ACK 序号 有效 PSH: 立即提交数据 (一般不用) RST, SYN,

43、FIN: 连接建立(建立和拆连) 接收方允许 的字节数 对数据字节计 数(并非对报 文段计数!) 因特网检查和 (同 UDP一样) TCP报文段结构 第第3 3章章 运输层运输层61 序号序号: u报文段中第1个数据字 节在字节流中的位置编 号 确认号确认号: u期望从对方收到下一个 字节的序号 u累计应答 主机主机 A主机主机 B Seq=42, ACK=79, data = C Seq=79, ACK=43, data = C Seq=43, ACK=80 用户键入 C 主机对接收 到的C回 显给出确认 主机对收到 的C给出确认, 回显 C 时间时间 简单的telnet情况 捎带确认捎带确

44、认 TCP序号和确认号 第第3 3章章 运输层运输层62 问题: 如何设置TCP 超时 值? 应大于RTT u但RTT是变化的 太短: 过早超时 u不必要的重传 太长: 对报文段的丢 失响应太慢 问题: 如何估计RTT? SampleRTT: 从发送报文段到 接收到ACK的测量时间 u忽略重传 SampleRTT会变化,希望估计 的RTT“较平滑” u平均最近的测量值,并不仅 仅是当前SampleRTT TCP往返时延(RTT)的估计与超时 第第3 3章章 运输层运输层63 EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT 指数加权移动平均(Expo

45、nential weighted moving average) 过去的样本指数级衰减来产生影响 典型值: = 0.125 TCP往返时延估计与超时 (续) 第第3 3章章 运输层运输层64 RTT估计的例子 第第3 3章章 运输层运输层65 设置超时间隔设置超时间隔 EstimtedRTT 加 “安全余量” uEstimatedRTT大变化- 更大的安全余量 首先估算EstimatedRTT与SampleRTT之间差值有多大 : TimeoutInterval = EstimatedRTT + 4*DevRTT DevRTT = (1- )*DevRTT + *|SampleRTT-Esti

46、matedRTT| (典型地, = 0.25) 然后估算超时值然后估算超时值: TCP往返时延估计与超时 (续) 第第3 3章章 运输层运输层66 TCP在IP不可靠服务 的基础上创建可靠数 据传输服务 流水线发送报文段 累计确认 TCP使用单个重传计 时器 重传被下列事件触发: u超时事件 u重复ACK TCP可靠数据传输 第第3 3章章 运输层运输层67 TCP可靠传输属于滑动窗口方法 发送方 收到累计ACK,窗口向又滑动(1个或多个报文段) 单个重传计时器,超时仅则重传导致超时的报文段 快速重传:冗余ACK 接收方 对收到的报文段进行缓存 收到任何报文段时,均发出正确的累计确认 TCP可

47、靠数据传输 第第3 3章章 运输层运输层68 主机 A Seq=100, 20 bytes data ACK=100 时间 过早超时的情况 主机 B Seq=92, 8 bytes data ACK=120 Seq=92, 8 bytes data Seq=92 超时 ACK=120 主机 A Seq=92, 8 bytes data ACK=100 loss 超时 丢失确认的情况 主机 B X Seq=92, 8 bytes data ACK=100 时间 Seq=92 超时 SendBase = 100 SendBase = 120 SendBase = 120 Sendbase = 10

48、0 TCP: 重传的情况 第第3 3章章 运输层运输层69 主机 A Seq=92, 8 bytes data ACK=100 丢包 超时 累计确认情况 主机 B X Seq=100, 20 bytes data ACK=120 时间 SendBase = 120 TCP 重传情况(续) 第第3 3章章 运输层运输层70 超时间隔常常相对较长: u重传丢失报文段以前 有长时延 通过冗余ACK,检测丢失 的报文段 u发送方经常一个接一 个的发送报文段 u如果报文段丢失,将 会收到很多重复ACK 如果对相同数据,发送方 收到3个ACK, 假定被确认 的报文段以后的报文段丢 失了: u快速重传: 在

49、定时器超 时之前重传 快速重传 第第3 3章章 运输层运输层71 TCP连接的接收方有1 个接收缓冲区: 匹配速度服务: 发送 速率需要匹配接收方 应用程序的提取速率 应用进程可能从接收 缓冲区读数据缓慢 发送方发送数据太发送方发送数据太 快,导致接收方来快,导致接收方来 不及接收时,需进不及接收时,需进 行流量控制行流量控制 流量控制流量控制 TCP流量控制 第第3 3章章 运输层运输层72 TCP流控: 工作原理 TCP流控通过接收窗口字段实现 u接收方计算缓存区的剩余空间,即接收窗口大小 uRcvWindow= RcvBuffer-LastByteRcvd -LastByteRead u

50、接收方通过TCP首部的接收窗口字段反馈给发送方 u发送方根据接收窗口字段来限制发送窗口大小,以保证接收方 缓存不溢出 第第3 3章章 运输层运输层73 TCP连接管理 TCP是面向连接的协议,TCP连接的建立和释 放是每次TCP传输中必不可少的过程。 TCP的传输连接包括三个状态 u连接建立 u数据传输 u连接释放 第第3 3章章 运输层运输层74 第一次第一次握手过程:握手过程: 注:注: SYN SYN :同步序列编号同步序列编号( (SySynchronize Sequence nchronize Sequence N Number)umber) SEQ : SEQ : 序列号序列号(

51、(SeqSequence Number), uence Number), 表示当前数据传输表示当前数据传输字节字节的的编号编号为为X X。 SYN1 ,SEQX 第一次握手:连接请求报文第一次握手:连接请求报文 请求建立连接请求建立连接 目前字节编号:目前字节编号:X 下一次编号:下一次编号:X1 SEQX:身份标识身份标识 ClientClient 客户机(客户机(A A) ServerServer 服务器(服务器(B B) 建立连接(三次握手) 第第3 3章章 运输层运输层75 第二次第二次握手过程:握手过程: SYN1 ,SEQX SYN1 ,SEQY, ACKX+1 注:注: SYN

52、SYN :同步序列编号同步序列编号( (SySynchronize Sequence nchronize Sequence N Numbers) umbers) SEQ : SEQ : 序列号序列号( (SeqSequence Number)uence Number) ACK ACK :确认编号确认编号( (AckAcknowledgement Number)nowledgement Number) 第二次握手:确认报文第二次握手:确认报文 第一次握手:连接请求报文第一次握手:连接请求报文 请求建立连接请求建立连接 目前字节编号:目前字节编号:Y 下一次编号:下一次编号:Y1 SEQY :身份

53、标识身份标识 对(对(SYN)同步序号请求同步序号请求的应答的应答 ClientClient 客户机(客户机(A A) ServerServer 服务器(服务器(B B) 建立连接(三次握手) 第第3 3章章 运输层运输层76 SYN1 ,SEQX SYN1 ,SEQY, ACKX+1 第三次第三次握手过程握手过程 对(对(SYN)同步序号请求同步序号请求的应答的应答 第二次握手确认报文第二次握手确认报文 客户机客户机A A的身份标识的身份标识 第一次握手:连接请求报文第一次握手:连接请求报文 SEQ X+1, ACK Y+1 第三次握手:确认报文第三次握手:确认报文 ClientClient

54、 客户机(客户机(A A) ServerServer 服务器(服务器(B B) 建立连接(三次握手) 第第3 3章章 运输层运输层77 SYN1 ,SEQX SYN1 ,SEQY, ACKX+1 SEQ X+1, ACK Y+1 请求请求 确认确认 确认确认 三次握手过程:三次握手过程:一个请求,两个确认一个请求,两个确认 数据数据 连接已建立连接已建立 ClientClient 客户机(客户机(A A) ServerServer 服务器(服务器(B B) 建立连接(三次握手) 第第3 3章章 运输层运输层78 SYN? ,SEQ1000 SYN? ,SEQ?, ACK? SEQ ?, ACK

55、 2002 三次握手过程:三次握手过程:一个请求,两个确认一个请求,两个确认 数据数据 ClientClient 客户机(客户机(A A) ServerServer 服务器(服务器(B B) 练习 第第3 3章章 运输层运输层79 步骤 1: 客户机向服务器发送TCP FIN控制报文段 步骤 2: 服务器收到FIN,用ACK 回答。关闭连接,发送FIN 步骤 3: 客户机收到FIN, 用ACK答 u进入 “超时等待” 将对接 收到的FIN进行确认 步骤 4: 服务器接收ACK,连接关 闭 客户 FIN 服务器 ACK ACK FIN 关闭 关闭 已关闭 超时等待 释放连接 第第3 3章章 运输

56、层运输层80 3.1 运输层服务 3.2 复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原理 3.5 面向连接的传输: TCP 3.6 拥塞控制的原则拥塞控制的原则 3.7 TCP拥塞控制 第第3 3章章 运输层运输层81 拥塞(Congestion): 当大量的分组进入网络,超出了网络的处理能力时,会 引起网络局部或整体性能下降,这种现象称为拥塞。不 加控制的拥塞甚至导致整个网络瘫痪。 不同于流量控制! 表现: u丢包 (路由器缓冲区溢出) u长时延 (路由器缓冲区中排队) 网络中的前10大问题之一! 拥塞控制原理 第第3 3章章 运输层运输层82 拥塞控制起的作用 提供的

57、负载 吞吐量 理想的拥塞控制 拥塞 死锁(吞吐量 = 0) 无拥塞控制 实际的拥塞控制 轻度 拥塞 0 第第3 3章章 运输层运输层83 两个发送方, 两个接 收方 一个路由器, 无限缓 冲区 不重传 拥塞时时延增大 可达到最大吞吐量 无限的共享式 输出链路缓冲 主机A lin : 原始数据 主机B lout 拥塞的原因与开销: 情况1 第第3 3章章 运输层运输层84 一个路由器,有限缓冲区 发送方重传丢失的数据分组 有限的共享式输出链 路缓存 主机 A lin : 原始数据 主机 B lout lin : 原始数据 重传数据 拥塞的原因与开销 : 情况2 第第3 3章章 运输层运输层85

58、通常: (吞吐量) 仅当丢失丢包时,需要“完美的” 重传 : 迟延的分组(而不是丢失)的重传使得 比(同完美情况相比) 更大 linlout= linlout linlout 拥塞的拥塞的“代价代价”: r比额定的“吞吐量”做更多的工作 (重传) r不必要重传: 链路承载分组的多个拷贝 拥塞的原因与开销: 情况2 (续) 第第3 3章章 运输层运输层86 四个发送者 多跳路径 超时/重传 lin问题: 随着 和 的 增加将发生什么情况 ? lin 有限的共享式输出 链路缓存 主机 A lin 原始数据 主机 B lout lin : 原始数据, 重传数据 拥塞的原因与开销: 情况3 第第3 3

59、章章 运输层运输层87 另一个拥塞的“开销”: r当分组丢失时, 任何用于传输该分组的上游传输能力都 被浪费! H o s t A H o s t B l o u t 拥塞的原因与开销: 情况3 (续) 第第3 3章章 运输层运输层88 端到端的拥塞控制 不能从网络得到明确的反 馈 从端系统根据观察到的时 延和丢失现象推断出拥塞 这是TCP所采用的方法 网络辅助的拥塞控制 路由器为端系统提供反馈 u一个bit指示一条链路出现 拥塞(SNA,DECnet,TCP/IP ECN, ATM) u指示发送方按照一定速率 发送 控制拥塞的两类方法(直接的和间接的)控制拥塞的两类方法(直接的和间接的): 拥塞控制方法 第第3 3章章 运输层运输层89 案例(网络辅助):ATM ABR拥塞控制 ATM(Asynchronous Transfer Mode ) 异步传输模式 u一种结合了电路交换与分组交换各自优点的技术 u以53字节固定长度的信元为传输单元 u业务:CBR固定速率,ABR可用速率等: ABR可用速率业务模式(“弹性服务”) u若发送方的路径 “欠载”: 发送方应该使用可用的 带宽 u若发送方的路径拥塞: 发送方被抑制到最小保证速率 第第3 3章章 运输层运输层90 通信过程简要描述 u发送方沿(建立好连

温馨提示

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

评论

0/150

提交评论