Download ppt - 第五章 TCP/IP 协议

Transcript
Page 1: 第五章  TCP/IP 协议

第五章 TCP/IP 协议

Page 2: 第五章  TCP/IP 协议

互联网的基本概念— IP 层在 TCP/IP 协议栈中的位置

应用层协议

传输层协议

网卡驱动程序

ARP IPIP ICMP

Page 3: 第五章  TCP/IP 协议

IPv4 和 IP 数据报

无连接数据报传递服务 IP 数据报格式 IP 数据报的分段和重组 IP 数据报的路由和转发 IP 数据报差错报告

Page 4: 第五章  TCP/IP 协议

无连接数据报传递服务

网络 1

R1

源主机

网络 2

R2

网络 3

目标主机

R3网络 4

IP 数据报

IP 数据报帧头 1

IP 数据报

IP 数据报帧头 2

IP 数据报

IP 数据报帧头 3

IP 数据报

Page 5: 第五章  TCP/IP 协议

无连接数据报传递服务 ( 续 )

IPIP 只要求物理网络提供最基本的功能:传输包只要求物理网络提供最基本的功能:传输包。 IP 数据报的传递是互相独立的; (OSI 模型中 X.

25 是有连接的,后来才增加无连接服务。 )

收到数据报时不发确认;对 IP 数据报的损坏、丢失、错序、重复 听之任之。

确定数据报的路由确定数据报的路由。 数据报的分段和重组。尽力而为尽力而为 (best effort)(best effort) ,不保证可靠。

Page 6: 第五章  TCP/IP 协议

IP 数据报格式

版本 报头长 服务类型 总长度

标识 DF

MF

分段位移

生存时间 TTL 协议号 报头校验和源 IP 地址

目标 IP 地址可选项+填充

数据

0 16 31

Page 7: 第五章  TCP/IP 协议

IP 数据报格式 ( 续 )

绝大多数 IP 数据报包含 20 字节的报头: 版本版本 (4 位 ) : IP 协议版本,当前为 4 。 报头长报头长 (4 位 ) :本数据报头的字数,每字 4 字节,

范围是 5 ~ 15 , 5 即 20 字节, 15 即 60 字节,所以选项最多占 40 字节

服务类型服务类型 (8 位 )(type of service) :本数据报的服务质量参数,当前未实现,设置为 0 。

总长度总长度 (16 位 ) :数据报最大长度为 65535 字节。

Page 8: 第五章  TCP/IP 协议

IP 数据报格式 ( 续 )

标识标识 (16 位 ) :数据报编号,当路由器将本数据报分段时,此标识拷贝到每个段的 IP 报头。在分段重组时它用来确定该分段属于哪个数据报。

DFDF(DDon’t FFragment)(1 位 ) : DF=1 禁止本报分段。 MFMF(MMore FFragment)(1 位 ) : MF=1 表示后面还有本报

的分段, MF=0 表示是最后一个分段。 分段位移分段位移:分段位移 ×8 指出本分段在原数据报中从第

几字节开始。除最后一段外,其余分段的长度是 8 字节的倍数。

这些字段是与分段和重组有关的。

Page 9: 第五章  TCP/IP 协议

IP 数据报格式 ( 续 )

生存时间生存时间 TTLTTL :指明数据报在互联网上逗留的最大时间。标准按秒计,实际上按跳数计。数据报每经过一个路由器, TTL 减 1 ,当 TTL = 0 时数据报被丢弃。防止无法投递的报无限传递。

协议号协议号 (8 位 ) :指明上一层协议, 6 表示上层是 TCP ,17 表示上层是 UDP 。

报头校验和报头校验和 (16 位 ) :通过路由器时 TTL 减 1 ,校验和要重新计算。 IPv6 无校验和, ...

源源 IPIP 地址地址 (32 位 ) :数据报源主机的 IP 地址。 目标目标 IPIP 地址地址 (32 位 ) :数据报目标主机的 IP 地址。

Page 10: 第五章  TCP/IP 协议

IP 数据报的分段和重组

物理网络一般限制通过包的最大长度,如以太网允许最大帧长 1518 字节。若物理网络允许的包长小于 IP 数据报长,路由器的IP 层要将该报分段成多个 IP 报转发。

分段后的数据报在被发送过程中还可以再分段。

由目标主机的 IP 层对分段报进行一次重组,IP 不区分经一次或多次分段的报。

Page 11: 第五章  TCP/IP 协议

IP 数据报的路由和转发

主机和路由器如何为 IP 数据报确定路径: 源主机和目标主机位于同一物理网络:数据报在物

理网络内传递。比如以太网,源主机将目标主机 IP 地址转换成物理地址 , 把数据报封装在以太网帧中直接发送。

源主机和目标主机位于不同物理网络:数据报经路由器转发。路由器通过路由表决定数据报的下一站路由器通过路由表决定数据报的下一站。

源主机如何确定该发往哪个路由器?主机也有一张路由表,并配置默认网关。

Page 12: 第五章  TCP/IP 协议

IP 数据报的路由和转发 ( 续 )

网网 22 :: 202.112.58.0202.112.58.0

网网 11 :: 50.0.0.050.0.0.0

网网 44 :: 128.1.0.0128.1.0.0

网网 33 :: 166.111.0.0166.111.0.0

R3

202.112.58.3

R1

202.112.58.1

50.0.0.1

R2

202.112.58.2

128.1.0.2 166.111.0.1

Page 13: 第五章  TCP/IP 协议

IP 数据报的路由和转发 ( 续 )— 路由器 R3 的路由表

目标网络 屏蔽码 下一站 IP地址 50.0.0.0 255.0.0.0 202.112.58.1

128.1.0.0 255.255.0.0 202.112.58.2

166.111.0.0 255.255.0.0 直接传递

202.112.58.0 255.255.255.0 直接传递

* 166.111.0.1

* 项是默认路由项,或叫默认网关 (default gateway)

Page 14: 第五章  TCP/IP 协议

IP 数据报差错报告

互联网控制报文协议 ICMP ICMP (IInternet CControl MMessage PProtocol) 就是 IP 数据报差错报告机制, ICMP 报文封装在 IP 数据报中发送。

ICMP 差错报文: ICMP 信息报文: 目标不可达 • 回答请求 / 回答响应 数据报超时 (ping 用它测主机可达性 ) 数据报参数问题 • 时间戳 / 时间戳响应 报源减速 • 地址屏蔽码请求 / 响应 重定向

Page 15: 第五章  TCP/IP 协议

路由协议

路由器的核心是网络层,包括 IP 、 ICMP 、ARP ,还有一个或多个路由协议路由协议。由于路由协议需要传输层协议支持,实际路由器还包括高层模块,还有网管模块。

路由器功能和路由协议分类 内部路由协议内部路由协议 OSPFv2OSPFv2 外部路由协议外部路由协议 BGP-4BGP-4 无类别域间路由无类别域间路由 CIDRCIDR

Page 16: 第五章  TCP/IP 协议

路由器功能

互联网中路由器的传统功能: 交换路由信息交换路由信息:与其它路由器交换网络拓扑和网段时延等信息;

执行路由算法执行路由算法:基于路由信息计算、更新路由表,为数据报决定路由。

Internet 是由许多自治系统 自治系统 AS 互联而成,所谓自治系统是由单一机构管理、操作下的路由器连接的互联网。

Page 17: 第五章  TCP/IP 协议

路由协议分类

Internet 的路由协议分两类: 内部路由协议或内部网关协议 IGP—自治系统内部路由器交换路由信息的协议: RIP RIP (RRouting IInformation PProtocol) , DV 类。 IS-IS ,OSPFOSPF(OOpen SShortest PPath First) , LS 类。

外部路由协议或外部网关协议 EGP — 不同自治系统的路由器交换路由信息的协议: BGPBGP(BBorder GGateway PProtocol)

Page 18: 第五章  TCP/IP 协议

内部路由协议 OSPF— 原理

是链路状态路由协议链路状态路由协议 每个路由器都有本链路状态信息,即它直接连接

的路由器和网络,及到它们的“距离”。 周期地将本链路状态扩散 (flooding) 到所有结点。 所有的链路状态合在一起就是自治系统的拓扑数

据库,每个路由器维持这个拓扑数据库。 每个路由器根据这个拓扑数据库构造一个以自身

为根的最短路径树,从最短路径树生成它的路由表。

Page 19: 第五章  TCP/IP 协议

外部路由协议 BGP

网络

网络

R2

R3

网络

R1

网络

网络

R5

R6

网络

R7

AS1 AS2

Page 20: 第五章  TCP/IP 协议

外部路由协议 BGP( 续 )

路由器 R1 属于自治系统 AS1 ,路由器 R5 属于 AS2 。 R1 和 R5都实现外部路由协议 BGP交换路由表,它们也分别实现各自的自治系统内部路由协议,如 OSPF 。

BGP基本上是距离向量路由算法,所不同的是它把到达某网络选择的整个路径告诉邻居,而不只是下一站。路径信息 AS_PATH 中有所穿越的自治系统网络编号,利用 AS_PATH 可进行环路检测,克服了“计数到无限”的问题。

Page 21: 第五章  TCP/IP 协议

新一代 IP—IPv6

IPv4 的问题: 32 位约 43亿个地址,大大少于全球人口数 (60亿 ) ,将于 2008年用完;骨干网路由表信息爆炸。

IPv6IPv6 的主要设计特点的主要设计特点 IPv6IPv6 基本头格式基本头格式 IPv6IPv6 地址地址 IPv6IPv6 可选项可选项 全球的全球的 IPv6IPv6 试验网试验网

Page 22: 第五章  TCP/IP 协议

IPv6 的主要设计特点

保留保留 IPv4IPv4 无连接无连接 ,“,“ 尽力而为”数据报传递特征。尽力而为”数据报传递特征。 扩展的地址空间和编址功能:扩展的地址空间和编址功能: IPv6IPv6 支持的地址数是支持的地址数是 II

Pv4Pv4 的的 4040 亿亿 ×40×40 亿亿 ×40×40 亿倍亿倍! 128 位地址采用层次结构,地球每平方米的地址数保守估计 1564 ,乐观估计 391×1016 。

精简的基本报头格式 (8 字段 ) ,简化了报头处理。 支持服务质量控制:通信流等级 (traffic class) 将 IP

包分为不同的服务类别。流标号 (flow label) 可为特定的 IP 包流申请资源和优先级。

可选项支持身份认证和数据加密。

Page 23: 第五章  TCP/IP 协议

IPv6 的主要设计特点 ( 续 )

基本头和扩展头编码方式改进了性能,增加了扩展的灵活性

基本头扩展头 1 扩展头 N 传输层包

40 字节 可选

...

Page 24: 第五章  TCP/IP 协议

IPv6 基本头格式

版本 通信流等级 流标号负载长度 后续头部 跳数限制

源地址 (128 位 )

目标地址 (128 位 )

0 31

Page 25: 第五章  TCP/IP 协议

IPv6 基本头格式 ( 续 )

版本版本 (version) := 6 。 通信流等级通信流等级 (traffic class) :用于服务质量控制。 流标号流标号 (flow label) :路由器对流中报同样处理。 负载长度负载长度 (payload length) :除基本头外负载字节

数。 后续头部后续头部 (next header) :标识基本头后头部类型。 跳数限制跳数限制 (hop limit) :数据源设定 , 经路由器减 1 。 源地址源地址 (source address) :数据报源地址。 目标地址目标地址 (destination address) :数据报目标地址。

Page 26: 第五章  TCP/IP 协议

IPv6 基本头格式-与 IPv4 比较

IPv4 报头中有报头长度, IPv6基本头定长。 IPv4 报头中有报头校验和, IPv6没有。 Paxson

经统计发现:通过链路层 CRC 校验的包约 0.02% 有校验和错误。 Stone等收集了约 22亿个包,其中约 48万个包有 IP 、 UDP 或 TCP 校验和错误。 1278 个包 IP 校验和错。

IPv6 的路由器不对数据报分段,… IPv6 的可选项在扩展报头,路由器一般不需要处

理可选项。

Page 27: 第五章  TCP/IP 协议

IPv6 地址

有三类 IP 地址:单播、任播、多播地址 地址的冒分十六进制表示地址的冒分十六进制表示 可集成的全局单播地址可集成的全局单播地址 局部使用局部使用 (local use)(local use) 的单播地址的单播地址 嵌入嵌入 IPv4IPv4 地址的地址的 IPv6IPv6 地址地址 任播地址任播地址 多播地址多播地址

Page 28: 第五章  TCP/IP 协议

地址的冒分十六进制表示

将 128 位地址分成 88 段,每段 16 位用十六进制数十六进制数表示,段之间用冒号“::”隔开。例 2080:0000:0000:0000:0123:4567:89AB:CDEF, FF01:0000:0000:1234:89AB:0000:0000:0000

一或多个连续的全一或多个连续的全 00 可用“可用“ ::::”” 代替代替 , 但“ ::” 在一个地址中只能出现一次出现一次 , 各段数字开始的 0可省略。如 FF01:0:0:1234:89AB::

地址前缀用“ IPv6 地址 / 前缀位数”表示,前缀位数是十进制数。例如: 3FFE:3200::/24 。

::1 是回绕地址 (loopback), 用于自己给自己发送。

Page 29: 第五章  TCP/IP 协议

可集成的全局单播地址(aggregatable global unicast address)

格式前缀 FPFP(Format Prefix) :为 001001 。 顶级集成标识 (TTop-LLevel AAggregation IDID) :

指定 Internet顶级机构,即服务提供者网络号。 下一级集成标识 (NNext-LLevel AAggregation IDID) :

由 TLA ID 指定的服务提供者用于区分它的用户网络号

FP TLA ID RES NLA ID SLA ID interface ID

3 13 8 24 16 64

Page 30: 第五章  TCP/IP 协议

可集成的全局单播地址 ( 续 )

场所级集成标识 (SSite-LLevel AAggregation IDID) :用户用来构建用户网络的编址层次,标识用户网络内的特定子网。每个场所可有每个场所可有 6553665536 子网子网。

接口标识 (interface ID) :用于标识链路接口,一般是数据链路层地址,如 48 位以太网地址。

保留 (REServed) :留给将来使用。对于每个 Internet 服务提供者的网络号 TLA ID , In

ternet 的主干路由器必须有一表项与之对应。保留的 8 位是为 TLA ID 和 / 或 NLA ID扩展预留。

Page 31: 第五章  TCP/IP 协议

局部使用的单播地址

1111 1110 10 0 接口标识

1111 1110 11 0 子网标识 接口标识

10 54 64 ( 位 )

本链路使用 (link-local-use) 的单播地址格式

10 38 16 64 ( 位 )

本场所使用 (site-local-use) 的单播地址格式

Page 32: 第五章  TCP/IP 协议

局部使用的单播地址 ( 续 )

若源 / 目标地址为本链路使用的地址,则数据报只转发到该单一链路,如中继器或网桥连接的以太网链路,不转发到其它链路。

若源 / 目标地址为本场所使用的地址,则路由器不把数据报转发到场所以外。一个场所可以是由路由器连接的多个以太网链路。

局部使用的地址无需申请地址前缀,若要连到 Internet ,可加全局前缀自动重编址。

Page 33: 第五章  TCP/IP 协议

嵌入 IPv4 地址的 IPv6 地址

IPv4向 IPv6 的过渡: 在过渡时期 IPv4 地址和 IPv6 地址必须共存。过渡期有的结点实现双 IP 协议栈,同时支持 IPv4和 IPv6 ,被称为 IPv6IPv6//IPv4IPv4 结点结点。

采用“隧道隧道 (tunnel)(tunnel) 技术技术”: 在 IPv4 路由拓扑的基础上将 IPv6 数据报外加 IPv4 报头转发,即封装 IPv4 报头。隧道可以是源到目标路径的一段 , 开始和结束端是 IPv6/IPv4结点。

Page 34: 第五章  TCP/IP 协议

嵌入 IPv4 地址的 IPv6 地址 ( 续 )

实施隧道技术的 IPv6/IPv4结点被指定特殊的 IPv6单播地址,称为“与 IPv4兼容的 IPv6 地址 (IPv4-compatible IPv6 address)” 。隧道端结点的 IPv4 地址可从这种 IPv6 地址自动导出。

000000…… 0000 IPv4 地址80 16 32 位

Page 35: 第五章  TCP/IP 协议

嵌入 IPv4 地址的 IPv6 地址 ( 续 )

“映射 IPv4 的 IPv6 地址 (IPv4-mapped IPv6 address)” 用来表示只实现 IPv4 不支持 IPv6 的结点。

在 IPv4 和 IPv6混合网中,上述地址可用冒分十六进制和点分十进制结合的形式表示为:

x:x:x:x:x:x:d.d.d.d ,如 ::202.112.58.200

000000…… FFFF IPv4 地址80 16 32 ( 位 )

Page 36: 第五章  TCP/IP 协议

任播地址

任播地址是从单播地址空间分配的,当一个单播地址被分配给一个以上接口时就变成任播地址。

任播地址不能用作源地址;不能指定给主机,只只能指定给路由器能指定给路由器。

发送到任播地址的数据报被送到“最近”的结点。任播地址可表示连到特定子网的一组路由器,或属于一个机构的一组路由器。

Page 37: 第五章  TCP/IP 协议

多播地址

标记 (flag) : T=0 表示永久性的周知 (well-known) 多播地址; T=1 表示暂时指定的多播地址。

范围 (scope) :限制多播组的范围, 1= 本结点 (node-local) 范围; 2= 本链路 (link-local) 范围; 5= 本场所 (site-local) 范围; 8= 本机构范围; 14=全局范围 (global scope) 。例 FF02::2, FF05::2 。

1111 1111 标记 范围 组标识

000T

8 4 4 112 ( 位 )

Page 38: 第五章  TCP/IP 协议

IPv6 地址前缀的初始分配

分配 前缀 占地址比例保留地址(如 IPv4有关的) 0000 0000 1/ 256

为NSAP(ISO)保留的 0000 001 1/ 128

为 IPX(Novel l )保留的 0000 010 1/ 128

可集成的全局单播地址 001 1/ 8

本链路使用的单播地址 1111 1110 10 1/ 1024

本场所使用的单播地址 1111 1110 11 1/ 1024

多播地址 1111 1111 1/ 256

Page 39: 第五章  TCP/IP 协议

IPv6 可选项

IPv6 的可选项放在扩展头。定义了 6种选项: 逐跳选项 (hop-by-hop options) :给路由器信息; 路由选项 (routing options) :部分 /全部路由信息; 分段选项 (fragment options) :管理数据报分段; 目标选项 (destination options) :给目标的信息; 身份认证 (authentication) :为数据报提供发送主

机身份认证和数据完整性校验; 载荷安全封装 (encapsulating security payload) :

为数据报提供加密 , 也包括发送主机身份认证。

Page 40: 第五章  TCP/IP 协议

全球的 IPv6 试验网

1996年创建的 6bone 6bone 是全球的 IPv6试验网。 6bone 6bone 使用地址前缀 3FFE3FFE::/::/1616 。它为注册者

分配一个 24 位地址前缀,称为 pTLA (pseudo TLA) 。

CERNET 分配到 3FFE:3200::/24 。 6bone6bone 通过封装 IPv4 报头来传递 IPv6 数据报。 IPv6 的前景 ?! 从 IPv4IPv4 平滑过渡到平滑过渡到 IPv6IPv6十分重

要,但过渡到 IPv6 耗资巨大!美国拥有的 IPv4地址占全世界的 74%74% … ,日、韩和欧洲较积极。

Page 41: 第五章  TCP/IP 协议

Internet 传输层

BGP FTP HTTP SMTP TELNET SNMP

OSPF

IP + ICMP

DNS

TCPTCP UDPUDP

Page 42: 第五章  TCP/IP 协议

Internet 传输层

传输控制协议 传输控制协议 TCTCP (TTransmission CControl PProtocol) 是端到端、有连接、可靠数据流传输协议。多数互联网应用需要 TCP 的可靠传输服务。

用户数据报协议 用户数据报协议 UDPUDP (UUser DDatagram PProtocol)是端到端、无连接、不保证可靠的数据报传输协议。它为互联网上实时视频、音频应用提供了实验环境。

拥塞控制的进一步研究拥塞控制的进一步研究

Page 43: 第五章  TCP/IP 协议

TCP 概况

TCP 是由 Vinton Cerf Vinton Cerf 和 Robert Kahn Robert Kahn 在 1973年设计,原先 IP 和 TCP 是合在一起的,后来把寻径转发寻径转发和可靠传输可靠传输分成两层。

TCP 向应用层提供可靠的进程间通信可靠的进程间通信。 IP 地址标识主机, TCP TCP 端口号端口号标识应用进程应用进程。集中统一分配的端口号称为周知端口 (well-known port) ,其余的动态分配。

应用进程使用 TCP 通信,首先要建立连接连接。 TCP传输的数据单元称数据片数据片 (segmentsegment) 。

Page 44: 第五章  TCP/IP 协议

可靠数据流传输协议 TCP

TCPTCP 数据可靠传输机制数据可靠传输机制 TCPTCP滑动窗口流控滑动窗口流控 TCPTCP 数据片格式数据片格式 TCPTCP 连接建立—三次握手连接建立—三次握手 TCPTCP 连接关闭连接关闭 TCPTCP 重传策略和重传超时值重传策略和重传超时值 TCPTCP拥塞控制拥塞控制 TCPTCP 协议的问题和扩充协议的问题和扩充

Page 45: 第五章  TCP/IP 协议

TCP 数据可靠传输机制

TCPTCP 源进程源进程 TCPTCP 目标进程目标进程

数据字节 1001~2000 ACK 2001

数据字节 2001~2500 丢失超时

重传数据字节 2001~2500 ACK 2501

Page 46: 第五章  TCP/IP 协议

TCP 数据可靠传输机制 ( 续 )

TCP 源进程为一个连接连接上传输的每个数据字节字节指定序号序号;

TCP 为每个数据片计算校验和校验和; TCP 目标进程要对正确收到 ( 即校验和正确 ) 的

数据字节序号给予确认确认 (ACKACKnowledgement) ; TCP 源进程所发出的数据片在某时间间隔没有收

到确认,则要 ( 超时超时 ) 重传重传数据片。若每发一个数据片要等待确认,性能 ...

Page 47: 第五章  TCP/IP 协议

TCP 滑动窗口流控

目标进程控制源进程发送窗口的大小 窗口外左边的字节已被发送,且已收到确认 窗口内字节可以发送 /已被发送,但未收到确

认 窗口外右边的字节不能发送。

窗口滑动

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Page 48: 第五章  TCP/IP 协议

TCP 滑动窗口流控 ( 续 )

TCP 确认字节,滑动窗口大小也以字节为单位,而不是数据片。这是有历史原因的,原来 TCP 和 IP是一层,采用字节流为了方便 TCP 数据片被分段,后来分成两层,分段功能放在 IP 层。

在传输中几个小片合成一个片会更有效,采用字节流小片合大片更方便。

用数据片数目说明数据总量不及用字节数更确切,因为一个数据片可以容纳一个字节,也可以容纳 1000 字节。

Page 49: 第五章  TCP/IP 协议

TCP 数据片格式

目标端口 (destination port)

校验和 (checksum) 紧急指针 (urgent point)

序号 (sequence number)

确认号 (acknowledgement number)

选项 (options) +填充 (padding)

数据

0 16 31位源端口 (source port)

窗口大小 (window size)( 字节数 )

FIN

SYN

RST

PSH

ACK

URG

片头长度 保留

20

Page 50: 第五章  TCP/IP 协议

TCP 数据片格式 ( 续 )

源端口源端口:连同源 IP 地址标识源应用进程源应用进程。 目标端口目标端口:连同目标 IP 地址标识目标主机的一目标主机的一

个应用进程个应用进程。 序号序号:代表本数据片第一个字节的序号。 确认号确认号:若 ACK=1 ,确认号代表期待接收的下一

数据字节序号。 片头长度片头长度:片头的字数,每个字 32 位。指明数据

从哪里开始。

Page 51: 第五章  TCP/IP 协议

TCP 数据片格式 ( 续 )

6 个控制位: URGURG=1 表示紧急指针有效; URG=0 忽略指针。

ACKACK=1 表示确认号有效; ACK=0 忽略确认号。PSHPSH=1 表示推进,让目标 TCP向上递交数据片。RSTRST=1 表示清除连接,发生主机故障时清除连接,也用于拒绝非法数据片或连接请求。 SYNSYN=1 表示连接请求,用于建立连接并通告初始序号,本片序号 = 该连接的初始序号。 FINFIN=1 表示本方数据流终止 , 即关闭本方数据流。注意 SYN 和 FIN 的片即使无数据也占 1 个序号。

Page 52: 第五章  TCP/IP 协议

TCP 数据片格式 ( 续 )

窗口大小窗口大小: 16 位,源方接收窗口的字节数,即目标方发送窗口大小。

校验和校验和: 16 位,对片头和数据以 16 位字计算得到,校验和还包括源、目标 IP 地址等 96 位伪报头。注意伪报头不发送。

紧急指针紧急指针:当 URG=1 时,指针指向紧急数据后面字节的位置。

选项选项: RFC793 中定义了最大数据片长度 MSS选项。 ...

Page 53: 第五章  TCP/IP 协议

TCP 数据片格式 ( 续 )— 讨论

校验和检查需不需要?够不够? Paxson Paxson 1997年经统计发现:通过链路层通过链路层 CRCCRC

校验的包约 校验的包约 0.02%0.02% 有校验和错误有校验和错误。 Stone Stone 等在 1998~1999年收集了约 2222 亿亿个包,

其中约 46.8646.86 万万个包有 TCP TCP 校验和错误校验和错误,包括端主机硬件错误、端主机软件 bugs (UNIX 、 Windows NT) 以及路由器内存错误等 ( 不要太信任硬件 !!) 。有一半错误无法确认原因 ( 数据隐私 ) 。

Page 54: 第五章  TCP/IP 协议

TCP 数据片格式 ( 续 )— 讨论

0~255 后来扩展为 0~1023端口号一般作为周知周知端口 端口 (well-known port) (well-known port) 由 IANA管理,统一分配给系统应用进程,如 HTTP 用 80 。 1024~65535 端口号由用户动态使用,但此惯例不都遵循。

TCP 数据片最小是 20 字节 ( 无数据的 SYN片、ACK片 ) ,最大长度的默认值是 556 字节。有人用 Tcpdump 对网络上某条线路进行一天的监听,统计发现 25%的 IP 包是 40 字节, 576 字节以下的 IP 包占 75%。

Page 55: 第五章  TCP/IP 协议

TCP 连接建立—三次握手

发送方 发送方 TCPTCP 接收方 接收方 TCPTCP

发 SYN, 序号 = x

发 SYN, ACK, 序号 =y, 确认号 = x+1

发 ACK, 确认号 = y+1

Page 56: 第五章  TCP/IP 协议

TCP 连接建立—三次握手必要性

发送方 发送方 TCPTCP 接收方 接收方 TCPTCP

发发 SYN, SYN, 序号序号 =20=2000

收 SYN, 序号 =100

发 SYN, ACK, 序号=300, 确认号 =101

发 RST, 序号 =101

发发 SYN, ACK, SYN, ACK, 序号序号 ==400, 400, 确认号确认号 =201=201发发 ACK, ACK, 序号序号 =20=20

1, 1, 确认号确认号 =401=401

收收 SYN, SYN, 序号序号 =200=200

Page 57: 第五章  TCP/IP 协议

TCP 连接建立—三次握手必要性 ( 续 )

三次握手是必要的,因为同步数据片会丢失、延同步数据片会丢失、延迟或重传迟或重传。接收方在收到一个同步数据片时,无法知道它是否是一个老、延迟的重复片,若无三次握手会造成混乱。

上例 <SYN<SYN ,序号,序号 =100>=100> 是一个老的、重传的、延迟的同步数据片,但接收方无法知道这一点,所以进行第二次握手。发送方发现被确认的序号不对,发 <RST<RST ,序号,序号 =101>=101>拒绝此非法数据片。接下去是针对同步片 <SYN<SYN ,序号,序号 =200>=200> 的正常同步过程。

Page 58: 第五章  TCP/IP 协议

TCP 连接关闭

发送方 发送方 TCPTCP 接收方 接收方 TCPTCP

发 FIN, ACK, 序号 = x, 确认号 = y 发 ACK, ( 数据 ), 序

号 = y, 确认号 = x+1

发 ACK, 确认号 = z+1

发 FIN, ACK, 序号 = z, 确认号 = x+1

...

Page 59: 第五章  TCP/IP 协议

TCP 重传策略和重传超时值

TCPTCP 采用的是累计确认和后退采用的是累计确认和后退 NN 重传机制重传机制。实现简单,但浪费带宽。对高质量线路重传常常是拥塞而丢弃造成。持续拥塞的情况,重传是火上浇油,更加拥塞。

设置适当的重传超时值 RTORTO (RRetransmission TTime OOut)十分重要 ... , RTO必须动态修正。

Page 60: 第五章  TCP/IP 协议

TCP 重传超时值 ( 续 )

RTT(RRTT(Round T Trip T Time)) 表示来回传输时间表示来回传输时间,但各次传输 RTT 不会一样,需要某种“平均化”的值,称为 SRTTSRTT(SSmoothed RTTRTT) 。设定 SRTT初值,可用各次的 RTT 对 SRTT修正: SRTTSRTT== · SRTT· SRTT ++ (1(1--)RTT)RTT , 其中是平滑因子,建议值 0.8~ 0.9, 典型值 7/8。令 Err = RTTErr = RTT -- SRTTSRTT

Page 61: 第五章  TCP/IP 协议

TCP 重传超时值 ( 续 )

|Err| 每次传输也都不同,考虑偏差的平滑值D 。设定 D 的初值,以后利用各次的 |Err|对 D修正:

D ← D ← · D · D ++ (1(1--)|Err|)|Err|

其中与 SRTT 计算式中的可以同或不同。重传超时值按下式计算:

RTORTO == SRTTSRTT ++ 4D4D

Page 62: 第五章  TCP/IP 协议

TCP 重传超时值 ( 续 )

对算法来说正确测量 RTT 是基础,但 RTT很难正确测量。特别当发生数据片超时重传时,从收到的 ACK 无法判断这是对原数据片还是重传数据片的确认。

KarnKarn 算法算法:对于重传的数据片不去更新 RTT ,每次重传时就是将前一次的 RTO 加倍,直至重传成功。 Karn 算法在大部分 TCP 中实现。

Page 63: 第五章  TCP/IP 协议

TCP拥塞控制

1986年 10月开始, Internet 出现了一系列的“拥拥塞崩溃塞崩溃”,例如某两地相距不到 400米,经过 3 个网络结点,它们之间的数据吞吐量一度从平时的 32kbps降到了 40bps 。

Jacobson 研究发现:这是由于在坏的网络情况( 即拥塞 )下 TCP 的累计确认、超时重传、后退 N 等机制造成。

Jacobson 在 TCP 中增加了拥塞控制算法。这些算法防止了今天 Internet 的拥塞崩溃。

Page 64: 第五章  TCP/IP 协议

TCP拥塞控制

网络拥塞现象网络拥塞现象 TCPTCP拥塞控制算法的基本思想拥塞控制算法的基本思想 TCP拥塞控制算法: - 慢启动和拥塞避免慢启动和拥塞避免 (slow

start , congestion avoidance) - 快重传和快恢复快重传和快恢复 (fast ret

ransmit , fast recovery) TCPTCP 实现的版本实现的版本

Page 65: 第五章  TCP/IP 协议

网络拥塞现象—网络拥塞对吞吐量的影响

网络吞吐量是数据通过网络的传送速率

吞吐量

负载

无拥塞 轻微拥塞 严重拥塞

AB

拥塞对吞吐量的影响

Page 66: 第五章  TCP/IP 协议

拥塞控制基本策略—闭环控制

闭环控制 (closed-loop control) 是一种动态控制系统,它包括反馈机制和控制机制。

反馈机制反馈机制允许网络把拥塞情况通知数据源。路由器 ( 或交换机 ) 是监控拥塞程度的最好场所。

显式反馈和隐式反馈 ... 控制机制控制机制允许数据源调整给网络的负载。 窗口控制和速率控制。

Page 67: 第五章  TCP/IP 协议

TCP拥塞控制算法的基本思想

是一种把丢失作为拥塞 (隐式反馈 ) 信号的闭环控制。丢失可能是差错丢弃或拥塞丢弃,现代通信传输的误码率很低,丢失多半是拥塞造成。

为每个连接动态确定拥塞窗口 动态确定拥塞窗口 cwndcwnd 反映网络拥塞情况。 TCP 发送方根据 cwnd 和对方的接收窗口 rwnd 调整发送窗口 wnd :

wnd = min (cwnd , rwnd) 为每个连接设置窗口门槛值 ssthresh ,其初值可

设置为 64k 字节或 rwnd 。

Page 68: 第五章  TCP/IP 协议

TCP拥塞控制算法—慢启动和拥塞避免

(1) 慢启动慢启动:开始时令 开始时令 cwnd=1cwnd=1 ,发送 1 个数据片,收到确认后 cwnd 加 1 ,即 cwnd=2 ,发送 2 个数据片,收到 2 个确认片后 cwnd 加 2 ,即 cwnd=4 ,发送 4 个数据片…。总之,当 cwnd=n 时,发送 n 个数据片,都收到确认片后 cwnd 加 n 。这叫做慢启动。

实际上,在 在 RTT RTT 时间内 时间内 cwnd cwnd 的增量的增量△△ ccwnd=cwndwnd=cwnd ,, cwnd cwnd 是按指数增长。是按指数增长。

Page 69: 第五章  TCP/IP 协议

TCP拥塞控制算法—慢启动和拥塞避免 ( 续 )

慢启动后,会出现三种可能: cwnd 达到慢启动门槛值 ssthresh(slow start threshold) ;cwnd 达到 rwnd ;超时无确认。

(2) 拥塞避免拥塞避免:当 cwnd 达到 ssthresh ,则cwnd cwnd 改为线性增长改为线性增长,发送 cwnd 个数据片,在收到全部确认后, cwnd 加 1 ,即在 在 RTT RTT 时间内 时间内 cwnd cwnd 的增量 的增量 △△ cwnd=1cwnd=1 。

(3) 当 cwnd 达到 rwnd ,则发送量不再增长。

Page 70: 第五章  TCP/IP 协议

TCP拥塞控制算法—慢启动和拥塞避免 ( 续 )

(4) 当数据片的重传计时器超时仍未收到确认,则重传数据片重传数据片,且令 ssthresh=cwnd/2 ( 即当前拥塞窗口的一半 ) ,再回到 (1) ,重新慢启动。

慢启动和拥塞避免作为组合算法在 TCP 中实现,根据窗口门槛值和数据丢失情况来动态调整发送窗口。

Page 71: 第五章  TCP/IP 协议

TCP拥塞控制算法—快重传

当 TCP 接收方收到一个错序 ( 序号不连续 )的数据片时,它立即发一个 ACK片,这是一个重复的 ACK ,目的是让对方知道数据片错序。 TCP 发送方不等待重传计时器超时,根据重复根据重复 ACKACK 的情况立即重传,这就是快的情况立即重传,这就是快重传。重传。

假定假定: 1 、 2 个重复 ACK只是数据片暂时错序, 33 个重复个重复 ACKACK 表明数据片丢失表明数据片丢失 ?!?!

Page 72: 第五章  TCP/IP 协议

TCP拥塞控制算法—快恢复

在快重传后,不是进入慢启动,而是把 cwnd 降一半,然后按原先方式增加,就叫快恢复。

为什么采用快恢复而不是慢启动?收到重复的 ACK ,不只表示数据片可能丢失, 还表示 TCP 发送方和接收方之间仍有数据流, TCP 接收方只当收到后面的数据片,才可能发重复 ACK ,所以拥塞并不 严重。

Page 73: 第五章  TCP/IP 协议

TCP拥塞控制算法—快重传和快恢复:例

...

TCP 发送方

TCP 接收方数据片

1数据片5数据片6

ACK6数据片7

ACK6数据片8 ACK6

数据片 15

ACK6数据片6

ACK6

ACK16cwnd=5+3cwnd+1

...

cwnd=10

Page 74: 第五章  TCP/IP 协议

TCP拥塞控制算法—快重传和快恢复算法

(1) 当发送方收到第第 33 个重复的个重复的 ACKACK ,设置ssthresh=cwndssthresh=cwnd//22 ,但不小于 2 个数据片。

(2) 重传重传丢失的片,设置 cwnd=ssthresh+3cwnd=ssthresh+3 。(3) 再次收到重复的 ACK 时 , cwnd←cwnd+1 。(4) 若新 cwnd值允许 , 则恢复发送 1 个新片。(5) 当非重复的 ACK 到达 , 它是对 (2) 重传的

确认。设置 cwnd=ssthresh, 进入拥塞避免。

Page 75: 第五章  TCP/IP 协议

TCP拥塞控制算法—快重传和快恢复算法的讨论

快重传算法选择重复 ACK 的门槛值为 33 ,但即使收到 3 个重复的 ACK ,也可能只是暂时错序,如包的传递路径改变, ... 。所以快重传的片中也会有不必要的重传。

Paxson 对 35 个 Internet站点, 20000 次TCP批量数据传输作了分析:

必要和不必要的快重传的比例记为 Rg:b 。

Page 76: 第五章  TCP/IP 协议

TCP拥塞控制算法—快重传和快恢复算法的讨论

若重复 ACK门槛值设为 44 , Rg:b 改进为 原2.5倍,但减少了 30%快重传的机会。

若此值设为 22 ,增加了 65 ~ 70%快重传的机会,但不必要的重传增加为原来的 3 倍。

当一个窗口中只有一个数据片丢失时,快重传和快恢复优化了性能,但是同一窗口中有多个数据片丢失时不能快恢复。

Page 77: 第五章  TCP/IP 协议

TCP实现的版本

1988年的 BSD TCP 版本被称为 Tahoe TCPTahoe TCP ,它包括慢启动、拥塞避免和快重传,快重传后进入慢启动。

1990年的 BSD TCP 版本被称为 Reno TCPReno TCP ,它实现了包括快恢复在内的四个算法。这 4 个算法已成为 TCP拥塞控制算法标准。

当同一窗口中有多个数据片丢失时不能快恢复, 1999年 Floyd 等改进了算法,改进后的 TCP 版本称为 New-Reno TCPNew-Reno TCP 。

Page 78: 第五章  TCP/IP 协议

TCP 协议的问题

对于高带宽和 RTT 大的链路,如干线和卫星信道等又宽又长的链路, TCP 存在较大性能问题。

TCP 的 16 位窗口限制:一个 TCP 连接在 RTT 时间内最多只能发送 216 = 65K 字节,连接的有效带宽是 8×216/RTTbps 。例如 9000公里干线,光速来回时间是 60ms , TCP 连接有效带宽是 8×21

6/(60×10-3)≈8.7Mbps 。 TCP 的小窗口对于又宽又长的链路是很大浪费。

TCP 的累计确认和后退 N 重传对又宽又长的链路尤其糟糕。

Page 79: 第五章  TCP/IP 协议

TCP 协议的扩充—新选项

窗口比例因子选项窗口比例因子选项:如下图。设 TCP片头中的窗口值= W(<216) ,窗口比例因子 rcv.scale = S ,则表示允许的实际窗口值是W·2W·2SS 。 2 的指数运算可通过二进制数移位操作实现。窗口比例因子选项在 SYN片发送, rcv.scale 最大值为 14 。

类= 3 长度= 3 rcv.scale

Page 80: 第五章  TCP/IP 协议

TCP 协议的扩充—新选项 ( 续 )

负确认选项 负确认选项 NAKNAK (NNegative AAcKKnowledgement) :如下图。要求发送方只重发指定的数据片。其中“序号”表示未收到的第 1字节序号,“未收到片数”按 TCP 的最大数据片长度 MSS 为单位计算。

类= A 未收到片数长度= 7 序 号

Page 81: 第五章  TCP/IP 协议

用户数据报协议 UDP

UDP提供进程之间的数据报传输服务,无连接、不保证可靠。 UDP 数据报格式:

UDP 源端口号 UDP 目标端口号UDP 数据报长度 UDP 校验和

数据

Page 82: 第五章  TCP/IP 协议

用户数据报协议 UDP( 续 )

端口 1 端口 2 端口 3

UDP :基于端口的分路

IP

Page 83: 第五章  TCP/IP 协议

用户数据报协议 UDP( 续 )

UDP端口号标识应用进程。统一分配少量周知端口给标准的互联网应用;其余动态分配,用毕释放。

UDP 校验和可选:为 0 表示不计算校验和;若计算校验和则类似 TCP 要加伪报头,对整体进行计算。伪报头只为计算校验和用,它包括源主机和目标主机 IP 地址,从 IP 报头提取。

为什么 Internet 上实时视频、音频信息的传输是采用 UDP ,而不是 TCP ?

Page 84: 第五章  TCP/IP 协议

用户数据报协议 UDP( 续 )

网络上的实时视频、音频信息的特点是数据量大,冗余度大,可容忍一定的差错率和少量的丢失,但不能容忍 TCP 的重传时延,所以网上实时视频、音频信息是用 UDP 数据报传输的。

UDP 不保证可靠,对实时多媒体应用,需要解决 UDP 数据报的重复和错序问题。

IETF 的音频 -视频工作组在 UDP之上开发了实时之上开发了实时传输协议传输协议 RTPRTP ,将 UDP 数据报封装在 RTP 包中传输。 RTP 包头带有时间戳和序号时间戳和序号,可解决包的重复、错序问题。

Page 85: 第五章  TCP/IP 协议

拥塞控制的进一步研究

路由器参与拥塞管理 - TCP拥塞控制机制的问题,正确实现否 ?

- 传统路由器的包队列管理技术。 - 主动队列管理算法如 REDRED (RRandom EE

arly DDetection) 的研究。基于 UDP 的实时音频、视频流的拥塞控制

机制的研究。