Presentation is loading. Please wait.

Presentation is loading. Please wait.

计算机网络 Computer Network

Similar presentations


Presentation on theme: "计算机网络 Computer Network"— Presentation transcript:

1 计算机网络 Computer Network
2018年12月31日

2 课程目录 第1章 概述 第2章 物理层与数据通信基础 第3章 数据链路层 第4章 局域网 第5章 网络层 第6章 网络互联技术
第1章 概述 第2章 物理层与数据通信基础 第3章 数据链路层 第4章 局域网 第5章 网络层 第6章 网络互联技术 第7章 传输层 第8章 应用层 第9章 网络管理与信息安全 第10章 网络新技术专题 计算机网络--刘桂江

3 第7章 传输层 7.1 传输层概述 7.2 互联网传输协议 计算机网络--刘桂江

4 7.1 传输层概述 7.1.1 提供给高层的服务 7.1.2 服务质量 7.1.3 多路复用技术 计算机网络--刘桂江

5 7.1.1 提供给高层的服务 传输层与其上下层之间的关系 传输层向高层提供两种类型的服务:面向连接的传输服务和无连接的传输服务。 传输实体
提供给高层的服务 传输实体 传输协议 传输层 层接口 传输服务用户 (应用层实体) 网络层 应用层 主机 A 主机 B 传输层服务访问点 TSAP 网络层服务访问点 NSAP 完成传输层功能的硬件或软件 传输层与其上下层之间的关系 传输层向高层提供两种类型的服务:面向连接的传输服务和无连接的传输服务。 计算机网络--刘桂江

6 7.1.2 服务质量 传输层服务质量是指在两节点之间表现出来的某些传输连接的特征,是传输层性能的度量,反映了传输质量及服务的可用性。
服务质量 传输层服务质量是指在两节点之间表现出来的某些传输连接的特征,是传输层性能的度量,反映了传输质量及服务的可用性。 传输层服务质量参数表 传输层服务质量不是由单方面决定 的,一般它需要连接的双方有一个 协商的过程。 连接建立延迟 连接建立失败概率 吞吐量 传输延迟 残留差错率 保护性 优先权 回弹率 计算机网络--刘桂江

7 7.1.3 多路复用技术 向上复用的使用往往是出于费用上的考虑;向下复用的目的是为了提高吞吐量。 (a)向上多路复用 (b)向下多路复用
多路复用技术 应用层 网络层 至路由器 TSAP NSAP 传输层 (a)向上多路复用 (b)向下多路复用 向上复用的使用往往是出于费用上的考虑;向下复用的目的是为了提高吞吐量。 计算机网络--刘桂江

8 7.2 互联网传输协议 7.2.1 TCP简介 7.2.2 TCP服务模型 7.2.3 TCP协议 7.2.4 TCP报文段头
7.2 互联网传输协议 TCP简介 TCP服务模型 TCP协议 TCP报文段头 TCP连接管理 TCP传输策略 TCP流量控制和拥塞控制 TCP计时器 UDP协议简介 计算机网络--刘桂江

9 7.2.1 TCP简介 TCP(传输控制协议)是TCP/IP体系中面向连接的传输层协议,它提供全双工的服务。
计算机网络--刘桂江

10 TCP服务模型(1 /5) TCP是使用连接来进行通信的。当一个应用进程希望与另一个远程的应用进程建立连接的时候,除了要知道对方的主机地址外,它还必须知道要连接到对方哪个应用进程上,从而实现端到端的通信。 应用进程 应用进程 AP1 AP4 AP2 AP3 5 4 3 2 1 端口 端口 传输层提供应用进程间的逻辑通信 5 4 3 2 1 IP 层 传输层提供端到端的服务 计算机网络--刘桂江

11 TCP服务模型(2 /5) 在传输层上通常使用的方法是为那些能够监听连接请求的进程定义TSAP;在Internet中,这些访问点就被称为端口。同样,在网络层上的访问点被称为NSAP。IP地址就是NSAP的特例。 NSAP、TSAP和传输连接之间的关系 计算机网络--刘桂江

12 7.2.2 TCP服务模型(3 /5) 客户机上的应用进程如何知道服务器上的服务器进程是被关联到某个特定端口上的呢? 常用的方法有两种:
(1)对于一些少数且关键的服务器进程(例如Web服务器),它们被连接请求的频率高,而且一旦连接上以后维持的时间一般也比较长,则将这些典型服务器进程与熟知的TSAP永久地关联起来。且这些关键服务进程和对应的熟知TSAP往往被罗列在某个文件中。 (2)采用名字服务器或目录服务器。 计算机网络--刘桂江

13 7.2.2 TCP服务模型(4/5) 套接字(socket)
为了区分不同主机中的进程,TCP/IP协议簇将主机的IP地址与端口结合起来,定义为通信的一个端点,称之为套接字。 套接字、端口和IP地址的关系是: IP 地址 端口号 25 套接字 (16位) 计算机网络--刘桂江

14 TCP服务模型(5 /5) 三类端口 (1)熟知端口,其数值为0~1023。这一类端口由ICANN负责分配给一些常用的应用层程序固定使用。 (2)登记端口,其数值为1024~49151。这类端口是ICANN控制的,使用这个范围的端口必须在ICANN登记,以防止重复。 (3)动态端口,其数值为49152~65535。这类端口是留给客户进程选择作为临时端口。 计算机网络--刘桂江

15 7.2.3 TCP协议 在TCP协议中需要关注的几个问题: (1)TCP连接上的每个字节都是有编号的,即都有它自己独有的32位序列号。
(3)滑动窗口协议 (4)错序问题 计算机网络--刘桂江

16 7.2.4 TCP报文段头 一个TCP报文段分为首部和数据两部分。TCP首部由固定首部和可选的附加选项组成。
计算机网络--刘桂江

17 TCP报文段首部结构图 32 bit 比特0 8 16 24 31 源 端 口 目 的 端 口 序 号 20 字节的 固定首部 TCP 首部
比特 源 端 口 目 的 端 口 序 号 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 数据部分 TCP报文段首部结构图 计算机网络--刘桂江

18 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 源端口和目的端口——各占2个字节。端口是传输层与应用层的服务接口,它们分别与源IP地址和目的IP地址一起标识一个TCP连接的两个端点,传输层的复用和分用功能都要通过端口才能实现。 计算机网络--刘桂江

19 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 计算机网络--刘桂江

20 确认序号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 确认序号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 计算机网络--刘桂江

21 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 数据偏移——占4bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 bit字(即4字节为计算单位)。 计算机网络--刘桂江

22 保留字段——占 6 bit,保留为今后使用,但目前都置为 0。
比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 保留字段——占 6 bit,保留为今后使用,但目前都置为 0。 计算机网络--刘桂江

23 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 紧急比特 URG ——紧急标志位。当 URG  1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 计算机网络--刘桂江

24 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 确认比特 ACK ——确认标志位。当ACK=1时表明报文段中确认序号字段有效,这时可以理解当前发送的报文段为确认报文;当ACK=0时表明确认序号字段无效。 计算机网络--刘桂江

25 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 推送PSH (Push) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。 计算机网络--刘桂江

26 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 复位RST (Reset) ——复位标志。当RST=1时表明TCP连接中出现严重差错(例如主机崩溃),这时必须释放当前连接然后再重新建立一个新的传输连接。另外RST置1还可以用来拒绝接收一个非法报文段,或拒绝建立一个连接。 计算机网络--刘桂江

27 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 同步SYN ——建立连接标志。建立连接过程中,在客户端发出请求建立连接的报文段中:SYN=1,ACK=0;在服务器端表示接收建立连接的报文段中:SYN=1,ACK=1;所以可用SYN来区分与建立连接有关的报文段,而用ACK进一步区分是连接请求还是连接接收。 计算机网络--刘桂江

28 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 终止FIN (Final) ——释放连接标志。当FIN=1时表示此报文段的发送方的数据发送已经结束,并要求释放传输连接。注意这是个单方面请求释放连接,即仍然还允许对方发送数据过来。 计算机网络--刘桂江

29 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 窗口大小字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。 计算机网络--刘桂江

30 检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。 计算机网络--刘桂江

31 在计算检验和时,临时把“伪首部”和TCP报文段连接在一起,得到一个临时的TCP报文段。检验和就针对这个临时的TCP报文段来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。
计算机网络--刘桂江

32 TCP计算检验和的具体方法: 在发送方,首先是把全零放入检验和字段,再把伪首部以及TCP报文段看成是由许多16位的字串接起来。若TCP报文段的数据部分长度不是4N(N为正整数)字节的整数倍,则要填充全零字串在后面直至长度为4N字节。然后按二进制反码计算出这些16位字的和,将此和的二进制反码写入检验和字段后,发送该TCP报文段。 在接收方,把收到的TCP报文段增加伪首部(以及可能的填充全零字节)一起,按二进制反码计算出这些16位字的和。当无差错时其结果应为全1;否则就表明出现传输错误,接收方应丢弃这个错误的TCP报文段(当然也可以上交给应用层,但附上出现了差错的警告)。 计算机网络--刘桂江

33 紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中,紧急数据一共有多少个字节。它和紧急标志位URG配合使用。
比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中,紧急数据一共有多少个字节。它和紧急标志位URG配合使用。 计算机网络--刘桂江

34 比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 附加选项字段 —— 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 附加选项是可选的,如果主机没有使用这个选项,则缺省使用MSS的默认值是536。另外,一个连接两个方向上的最大数据段长度MSS可以不相同。 计算机网络--刘桂江

35 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
比特 源 端 口 目 的 端 口 序 号 20 字节 固定 首部 TCP 首部 确 认 序 号 数据 偏移 U R G A C K P S H R S T S Y N F I N 保 留 窗 口 大 小 检 验 和 紧 急 指 针 附 加 选 项 (长 度 可 变) 填 充 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。 计算机网络--刘桂江

36 7.2.5 TCP连接管理(1 /8) 1.建立TCP连接 TCP协议中使用三次握手方法建立连接。 为何不用两次握手方法建立连接?
ACK=0 1、防止可能发生的死锁 2、防止已失效的连接再次传到被连接的主机 三次握手法 为何不用两次握手方法建立连接? 计算机网络--刘桂江

37 7.2.5 TCP连接管理(2 /8) 2.释放TCP连接 释放连接有两种方式:非对称释放和对称释放。 (1)非对称释放
主机 主机 A A 主机 主机 B B 连接建立 连接建立 DATA 1 DATA 1 发送第一 发送第一 个数据 个数据 ACK ACK 发送确认 发送确认 该方法较为粗暴,可能会导致数据丢失。 发送第二 发送第二 DATA 2 DATA 2 撤消连接 撤消连接 个数据 个数据 在一方断开连接后不再 接收数据,数据丢失 时间 时间 时间 时间 计算机网络--刘桂江

38 7.2.5 TCP连接管理(3 /8) (2)对称释放方法 主机 A 主机 B 释放请求即 FIN=1 , seq =x A 不再发送
ACK=1 seq =y ack =x + 1 通知主机 数据 进程并发 半关闭状态 送确认 FIN=1 seq =y+1 ack =x + 1 释放请求即 B 也不再发 发送确认 ACK=1 seq =x+1 ack =y + 2 送数据 关闭状态 时间 时间 计算机网络--刘桂江

39 7.2.5 TCP连接管理(4 /8) 不过,对称释放协议并不总是可以正确地工作。它存在两军队问题。 两军队问题
用“断开连接”来代替军队的“发起进攻” 。如果任何一方一定要在确定另一方已经做好了断开连接的准备之后才准备断开连接的话,那么,断开连接的操作将永远都不可能发生。 计算机网络--刘桂江

40 TCP连接管理(5 /8) *3.有限状态机 建立连接和释放连接所要求的步骤可以用一个有限状态机来表达。该状态机有11种状态,在每一种状态中,都存在一些合法的事件。当合法事件发生的时候,可能需要采取某个动作;当其他事件发生的时候,则报告一个错误。 计算机网络--刘桂江

41 7.2.5 TCP连接管理(6 /8) TCP有限状态机中存在的状态 状态 说明 CLOSED 没有活动的连接,或者未完成的连接
LISTEN 服务器正在等待进来的连接请求 SYN_RCVD 一个连接请求已经到达;等待ACK SYN_SENT 应用程序已经开始打开连接 ESTABLISHED 正常的数据传输状态 FIN_WAIT_1 一方请求释放连接 FIN_WAIT_2 另一方已经同意释放连接 TIME_WAIT 等待所有的分组逐渐消失 CLOSING 双方试图同时关闭连接 CLOSE_WAIT 另一方已经发起了释放连接的过程 LAST_ACK TCP有限状态机中存在的状态 计算机网络--刘桂江

42 TCP连接管理(7/8) 每个连接都从CLOSED状态开始。当它执行了一个被动的打开操作(LISTEN),或者一个主动的打开操作(CONNECT)的时候,它就离开CLOSED状态。如果另一端执行了相对应的操作,则连接被建立起来,当前状态变成ESTABLISHED;连接的释放过程可以由任何一方发起,当释放完成的时候,状态又回到了CLOSED。 计算机网络--刘桂江

43 TCP 的 有 限 状 态 机 计算机网络--刘桂江

44 TCP传输策略(1 /5) TCP 协议是面向字节流的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。 在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。 TCP 发送的确认报文段是对接收到的数据的最高序号表示确认。接收端返回的确认序号是已收到的数据的最高序号加 1。也就是说,确认序号表示接收端期望下次收到的数据中的第一个数据字节的序号。 计算机网络--刘桂江

45 7.2.6 TCP传输策略(2 /5) TCP传输的可靠就是由于使用了序号和确认机制:
在TCP发送一个报文段时,它同时也在自己的重传队列中存放一个副本,并启动一个计时器。若收到该报文段的确认,则删除此副本;若在计时器超时之前没有收到确认,则重传此报文段的副本。TCP的确认并不保证数据已由应用层交付给了端用户,而只是表明在接收方的TCP收到了发送方所发送的报文段。 计算机网络--刘桂江

46 7.2.6 TCP传输策略(3 /5) TCP的发送和确认机制
在发送方,TCP一般是根据以下三种基本机制来控制报文段的发送时机。第一种机制是TCP维持一个变量,它等于接收方确认报文段中的最大报文长度MSS,这个数值给出了接收方的最大数据接收能力,因此只要发送方发送缓存从发送进程中得到的数据已达到MSS字节时,就组装成一个TCP报文段,然后发送出去。第二种机制是当发送方的应用进程指明要求发送一个报文段时,即使用了TCP的推送(PUSH)操作,则TCP立即将这个报文段单独发送出去。第三种机制是当发送方的一个计时器期限到了,这说明某一个已发送出去的报文段在规定时限之内没有收到确认,于是发送方就把该计时器所对应的报文段副本从重传队列中取出再次发送出去。 计算机网络--刘桂江

47 TCP传输策略(4 /5) 在接收方,当接收方的接收缓存已经装满数据,就会返回一个确认,并设置窗口(WIN)的值为0,这时发送方是不能够再正常地发送数据段了。但这里有两种意外情形允许发送方继续发送报文段。第一,紧急数据仍可以发送,例如要中断远程机器上运行的某一个进程。第二,发送方可以发送一个1字节的数据段,要求接收方重申窗口大小及下一个准备接收的数据字节序号。这是避免当一个返回窗口信息的确认丢失之后发生死锁的情形。 计算机网络--刘桂江

48 7.2.6 TCP传输策略(5/5) Nagle算法 Clark算法(糊涂窗口综合症)
Nagle算法和Clark算法针对糊涂窗口综合症的解决方案是相互补充的。Nagle算法试图解决由于发送方每次向TCP只传送一个字节而引起的问题;Clark算法则试图解决由于接收方每次从TCP流中只读取一个字节而引起的问题。这两种算法都是有效的,而且可以一起工作。它们要达到的目标是:发送方不要发送太小的数据段,接收方也不要请求太小的数据段。 计算机网络--刘桂江

49 7.2.7 TCP流量控制和拥塞控制(1/14) 1.TCP流量控制 TCP 采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。
空闲缓冲区 缓冲的TCP数据 RecvWindow RecvBuffer 网络来的数据 用户进程 计算机网络--刘桂江

50 TCP流量控制和拥塞控制(2/14) 在 TCP 报文段首部的窗口(WIN)字段写入的数值就是当前给对方设置的发送窗口数值的上限。 发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。 计算机网络--刘桂江

51 设主机A和B的连接已经建立完毕,双方商定的初始窗口值是500。再设每一个报文段的数据字段的长度为100字节,数据报文段序号的初始值为1。
计算机网络--刘桂江

52 7.2.7 TCP流量控制和拥塞控制(4/14) 2.TCP拥塞控制
发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。 因此,每一个 TCP 连接需要维护以下两个状态变量: 接收窗口 rwnd (receiver window) 又称为通知窗口(advertised window)。 拥塞窗口 cwnd (congestion window)。 计算机网络--刘桂江

53 TCP流量控制和拥塞控制(5/14) (1) 接收窗口 rwnd 这是接收端根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。 (2) 拥塞窗口 cwnd (congestion window) 是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。 计算机网络--刘桂江

54 7.2.7 TCP流量控制和拥塞控制(6/14) 发送窗口的上限值
发送端的发送窗口的上限值应当取为接收端窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定: 发送窗口的上限值  Min(rwnd, cwnd) 当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。 计算机网络--刘桂江

55 TCP流量控制和拥塞控制(7/14) 为了在传输层进行拥塞控制,1999年公布的互联网建议标准[RFC 2581]定义了四种算法,即慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。 计算机网络--刘桂江

56 7.2.7 TCP流量控制和拥塞控制(8/14) 慢开始算法的原理
在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。 在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。 用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。 实际上,每一批被确认的报文段都会使拥塞窗口加倍。拥塞窗口一直呈指数增长,直至发生超时,或者达到接收窗口的大小。 计算机网络--刘桂江

57 TCP流量控制和拥塞控制(9/14) 实际中慢开始算法往往还未出现超时就已停止使用,而改用拥塞避免算法。因此TCP连接还需要设置另一个状态参数,称之为慢开始门限ssthresh。它的用法如下: 当cwnd<ssthresh时,使用上述的慢开始算法; 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法; 当cwnd=ssthresh时,或者使用慢开始算法,或者使用拥塞避免算法。 计算机网络--刘桂江

58 7.2.7 TCP流量控制和拥塞控制(10/14) 拥塞避免算法的原理
使发送方的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小(而不管在时间RTT内收到了几个ACK)。这样,拥塞窗口cwnd将是按线性规律缓慢增长,比慢开始算法中拥塞窗口的增长速率要缓慢的多了。 计算机网络--刘桂江

59 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。
慢开始和拥塞避免算法的实现举例(1/10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。 慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。 计算机网络--刘桂江

60 慢开始和拥塞避免算法的实现举例(2 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。 计算机网络--刘桂江

61 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。
慢开始和拥塞避免算法的实现举例(3 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。 计算机网络--刘桂江

62 慢开始和拥塞避免算法的实现举例(4 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。 计算机网络--刘桂江

63 慢开始和拥塞避免算法的实现举例(5 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M4 ~ M6共 4个报文段。 计算机网络--刘桂江

64 发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。
慢开始和拥塞避免算法的实现举例(6 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。 计算机网络--刘桂江

65 慢开始和拥塞避免算法的实现举例(7 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 拥塞避免 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 慢开始 拥塞避免 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。 计算机网络--刘桂江

66 假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。
慢开始和拥塞避免算法的实现举例(8 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。 计算机网络--刘桂江

67 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。
慢开始和拥塞避免算法的实现举例(9 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。 计算机网络--刘桂江

68 当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。
慢开始和拥塞避免算法的实现举例(10 /10) 拥塞窗口 cwnd 发生超时 线性规律增长 24 20 进入拥塞避免 进入拥塞避免 16 ssthresh = 16 12 更新后的 ssthresh = 12 8 4 指数规律增长 传输次数 2 4 6 8 10 12 14 16 18 20 22 慢开始 拥塞避免 慢开始 拥塞避免 当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。 计算机网络--刘桂江

69 7.2.7 TCP流量控制和拥塞控制(11/14) 必须强调指出
“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。 “拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。 计算机网络--刘桂江

70 TCP流量控制和拥塞控制(12/14) 慢开始和拥塞避免算法是在TCP中最早使用的拥塞控制算法。但后来人们发现这种拥塞控制算法还需要改进,因为有时一条TCP连接会因为等待重传计时器的超时而空闲较长的时间。为此后来又增加了两个新的拥塞控制算法,这就是快重传和快恢复。 计算机网络--刘桂江

71 7.2.7 TCP流量控制和拥塞控制(13/14) 快重传算法的原理
快重传算法规定,发送端只要一连收到三个重复的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。 不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。 计算机网络--刘桂江

72 快重传举例 主机 A 主机 B M1, M2 A 发送 M1 和 M2 ACK2, ACK3 B 确认 M1 和 M2 M3 丢失!
B 发送第二个重复确认 ACK3 M6 A 发送 M6 ACK3 B 发送第三个重复确认 ACK3 M3 A 收到了三个重复的确认 ACK3,就立即重传 M3,而不必等待超时重传。 计算机网络--刘桂江

73 7.2.7 TCP流量控制和拥塞控制(14/14) 快恢复算法的原理
(1) 当发送端收到连续三个重复的 ACK 时,就重新设置慢开始门限 ssthresh。 (2) 与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是设置为 ssthresh + 3  MSS。 (3) 若收到的重复的 ACK 为 n 个(n > 3),则将 cwnd 设置为 ssthresh + n  MSS。 (4) 若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。 (5) 若收到了确认新的报文段的 ACK,就将 cwnd 缩小到 ssthresh。 计算机网络--刘桂江

74 7.2.8 TCP计时器(1 /8) TCP使用多个定时器来辅助其完成工作,其中最重要的是重传定时器。
计算机网络--刘桂江

75 TCP计时器(2 /8) 由于 TCP 的下层是一个互连网环境,IP 数据报所选择的路由变化很大。因而传输层的往返时延的方差也很大。 T1 T2 往返时延的 概率分布 往返时间 T 数据链路层中往返时延的概率密度 TCP中往返时延的概率密度 计算机网络--刘桂江

76 7.2.8 TCP计时器(3 /8) TCP采用了一种自适应算法
记录每一个报文段发出的时间,以及收到相应的确认报文段的时间。这两个时间之差就是报文段的往返时延。 将各个报文段的往返时延样本加权平均,就得出报文段的平均往返时延 RTT。 每测量到一个新的往返时延样本,就按下式重新计算一次平均往返时 延 RTT: 平均往返时延RTT    (旧的RTT)  (1  )  (新的往返时延样本) 在上式中, 是修正因子,取值范围为:0≤  < 1。它决定RTT的历史值在计算中所占的比例,一般取 =7/8。 计算机网络--刘桂江

77 7.2.8 TCP计时器(4 /8) 即使有了一个好的平均RTT值,要选择一个合适的超时重传时间间隔仍然不是一件很容易的事情。
计算机网络--刘桂江

78 TCP计时器(5 /8) Jacobson算法 在1988年,Jacobson提出来让β与确认到达时间概率密度函数的标准偏差成正比,即大的变化意味着大的β,反之亦然。尤其是,他建议使用平均偏差作为标准偏差的粗略估计。在他的算法中要求TCP实体维护一个被平滑的偏差变量D,它为来回时间的测定值与估计值之间的偏差。当得到RTT的最新估计值之后,用以下公式修正变量D: D = αD + (1-α)|RTT - M| 最后按以下公式设置超时重传时间间隔: timeout = RTT + 4×D 计算机网络--刘桂江

79 TCP计时器(6 /8) 往返时间的确认二义性 TCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。 如何判定此确认报文段是对原来的报文段 1 的确认,还是对重传的报文段 2 的确认? 是对哪一个报文段 的确认? 发送一个 TCP 报文段 超时重传 TCP 报文段 收到 ACK 1 2 时间 往返时延 RTT? 往返时延 RTT? 计算机网络--刘桂江

80 7.2.8 TCP计时器(7 /8) Karn 算法 在计算平均往返时延 RTT 时,只要报文段重传了,就不采用其往返时延样本。
计算机网络--刘桂江

81 7.2.8 TCP计时器(8/8) 修正的 Karn 算法 报文段每重传一次,就将重传时间增大一些:
新的重传时间    (旧的重传时间) 系数  的典型值是2 。 当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTT 和重传时间的数值。 实践证明,这种策略较为合理。 计算机网络--刘桂江

82 UDP协议简介(1/6) UDP和TCP不同,它是一种无连接方式的、不可靠的传输协议,也就是说不需要连接建立和连接释放过程,没有流量控制、拥塞控制,UDP数据报在传输过程中可能会丢失,可能会失序,可能会延迟等等。 它是一个非常简单的传输层协议。 UDP仅仅是在IP提供的服务基础上增添了多路复用和分用的功能。 计算机网络--刘桂江

83 7.2.9 UDP协议简介(2/6) UDP的优点: UDP是无连接的,减少了开销和发送数据之前的时延。
UDP用户数据报的首部只有8个字节,比TCP报文段的首部至少是20个字节要短,大大减小了网络开销。 计算机网络--刘桂江

84 UDP协议简介(3/6) UDP用户数据报的首部和伪首部 计算机网络--刘桂江

85 UDP协议简介(4/6) 用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。 字节 4 4 1 1 2 源 IP 地址 目的 IP 地址 17 UDP长度 字节 12 2 2 2 2 伪首部 源端口 目的端口 长 度 检验和 UDP 用户数据报 首 部 数 据 发送在前 首 部 数 据 IP 数据报 计算机网络--刘桂江

86 7.2.9 UDP协议简介(5/6) 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。 字节
4 4 1 1 2 源 IP 地址 目的 IP 地址 17 UDP长度 字节 12 2 2 2 2 伪首部 源端口 目的端口 长 度 检验和 UDP 用户数据报 首 部 数 据 发送在前 首 部 数 据 IP 数据报 计算机网络--刘桂江

87 计算 UDP 检验和的例子 → 0 和 17 → 15 → 1087 → 13 → 0(检验和) → 数据 → 数据 → 数据 → 数据和 0(填充) → 求和得出的结果 → 检验和 12 字节 伪首部 全 0 数据 数据 数据 数据 数据 数据 数据 全 0 8 字节 UDP 首部 7 字节 数据 填充 按二进制反码运算求和 将得出的结果求反码 计算机网络--刘桂江


Download ppt "计算机网络 Computer Network"

Similar presentations


Ads by Google