第
This presentation is the property of its rightful owner.
Sponsored Links
1 / 121

第 5 章 运输层 PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

第 5 章 运输层. 教学内容 5.1 传输层协议概述 5.2 用户数据报协议 UDP 5.3 传输控制协议 TCP 概述 5.4 可靠传输的工作原理 5.5 TCP 报文段的首部格式 5.6 TCP 可靠传输的实现 5.7 TCP 的流量控制 5.8 TCP 的拥塞控制 5.9 TCP 的运输连接管理. 第 5 章 运输层. 本章重点 运输层协议的功能 端口与套接字 TCP 报文格式 TCP 的流量控制与拥塞控制 TCP 和连接与释放. 5.1 传输层协议概述. 5.1.1 进程之间的通信 传输层在层次体系结构中的地位

Download Presentation

第 5 章 运输层

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


5

第5章 运输层

  • 教学内容

    5.1 传输层协议概述

    5.2 用户数据报协议UDP

    5.3 传输控制协议TCP概述

    5.4 可靠传输的工作原理

    5.5 TCP报文段的首部格式

    5.6 TCP可靠传输的实现

    5.7 TCP的流量控制

    5.8 TCP的拥塞控制

    5.9 TCP的运输连接管理

计算机工程学院 伍俊明


5

第5章 运输层

  • 本章重点

    • 运输层协议的功能

    • 端口与套接字

    • TCP报文格式

    • TCP的流量控制与拥塞控制

    • TCP和连接与释放

计算机工程学院 伍俊明


5

5.1 传输层协议概述

5.1.1 进程之间的通信

  • 传输层在层次体系结构中的地位

    • 属于面向通信部分的最高层,用户功能中的最低层

    • 为应用层提供通信服务

应用层

面向信息处理

用户功能

运输层

网络层

数据链路层

面向通信

网络功能

物理层

计算机工程学院 伍俊明


5

5.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 的作用范围

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 如何为应用进程提供逻辑通信

    • 两个主机进行通信实际上就是两个主机中的应用进程互相通信。应用进程之间的通信又称为端到端的通信。

    • 传输层根据下面通信子网的特性最佳地利用网络资源,以可靠和经济的方式在两端主机的应用进程之间,建立一条运输连接,以透明地传送报文,即运输层向上一层为进行通信的两个进程之间提供一个端到端的逻辑通信,使它们看不见运输层以下的数据通信细节。

    • 在通信子网内的各个交换节点以及连接各通信子网的路由器只能为主机之间提供逻辑通信,而且都没有运输层,所以,运输层只能存在于通信子网外面的主机中。

  • 运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 运输层协议和网络层协议的主要区别

应用进程

应用进程

因 特 网

IP 协议的作用范围

(提供主机之间的逻辑通信)

TCP 和 UDP 协议的作用范围

(提供进程之间的逻辑通信)

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 传输层的必要性

    • 消除网络层的不可靠性——网络层分组传送不可靠;

      • 无法确定数据到达终点的时间,因为子网中各站点存储转发的随机性

      • 无法确定数据未达终点的状态,因为存在丢失/延迟/即刻到达的现象

    • 在一个网络连接上实现多对进程之间通信的复用与分用

    • 解决多互连的通信子网的通信协议的差异和提供的服务功能的不同

    • 解决通信子网自身不能解决的传输错误

      提供从源端主机到目的端主机的可靠的、与实际使用的(而且用户无法控制的)网络无关的信息传输。

如:电信公司提供的通信网

计算机工程学院 伍俊明


5

Source IP: C

Dest IP: B

source port: x

dest. port: 80

Source IP: C

Dest IP: B

source port: y

dest. port: 80

Source IP: A

Dest IP: B

source port: x

dest. port: 80

5.1 传输层协议概述

  • 传输层的主要功能

    • 端到端的连接管理与端-端通信

      • 建立连接

      • 数据传输

      • 释放连接

    • 流量控制

    • 差错控制(数据部分)

    • 复用和分用

Web客户端

主机 C

Web

服务器 B

Web客户端

主机 A

端口的使用: Web 服务器

计算机工程学院 伍俊明


5

主机A

传输服务用户

(应用层实体)

主机B

传输服务用户

(应用层实体)

应用层

传输层服务

访问点TSAP

层接口

传输层

传输层实体

传输层实体

传输层协议

层接口

网络层

网络层服务

访问点NSAP

5.1 传输层协议概述

  • 传输层与其上下层之间的关系及其OSI表示

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 传输层提供的服务:

    • 面向连接的可靠传输服务(如因特网中的TCP协议)

    • 无连接的不可靠传输服务(如因特网中的UDP协议) 。

  • 传输服务的工作模式是客户机/服务器模式

数据

数据

数据

数据

全双工可靠信道

不可靠信道

使用 TCP 协议

使用 UDP 协议

使用UDP协议

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 服务质量:可以由一些特定的参数来描述

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 选项协商:通信双方以及网络可以协商确定一些服务质量参数

计算机工程学院 伍俊明


5

应用层

UDP

TCP

IP

与各种网络接口

5.1 传输层协议概述

5.1.2 传输层中的两个协议

  • 用户数据报协议UDP(User Datagram Protocol)

    • 提供不可靠的无连接的服务,实现尽力而为的传输

    • TPDU称为UDP报文或用户数据报

  • 传输控制协议TCP(Transmission Control Protocol)

    • 提供可靠的面向连接的服务,由于需要确认、流量控制、计时和连接管理,会增加许多开销

    • TPDU称为TCP报文段

  • 两点强调

    • UDP数据报与IP数据报存在很大区别:IP数据报要经过互连网中的路由器进行转发,而UDP数据报是在传输层之间的端到端的逻辑信道中传输

    • TCP和网络层中的虚电路完全不同:TCP报文段是在传输层的端到端的逻辑信道中传送,是可靠的全双工通信,但这样的信道却不知道经过哪些路由器,而路由器也不知道上面是否建立了TCP连接

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 使用UDP和TCP协议的各种应用和应用层协议

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 使用UDP和TCP协议的各种应用和应用层协议

计算机工程学院 伍俊明


5

5.1 传输层协议概述

5.1.3 运输层的端口

  • 传输层与网络层最大的区别是传输层提供应用进程之间通信能力。因此,通信端点的标识不仅是主机地址,还包括可以描述进程的某种信息。为此TCP/IP协议提出了协议端口TSAP的概念,用于标识通信的进程。

  • 端口是一种抽象的软件结构,包括一些数据结构和I/O缓冲区。

  • 端口用一个16位的端口号进行标识,端口号只具有本地意义和动态特性,用来标识区分本机中应用层的各进程。

  • UDP和TCP都使用端口与上层的应用进程进行通信和交互,因此在传输协议数据单元TPDU的首部都需要写入源端口和目的端口。

  • 应用进程通过系统调用与某端口建立连接(binding绑定)后,从该端口将数据发给传输层,传输层传给该端口的数据都被相应绑定的进程所接收。因此,端口标志着应用层的进程。

  • 采用了复用和分用技术,在传输层与网络层的交互中只看见TCP报文段或UDP数据报,看不见应用进程。

计算机工程学院 伍俊明


5

发送方

应用进程

接收方

应用进程

端口

端口

TCP复用

UDP复用

TCP分用

UDP分用

TCP报文段

UDP报文

TCP报文段

UDP报文

IP复用

IP分用

IP数据报

IP数据报

IP网络

5.1 传输层协议概述

  • 端口在进程通信中所起的作用

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 端口号的分类

    • 熟知端口(well-known port):0—1023由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用:

    • 登记端口(1024 — 49151):为防止重复,需在ICANN登记。

    • 客户端口(49152 —65535):用来随时分配给请求通信的客户进程,当进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口绑定起来。

计算机工程学院 伍俊明


5

客户机

服务器

210.25.33.92: 1234

218.92.9.156: 80

IP 地址

端口号

1500

131.6.23.13

协议

IP地址

端口号

插口(socket)

131.6.23.13 : 1500

5.1 传输层协议概述

  • 套接字socket,即套接口,或插口,由IP地址和端口号两部分组成,用来表示连接一个端点,好比单位电话号码+内部分机号码唯一表示通话的一方。无论是面向连接的TCP协议,还是无连接的UDP协议都需用到套接字的概念。

插口和端口、IP 地址的关系

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 同一个名词 socket有多种不同的意思

    • 应用编程接口API称为 socket API, 简称为 socket。

    • socket API 中使用的一个函数名也叫作socket。

    • 调用 socket 函数的端点称为 socket。

    • 调用 socket函数时其返回值称为socket描述符,可简称为 socket。

    • 在操作系统内核中连网协议的Berkeley实现,称为 socket 实现。

计算机工程学院 伍俊明


5

5.1 传输层协议概述

  • 识别接收端的TSAP(IP地址:端口号)——选讲

    • 连接的发起方如何确定对方的TSAP?

    • 静态分配TSAP

      • 每个用户进程拥有固定的、公开的TASP

      • 每个用户进程始终侦听TSAP

    • 动态分配TSAP(用C/S方式)

      • 进程服务器,统一处理传输连接请求

      • 名字(或目录)服务器

计算机工程学院 伍俊明


5 2 udp

5.2 用户数据报协议UDP

5.2.1 UDP概述

  • 用户数据报协议UDP:建立在IP之上的一种无连接的、不可靠的数据报传输服务,它只比IP数据报服务增加了端口、复用与分用和差错控制的功能。UDP实体只是将数据报送上网络,或者从网上接收数据报。

  • UDP与IP的差别

    • IP由系统管理的网络软件使用,一般用户无法使用

    • UDP可由普通用户直接使用,故称为用户数据报UDP

    • UDP必须运行在IP之上,增加端口、差错控制等功能。

  • UDP保留应用程序定义的边界

    • 不会将两个以上应用报文合并为一个

    • 不会将一个应用报文分为几段。

  • UDP根据端口(Port)号对若干个应用程序进行多路复用,并能利用检验和检查数据的完整性。

计算机工程学院 伍俊明


5 2 udp1

5.2 用户数据报协议UDP

  • 基于UDP的应用程序必须自己解决可靠性问题,如报文丢失、报文重复、报文失序、流量控制等。

  • 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。

    • 无连接:发送数据之前不需要建立连接。

    • 尽最大努力传输:不保证可靠交付,不使用拥塞控制,因此,不需要维持复杂的连接状态表。

    • 没有拥塞控制,出现拥塞也不会降低发送速率,可满足某些实时应用(视频会议、IP电话等)。

    • 面向报文:应用进程的报文不再划分成分组传送。

    • 支持一对一、一对多、多对一和多对多通信。

    • 开销小:只有8个字节的首部,不需要建立/释放连接。

计算机工程学院 伍俊明


5 2 udp2

TFTP客户

TFTP服务器

应用层

出队列

入队列

出队列

入队列

传输层

UDP 端口5100

UDP 端口69

UDP数据报

5.2 用户数据报协议UDP

  • UDP与应用层之间的端口都用报文队列来实现。

    • 发送端

      • 分配源端口,指定宿端口,构造UDP数据报,交IP层

    • 接收端

      • 匹配UDP报头宿端口的应用进程

      • 匹配成功,数据报排入相应的队列,若端口队列满,则丢弃数据报;匹配不成功,丢弃数据报,回送“宿端口不可达”的ICMP报文

计算机工程学院 伍俊明


5 2 udp3

5.2 用户数据报协议UDP

  • UDP是面向报文的。发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。

  • UDP保持报文的边界。应用层交给 UDP 多长的报文,UDP就照样发送。应用程序必须选择合适大小的报文。

应用层报文

应用层

运输层

UDP 首部

UDP 用户数据报的数据部分

IP 层

IP 首部

IP 数据报的数据部分

计算机工程学院 伍俊明


5 2 udp4

5.2 用户数据报协议UDP

5.2.2 UDP用户数据报的首部格式

4

4

1

1

2

字节

源 IP 地址

目的 IP 地址

0

17

UDP长度

字节

12

2

2

2

2

长 度

伪首部

源端口

目的端口

检验和

UDP 用户数据报

首 部

数 据

发送在前

首 部

数 据

IP 数据报

计算机工程学院 伍俊明


5 2 udp5

5.2 用户数据报协议UDP

  • 伪首部:并不是UDP数据报真正的首部,只是在计算校验和时和UDP用户数据报连接在一起进行计算,它无需向下传送,也无需向上递交,仅是为了计算检验和。

  • UDP首部字段的含义

    • 源端口号、目的端口号

    • 长度:用户数据报的长度

    • 检验和:对首部(含伪首部)和数据按16位为一组,求和后取其反码

计算机工程学院 伍俊明


5 2 udp6

填充

5.2 用户数据报协议UDP

  • 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 11101101 → 求和得出的结果

01101001 00010010 → 检验和

153.19.8.104

12 字节

伪首部

171.3.14.11

全 0 17 15

1087 13

15 全 0

数据 数据 数据 数据

数据 数据 数据 全 0

8 字节

UDP 首部

7 字节

数据

按二进制反码运算求和

将得出的结果求反码

计算机工程学院 伍俊明


5 2 udp7

端口 1

端口 2

端口 3

UDP 分用

UDP 数据报到达

IP 层

5.2 用户数据报协议UDP

  • UDP基于端口的分用

计算机工程学院 伍俊明


5 2 udp8

5.2 用户数据报协议UDP

  • UDP支持的应用层协议主要有:

    • 名字转换:DNS,端口号为53

    • 文件传送:TFTP,端口号为69

    • 路由选择协议:RIP,端口号为520

    • 远程过程调用:SUNPRC,端口号为111

    • IP地址配置:BOOTP,端口号为67

    • 简单网络管理:SNMP,端口号为161和162

    • 远程文件服务器:NFS

    • IP电话

    • 流式多媒体通信

计算机工程学院 伍俊明


5 3 tcp

5.3 传输控制协议TCP概述

5.3.1 TCP最主要的特点

  • TCP是TCP/IP体系中面向连接的传输层协议,在不可靠的因特网上提供面向连接的、可靠的、端到端的、全双工的、基于字节流的传输服务。

  • TCP协议提供可靠性服务

    • 将应用程序数据(字节流)封装成TPDU

      • 选择适合发送的数据块大小(不超过64K,通常为1500字节)

    • 对发送的TPDU启动计时器,超时重传

    • 对正确接收的TPDU进行确认

    • 对报头和数据计算校验和

      • 对接收TPDU检错,丢弃差错的TPDU

    • 识别并丢弃重复的TPDU

    • 提供流量控制(实行缓冲区管理)

计算机工程学院 伍俊明


5 3 tcp1

5.3 传输控制协议TCP概述

  • TCP最主要的特点

    • TCP 是面向连接的运输层协议。

    • 每一条 TCP 连接只能有两个端点(endpoint),实际上是一对套接字对,每一条 TCP 连接只能实现一对一通信,不支持广播和多播。

    • TCP 提供可靠交付的服务。

    • TCP 提供全双工通信。

    • 面向字节流。

计算机工程学院 伍俊明


5 3 tcp2

21

0

20

1

10

9

19

2

3

13

12

11

H

8

H

5

4

7

6

5.3 传输控制协议TCP概述

  • TCP面向字节流的概念

发送方

接收方

表示 TCP 报文段的首部

H

应用进程

应用进程

表示序号为 x 的数据字节

x

字节流

字节流

从接收缓存

读取字节

把字节写入

发送缓存

TCP

TCP

加上 TCP 首部

构成 TCP 报文段

18

17

16

15

14

发送 TCP 报文段

H

TCP 连接

计算机工程学院 伍俊明


5 3 tcp3

5.3 传输控制协议TCP概述

  • TCP是面向字节流的。

    • 当两个应用程序转移大量数据时,TCP把数据看成字节流。

    • 流投递服务将源机器上发送方交给它的字节序列不加改变地传给接收方。

    • TCP为它的高层协议数据“流”中的每一字节都分配一个顺序号。

    • 在与对等的TCP实体交换报文段时,TCP给这些段附加的控制信息包括该段中第1个字节的顺序号以及该段中所有数据字节的个数。

    • 接收端TCP能将这些段还原成一个不间断的数据“流”送给它自己的高层协议。

计算机工程学院 伍俊明


5 3 tcp4

5.3 传输控制协议TCP概述

几点注意

  • TCP 连接是一条虚连接,而不是一条真正的物理连接。

  • TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。

  • TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。

  • TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后再构成报文段发送出去。

计算机工程学院 伍俊明


5 3 tcp5

5.3 传输控制协议TCP概述

  • TCP发送报文段的过程----只提供一对一通信

发送端

接收端

应用进程

应用进程

向发送缓存写入数据块

从接收缓存读取数据块

端口

端口

TCP

TCP

发送缓存

接收缓存

报文段

报文段

报文段

计算机工程学院 伍俊明


5 3 tcp6

4

1

2

TSAP(传输地址)

3

3

2

4

1

应用进程

应用进程

TPDU

TPDU

TCP

TCP

传输协议

IP

IP

5.3 传输控制协议TCP概述

5.3.2 TCP的连接

  • TCP协议提供面向连接的端到端的服务

    • 发送方和接收方分别创建一个套接字获得TCP服务

计算机工程学院 伍俊明


5 3 tcp7

应用:ftp 15.22.65.7

主机B

主机A

建立端到端连接

server

(15.22.65.7, 21)

client

(125.6.4.190, 1234)

5.3 传输控制协议TCP概述

  • TCP协议提供面向连接的服务

    • 每条连接用套接字对(套接字1,套接字2)来表示,套接字用来标识应用进程的端点

    • TCP连接是点到点的全双工通道, 该全双工可视为两个不同方向的单工通道

    • TCP不支持多点组播或广播,只提供一对一通信。

计算机工程学院 伍俊明


5

5.4 可靠传输的工作原理

一、理想的传输条件

  • 传输信道不会产生差错

  • 不管发送方如何发送,接收方总来得及接收

    二、停止-等待协议

  • 无差错情况——需要确认,无需校验

  • 有差错情况——需要确认,差错校验,超时重传,数据编号

    三、连续ARQ协议

  • 滑动窗口协议:发送窗口、接收窗口

  • Go-Back-N方式

  • 选择重传方式

计算机工程学院 伍俊明


5

5.5 TCP 报文段的首部格式

32 位

位 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 数据部分


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

保留字段——占 6 位,保留为今后使用,但目前应置为 0。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

紧急 URG —— 当 URG  1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

确认 ACK —— 只有当 ACK  1 时确认号字段才有效。当 ACK  0 时,确认号无效。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

复位 RST (ReSeT) —— 当 RST  1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

终止 FIN (FINis) —— 用来释放一个连接。FIN  1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

计算机工程学院 伍俊明


5

位 0 8 16 24 31

窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。

源 端 口

目 的 端 口

序 号

20

字节

固定

首部

确 认 号

TCP

首部

数据

偏移

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

计算机工程学院 伍俊明


5

比特 0 8 16 24 31

源 端 口

目 的 端 口

MSS (Maximum Segment Size)

是 TCP 报文段中的数据字段的最大长度。

数据字段加上 TCP 首部

才等于整个的 TCP 报文段。

序 号

20

字节

固定

首部

确 认 号

TCP

首部

数据

偏移

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

选项字段 —— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”

计算机工程学院 伍俊明


5 5 tcp

5.5 TCP 报文段的首部格式

其他选项

  • 窗口扩大选项 ——占 3 字节,其中有一个字节表示移位值 S。新的窗口值等于TCP 首部中的窗口位数增大到(16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小。

  • 时间戳选项——占10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。

  • 选择确认选项——在后面的 5.6.3 节介绍。

计算机工程学院 伍俊明


5

位 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

窗 口

保 留

检 验 和

紧 急 指 针

选 项 (长 度 可 变)

填 充

填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。

计算机工程学院 伍俊明


5 6 tcp

5.6 TCP可靠传输的实现

5.6.1 以字节为单位的滑动窗口

  • TCP的滑动窗口以字节为单位

根据 B 给出的窗口值

A 构造出自己的发送窗口

后沿

前沿

收缩

前移

前移

A 的发送窗口 = 20

55

56

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

不允许发送

已发送并

收到确认

允许发送的序号

B 期望

收到的序号

TCP 标准强烈不赞成

发送窗口前沿向后收缩

计算机工程学院 伍俊明


5

A 发送了 11 个字节的数据

A 的发送窗口位置不变

可用窗口

55

56

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

已发送并

收到确认

不允许发送

允许发送但尚未发送

已发送但未收到确认

P1

P2

P3

B 的接收窗口

55

56

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

已发送确认

并交付主机

不允许接收

允许接收

未按序收到

P3 – P1 = A 的发送窗口(又称为通知窗口)

P2 – P1 = 已发送但尚未收到确认的字节数

P3 – P2 = 允许发送但尚未发送的字节数(又称为可用窗口)

计算机工程学院 伍俊明


5

A 收到新的确认号,发送窗口向前滑动

A 的发送窗口向前滑动

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

不允许

发送

已发送并收到确认

允许发送但尚未发送

已发送

但未收到确认

P1

P2

P3

B 的接收窗口向前滑动

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

已发送确认

并交付主机

不允许

接收

允许接收

未按序收到

先存下,等待缺少的

数据的到达

计算机工程学院 伍俊明


5

A 的发送窗口内的序号都已用完,

但还没有再收到确认,必须停止发送。

A 的发送窗口已满,有效窗口为零

55

56

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

不允许

发送

已发送并收到确认

已发送但未收到确认

P1

P2

P3

计算机工程学院 伍俊明


5 6 tcp1

5.6 TCP可靠传输的实现

  • 发送缓存

发送应用程序

TCP

发送缓存

发送窗口

已发送

最后被确认

的字节

最后发送

的字节

序号增大

计算机工程学院 伍俊明


5 6 tcp2

5.6 TCP可靠传输的实现

  • 接收缓存

接收应用程序

TCP

接收缓存

下一个读取

的字节

接收窗口

已收到

序号增大

下一个期望收到的

字节(确认号)

计算机工程学院 伍俊明


5 6 tcp3

5.6 TCP可靠传输的实现

  • 发送缓存与接收缓存的作用

    • 发送缓存用来暂时存放:

      • 发送应用程序传送给发送方 TCP 准备发送的数据;

      • TCP 已发送出但尚未收到确认的数据。

    • 接收缓存用来暂时存放:

      • 按序到达的、但尚未被接收应用程序读取的数据;

      • 不按序到达的数据。

  • 几点注意

    • A 的发送窗口不总和 B 的接收窗口一样大(有时间滞后)。

    • TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。

    • 接收方有累积确认的功能,这样可以减小传输开销。

计算机工程学院 伍俊明


5 6 tcp4

运输层

5.6 TCP可靠传输的实现

5.6.2 超时重传时间的选择

  • 超时重传机制: TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。

  • 由于TCP下层的IP层跨越互联网,往返时延方差很大。

往返时间的

概率分布

数据链路层

时间

T1

T2

T3

计算机工程学院 伍俊明


5 6 tcp5

5.6 TCP可靠传输的实现

  • 加权平均往返时延RTTs

    新的 RTTS  (1 )  (旧的 RTTs)  (新的 RTT 样本)

    RFC2988推荐取1/8。

  • 超时重传时间RTO

    RTO  RTTS + 4  RTTD RFC2988推荐

  • RTTD的计算

    • 第一次测量时,RTTD 值取为测量到的 RTT 样本值的一半。

    • 在以后的测量中,则使用下式计算加权平均的 RTTD:

      新RTTD=(1)  (旧的RTTD) + RTTS新的 RTT 样本

       是个小于 1 的系数,其推荐值是 1/4,即 0.25。

计算机工程学院 伍俊明


5 6 tcp6

5.6 TCP可靠传输的实现

  • Karn算法

    下例中,报文1没收到确认,重传后收到确认。对哪一次的确认?

    Karn算法:只要报文重传,就不采用其往返时延的样本。

  • 修正的Karn算法——只要有报文重传

是对哪一个报文段

的确认?

发送一个

TCP 报文段

超时重传

TCP 报文段

收到 ACK

1

2

时间

往返时间 RTT?

往返时间 RTT?

新的 RTO  (旧的 RTO),  的典型值是 2

计算机工程学院 伍俊明


5 6 tcp7

第二个字节块

第一个字节块

连续的字节流

1 1000 1501 3000 3501 4500

确认号 = 1001

L1 = 1501

R1 = 3001

L2 = 3501

R1 = 4501

未收到

未收到

5.6 TCP可靠传输的实现

5.6.3 选择确认SACK

  • 接收方收到未按序号到达,但无差错的报文段怎么办?

    • 如果这些字节在接收窗口内,先接收下来,然后准确告诉发送方需要重发哪些数据。

    • RFC2018规定

      • 在TCP报文段首部增加SACK选项

      • 首部选项部分最多40字节,可以说明4个数据块的边界。

计算机工程学院 伍俊明


5 7 tcp

5.7 TCP的流量控制

5.7.1 利用滑动窗口实现流量控制

  • 发送方希望数据传送得快一点。

  • 流量控制就是让发送方的发送速率不要太快,保证接收方来得及接收。

  • TCP利用可变滑动窗口协议实现流量控制。建立连接时或传输数据时,接收方将自己的接受窗口大小告诉发送方,发送方的发送窗口的大小不能超过接收方给出的接受窗口的大小,从而控制发送方的速率。

  • 持续计时器:TCP为每个连接设置一个持续计时器。当一方收到对方的零窗口通知时,就启动持续计时器。当计时器到,就发送一零窗口探测报文,对方在确认该报文时给出现行的窗口值。若为零重新计时。

计算机工程学院 伍俊明


5 7 tcp1

5.7 TCP的流量控制

  • 流量控制举例:建立连接时B告诉A其rwnd=400

A

B

seq = 1, DATA

A 发送了序号 1 至 100,还能发送 300 字节

seq = 101, DATA

A 发送了序号 101 至 200,还能发送 200 字节

seq = 201, DATA

丢失!

ACK = 1, ack = 201, rwnd = 300

允许 A 发送序号 201 至 500 共 300 字节

seq = 301, DATA

A 发送了序号 301 至 400,还能再发送 100 字节新数据

seq = 401, DATA

A 发送了序号 401 至 500,不能再发送新数据了

seq = 201, DATA

A 超时重传旧的数据,但不能发送新的数据

ACK = 1, ack = 501, rwnd = 100

允许 A 发送序号 501 至 600 共 100 字节

seq = 501, DATA

A 发送了序号 501 至 600,不能再发送了

ACK = 1, ack = 601, rwnd = 0

不允许 A 再发送(到序号 600 为止的数据都收到了)

计算机工程学院 伍俊明


5 7 tcp2

100

100

100

100

100

100

100

SEQ=301

SEQ=401

SEQ=201

SEQ=501

SEQ=1

SEQ=201

SEQ=101

ACK=201

ACK=601

ACK=501

WIN=0

WIN=200

WIN=300

5.7 TCP的流量控制

  • 利用可变滑动窗口——通知窗口进行流量控制

主机A进程

主机B进程

1

1

101

丢失

1

101

301

301

401

301

401

201

501

计算机工程学院 伍俊明


5 7 tcp3

5.7 TCP的流量控制

5.7.2 传输效率的考虑

  • 发送时机的控制

    • TCP维持一个变量MSS,表示最大报文段的长度。当缓存中的数据达到最大报文段长度MSS时发送。

    • 发送方的应用进程要求立即发送报文段(psh=1)。

    • 发送方计时期限到,将当前已有的缓存数据发出去。

计算机工程学院 伍俊明


5 7 tcp4

缓存

缓存

2

3

4

5

6

7

8

1

字符

字符

字符

字符

字符

字符

字符

字符

1

2

3

4

5

6

7

8

字符

字符

字符

字符

字符

字符

字符

字符

1

2

3

4

5

6

7

8

字符

字符

字符

字符

字符

字符

字符

字符

5.7 TCP的流量控制

  • Nagle算法——解决单字节发送

    • 若数据是逐个字节地到达发送端,发送端先将第一个字符发送出去,将后面到达的字符都缓存起来。当收到对第一个字符的确认后,再将缓冲区中的所有字符装成一个报文段发送出去,同时继续对到达的字符进行缓存。只有在收到确认后才继续发送下一个报文段。

Nagle算法

计算机工程学院 伍俊明


5 7 tcp5

5.7 TCP的流量控制

  • 糊涂窗口综合症——解决单字节接收问题

    • 问题:接收端的缓冲区已满,而交互式的应用进程一次只从缓冲区中消耗一个字符,会造成通信的效率很低。

    • Clark解决办法:让接收端等待一段时间,使得或者缓冲区已能有足够的空间容纳一个最长报文段,或者缓冲区已有一半的空间处于空的状态。就发送报文段。

Win=0

Win=0

读字符

读字符

Win=1

发送1Byte

Win=6

Win=0

读字符

发送4Byte

Win=1

发送1Byte

接收1字节/次情形

Clark解决方法

计算机工程学院 伍俊明


5 7 tcp6

5.7 TCP的流量控制

  • Nagle算法和Clark算法可配合使用。

  • 对差错报文段的处理

    • 发送方:在设置的时间内未收到确认,则重新发送未被确认的报文段

    • 接收方:收到差错报文段,则丢弃之,但不发否认信息;收到重复的报文段,则丢弃之,并发回确认信息

  • 对乱序报文段的处理

    • 接收方可将不按序的报文段丢弃

    • 接收方可将不按序的报文段暂存于接收缓存中,待所缺序号的报文段收齐后再一起上交应用层。

计算机工程学院 伍俊明


5 8 tcp

5.8 TCP的拥塞控制

5.8.1 拥塞控制的一般原理

  • 拥塞:在某段时间内,若对网络中某种资源的需求超过了该资源所能提供的可用部分

  • 拥塞出现的条件:对资源需求的总和 > 可用资源

  • 若网络中多种资源同时呈现供应不足,网络性能就会明显变坏,吞吐量随输入负荷的增大而下降。

  • 网络拥塞往往由多种因素引起。

    • 结点缓存不足

    • 处理机速率太慢

    • 处理算法不当

计算机工程学院 伍俊明


5 8 tcp1

5.8 TCP的拥塞控制

  • 流量控制与拥塞控制之间的关系

    • 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。

    • 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。

    • 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制。

    • 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    • 一般流量控制和拥塞控制都会采用反馈的方法通知产生分组的源站降低或停止分组的发送。

计算机工程学院 伍俊明


5 8 tcp2

5.8 TCP的拥塞控制

  • 案例分析

    • 案例1:某光纤网络的链路传输速率为1000Gb/s。有一大型计算机以1Gb/s向一台接收速率为100Mb/s的PC机发送数据。会产生什么问题?

    • 案例2:某网络的链路传输速率为1Mb/s,100台PC机以100Kb/s的速率发另外100台接收速率可达200Kb/s的PC机发送数据。会产生什么问题?

计算机工程学院 伍俊明


5 8 tcp3

理想的拥塞控制

实际的拥塞控制

无拥塞控制

死锁(吞吐量 = 0)

5.8 TCP的拥塞控制

  • 拥塞控制所起的作用

吞吐量

提供的负载

0

轻度

拥塞

拥塞

计算机工程学院 伍俊明


5 8 tcp4

5.8 TCP的拥塞控制

  • 拥塞控制的一般原理

    • 拥塞控制是很难设计的,因为它是一个动态的问题。

    • 高速网络中,容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆而不是原因。

    • 在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因。

  • 开环控制与闭环控制

    • 开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。

    • 闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:

      • 监测网络系统以便检测到拥塞在何时、何处发生。

      • 将拥塞发生的信息传送到可采取行动的地方。

      • 调整网络系统的运行以解决出现的问题。

计算机工程学院 伍俊明


5 8 tcp5

5.8 TCP的拥塞控制

  • 监测网络拥塞的主要指标

    • 因缺少缓存而丢弃的分组的百分数

    • 平均队列长度

    • 超时重传的分组数

    • 平均分组时延

    • 分组时延的标准方差

  • 拥塞的通知

    • 监测到拥塞发生时,将信息传送到产生分组的源站

    • 在路由器转发分组中设置“拥塞”字段,探测、传输拥塞信息。

  • 过于频繁地采取措施会使系统产生不稳定的振荡;过于迟缓的行动又不具有实用价值。

计算机工程学院 伍俊明


5 8 tcp6

5.8 TCP的拥塞控制

5.8.2 几种拥塞控制方法

一、慢开始和拥塞避免

  • 发送方在确定报文段的发送速率时,需要考虑接收端的接收能力,又要从全局考虑不使网络发生拥塞。

    • 接收端窗口rwnd:由接收端根据其目前的接收缓存大小所许诺的最新的窗口值,以实现流量控制。接收端在TCP报文中由win字段说明,又称通知窗口。

    • 拥塞窗口cwnd:发送端根据自己估计的网络拥塞程度而设置的窗口值,通常初值设为MSS。

    • 网络未发生拥塞时,通知窗口和拥塞窗口一般相等。

  • 当网络未发生拥塞时,拥塞窗口可增大,以便充分利用网络资源;当网络发生拥塞时,拥塞窗口应减少,以减少流入到网络中的分组数。

  • 网络拥塞:只要发送端没有按时收到应当到达的确认报文ACK,即可认为网络发生拥塞

  • 发送窗口的上限值=min{rwnd, cwnd}

计算机工程学院 伍俊明


5 8 tcp7

Slowstart algorithm

initialize: Cwnd = 1*MSS

for (each segment ACKed)

Cwnd ++;

until (loss event OR

Cwnd ssthresh)

5.8 TCP的拥塞控制

  • 慢开始(slow-start)算法

    • 先将拥塞窗口初值cwnd0设为MSS

    • 发送端按若发出一个最大段长的TCP段,并得到正确确认,将拥塞窗口增大1个报文段;

    • 每轮发送端发出( 拥塞窗口/最大段长)个TCP报文段,且都按时得到确认,则拥塞窗口加倍:cwndi+1=2*cwndi;

    • 重复上述步骤,拥塞窗口保持指数规律增长,直至发生丢包超时事件,或拥塞窗口大于阈值ssthresh( ssthresh初始值设为64个报文段 )。

计算机工程学院 伍俊明


5 8 tcp8

/* slowstart is over */

/* Cwnd > ssthresh */

Until (loss event) {

every Cwnd segments ACKed:

Cwnd++;

}

ssthresh = Cwnd/2;

Cwnd = 1*MSS;

perform slowstart;

Congestion Avoidance Algorithm

5.8 TCP的拥塞控制

  • 拥塞避免(congestion avoidance)算法

    • 若拥塞窗口大于阈值ssthresh ,此后拥塞窗口线性增长,每一个往返时延RTT就增加一个最大段长MSS,直至发生丢包超时事件;

    • 当超时事件发生后,将阈值窗口ssthresh置为当前发送窗口大小的1/2,拥塞窗口重新设置为一个最大段长MSS;

    • 执行慢启动算法。

乘法减小:无论在慢

开始或拥塞避免阶段,

只要出现超时,阈值

就乘以0.5减小一半。

加法增大:执行拥塞

避免后,当收到所有

发出报文段的确认后,

就将拥塞窗口cwnd增

加一个MSS的大小。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。

慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

发送端每收到一个确认 ,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个报文段。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。

计算机工程学院 伍俊明


5

慢开始和拥塞避免算法的实现举例

拥塞窗口 cwnd

拥塞避免

“加法增大”

网络拥塞

拥塞避免

“加法增大”

24

20

“乘法减小”

ssthresh 的初始值

16

新的 ssthresh 值

12

8

指数规律增长

4

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

慢开始

慢开始

当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。

计算机工程学院 伍俊明


5 8 tcp9

5.8 TCP的拥塞控制

  • “乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。

  • 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。

  • “加法增大”是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。

计算机工程学院 伍俊明


5 8 tcp10

二、 快重传和快恢复

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。

发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。

不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

5.8 TCP的拥塞控制

计算机工程学院 伍俊明


5

收到三个连续的

对 M2的重复确认

立即重传 M3

立即重传 M3

快重传举例

发送方

接收方

发送 M1

发送 M2

确认 M1

确认 M2

发送 M3

丢失

发送 M4

重复确认 M2

发送 M5

重复确认 M2

发送 M6

重复确认 M2

发送 M7

t

t


5 8 tcp11

5.8 TCP的拥塞控制

  • 快恢复

    • 非快恢复:当发送端发现网络出现拥塞时,就将拥塞窗口cwnd降低为1个MSS,然后执行慢启动。

    • 快恢复:

      • 当发送端连收到三个重复的ACKi,按“乘法减小”将阈值ssthresh设为当前发送窗口的一半;

      • 发送端接着将拥塞窗口设置为减半后的ssthresh,然后开始执行拥塞避免算法。

    • 采用快恢复算法时,慢开始算法只在TCP建立连接时使用。

计算机工程学院 伍俊明


5 8 tcp12

5.8 TCP的拥塞控制

  • 快恢复举例:从连续收到三个重复的确认转入拥塞避免

拥塞窗口 cwnd

收到 3 个重复的确认

执行快重传算法

24

拥塞避免

“加法增大”

TCP Reno

版本

拥塞避免

“加法增大”

20

“乘法减小”

16

ssthresh 的初始值

12

新的 ssthresh 值

TCP Tahoe 版本

(已废弃不用)

快恢复

8

4

慢开始

慢开始

传输轮次

0

0

2

4

6

8

10

12

14

16

18

20

22

计算机工程学院 伍俊明


5 8 tcp13

5.8 TCP的拥塞控制

5.8.3 随机早期检测RED

TCP的拥塞控制和网络层采取的策略有密切联系,因为网络层的策略可能影响到多个TCP连接!一般在缓存队列满时采用尾部丢弃策略,即总丢弃新到达的数据报——wine策略,非milk策略。

  • 路由器采用的随机早期丢弃RED策略

    • 维持队列长度最小值THmin、最大值THmax和平均队列长度Lav

    • 若Lav< THmin,新分组入列;若Lav> THmax,则丢弃新分组;若Lav在 Thmin与Thmax之间,以概率p丢弃新到的分组

    • THmin必须足够大,保证路由器的输出链路有较高的利用率; THmin和 THmax之差应足够大,使得在一个TCP的RTT中队列正常增长在THmax之内。一般地, THmax=2×THmin。

    • 平均队长Lav=(1-δ)×(旧的Lav)+ δ ×(当前队长的样本)

    • 丢弃概率p=Ptemp/(1-count ×Ptemp),count变量表示新入队的数据报数(未被丢弃)

      其中Ptemp=Pmax ×(Lav-THmin)/(THmax-THmin)

计算机工程学院 伍俊明


5

5.8 TCP的拥塞控制

RED 将路由器的到达队列划分成为三个区域

丢弃

排队

以概率p丢弃

数据报

到达

从队首

发送

最小门限 THmin

平均队列长度 Lav

最大门限 THmin

计算机工程学院 伍俊明


5

丢弃概率p 与 THmin 和 Thmax 的关系

当 LAV Thmin 时,丢弃概率 p = 0。

当 LAVThmax 时,丢弃概率 p = 1。

当 THminLAV THmax时, 0 p  1 。

例如,按线性规律变化,从 0 变到 pmax。

5.8 TCP的拥塞控制

数据报丢弃概率p

1.0

pmax

平均队列长度 Lav

0

最大门限 THmax

最小门限 THmin

计算机工程学院 伍俊明


5 8 tcp14

5.8 TCP的拥塞控制

  • 瞬时队列长度和平均队列长度的区别

队列长度

瞬时队列长度

平均队列长度

时间

计算机工程学院 伍俊明


5 9 tcp

5.9 TCP的运输连接管理

  • TCP提供面向连接的传输服务:建立连接,传送数据,释放连接。

  • 建立连接要解决的三个问题

    • 使每一方都能确知对方的存在,明确连接的端点

    • 允许双方协商一些参数(最大报文长度,最大窗口大小,服务质量等)

    • 对传输层实体资源(如缓存大小、连接表中的项目等)进行分配

  • TCP连接采用客户-服务器方式:客户主动发出连接请求,服务器被动等待连接的建立

计算机工程学院 伍俊明


5 9 tcp1

被动打开

主动打开

SYN = 1, seq = x

5.9 TCP的运输连接管理

5.9.1 TCP的连接建立——三次握手

客户

服务器

A

B

CLOSED

CLOSED

A 的 TCP 向 B 发出连接请求报文段,其首部中的

同步位 SYN = 1,并选择序号 seq = x,表明传送

数据时的第一个数据字节的序号是 x。

计算机工程学院 伍俊明


5 9 tcp2

被动打开

主动打开

SYN = 1, seq = x

SYN = 1, ACK = 1, seq = y, ack= x  1

5.9 TCP的运输连接管理

客户

服务器

A

B

CLOSED

CLOSED

  • B 的 TCP 收到连接请求报文段后,如同意,则

  • 发回确认。

  • B 在确认报文段中应使 SYN = 1,使 ACK = 1,

  • 其确认号ack = x  1,自己选择的序号 seq = y。

计算机工程学院 伍俊明


5 9 tcp3

被动打开

主动打开

SYN = 1, seq = x

SYN = 1, ACK = 1, seq = y, ack= x  1

ACK = 1, seq = x + 1, ack = y  1

  • A 收到此报文段后向 B 给出确认,其 ACK = 1,

  • 确认号 ack = y  1。

  • A 的 TCP 通知上层应用进程,连接已经建立。

5.9 TCP的运输连接管理

客户

服务器

A

B

CLOSED

CLOSED

计算机工程学院 伍俊明


5 9 tcp4

被动打开

主动打开

SYN = 1, seq = x

SYN = 1, ACK = 1, seq = y, ack= x  1

ACK = 1, seq = x + 1, ack = y  1

数据传送

5.9 TCP的运输连接管理

  • B 的 TCP 收到主机 A 的确认后,也通知其上层

  • 应用进程:TCP 连接已经建立。

客户

服务器

A

B

CLOSED

CLOSED

计算机工程学院 伍俊明


5 9 tcp5

被动打开

主动打开

SYN = 1, seq = x

LISTEN

SYN-

SENT

SYN = 1, ACK = 1, seq = y, ack= x  1

SYN-

RCVD

ACK = 1, seq = x + 1, ack = y  1

ESTAB-

LISHED

数据传送

ESTAB-

LISHED

5.9 TCP的运输连接管理

客户

服务器

A

B

CLOSED

CLOSED

计算机工程学院 伍俊明


5 9 tcp6

5.9 TCP的运输连接管理

  • 三次握手——建立连接

    • 服务器方执行LISTEN和ACCEPT原语,被动监听;

    • 客户方执行connect原语,产生一个SYN为1和ACK为0的TCP段,表示连接请求;

    • 服务器方的传输实体接收到这个TCP段后,首先检查是否有服务进程在所请求的端口上监听,若没有,回答RST置位的TCP段;

    • 若有服务进程在所请求的端口上监听,该服务进程可以决定是否接受该请求。在接受后,发出一个SYN置1和ACK置1的TCP段表示连接确认,并请求与对方的连接;

    • 发起方收到确认后,发出一个SYN置0和ACK置1的TCP段表示给对方的连接确认;

  • 三次握手对于在连接的两端之间的正确同步既是必要的,也是充分的。

  • 若两个主机同时试图建立彼此间的连接,则只能建立一条连接。

  • TCP连接是全双工的,包含了两个独立的流传送,每个方向上一个。

  • 建立连接,一为数据交换做好准备,二是协商初始序列号等参数。

计算机工程学院 伍俊明


5 9 tcp7

5.9 TCP的运输连接管理

5.9.2 TCP的连接释放

  • 当一个应用程序告诉TCP它没有更多的数据要发送时,发出FIN=1的TCP段,并启动定时器。在收到确认后,或无确认但超时,TCP关闭在一个方向上的连接。

  • 正在发送的TCP为了关掉一条连接上的方向的那一半,把剩余数据发送完毕,等待接收方对它应答,然后发送一个FIN=1的报文段,接收方TCP确认这个FIN报文段,并通知自己这一边的应用程序没有更多的数据可提供(例如,使用操作系统的文件结束机制)。

  • 当两个方向都已关断时,在每一端点上的TCP软件便删除各自的连接记录。

计算机工程学院 伍俊明


5

主动关闭

FIN = 1, seq = u

5.9.2 TCP的连接释放

客户

服务器

A

B

ESTAB-

LISHED

数据传送

ESTAB-

LISHED

  • 数据传输结束后,通信的双方都可释放连接。

  • 现在 A 的应用进程先向其 TCP 发出连接释放

  • 报文段,并停止再发送数据,主动关闭 TCP

  • 连接。

  • A 把连接释放报文段首部的 FIN = 1,其序号

  • seq = u,等待 B 的确认。

CLOSED

计算机工程学院 伍俊明

CLOSED


5

主动关闭

FIN = 1, seq = u

ACK = 1, seq = v, ack= u  1

5.9.2 TCP 的连接释放

客户

服务器

A

B

ESTAB-

LISHED

数据传送

通知

应用

进程

ESTAB-

LISHED

  • B 发出确认,确认号 ack = u  1,

  • 而这个报文段自己的序号 seq = v。

  • TCP 服务器进程通知高层应用进程。

  • 从 A 到 B 这个方向的连接就释放了,TCP 连接

  • 处于半关闭状态。B 若发送数据,A 仍要接收。

计算机工程学院 伍俊明


5

通知

应用

进程

主动关闭

FIN = 1, seq = u

ACK = 1, seq = v, ack= u  1

被动关闭

FIN = 1, ACK = 1, seq = w, ack= u  1

5.9.2 TCP 的连接释放

客户

服务器

A

B

ESTAB-

LISHED

数据传送

ESTAB-

LISHED

数据传送

  • 若 B 已经没有要向 A 发送的数据,

  • 其应用进程就通知 TCP 释放连接。

计算机工程学院 伍俊明


5

通知

应用

进程

主动关闭

FIN = 1, seq = u

ACK = 1, seq = v, ack= u  1

被动关闭

FIN = 1, ACK = 1, seq = w, ack= u  1

ACK = 1, seq = u + 1, ack = w  1

5.9.2 TCP 的连接释放

客户

服务器

A

B

ESTAB-

LISHED

数据传送

ESTAB-

LISHED

数据传送

  • A 收到连接释放报文段后,必须发出确认。

计算机工程学院 伍俊明


5

通知

应用

进程

主动关闭

FIN = 1, seq = u

ACK = 1, seq = v, ack= u  1

被动关闭

FIN = 1, ACK = 1, seq = w, ack= u  1

5.9.2 TCP 的连接释放

客户

服务器

A

B

ESTAB-

LISHED

数据传送

ESTAB-

LISHED

数据传送

ACK = 1, seq = u + 1, ack = w  1

  • 在确认报文段中 ACK = 1,确认号 ack  w  1,

  • 自己的序号 seq = u + 1。

计算机工程学院 伍俊明


5

通知

应用

进程

主动关闭

FIN = 1, seq = u

ACK = 1, seq = v, ack= u  1

等待 2MSL

TIME-

WAIT

CLOSED

5.9.2 TCP的连接释放

TCP 连接必须经过时间 2MSL 后才真正释放掉。

客户

服务器

A

B

ESTAB-

LISHED

数据传送

ESTAB-

LISHED

FIN-

WAIT-1

CLOSE-

WAIT

数据传送

被动关闭

FIN-

WAIT-2

FIN = 1, ACK = 1, seq = w, ack= u  1

LAST-

ACK

ACK = 1, seq = u + 1, ack = w  1

CLOSED

计算机工程学院 伍俊明


5 9 2 tcp

5.9.2 TCP的连接释放

  • A 必须等待 2MSL (最长报文段寿命)的时间

    • 第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。

    • 第二,防止 “已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

计算机工程学院 伍俊明


5 9 tcp8

5.9 TCP的运输连接管理

5.9.3 TCP的有限状态机

为了管理因特网,在网络管理中心设有管理信息库 MIB (Management Information Base)。

管理信息库存放着各主机的 TCP 连接表。

TCP 连接表对每个连接都登记了其连接信息。除本地和远地的 IP 地址和端口号外,还要记录每一个连接所处的状态。

  • TCP连接表——记录每个连接的信息

计算机工程学院 伍俊明


5

起点

CLOSED

TCP的有限状态机

被动打开

主动打开

发送 SYN

关闭

收到 SYN

发送 SYN, ACK

LISTEN

被动打开

收到 RST

发送 SYN

关闭

或超时

收到 SYN,发送 SYN, ACK

SYN_RCVD

SYN_SENT

同时打开

主动打开

收到 ACK

收到 SYN, ACK

发送 ACK

数据传送

阶段

收到 FIN

发送 ACK

被动关闭

关闭

发送 FIN

ESTABLISHED

CLOSE_WAIT

关闭

发送 FIN

主动关闭

关闭

发送 FIN

收到 FIN

发送 ACK

同时关闭

FIN_WAIT_1

CLOSING

收到 ACK

LAST_ACK

收到 FIN, ACK

发送 ACK

收到 ACK

收到 ACK

收到 FIN

发送 ACK

FIN_WAIT_2

TIME_WAIT

定时经过两倍报文段寿命后


5

TCP 的正常的连接建立和关闭

服务器进程

客户进程

LISTEN(被动打开)

SYN, SEQ = x

(主动打开) SYN_SENT

SYN_RCVD

SYN, ACK, SEQ = y, ACK = x + 1

ESTABLISHED

SYN_RCVD

ACK, SEQ = x + 1, ACK = y + 1

ESTABLISHED

ESTABLISHED

(全双工数据传送阶段)

FIN, SEQ = u

(主动关闭) FIN_WAIT_1

CLOSE_WAIT ( 被动关闭)

ACK, SEQ = v, ACK = u + 1

FIN_WAIT_2

CLOSE_WAIT

FIN, ACK, SEQ = v, ACK = u + 1

TIME_WAIT

LAST_ACK

ACK, SEQ = u + 1, ACK = v + 1

TIME_WAIT

CLOSED


  • Login