Computer Networks Lecture 14 Wei Liu ( 刘威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology Dec. 2011 http://itec.hust.edu.cn/liuwei/
回顾 : 需求分析 需求 1: 连通性 节点和链路的互联 我们对网络的期望是什么? 需求 2: 成本 - 效益合算的资源共享 采用统计复用方式共享硬件基础设施 形成了分组交换网络 需求 3: 进程之间的通信服务 -2-
问题 : 进程间通信 应用层 传输层网络层链路层? 公共服务? 主机之间的连通性 链路层的互联 直连链路或分组交换网络 网络层的互联 主机到主机的通信协议 网络互联的异构性和扩展性问题 IP 服务模型及相关协议 -3-
第 5 章的问题 : 进程间通信 -4-
第十四次课 第 5 章端到端协议 问题 : 进程间通信 5.1 简单的异步解多路复用 (UDP) 5.2 可靠的字节流 (TCP) 5.3 远程过程调用 5.4 实时传输协议 (RTP) 5.5 性能 5.6 总结 -5-
传输层 : 上层协议的期望 应用层传输层网络层 应用层进程期望传输层提供的特性, 可能包括 : 保证消息的传输 传送过程中保证消息发送时的顺序 最多传送每个消息的一个副本 支持任意大的消息 支持发送方与接收方之间的同步 允许接收方对发送方进行流量控制 支持每台主机上的多个应用进程 链路层 -6-
传输层 : 下层协议的能力 应用层传输层网络层链路层 应用层进程期望传输层提供的特性 : 保证消息的传输 传送过程中保证消息发送时的顺序 最多传送每个消息的一个副本 支持任意大的消息 支持发送方与接收方之间的同步 允许接收方对发送方进行流量控制 支持每台主机上的多个应用进程... 底层网络可以提供的服务 : 不可靠的分组传送 丢弃 乱序 多个副本 不确定的时延 有限大小的分组 -7-
传输层 : 面临的挑战 应用层传输层网络层链路层 应用层进程期望传输层提供的特性 : 支持多个应用进程 可靠的消息传送 流量控制 任意大小的分组长度 端到端协议的挑战 把底层网络低于要求的特性转变成为应用程序所需的高级服务 底层网络可以提供的服务 : 不可靠的分组传送 ( 丢弃, 乱序, 多个副本 ) 不确定的时延 有限大小的分组 -8-
传输层协议 本章主要考虑四种有代表性的服务 简单的异步解多路复用服务 UDP ( 用户数据报协议 ) 可靠地字节流服务 TCP ( 传输控制协议 ) 请求 / 响应服务 远程过程调用 (RPC) SunRPC 和 DCE-RPC 实时传输服务 RTP -9-
第十四次课 第 5 章端到端协议 问题 : 进程间通信 5.1 简单解多路复用协议 (UDP) 5.2 可靠的字节流 (TCP) 5.3 远程过程调用 (RPC) 5.4 实时传输协议 (RTP) 5.5 性能 5.6 总结 -10-
用户数据报协议 (UDP) TCP/IP 协议栈中两个传输层协议之一 UDP: 1980 年实现 TCP 最早于 1974 年实现 1981 年 IPv4 实现 特点 仅在 IP 基础上增加了一级解多路复用功能 面向消息 (message oriented) 无连接 (connectionless) 不保证消息的可靠传送 (no guarantee) 无流量控制 (no flow control ) -11-
12 基本传送特点 解多路复用 : 端口号 客户端主机 5.6.7.8 Client 检错 : 校验和 向 1.2.3.4:80 请求服务来自 5.6.7.8:3456 的请求 服务器主机 1.2.3.4 OS Web 服务器 (port 80) Demuxtable ( 5 元组 Echo ) server Socket (port 7) <*, *, 1.2.3.4, 80, TCP> 5 <5.6.7.8, 3456, 1.2.3.4, 80, TCP> 6 IP payload detect corruption
UDP 解多路复用 Application process Application process Application process Ports Queues Packets demultiplexed UDP Packets arrive
UDP 首部格式 字段 源端口和目的端口 : 识别应用进程 校验和 : 选项, 计算整个报文和伪首部 0 16 31 SrcPort DstPort Length Checksum Data -14-
端口 : 公共服务 进程如何知道接收进程的端口号? 通常的做法是让服务器进程在一个众所周知的端口接收消息 DNS, 端口 53 SNMP, 端口 25 端口映射 客户端和服务器通过众所周知的端口协商后续数据通信过程采用的端口, 然后让出众所周知的端口为其他客户端进程服务 -15-
UDP 的优点 控制数据发送的内容和时间 一旦应用进程开始向 socket 写入数据 UDP 封装数据并发送报文 不存在连接建立时延 UDP 不需要与目的进程之间进行联系而直接发送报文 无状态连接 不需要分配缓存, 参数, 序号, 等等. 可以很容易的一次性处理多个客户端请求 ( 肥服务器 ) 报文首部开销较小 UDP 首部只有 8 个字节长 16
UDP 的缺点 尽最大努力交付 (Best effort) 不保证报文的传送, 可能出现乱序到达 无拥塞控制 对网络的拥塞现象无自适应处理机制 抑制 TCP 流 一旦网络出现拥塞, TCP 流会退避但 UDP 仍保留原速率发送 可以被用于网络攻击 (UDP 洪泛攻击 ) 17
采用 UDP 协议的应用 简单查询协议 ( 例如域名解析系统, DNS) 连接建立时延较大 查询消息很小, UDP 在消息内容上加载很小的协议开销 (UDP 首部 ) 可以非常容易地进行重传 可以适应报文乱序到达的危险 多媒体应用 (Multimedia Applications) 不需要对丢弃或损坏报文进行重传 例如, 电话, 视频会议, 游戏 对于语音 图像等数据传送过程, 一定程度的报文丢失是可以接受的, 18
第十四次课 第 5 章端到端协议 问题 : 进程间通信 5.1 简单解多路复用协议 (UDP) 5.2 可靠的字节流 (TCP) 5.3 远程过程调用 (RPC) 5.4 实时传输协议 (RTP) 5.5 性能 5.6 总结 -19-
传输控制协议 (TCP) TCP/IP 协议栈中两个传输层协议之一 UDP: 1980 年实现 TCP 最早于 1974 年实现 1981 年 IPv4 实现 向应用进程提供可靠的字节流服务 -20-
基于 TCP 的字节流传送 TCP 不区分应用进程写入报文的边界, 采用数据段的方式进行数据传输 Application process Application process Write bytes Read bytes TCP Send buffer TCP Receive buffer Segment Segment Segment T 传输的数据段
TCP 服务模型 面向连接 (Connection oriented) 终端主机在数据交换之前需要连接连接 全双工 : 数据可双向传输 可靠性 (Reliability) 保证数据的传送 数据按序到达 流量控制 (Flow control) 控制发送方的速率避免接收方过载 在链路层也存在流量控制 拥塞控制 (Congestion control) 控制发送方速率避免网络过载 拥塞控制由网络层和传输层协作解决 -22-
流量控制 vs. 拥塞控制 Flow control Congestion control Sender Sender Router buffer overflow Feedback: Receiver overflowing Feedback: Not much getting through Receiver Receiver Receiver buffer overflow
第十四次课 5.2 可靠的字节流 (TCP) 5.2.1 端到端的问题 5.2.2 数据段格式 5.2.3 连接的建立和终止 5.2.4 滑动窗口算法再讨论 5.2.5 触发传输 5.2.6 自适应重传 5.2.7 记录边界 5.2.8 TCP 扩展 5.2.9 其他设计选择 -24-
可靠通信回顾 : 最早的停止等待协议 Timeout trigger Timeout trigger 提供可靠传输的两个基本机制 : (1) ACK ( 确认 ) (2) 超时定时器 -25-
可靠通信回顾 : 滑动窗口算法 Sender Window SeqNum ACK 0 1 2 Receiver Window Timeout trigger Timeout trigger 滑动窗口算法需要更多的组件 : (3) 发送窗口 / 接收窗口 (4) 数据帧序号 SeqNum -26-
可靠传输服务 可靠传输服务的基本解决方法 ACK ( 确认 ) 超时定时器 链路层 ARQ, 滑动窗口算法 传输层 有什么区别? TCP 与底层提供了重复的服务? -27-
TCP 可靠传输面临的新挑战 背景 : IP 为异构网络不同的主机间通信提供了不可靠的传输服务 Sender Window 挑战 1: 如何建立连接, 协商数据通信的开始和结束 SeqNum ACK 0 1 2 Receiver Window Timeout trigger Timeout trigger -28-
TCP 面临的挑战 -1 问题 : 如何维护连接? 一个物理链路永远连接相同的两台主机, 不需要建立连接 TCP 需要能够为运行在 Internet 上的任意两台主机上的进程提供逻辑连接 动机 TCP 需要明确的建立连接明确的建立连接阶段 TCP 也有明确的断开连接明确的断开连接阶段 -29-
TCP 可靠传输面临的新挑战 背景 : IP 为异构网络不同的主机间通信提供了不可靠的传输服务 Sender Window SeqNum ACK 挑战 2: 超时问题, 什么时候重传? 变化的 RTT 难以估计 0 1 2 Receiver Window Timeout trigger Timeout trigger -30-
TCP 面临的挑战 -2 问题 : 超时重传 连接两台相同主机的物理链路通常具有固定的 RTT 很可能具有差异很大的往返时延 不同的距离 : San Francisco 到 Boston, RTT 100 ms, 同一个房间的两台主机, RTT 1 ms RTT 的变化 : San Francisco 到 Boston, RTT 100 ms at 3 a.m., RTT 500 ms at 3 p.m. 动机 滑动窗口算法的超时重传机制必须具有适应性. -31-
TCP 可靠传输面临的新挑战 背景 : IP 为异构网络不同的主机间通信提供了不可靠的传输服务 Sender Window SeqNum 0 1 2 ACK 挑战 3: 分组乱序到达丢失, 到达时延 Receiver Window Timeout trigger Timeout trigger -32-
TCP 面临的挑战 -3 问题 : 乱序到达 点到点链路上不可能乱序到达 在多跳的 Internet 环境中可能出现分组乱序达到 IP 在 TTL 过期后被丢弃 动机 TCP 假设每一个分组有一个最大的生存周期, 最大段生存期 (MSL), 当前协议的推荐值为 120 秒 TCP 需要考虑很早以前就被发出的分组突然出现在接收方的情况, 这种分组可能会扰乱滑动窗口算法 -33-
TCP 可靠传输面临的新挑战 背景 : IP 为异构网络不同的主机间通信提供了不可靠的传输服务 Sender Window SeqNum 挑战 4: 流量控制不同的时延带宽积, 缓存 ACK 0 1 2 Receiver Window Timeout trigger Timeout trigger -34-
TCP 面临的挑战 -4 问题 : 流量控制 点到点链路的滑动窗口缓存大小 = 链路的时延带宽积 Internet 传输的缓存大小设计非常困难 时延带宽积未知 可能有成百个 TCP 连接共享缓存 动机 TCP 必须包含一种机制使得连接的每一端能够学习另一端有什么资源 ( 例如, 多少缓冲区空间 ) 用于连接. ==> 流量控制问题. -35-
TCP 可靠传输面临的新挑战 Too many TCP connections bring too much traffic to the intermediate router 拥塞问题可以本地解决吗? -36-
TCP 面临的挑战 -5 问题 : 拥塞控制 点到点链路中不存在拥塞问题 Interent 可能出现拥塞现象 TCP 连接的发送端并不知道经过什么链路传送到目的地 很多不同源产生的数据可能从同一个低速链路通过 动机 TCP 必须提供拥塞控制算法 -37-
小结 : TCP 面临的挑战 与链路层提供的可靠传输相比, TCP 面临的挑战 连接维护 超时重传 乱序到达 流量控制 拥塞控制 是否存在逐跳解决方案? 由主机解决?? 还是由中间的路由器解决?? -38-
逐跳 vs. 端到端 一系列逐跳的保证不一定能够提供端到端的保证 端到端理论 (End-to-End Argument) 一种功能不应该在系统的较低层提供, 除非能在低层能够完全正确的被实现 有必要提供真正的端到端检测以保证可靠有序的服务, 即使系统的低层已经实现了这种功能. 1981-39-
第十四次课 5.2 可靠的字节流 (TCP) 5.2.1 端到端的问题 5.2.2 数据段格式 5.2.3 连接的建立和终止 5.2.4 滑动窗口算法再讨论 5.2.5 触发传输 5.2.6 自适应重传 5.2.7 记录边界 5.2.8 TCP 扩展 5.2.9 其他设计选择 -40-
TCP 数据段 TCP 发送数据段 数据的数量达到了最大数据段的大小 (MSS) 由应用进程触发, 例如 push 操作 周期性定时器超时 MSS 的选择 尽可能避免 IP 分组分片 MSS = MTU IP 首部大小 TCP 首部大小 -41-
-42-
TCP 端口 与 UDP 类似, TCP 采用端口号识别客户端和服务器应用进程 众所周知的端口用于识别服务器应用进程 例如 : HTTP (80), FTP (21) 众所周知的端口 : 1 ~ 1023 客户端为不同的应用进程分配不同的端口号 这些端口称为临时端口 ( 短期有效 ) 通常为 1024 ~ 5000 每一个 TCP 会话通常用四元组 <SrcIP, SrcPort, DstPort, DstIP> 唯一标识 -43-
TCP 首部 0 4 10 16 31 SrcPort DstPort SequenceNum Acknowledgment 在滑动窗口算法中使用 HdrLen 0 Flags Checksum AdvertisedWindow UrgPtr Options (variable) 标志 Data SYN, FIN 建立 / 终止 TCP 会话连接 ACK 当 Acknowledgement 字段有效时置为 1 URG 紧急数据指针 PUSH 不需要等待数据段填满立即发送数据段 RESET 重置连接
第十四次课 5.2 可靠的字节流 (TCP) 5.2.1 端到端的问题 5.2.2 数据段格式 5.2.3 连接的建立和终止 5.2.4 滑动窗口算法再讨论 5.2.5 触发传输 5.2.6 自适应重传 5.2.7 记录边界 5.2.8 TCP 扩展 5.2.9 其他设计选择 -45-
连接建立 在数据传输之前完成 基于三次握手 在两个 TCP 对端之间交换三次消息 协商初始序号 初始的序号随机生成 Acknowledgment 字段值一般比对端发送的序号大 1-46-
三次握手 Active participant (client) (server) 三次握手建立连接主机 A 发送 SYN( 打开 ) 至主机 B 主机 B 回复一个 SYN 确认 (SYN ACK) 主机 A 发送 ACK 对 SYN ACK 进行确认 -47-
连接终止 连接双方独立的关闭本方的连接 关闭连接完成 (FIN) 表示结束连接并接收剩余的字节另一方发送 FIN ACK 进行确认重置 (RST) 表示结束连接同时丢弃剩余字节 -48-
TCP 状态转换图 ( 状态, 事件 / 动作 ) CLOSED Passive open Close Close Active open /SYN LISTEN SYN_RCVD SYN/SYN + ACK Send/SYN SYN/SYN + ACK ACK SYN + ACK/ACK SYN_SENT Close/FIN ESTABLISHED FIN_WAIT_1 ACK Close/FIN FIN/ACK ACK + FIN/ACK FIN/ACK CLOSE_WAIT Close/FIN FIN_WAIT_2 CLOSING LAST_ACK FIN/ACK ACK TIME_WAIT Timeout after two segment lifetimes ACK CLOSED
谢谢! 刘威 副教授 互联网技术与工程研究中心华中科技大学电子与信息工程系电话 :13986224922 Email: liuwei@hust.edu.cn 网址 :http://itec.hust.edu.cn