第九章 传输控制协议 (TCP)

68
第第第 第第第第第 (TCP)

description

第九章 传输控制协议 (TCP). Application layer. Transport layer. TCP. UDP. Network layer. §9-1 引言. TCP. Transmission Control Protocol TCP 叫做 面向连接的 、 可靠的 传输协议。 它给服务增加了面向连接和可靠性的特点。. 进程 ( 运行的应用程序 ). 进程 ( 运行的应用程序 ). Internet. IP 协议的作用范围. - PowerPoint PPT Presentation

Transcript of 第九章 传输控制协议 (TCP)

Page 1: 第九章 传输控制协议 (TCP)

第九章 传输控制协议(TCP)

Page 2: 第九章 传输控制协议 (TCP)

2

§9-1 引言

TCPTCP

Transmission Control ProtocolTransmission Control Protocol TCPTCP 叫做叫做面向连接的面向连接的、、可靠的可靠的传输协议。传输协议。 它给服务增加了面向连接和可靠性的特点。它给服务增加了面向连接和可靠性的特点。

TCPTCP UDPUDPTransport Transport layerlayer

Application layerApplication layer

Network layerNetwork layer

Page 3: 第九章 传输控制协议 (TCP)

3

进程到进程的通信

InternetInternet

进程 进程 (( 运行的应用程序运行的应用程序 ))

进程 进程 (( 运行的应用程序运行的应用程序 ))

IP IP 协议的作用范围协议的作用范围TCPTCP 协议的作用范围协议的作用范围

Page 4: 第九章 传输控制协议 (TCP)

4

端口号

TCPTCP

6429564295

TELNET TELNET 客户客户

TCPTCP

2323

TELNET TELNET 服务器服务器

与 UDP 一样, TCP 也是服务器使用熟知端口号,客户程序使用短暂端口号。

Page 5: 第九章 传输控制协议 (TCP)

5

端口、端点、连接

202.115.12.6202.115.12.6

8080

Port:Port: 8080

Endpoint:Endpoint:(202.115.12.6, 80)(202.115.12.6, 80)

202.115.12.34202.115.12.34

1625016250

Connection:Connection: (202.115.12.6, 80) and (202.115.12.34, 16250)(202.115.12.6, 80) and (202.115.12.34, 16250)

Page 6: 第九章 传输控制协议 (TCP)

6

TCP 使用的熟知端口号Port Protocol Description

7 Echo 将收到的数据报回送到发送器9 Discard 丢弃任何收到的数据报11 Users 活跃的用户13 Daytime 返回日期和时间17 Quote 返回日期的引用19 Chargen 返回字符串20 FTP, Data 文件传送协议(数据连接)21 FTP, Control 文件传送协议(控制连接)23 TELNET 终端网络25 SMTP 简单邮件传送协议53 DNS 域名服务器67 BOOTP 引导程序协议79 Finger Finger80 HTTP 超文本传送协议

111 RPC 远程过程调用

Page 7: 第九章 传输控制协议 (TCP)

7

Socket 地址200.23.56.8200.23.56.8

IP IP 地址地址

6969

端口号端口号

200.23.56.8200.23.56.8

Socket Socket 地址地址

6969

• TCP TCP 需要两个标识符:需要两个标识符: IPIP地址地址和和端口号端口号。它们各用在一。它们各用在一端以建立一条连接。端以建立一条连接。

• 要使用要使用 TCPTCP 的服务,我们的服务,我们需要需要一对一对 SocketSocket 地址:客地址:客户户 SocketSocket 地址和服务器地址和服务器 SoSocketcket 地址。地址。

• 一个一个 IPIP 地址与一个端口号地址与一个端口号合起来就叫做合起来就叫做 SocketSocket 地址。地址。

Page 8: 第九章 传输控制协议 (TCP)

8

§9-2 TCP 的服务

TCP TCP 服务服务流式数据服务流式数据服务全双工服务全双工服务可靠服务可靠服务

Page 9: 第九章 传输控制协议 (TCP)

9

流式数据服务流式数据服务流式服务流式服务 ::

发送发送 TCPTCP 从发送应用程从发送应用程序接收到字符流,从这个序接收到字符流,从这个流中提取适当的长度创建流中提取适当的长度创建为叫做报文段的分组,然为叫做报文段的分组,然后将它们发送到网络上。后将它们发送到网络上。接收接收 TCPTCP 则接收报文段,则接收报文段,从中提取数据,若它们没从中提取数据,若它们没有按序到达还要将它们排有按序到达还要将它们排序,并将它们作为字符流序,并将它们作为字符流交付给接收应用程序。交付给接收应用程序。

Page 10: 第九章 传输控制协议 (TCP)

10

全双工服务全双工服务

数据可在同一数据可在同一时间双向流动时间双向流动数据数据 确认确认

捎带捎带:确认可随:确认可随数据一起发送数据一起发送

Page 11: 第九章 传输控制协议 (TCP)

11

§9-3 TCP 报文段20~60 bytes20~60 bytes

Page 12: 第九章 传输控制协议 (TCP)

12

对各字段的说明:对各字段的说明: 源端口地址源端口地址:是一个:是一个 1616 位字段。定义了在主机中发送位字段。定义了在主机中发送该报文段的应用程序的端口号。该报文段的应用程序的端口号。 目的端口地址目的端口地址:是一个:是一个 1616 位字段。定义了在主机中接位字段。定义了在主机中接收该报文段的应用程序的端口号。收该报文段的应用程序的端口号。 序号序号:是一个:是一个 3232 位字段。它定义了一个数,指派给本位字段。它定义了一个数,指派给本报文段数据的第一个字节。为了保证连通性,要发送的每报文段数据的第一个字节。为了保证连通性,要发送的每一个字节都要编上号。序号告诉目的地,这个序列中的哪一个字节都要编上号。序号告诉目的地,这个序列中的哪一个字节是报文段中的第一个字节。一个字节是报文段中的第一个字节。 确认号确认号::是一个是一个 3232 位字段。定义了源进程期望从对方位字段。定义了源进程期望从对方接收的报文段的序号。确认可捎带和数据一起发送。接收的报文段的序号。确认可捎带和数据一起发送。 首部长度首部长度:是一个:是一个 44 位字段。指出位字段。指出 TCPTCP 首部共有多少首部共有多少个个 44 字节字。字节字。 保留保留:是一个:是一个 66 位字段。保留为今后使用。位字段。保留为今后使用。

Page 13: 第九章 传输控制协议 (TCP)

13

控制控制:是一个:是一个 66 位字段。定义了位字段。定义了 66 种不同的控制位或标种不同的控制位或标志。志。

URGURG ACKACK PSHPSH RSTRST SYNSYN FINFIN

URG:URG: 紧急指针( urgent pointer )有效 ACK:ACK: 确认序号有效。 PSH:PSH: 接收方应该尽快将这个报文段交给应用层。 RST:RST: 重建连接。SYN:SYN: 同步序号用来发起一个连接。 FIN:FIN: 发端完成发送任务。

这些比特用在这些比特用在 TCPTCP 的流控制、连接建立和的流控制、连接建立和中止以及数据传送的方式等方面。中止以及数据传送的方式等方面。

Page 14: 第九章 传输控制协议 (TCP)

14

对各字段的说明(续):对各字段的说明(续): 窗口大小窗口大小:是一个:是一个 1616 位字段。定义对方必须维持的窗位字段。定义对方必须维持的窗口大小(以字节为单位)。最大长度为口大小(以字节为单位)。最大长度为 6553565535 字节。字节。 检验和检验和:是一个:是一个 1616 位字段。位字段。 紧急指针紧急指针:是一个:是一个 1616 位字段。只有当紧急标志置位时,位字段。只有当紧急标志置位时,这个字段才有效。这时的报文段包括紧急数据。这个字段才有效。这时的报文段包括紧急数据。 选项选项:在:在 TCPTCP 首部中可以有多达首部中可以有多达 4040 字节的可选信息。字节的可选信息。

Page 15: 第九章 传输控制协议 (TCP)

15

流、分组和序号:Incising

Segment

Data streamSending

Recovering

Sending buffer Receiving buffer

Receiving

分组的序号是这样一个数,它指派给本报文段数据的分组的序号是这样一个数,它指派给本报文段数据的第一个字节。第一个字节。

Page 16: 第九章 传输控制协议 (TCP)

16

§9-4 选项TCP 首部可以有多达 40 个字节的可选信息。它们用来将附加信息传递给目的站,或用来将其他选项对齐。

选 项

单字节

多字节

无操作 选项结束

最大报文段长度 窗口扩大因子 时间戳

Page 17: 第九章 传输控制协议 (TCP)

17

选项说明: 无操作无操作:是一个一字节选项。用作选项之间的填充。:是一个一字节选项。用作选项之间的填充。 选项结束选项结束::也是一个 1 字节选项,用于选项字段结束时的填充。但它只能用作最后一个选项。在此选项之后,接收器就寻找有效载荷数据。

选项

数据选项结束

Page 18: 第九章 传输控制协议 (TCP)

18

选项说明(续): 最大报文段长度最大报文段长度:这个选项定义可以被目的站接收的:这个选项定义可以被目的站接收的TCPTCP 报文段的最长数据块(即数据的最大长度)。报文段的最长数据块(即数据的最大长度)。 最大数据长度是在最大数据长度是在连接建立阶段连接建立阶段确立的,这个大小是确立的,这个大小是由报文段的目的站而不是源站确定的。由报文段的目的站而不是源站确定的。 这个选项这个选项仅仅在进行连接的报文段中使用。它不能用于在进行连接的报文段中使用。它不能用于数据传送中的报文段。数据传送中的报文段。 下图为这个选项的格式:下图为这个选项的格式:

代码: 2 长度: 4 最大报文段长度1 字节 1 字节 2 字节

Page 19: 第九章 传输控制协议 (TCP)

19

选项说明(续): 窗口扩大因子窗口扩大因子:这个选项定义了滑动窗口的大小。为了:这个选项定义了滑动窗口的大小。为了增大窗口大小,就要使用窗口扩大因子。增大窗口大小,就要使用窗口扩大因子。 新的窗口大小可以这样求出,即先计算新的窗口大小可以这样求出,即先计算 22 的的 nn次方,这次方,这里里 nn 是窗口扩大因子,再将得出的结果乘以首部中的窗口大是窗口扩大因子,再将得出的结果乘以首部中的窗口大小:小: 新的窗口大小新的窗口大小 ==首部中定义的窗口大小首部中定义的窗口大小×2×2 窗口扩大因子窗口扩大因子 窗口扩大因子窗口扩大因子只能只能在连接建立阶段确定。在数据传送阶段,在连接建立阶段确定。在数据传送阶段,窗口大小可以改变,但它必须乘以同样的扩大因子。窗口大小可以改变,但它必须乘以同样的扩大因子。 下图为这个选项的格式:下图为这个选项的格式:

代码: 3 长度: 3 扩大因子1 字节 1 字节 1 字节

Page 20: 第九章 传输控制协议 (TCP)

20

选项说明(续): 时间戳时间戳:这是一个:这是一个 1010 字节字段。该字段由报文段离开字节字段。该字段由报文段离开的源站填入。目的站接收报文段并存储该时间戳。的源站填入。目的站接收报文段并存储该时间戳。 当目的站发送对该报文段的字节的确认时,就输入前当目的站发送对该报文段的字节的确认时,就输入前面在回送回答字段中存储的值。面在回送回答字段中存储的值。 当源站收到确认时,就将当前时间与该数值进行检查,当源站收到确认时,就将当前时间与该数值进行检查,差值就是差值就是往返时间往返时间。。 下图为这个选项的格式:下图为这个选项的格式:

代码:8

长度 :10时间戳值

时间戳回送回答

Page 21: 第九章 传输控制协议 (TCP)

21

§9-5 检验和全全 00 协议 协议 (6)(6)

3232 位源位源 IPIP 地址地址3232 位目的位目的 IPIP 地址地址

总长度总长度源端口地址源端口地址 目的端口地址目的端口地址

紧急指针紧急指针检验和检验和数据和选项 数据和选项

(必须进行填充使数据是(必须进行填充使数据是 1616 位的倍数)位的倍数)

伪首部伪首部

首 部

首 部

窗口大小窗口大小

序号序号确认序号确认序号

首部长度首部长度 保留保留 控制控制

Page 22: 第九章 传输控制协议 (TCP)

22

TCP 需要解决的一些问题: 传输时延长;传输时延长; 丢失,重复,失序或受到损伤;丢失,重复,失序或受到损伤; 无法预知的传输时延;无法预知的传输时延; 网络拥塞;网络拥塞;

Flow contFlow controlrol Error coError controlntrol Connection Connection controlcontrol Congestion cCongestion controlontrol

Page 23: 第九章 传输控制协议 (TCP)

23

§9-6 流控制流控制流控制 定义了在收到从目的站发来的确认之前源站可以发 定义了在收到从目的站发来的确认之前源站可以发送的数据量。送的数据量。

SenderSender ReceiverReceiver

How fast could I sHow fast could I send my data to enend my data to ensure not to overwsure not to overwhelm him?helm him?滑动窗口滑动窗口 是 是 TCPTCP 使使用的流控制解决办法。用的流控制解决办法。

Page 24: 第九章 传输控制协议 (TCP)

24

停止等待协议transmissiontransmission

DataDataacknowledgmentacknowledgment

Idle timeIdle time

Idle timeIdle time

上图中的简单停止等待协议是一个非常缓慢的过程。 若数据要上图中的简单停止等待协议是一个非常缓慢的过程。 若数据要走很长的距离,源站就要在等待确认时一直处在空闲状态。走很长的距离,源站就要在等待确认时一直处在空闲状态。

Page 25: 第九章 传输控制协议 (TCP)

25

滑动窗口14141313121211111010998877665544332211

Sliding windowSliding window

Before slidingBefore sliding

这是一个这是一个流控制流控制协议;协议; 两个主机为两个主机为每一个每一个连接连接各各使用一个窗口;使用一个窗口; 窗口覆盖了窗口覆盖了缓存的一部分缓存的一部分,这部分就是主机可以发送而不必考虑从另,这部分就是主机可以发送而不必考虑从另一个主机发来的确认;一个主机发来的确认; 这个窗口叫这个窗口叫滑动窗口滑动窗口,因为当接收端对安全、完整地接收到的字节发,因为当接收端对安全、完整地接收到的字节发送确认时,这个窗口能够在缓存上滑动。送确认时,这个窗口能够在缓存上滑动。

After slidingAfter sliding

Sliding windowSliding window

Page 26: 第九章 传输控制协议 (TCP)

26

带指针的滑动窗口滑动窗口滑动窗口

14141313121211111010998877665544332211 16161515

指针指针已确认的已确认的字节字节

已被发送已被发送的字节的字节

可以发送可以发送的字节的字节

不能发送不能发送的字节的字节

TCP TCP 使用使用可变大小可变大小的窗口。窗口可增大也可减小,取的窗口。窗口可增大也可减小,取决于目的站的通知。决于目的站的通知。

Page 27: 第九章 传输控制协议 (TCP)

27

发送端窗口 窗口大小与窗口大小与确认号确认号有关。有关。 高层协议可以一次发送高层协议可以一次发送一个或多个一个或多个字节到字节到 TCPTCP 。。 Sent but not acknowledged:Sent but not acknowledged: 等待确认或重传。等待确认或重传。

Sending window (Ws)5 6 n

Sent but not acknowledgedSent but not acknowledgedData waiting for sendingData waiting for sendingAcknowledgedAcknowledged Can not be sent nowCan not be sent now

Page 28: 第九章 传输控制协议 (TCP)

28

接收端窗口

Receiving window (Wr)5 6 n

Rearranged but not submittedRearranged but not submitted Unused bufferUnused bufferSubmittedSubmitted FragmentaryFragmentary

由由序号序号确定要再排列的接收数据流。确定要再排列的接收数据流。 高层协议可以一次从高层协议可以一次从 TCPTCP 接收接收一个或多个一个或多个字节。字节。

Page 29: 第九章 传输控制协议 (TCP)

29

可变大小窗口发送端窗口大小能够动态的改变发送端窗口大小能够动态的改变

接收端宣布现在能使用的接收端缓存大小接收端宣布现在能使用的接收端缓存大小 ..发送端调整窗口大小以适应这个值发送端调整窗口大小以适应这个值 ..最小的报文段大小为最小的报文段大小为 :1:1 字节字节 ..

接收端宣布接收端宣布 :: 我的缓存大小为我的缓存大小为 00发送端停止发送数据发送端停止发送数据 ..以下情况开始重新发送以下情况开始重新发送 ::

宣布的缓存大小大于宣布的缓存大小大于 00实验发送实验发送 ::防止死锁防止死锁带外数据带外数据

Page 30: 第九章 传输控制协议 (TCP)

30

确认与重传规则规则 ::1.1. 发送序号是发送数据流的第一个字节。发送序号是发送数据流的第一个字节。2.2. 确认序号指出了接收方期望收到的下一个字节的序号。确认序号指出了接收方期望收到的下一个字节的序号。 3.3. 数据没有得到确认时,若超时了就必须重传。数据没有得到确认时,若超时了就必须重传。

确认累积确认累积 确认表示对此序号以前的数确认表示对此序号以前的数据都确认据都确认xx x+7x+7 x+23x+23

Page 31: 第九章 传输控制协议 (TCP)

31

窗口管理Segment 1Segment 1Seq: 1001, 4000BSeq: 1001, 4000B

Seq: 5001, 1000BSeq: 5001, 1000B

Ack: 5001, Win: 0Ack: 5001, Win: 0

Ack: 5001, Win: 1000Ack: 5001, Win: 1000

40004000

10001000 30003000

BufferBuffer

SenderSender ReceiverReceiver

Segment 2Segment 2

由接收端宣布的窗口大小通常就是接收端的缓存剩下的空间。由接收端宣布的窗口大小通常就是接收端的缓存剩下的空间。

Page 32: 第九章 传输控制协议 (TCP)

32

对滑动窗口的几点说明: 使用滑动窗口可使传输更加有效,同时也可以控制数据使用滑动窗口可使传输更加有效,同时也可以控制数据流,使得目的站不致因数据来的过多而瘫痪。 流,使得目的站不致因数据来的过多而瘫痪。 TCPTCP 的滑动窗口是面向字节的。的滑动窗口是面向字节的。 源站不一定要发送出整个窗口大小的数据。源站不一定要发送出整个窗口大小的数据。 窗口大小可由目的站将其增大或减小。窗口大小可由目的站将其增大或减小。 目的站可在任何时候发送确认。目的站可在任何时候发送确认。

Page 33: 第九章 传输控制协议 (TCP)

33

糊涂窗口综合症什么是糊涂窗什么是糊涂窗口综合症?口综合症? 如何导致的?如何导致的? 怎么解决?怎么解决?

网络上有很多网络上有很多短报文段短报文段 发送应用程序产生数据很慢,发送应用程序产生数据很慢,或者接收应用程序吸收数据或者接收应用程序吸收数据很慢,或者两者都有。很慢,或者两者都有。

Page 34: 第九章 传输控制协议 (TCP)

34

(一)发送端解决办法发送端的发送端的 TCPTCP 可能产生糊涂窗口综合症,如果它为产生数据很慢可能产生糊涂窗口综合症,如果它为产生数据很慢的应用程序服务。的应用程序服务。

NagleNagle 算法:算法:1.1. 发送端的发送端的 TCPTCP 将它从发送应用程序收到的第一块数据发送出将它从发送应用程序收到的第一块数据发送出去,哪怕只有一个字节。去,哪怕只有一个字节。2.2. 发送第一个报文段后,发送端的发送第一个报文段后,发送端的 TCPTCP 就在输出缓存中积累数就在输出缓存中积累数据并等待:或者据并等待:或者收到收到接收端的接收端的 TCPTCP 发送出一个发送出一个确认确认,或者数,或者数据已据已累积累积到可以装成一个到可以装成一个最大的报文段最大的报文段,就将其发送。,就将其发送。

时间过长: 会产生太大的延迟时间过长: 会产生太大的延迟不够长:又会继续产生短报文不够长:又会继续产生短报文等待:等待:

Page 35: 第九章 传输控制协议 (TCP)

35

(二)接收端解决办法接受端的接受端的 TCPTCP 可能产生糊涂窗口综合症,如果它为消耗可能产生糊涂窗口综合症,如果它为消耗数据很慢的应用程序服务。数据很慢的应用程序服务。

① ① ClarkClark解决方法:解决方法:1.1. 只要有数据到达就发送确认;只要有数据到达就发送确认;2.2. 但宣布的窗口大小为零,直到缓存空间已能放入具有但宣布的窗口大小为零,直到缓存空间已能放入具有最大长度的报文段,或者缓存空间的一半已经空了。最大长度的报文段,或者缓存空间的一半已经空了。

Page 36: 第九章 传输控制协议 (TCP)

36

(二)接收端解决办法(续)② ② 推迟确认:推迟确认:这是另一种解决接收端产生糊涂窗口综合症的方法。这是另一种解决接收端产生糊涂窗口综合症的方法。当一个报文段到达时,并不立即发送确认。当一个报文段到达时,并不立即发送确认。

接收端在确认收到的报文段之前一直等待,直到输入接收端在确认收到的报文段之前一直等待,直到输入缓存有足够的空间为止。缓存有足够的空间为止。接收端不需要确认每一个报文段。这样可以减少通信接收端不需要确认每一个报文段。这样可以减少通信量。量。缺点是:延迟的确认可能迫使发送端重传其未被确认缺点是:延迟的确认可能迫使发送端重传其未被确认的报文段。的报文段。

目前规定确认的延迟目前规定确认的延迟不能超过不能超过 500500 毫秒毫秒。。

Page 37: 第九章 传输控制协议 (TCP)

37

§9-7 差错控制

可靠性可靠性

按序的、没有差错的、按序的、没有差错的、没有丢失和重复的没有丢失和重复的

差错控制差错控制

差错检测、差错检测、差错纠正差错纠正

受到损伤的、丢失的、失序受到损伤的、丢失的、失序的、重复的报文段的、重复的报文段

一个应用程序依一个应用程序依靠靠 TCPTCP 进行可靠进行可靠的传输的传输

Page 38: 第九章 传输控制协议 (TCP)

38

差错检测和纠正

1.1. 在在 TCPTCP 中中不使用否认不使用否认2.2. 若一个报文段在超时截止期之前未被确认,则被认为是受到损若一个报文段在超时截止期之前未被确认,则被认为是受到损伤或已丢失,需要进行重传。伤或已丢失,需要进行重传。

三种简三种简单工具单工具::•检验和检验和•确认确认•超时超时

Page 39: 第九章 传输控制协议 (TCP)

39

受损伤的报文段

OKOK

Segment 1Segment 1Seq: 1201, 200bytesSeq: 1201, 200bytes

Ack: 1601Ack: 1601

SenderSender ReceiverReceiver

Segment 2Segment 2Seq: 1401, 200bytesSeq: 1401, 200bytesSegment 3Segment 3Seq: 1601, 200bytesSeq: 1601, 200bytes

Segment 3, retransmittedSegment 3, retransmittedSeq: 1601, 200bytesSeq: 1601, 200bytesAck: 1801Ack: 1801

TimeTime TimeTime

报文段报文段 33受损伤受损伤OKOK OKOK

超时超时

Page 40: 第九章 传输控制协议 (TCP)

40

丢失的报文段Segment 1Segment 1Seq: 1201, 200bytesSeq: 1201, 200bytes

Ack: 1601Ack: 1601

SenderSender ReceiverReceiver

Segment 2Segment 2Seq: 1401, 200bytesSeq: 1401, 200bytesSegment 3Segment 3Seq: 1601, 200bytesSeq: 1601, 200bytes

Segment 3, retransmittedSegment 3, retransmittedSeq: 1601, 200bytesSeq: 1601, 200bytesAck: 1801Ack: 1801

TimeTime TimeTime

报文段 报文段 3 3 丢失丢失OKOK OKOK

OKOK

超时超时

Page 41: 第九章 传输控制协议 (TCP)

41

重复的报文段产生原因:产生原因:可由源可由源 TCPTCP产生:当超时截止期到而确认还没有收到。产生:当超时截止期到而确认还没有收到。

解决办法:解决办法: 目的目的 TCPTCP 期望收到连续的字节流期望收到连续的字节流 当含有同样序号的分组作为另一个收到的报文段到达时,当含有同样序号的分组作为另一个收到的报文段到达时,目的目的 TCPTCP只要丢弃这个分组就可。只要丢弃这个分组就可。

Page 42: 第九章 传输控制协议 (TCP)

42

失序的报文段产生原因:产生原因:

TCP TCP 使用使用 IPIP 的服务,而的服务,而 IPIP 是一个不可靠的无连接的网络层协议。是一个不可靠的无连接的网络层协议。

解决办法:解决办法: TCP TCP 对失序的报文段不确认,对失序的报文段不确认,直到直到收到所有它以前的报文段为收到所有它以前的报文段为止。止。 若若确认晚到了确认晚到了,源,源 TCPTCP 的失序的报文段的计时器会到期而的失序的报文段的计时器会到期而重新重新发送发送该报文段。该报文段。 而目的而目的 TCPTCP 就就丢弃丢弃重复的报文段。重复的报文段。

Page 43: 第九章 传输控制协议 (TCP)

43

丢失的确认Segment 1Segment 1Seq: 1201, 200bytesSeq: 1201, 200bytes

Ack: 1601Ack: 1601

SenderSender ReceiverReceiver

Segment 2Segment 2Seq: 1401, 200bytesSeq: 1401, 200bytesSegment 3Segment 3Seq: 1601, 200bytesSeq: 1601, 200bytesAck: 1801Ack: 1801

TimeTime TimeTimeOKOK OKOKOKOK 确认丢失确认丢失

Page 44: 第九章 传输控制协议 (TCP)

44

§9-8 TCP 的计时器计时器计时器

重 传重 传

坚 持坚 持 保 活保 活

时间等待时间等待

Page 45: 第九章 传输控制协议 (TCP)

45

(一)重传计时器为了控制丢失的或丢弃的报文段,为了控制丢失的或丢弃的报文段, TCPTCP 使用处理重传时间(即对报使用处理重传时间(即对报文段的确认的等待时间)的重传计时器。文段的确认的等待时间)的重传计时器。

撤销此计时器撤销此计时器若在计时器截止时间到之前若在计时器截止时间到之前收到了对此特定报文段的确收到了对此特定报文段的确认认

重传此报文,并将重传此报文,并将计时器复位。计时器复位。若在收到了对此特定报文段若在收到了对此特定报文段的确认之前计时器截止期到的确认之前计时器截止期到

当当 TCPTCP 发送报文段时,它就创建该特定报文段的重传计时器:发送报文段时,它就创建该特定报文段的重传计时器:

Page 46: 第九章 传输控制协议 (TCP)

46

重传时间的计算:固定时间:固定时间:

不同的连接,重传时间是不同的连接,重传时间是不同的不同的同一个连接,重传时间也不同一个连接,重传时间也不是固定的。是固定的。

动态算法:动态算法:

对每一个连接动态更改对每一个连接动态更改

动态估算往返时间 动态估算往返时间 (RTT)(RTT)

关键:如何精确估算关键:如何精确估算 RTTRTT

重传时间重传时间 = 2×RTT= 2×RTT

Page 47: 第九章 传输控制协议 (TCP)

47

RTT 的计算:RTT:RTT: 往返时间往返时间

1.1. 使用时间戳选项;使用时间戳选项;2.2. 发送一个报文段,启动计时器,然后等待其确认。发送一个报文段,启动计时器,然后等待其确认。

用在计算重传时间的用在计算重传时间的 RTTRTT 值是值是 RTTRTT 的更新值:的更新值:RTT = RTT = α α ×× 前面的前面的 RTT+ (1- RTT+ (1- αα) ×) ×当前的当前的 RTTRTT

αα 通常取通常取 90%90%

当前的当前的 RTT RTT = = 收到确认的时间 – 发送报文段的时间收到确认的时间 – 发送报文段的时间

Page 48: 第九章 传输控制协议 (TCP)

48

估算 RTT 时的问题:假设:假设:

一个报文段在重传期间未被确认——一个报文段在重传期间未被确认——•这个报文段又被重传;这个报文段又被重传;•当发送端当发送端 TCPTCP 收到对此报文段的确认时,它无法知道该确收到对此报文段的确认时,它无法知道该确认是对原来的报文段的确认,还是对重传的报文段的确认。认是对原来的报文段的确认,还是对重传的报文段的确认。

考虑:考虑:在这种情况下,该如何估算 在这种情况下,该如何估算 RTT?RTT?

具有二义性:具有二义性: 是从是从原始原始报文段发送的时间开始算?报文段发送的时间开始算?还是从重传的报文段的发送时间开始算?还是从重传的报文段的发送时间开始算?

Page 49: 第九章 传输控制协议 (TCP)

49

Karn算法:1.1. 在计算新的在计算新的 RTTRTT 时,不考虑重传报文段的时,不考虑重传报文段的 RTTRTT;;2.2. 不要更新 不要更新 RTTRTT , 除非你发送了一个报文段并在不, 除非你发送了一个报文段并在不需要重传时收到了确认。需要重传时收到了确认。Karn算法要求发送方使用定时器补偿策略把超时重传的影响估计在内。

Page 50: 第九章 传输控制协议 (TCP)

50

(二)坚持计时器为了对付零窗口大小通知,为了对付零窗口大小通知, TCPTCP 需要另一个计时器:坚持计时器。需要另一个计时器:坚持计时器。

SenderSender ReceiverReceiverWindow: 0Window: 0

等待发送端的等待发送端的 TCTCPP 发送更多的报发送更多的报文段。文段。等待接收方发送等待接收方发送确认来通知窗口确认来通知窗口的大小。的大小。

Deadlock!Deadlock!

要打开这个死锁,要打开这个死锁, TCPTCP 为为每个连接每个连接使用一个使用一个坚持计时器坚持计时器。。

发送确认并宣布一个非零的窗口丢失

Page 51: 第九章 传输控制协议 (TCP)

51

坚持计时器的用法:1.1. 当发送端的当发送端的 TCPTCP 收到一个窗口大小为零的确认时,就启动坚持收到一个窗口大小为零的确认时,就启动坚持计时器。计时器。2.2. 当坚持计时器期限到时,发送端的当坚持计时器期限到时,发送端的 TCPTCP 就发送一个特殊的报文就发送一个特殊的报文段,称为段,称为探测探测报文段。用来提醒接收端的报文段。用来提醒接收端的 TCPTCP :确认已丢失,:确认已丢失,必须重传。必须重传。3.3. 坚持计时器的值设置为重传时间的数值。坚持计时器的值设置为重传时间的数值。4.4. 若没有收到从接收端来的响应,则需发送另一个探测报文段,并若没有收到从接收端来的响应,则需发送另一个探测报文段,并将坚持计时器的值将坚持计时器的值加倍和复位加倍和复位。。5.5. 发送端继续发送探测报文段,将坚持计时器的值加倍和复位,直发送端继续发送探测报文段,将坚持计时器的值加倍和复位,直到这个值增大到门限值(通常是到这个值增大到门限值(通常是 6060 秒)为止。秒)为止。6.6. 在这以后,发送端每隔在这以后,发送端每隔 6060 秒就发送一个探测报文段,直到窗口秒就发送一个探测报文段,直到窗口重新打开。重新打开。

Page 52: 第九章 传输控制协议 (TCP)

52

(三)保活计时器保活计时器的用法:保活计时器的用法:

1.1. 用来用来防止防止在两个在两个 TCPTCP之间的之间的连接连接处理长时间处理长时间空闲空闲。。2.2. 每当每当服务器服务器收到客户的信息,就将计时器复位。超时收到客户的信息,就将计时器复位。超时通常设置为通常设置为 22 小时。小时。3.3. 若服务器过了若服务器过了 22 小时还没收到客户的信息,它就发送小时还没收到客户的信息,它就发送探测探测报文段。报文段。4.4. 若发送了若发送了 1010个探测报文段(每一个相隔个探测报文段(每一个相隔 7575 秒)还没秒)还没有响应,就假定客户出了故障,因而就有响应,就假定客户出了故障,因而就终止终止该连接。该连接。

Page 53: 第九章 传输控制协议 (TCP)

53

(四)时间等待计时器时间等待计时器的用法:时间等待计时器的用法:

1.1. 用在用在连接终止连接终止期间。期间。2.2. 当当 TCPTCP关闭一个连接时,它并不认为这个连接马上关闭一个连接时,它并不认为这个连接马上就真正关闭了。在时间等待期间中,连接还处于一就真正关闭了。在时间等待期间中,连接还处于一种中间过渡状态。种中间过渡状态。3.3. 这就可使重复的这就可使重复的 FINFIN 报文段(如果有的话)可以到报文段(如果有的话)可以到达目的站因而可将其丢弃。达目的站因而可将其丢弃。4.4. 这个计时器的值通常设置为一个报文段的寿命期待这个计时器的值通常设置为一个报文段的寿命期待值的值的两倍两倍。。

Page 54: 第九章 传输控制协议 (TCP)

54

§9-9 连接SourceSource DestinationDestination

面向连接的协议在面向连接的协议在源站和目的站之间源站和目的站之间建立一条虚路径。建立一条虚路径。面向连接的传输是通过两个过程面向连接的传输是通过两个过程来完成的:来完成的:连接建立连接建立连接终止连接终止

属于一个报文的所有报文段都沿属于一个报文的所有报文段都沿着这条虚路径发送。着这条虚路径发送。

Page 55: 第九章 传输控制协议 (TCP)

55

初始序号 初始序号 初始序号 (ISNs) (ISNs) 在三次握手过程中要传输并获得在三次握手过程中要传输并获得确认。确认。 ISN ISN 被用来分辨字节在传输的流中的位置。被用来分辨字节在传输的流中的位置。 ISN ISN 是每个机器随机选择的。是每个机器随机选择的。 TCP TCP 不能用不能用 11 作为每次连接建立时的序号。双方要作为每次连接建立时的序号。双方要对各自的初始序号进行协商。对各自的初始序号进行协商。

Page 56: 第九章 传输控制协议 (TCP)

56

连接建立

双方在传送数据前,须完成如下工作:双方在传送数据前,须完成如下工作:1.1. 主机主机 AA 发送报文段宣布他愿意建立连接,报文段包括关于从发送报文段宣布他愿意建立连接,报文段包括关于从 AA到到 BB 的通信量的初始化信息。的通信量的初始化信息。2.2. 主机主机 BB 发送报文段确认发送报文段确认 AA 的请求。的请求。3.3. 主机主机 BB 发送报文段包括关于从发送报文段包括关于从 BB 到到 AA 的通信量的初始化信息。的通信量的初始化信息。4.4. 主机主机 AA 发送报文段确认发送报文段确认 BB 的请求。的请求。

AA BB

步骤 2 和 3 可以同时进行。

Page 57: 第九章 传输控制协议 (TCP)

57

连接建立(续)被动打开:三次握手过程从服务器开始。服务器程序告诉它的 TCP ,它已准备好接收一个连接。但它自己并不能完成这个连接。主动打开:客户程序发出请求。打算与服务器进行连接的客户告诉它的 TCP 它需要连接到特定的服务器。

Page 58: 第九章 传输控制协议 (TCP)

58

三次握手Segment 1: Segment 1: SYNSYNSeq: 1200, ack: --Seq: 1200, ack: --

ClientClient ServerServer

TimeTime TimeTime

Segment 2: Segment 2: SYN+ACKSYN+ACKSeq: 4800, ack: 1201Seq: 4800, ack: 1201

Segment 3: Segment 3: ACKACKSeq: 1201, ack: 4801Seq: 1201, ack: 4801

Server waits Server waits for a for a passive passive openopenClient requesClient requests for an ts for an activactive opene open

Client’s wiClient’s wish to make a sh to make a connectionconnection Server’s aServer’s ack. and owck. and own requestn requestClient’s ack.Client’s ack. to server’s to server’s requestrequest Data can be sent with Data can be sent with the 3the 3rdrd packet packet

Procedure starts Procedure starts with serverwith server

Page 59: 第九章 传输控制协议 (TCP)

59

两军队问题:Blue army #1Blue army #1 Blue army #2Blue army #2

White armyWhite army

The blues armies want to communicate through an unreliablThe blues armies want to communicate through an unreliable channel to synchronize their attacks. e channel to synchronize their attacks. Does a protocol exist that allows the blue armies to win?Does a protocol exist that allows the blue armies to win?

Attack at 0:00 oAttack at 0:00 on May 23. How n May 23. How about it?about it?No problNo problem!em!

Page 60: 第九章 传输控制协议 (TCP)

60

连接终止

要在两个方向都关闭连接需要如下过程:要在两个方向都关闭连接需要如下过程:1.1. 主机主机 AA 发送报文段,宣布它愿意终止连接。发送报文段,宣布它愿意终止连接。2.2. 主机主机 BB发送报文段对发送报文段对 AA 的请求加以确认。在此之后,的请求加以确认。在此之后,一个方向的连接就关闭了,但另一个方向的并没有关一个方向的连接就关闭了,但另一个方向的并没有关闭。 闭。 3.3. 当主机当主机 BB发完其数据后,就发送报文段,表示它愿意发完其数据后,就发送报文段,表示它愿意关闭此连接。关闭此连接。4.4. 主机主机 AA 确认确认 BB的请求。的请求。

AA BBOneOne connection : connection : TwoTwo directions directions

Page 61: 第九章 传输控制协议 (TCP)

61

四次握手Segment 1: Segment 1: FINFINSeq: 2500, ack: --Seq: 2500, ack: --

ClientClient ServerServer

TimeTime TimeTime

Segment 2: Segment 2: ACKACKSeq: 7000, ack: 2501Seq: 7000, ack: 2501

Segment 4: Segment 4: ACKACKSeq: 2501, ack: 7002Seq: 2501, ack: 7002

Procedure starts wProcedure starts with clientith client

Segment 3: Segment 3: FINFINSeq: 7001, ack: 2501Seq: 7001, ack: 2501

Client’s wisClient’s wish to close the h to close the connectionconnectionServer’s aServer’s ack. to clienck. to client’s requestt’s request

Client’s ack.Client’s ack. to server’s to server’s requestrequest

Server’s wisServer’s wish to close the h to close the connectionconnection

Page 62: 第九章 传输控制协议 (TCP)

62

连接复位TCPTCP 可以请求将一条连接复位。这里的复位表可以请求将一条连接复位。这里的复位表示当前的连接已经被破坏了。示当前的连接已经被破坏了。

1.1. 在某一端的在某一端的 TCPTCP 请求了一条到请求了一条到并不存在的端口并不存在的端口的的连接。在另一端的连接。在另一端的 TCPTCP 就可以发送报文段,其就可以发送报文段,其 RSRSTT 比特置为比特置为 11 以取消该请求。以取消该请求。2.2. 由于出现了由于出现了异常情况异常情况,某一端的,某一端的 TCPTCP 可能愿意将可能愿意将连接异常终止。连接异常终止。3.3. 某一端的某一端的 TCPTCP 可能发现在另一端的可能发现在另一端的 TCPTCP已经已经空闲空闲了很长的时间了很长的时间。。

以下情况后以下情况后发生复位:发生复位:

Page 63: 第九章 传输控制协议 (TCP)

63

§9-10 状态转换图State Description

CLOSED 没有连接LISTEN 服务器等待从客户来的呼叫SYN-SENT 连接请求已发送,等待确认SYN-RCVD 连接请求已收到ESTABLISHED 连接已建立FIN-WAIT-1 应用程序已请求关闭该连接FIN-WAIT-2 另一端已接受关闭该连接CLOSING 两端都已决定同时关闭连接TIME-WAIT 等待已经重传的报文段消失CLOSE-WAIT 服务器等待应用程序关闭连接LAST-ACK 服务器等待最后一个确认

Page 64: 第九章 传输控制协议 (TCP)

64

状态转换图CLOSEDCLOSED

LISTENLISTEN

ESTABLISHEDESTABLISHEDSYN-RCVDSYN-RCVD SYN-SENTSYN-SENT

FIN WAIT-1FIN WAIT-1

FIN WAIT-2FIN WAIT-2

CLOSINGCLOSING

TIME-WAITTIME-WAIT

CLOSE WAITCLOSE WAIT

LAST ACKLAST ACKFIN/ACKFIN/ACKACK/--ACK/--

FIN/ACKFIN/ACKACK/--ACK/-- Close/FINClose/FINFIN+ACK/ACKFIN+ACK/ACK

SYN/SYN+ACKSYN/SYN+ACK(simultaneous open)(simultaneous open)RST/--RST/-- Send/SYNSend/SYN

Close/FINClose/FINClose/FINClose/FINACK/--ACK/--

SYN/SYN+ACKSYN/SYN+ACK

FIN/ACKFIN/ACKSYN/SYN+ACKSYN/SYN+ACK

RST/--RST/-- Close/--Close/--Active open/SYNActive open/SYNPassive open/--Passive open/--

(Time-out)(Time-out) ACK/--ACK/--

Time-out/Time-out/RSTRSTClose or tClose or time-outime-out/--/--

Page 65: 第九章 传输控制协议 (TCP)

65

§9-11 拥塞控制从发送站发出的分组要经过许多的路由器才能到达最终的目的站。从发送站发出的分组要经过许多的路由器才能到达最终的目的站。若路由器接受分组过快,超过它的处理能力,就可能出现拥塞,会使若路由器接受分组过快,超过它的处理能力,就可能出现拥塞,会使一些分组被丢弃。一些分组被丢弃。拥塞会导致更严重的状态:更多的重传和更多的分组被丢弃,因而产拥塞会导致更严重的状态:更多的重传和更多的分组被丢弃,因而产生更严重的拥塞,最后导致整个系统崩溃。生更严重的拥塞,最后导致整个系统崩溃。现在的现在的 TCPTCP 协议包括了这个功能:发送端的窗口大小不仅决定于协议包括了这个功能:发送端的窗口大小不仅决定于接收端,而且取决于网络的拥塞状况。接收端,而且取决于网络的拥塞状况。

真正的窗口大小 真正的窗口大小 = minimum (= minimum ( 接收端通知的窗口大小,拥塞窗口大小接收端通知的窗口大小,拥塞窗口大小 ))

Page 66: 第九章 传输控制协议 (TCP)

66

窗口大小增大的策略

Congestion window size increases exponentially until the threshold

After the threshold it is increased one segment for each acknowledgment

Page 67: 第九章 传输控制协议 (TCP)

67

发送窗口大小变化发送窗口变化

0102030405060

2 4 6 8 10 12 14 16 18 20 22time

发送窗口

Variation of Sending WindowVariation of Sending Window

Sending WindowSending Window

TimeTime

Page 68: 第九章 传输控制协议 (TCP)

68

练习题:1 、 TCP 在 5:30:20发送了一个报文段,它在 5:30:25 收到确认。若以前的 RTT值是 4秒,问新的 RTT值是多少?重传时间为多少?2 、一 TCP 连接使用 10000字节的窗口大小,而上一次的确认号是 22001 。它收到了一个报文段,确认了字节 24001 ,并将窗口大小改变为 11000。试用图说明在这之前与之后的窗口情况。