530 likes | 636 Views
计算机网络. 第七章 运输层. 第 7 章 运 输 层. 运输协议 (transport protocol) 是整个网络体系结构中的关键之一。 7.1 运输协议概述 7.2 TCP/IP 体系中的运输层 7.3 用户数据报协议 UDP 7.4 传输控制协议 TCP. 7.1 运输协议概述. 面向信息处理. 应用层. 用户功能. 运输层. 网络层. 面向通信. 网络功能. 数据链路层. 物理层. 运输层为相互通信的应用进程提供了逻辑通信. 应用进程. 应用进程. AP 4. AP 1. AP 2. 5 4 3 2
E N D
计算机网络 第七章 运输层
第7章 运 输 层 运输协议(transport protocol)是整个网络体系结构中的关键之一。 • 7.1 运输协议概述 • 7.2 TCP/IP体系中的运输层 • 7.3 用户数据报协议UDP • 7.4 传输控制协议TCP
7.1 运输协议概述 面向信息处理 应用层 用户功能 运输层 网络层 面向通信 网络功能 数据链路层 物理层
运输层为相互通信的应用进程提供了逻辑通信 应用进程 应用进程 AP4 AP1 AP2 5 4 3 2 1 AP3 5 4 3 2 1 端口 端口 运输层提供应用进程间的逻辑通信 IP 层 主机 A 主机 B 路由器 1 路由器 2 AP1 AP3 LAN1 LAN2 WAN AP2 AP4 IP 协议的作用范围 运输层协议 TCP 和 UDP 的作用范围
运输层和网络层的主要区别 • 运输层为应用进程之间提供逻辑通信 • 但网络层是为主机之间提供逻辑通信
运输层协议和网络层协议的主要区别 应用进程 应用进程 … … 因 特 网 IP 协议的作用范围 (提供主机之间的逻辑通信) TCP 和 UDP 协议的作用范围 (提供进程之间的逻辑通信)
运输层向高层用户屏蔽了下面通信子网的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。运输层向高层用户屏蔽了下面通信子网的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。 • 当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(即只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。 • 当运输层采用无连接的UDP协议时,这种逻辑通信信道则是一条不可靠信道。 • 在图7-5中将可靠信道画成一个管道,这意味着报文在这样的“管道”中运输时,可以做到无差错、按序(接收的顺序和发送的顺序一样)、无丢失和无重复。
运输层向上提供可靠的和不可靠的逻辑通信信道 发 送 进 程 接 收 进 程 发 送 进 程 接 收 进 程 ? 应 用 层 数据 数据 数据 数据 运 输 层 全双工可靠信道 不可靠信道 使用 TCP 协议 使用 UDP 协议
7.2 TCP/IP体系中的运输层 • 7.2.1 运输层中的两个协议 • TCP/IP的运输层有两个不同的协议,如图7-6所示,它们都是因特网的正式标准,即: • (1)用户数据报协议 • UDP (User Datagram Protocol) • PDU为UDP数据报 • (2)传输控制协议 • TCP (Transmission Control Protocol) • PDU为TCP报文段(Segment)
TCP/IP 体系中的运输层协议 应用层 运输层 UDP TCP IP 与各种网络接口
7.2.2 端口的概念 • UDP和TCP都使用了与应用层接口处的端口(port)与上层的应用进程进行通信。
IP 数据报 IP 数据报 端口在进程之间的通信中所起的作用 接收方 发送方 应用进程 应用进程 应 用 层 端口 端口 运 输 层 TCP 复用 UDP 复用 UDP 分用 TCP 分用 UDP 用户数据报 UDP 用户数据报 TCP 报文段 TCP 报文段 网 络 层 IP 复用 IP 分用
端口号分为两类。 • 熟知端口(well-known port) • 由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用的 • 其数值一般为0~1023,见[RFC 1700]。 • 例如,FTP用21,TELNET用23,SMTP用25,DNS用53,HTTP用80,SNMP用161,等等。 • 一般端口:用来随时分配给请求通信的客户进程
端口号 RIP FTP TELNET SMTP DNS TFTP SNMP 应用层 520 21 23 25 53 69 161 端口号 传输层 TCP UDP
IP 地址 端口号 1500 131.6.23.13 插口(socket) 131.6.23.13, 1500 插口(socket) • TCP 使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将 TCP 连接的端点称为插口(socket),或套接字、套接口。 • 包括IP地址(32 bit)和端口号(16 bit),共48 bit
7.3 用户数据报协议UDP • 7.3.1 用户数据报的优点 • (1)发送数据之前不需要建立连接 • (2)UDP没有拥塞控制,也不保证可靠交付 • (3)UDP用户数据报只有8个字节的首部开销 • (4)由于UDP没有拥塞控制 表7-1给出了一些应用和应用层协议主要使用的运输层协议(UDP或TCP)。
7.3.2 用户数据报的格式 • 用户数据报UDP有两个字段 • 数据字段和首部字段 • 首部字段只有8个字节,如图8-11所示 • 由4个字段组成,每个字段都是两个字节 • (1)源端口字段:源端口号。 • (2)目的端口字段:目的端口号。 • (3)长度字段:UDP用户数据报的长度。 • (4)检验和字段:防止UDP用户数据报在传输中出错。 • UDP的校验和覆盖UDP头部和UDP数据,而IP头部的检验和,它只覆盖IP的头部--并不覆盖IP数据报中的任何数据。
7.3.2 UDP 用户数据报的首部格式 4 4 1 1 2 字节 源 IP 地址 目的 IP 地址 0 17 UDP长度 字节 12 2 2 2 2 长 度 伪首部 源端口 目的端口 检验和 UDP 用户数据报 首 部 数 据 发送在前 首 部 数 据 IP 数据报
用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。 4 4 1 1 2 字节 源 IP 地址 目的 IP 地址 0 17 UDP长度 字节 12 2 2 2 2 长 度 伪首部 源端口 目的端口 检验和 UDP 用户数据报 首 部 数 据 发送在前 首 部 数 据 IP 数据报
在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。 4 4 1 1 2 字节 源 IP 地址 目的 IP 地址 0 17 UDP长度 字节 12 2 2 2 2 长 度 伪首部 源端口 目的端口 检验和 UDP 用户数据报 首 部 数 据 发送在前 首 部 数 据 IP 数据报
填充 计算 UDP 检验和的例子 10011001 00010011 → 153.19 00001000 01101000 → 8.104 10101011 00000011 → 171.3 00001110 00001011 → 14.11 00000000 00010001 → 0 和 17 00000000 00001111 → 15 00000100 00111111 → 1087 00000000 00001101 → 13 00000000 00001111 → 15 00000000 00000000 → 0(检验和) 01010100 01000101 → 数据 01010011 01010100 → 数据 01001001 01001110 → 数据 01000111 00000000 → 数据和 0(填充) 10010110 11101011 → 求和得出的结果 01101001 00010100 → 检验和 153.19.8.104 12 字节 伪首部 171.3.14.11 全 0 17 15 1087 13 15 全 0 数据 数据 数据 数据 数据 数据 数据 全 0 8 字节 UDP 首部 7 字节 数据 按二进制反码运算求和 将得出的结果求反码
7.4 传输控制协议TCP • TCP(transmission control protocol)即传输控制协议 • 特点是: • 是一个面向连接的协议 • 它提供双向的、可靠的、有流量控制的字节流的服务。 • 双向是指它提供全双工的可靠交付的服务 • 字节流服务的意思是,在一个TCP连接中,源节点发送一连串的字节给目的节点。 • TCP将这些字节缓冲,分段交给IP协议。缓冲区的大小用MSS表示,即最大分段长度,它的默认值是536。一个分段在语义上是没有意义的。 • 可靠服务是指数据有保证的传递、按序、没有重复。 • TCP协议用的返回到N协议(GBN//go back n)来提供可靠服务。还有一些版本的TCP和SACK TCP协议用选择重传协议(SRP)。
发送端 接收端 应用进程 应用进程 向发送缓存 写入数据块 从接收缓存 读取数据块 … … 端口 端口 TCP TCP 发送缓存 接收缓存 … 报文段 报文段 报文段 发送TCP报文段
7.4.2 TCP报文段的首部 32 bit 比特 0 8 16 24 31 20 字节的 固定首部 源 端 口 目 的 端 口 序 号 确 认 号 TCP 首部 数据 偏移 U R G A C K P S H R S T S Y N F I N 窗 口 保 留 检 验 和 紧 急 指 针 选 项 (长 度 可 变) 填 充 TCP 首部 TCP 数据部分 TCP 报文段 发送在前 IP 首部 IP 数据部分
7.4.3 TCP 的数据编号与确认 • TCP 协议是面向字节的。 • 在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。 • TCP 的确认是对接收到的数据的最高序号表示确认。
7.4.3 TCP 顺序号和确认号 源端口 目标端口 顺序号 # 确认号 # … 我发送 #10. Source Dest. Seq. Ack. 1028 23 10 1
TCP 顺序号和确认号 源端口 目标端口 顺序号 # 确认号 # … 我发送 #10. 我已收到 #10, 现在我需要 #11. Source Dest. Seq. Ack. 1028 23 10 1 Source Dest. Seq. Ack. 23 1028 1 11
TCP 顺序号和确认号 源端口 目标端口 顺序号 # 确认号 # … 我发送 #10. 我已收到 #10, 现在我需要 #11. Source Dest. Seq. Ack. 1028 23 10 1 Source Dest. Seq. Ack. 23 1028 1 11 Source Dest. Seq. Ack. 1028 23 11 2
TCP 顺序号和确认号 源端口 目标端口 顺序号 # 确认号 # … 我发送 #11 我已收到 #11, 现在我需要 #12. Source Dest. Seq. Ack. 1028 23 10 1 Source Dest. Seq. Ack. 23 1028 1 11 Source Dest. Seq. Ack. 1028 23 11 2 Source Dest. Seq. Ack. 12 23 1028 2
7.4.4 TCP 的流量控制与拥塞控制1. 滑动窗口的概念 • TCP 采用大小可变的滑动窗口进行流量控制。 • 窗口大小的单位是字节。
TCP 窗 口 接收方 发送方
TCP 窗 口 接收方 Window size = 300 Send 1 发送方 Window size = 300 Send 101 Window size = 300 Send 201
TCP 窗 口 发送方 接收方 Window size = 300 Send 1 Window size = 300 Send 101 Window size = 300 Send 201 数据 3 被丢弃 ACK 201 Window size = 200 允许发送方再发300字节
TCP 窗 口 发送方 接收方 Window size = 300 Send 1 Window size = 300 Send 101 Window size = 300 Send 201 数据 3 被丢弃 ACK 201 Window size = 200 Window size = 300 Send 201 Window size = 300 Send 301
TCP 窗 口 发送方 接收方 Window size = 300 Send 1 Window size = 300 Send 101 Window size = 300 Send 201 数据 201 被丢弃 ACK 201 Window size = 200 Window size = 300 Send 201 Window size = 300 Send 301 数据 301 被丢弃 ACK 301 Window size = 200 允许发送方再发200字节
2. 慢开始和拥塞避免 • 发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。 • 因此,每一个 TCP 连接需要有以下两个状态变量: • 接收端窗口 rwnd (receiver window) 又称为通知窗口(advertised window)。 • 拥塞窗口 cwnd (congestion window)。
接收端窗口 rwnd 和拥塞窗口 cwnd • (1) 接收端窗口 rwnd 这是接收端根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。 • (2) 拥塞窗口 cwnd (congestion window) 是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。
发送窗口的上限值 • 发送端的发送窗口的上限值应当取为接收端窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定: 发送窗口的上限值 Min [rwnd, cwnd] (7-1) • 当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。 • 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
发生超时 线性规律增长 进入拥塞避免 进入拥塞避免 指数规律增长 慢开始和拥塞避免算法的实现举例 拥塞窗口 cwnd 24 20 ssthresh = 16 16 更新后的 ssthresh = 12 12 8 4 传输次数 0 0 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。 慢开始门限的初始值设置为 16 个报文段, 即 ssthresh = 16。
乘法减小(multiplicative decrease) • “乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。 • 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。
加法增大(additive increase) • “加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
必须强调指出 • “拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。 • “拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
7.4.7 TCP的运输连接管理 • TCP是面向连接的协议。运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。 • 在连接建立过程中要解决以下三个问题。 • (1)要使每一方能够确知对方的存在。 • (2)要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。 • (3)能够运输实体资源(如缓存大小,连接表中的项目等)进行分配。 • TCP的连接和建立都是采用客户服务器方式。主动发起连接建立的进程叫做客户(client),而被动等待连接建立的进程叫做服务器(server)。
1 TCP 三次握手 Host A Host B 发送 SYN (seq=100 ctl=SYN) 接收 SYN
1 2 TCP 三次握手 Host A Host B 发送 SYN (seq=100 ctl=SYN) 接收 SYN 发送 SYN, ACK (seq=300 ack=101 ctl=syn,ack) 接收 SYN
1 2 3 TCP 三次握手 Host A Host B 发送 SYN (seq=100 ctl=SYN) 接收 SYN 发送 SYN, ACK (seq=300 ack=101 ctl=syn,ack) 接收 SYN 建立会话 (seq=101 ack=301 ctl=ack)