




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章第二章 tcptcp协议协议 tcp/iptcp/ip详解卷详解卷1 1:ch17ch17、ch18ch18、ch19ch19、 ch20ch20、ch21ch21、ch22ch22、ch23ch23、ch24ch24 主要内容主要内容 n2.1 tcp2.1 tcp回顾回顾 n2.2 tcp2.2 tcp连接的建立与终止连接的建立与终止 n2.3 tcp2.3 tcp的数据传输(交互数据流和成块数据流)的数据传输(交互数据流和成块数据流) n2.4 tcp2.4 tcp的超时与重传的超时与重传 n2.5 tcp2.5 tcp的坚持定时器和保活定时器的坚持定时器和保活定时器 n2.6 t
2、cp2.6 tcp的未来和性能的未来和性能 2.1 tcp nt c p提供一种面向连接的、可靠的字节流服务提供一种面向连接的、可靠的字节流服务 n在一个在一个t c p连接中仅有两方进行彼此通信连接中仅有两方进行彼此通信 n广播和多播不能用于广播和多播不能用于t c p 端口 发送 tcp 报文段 tcp tcp 接收缓存发送缓存 报文段 报文段报文段 端口 发送端接收端 向发送缓存 写入数据块 从接收缓存 读取数据块 应用进程应用进程 tcp报文段被封装在一个报文段被封装在一个ip数据报中进行传输数据报中进行传输 t c p提供可靠性的方式提供可靠性的方式 n应用数据被分割成应用数据被分割
3、成t c p认为最适合发送的数据块认为最适合发送的数据块 n当当t c p发出一个段后,它启动一个定时器,等待目的端发出一个段后,它启动一个定时器,等待目的端 确认收到这个报文段。如果不能及时收到一个确认,将重确认收到这个报文段。如果不能及时收到一个确认,将重 发这个报文段。发这个报文段。 n当当t c p收到发自收到发自t c p连接另一端的数据时,它将发送一连接另一端的数据时,它将发送一 个确认。个确认。 n当当tcp收到发自收到发自tcp连接另一端的数据,它将发送一个确连接另一端的数据,它将发送一个确 认。认。 ntcp将保持它首部和数据的检验和将保持它首部和数据的检验和 n既然既然tc
4、p报文段作为报文段作为ip据报来传输,而据报来传输,而ipp数据报的到达数据报的到达 可能会失序,因此可能会失序,因此tcp报文段的到达也可能会失序。如果报文段的到达也可能会失序。如果 必要,必要, tcp将对收到的数据进行重新排序,将收到的数将对收到的数据进行重新排序,将收到的数 据以正确的顺序交给应用层。据以正确的顺序交给应用层。 n既然既然ip数据报会发生重复,数据报会发生重复, tcp 的接收端必须丢弃重复的接收端必须丢弃重复 的数据。的数据。 ntcp还能提供流量控制还能提供流量控制 tcp的编号与确认的编号与确认 n按字节编号按字节编号 n确认是对收到的数据的最高序号的确认,确认是
5、对收到的数据的最高序号的确认, 表示期望下次收到的第一个字节的序号。表示期望下次收到的第一个字节的序号。 n由于由于tcp能够提供全双工通信,因此,能够提供全双工通信,因此, 可以采用可以采用捎带确认捎带确认以提高传输效率。以提高传输效率。 tcp的简单确认的简单确认 发送窗口大小 = 1 发方 收方 send 1 receive 1 发方 收方 发送窗口大小 = 1 send 1 receive 1 receive ack 2 send ack 2 发方 收方 发送窗口大小 = 1 send 1 receive 1 receive ack 2 send ack 2 send 2 receiv
6、e 2 发方 收方 发送窗口大小 = 1 send 1 receive 1 receive ack 2 send ack 2 send 2 receive 2 receive ack 3 send ack 3 发方 收方 发送窗口大小 = 1 send 1 receive 1 receive ack 2 send ack 2 send 2 receive 2 receive ack 3 send ack 3 send 3 receive 3 发方 收方 发送窗口大小 = 1 send 1 receive 1 receive ack 2 send ack 2 send 2 receive 2 r
7、eceive ack 3 send ack 3 send 3 receive 3 receive ack 4 send ack 4 发方 收方 发送窗口大小 = 1 tcp 的编号与确认号的编号与确认号 source port dest. port sequence # acknowledgement # source dest. seq.ack. 102823101 i just sent #10. i just got #10, now i need #11. source port dest. port sequence # acknowledgement # 102823 source
8、 dest. seq. 1 ack. 102823 source dest. seq. 1 ack. i just sent #10. source port dest. port sequence # acknowledgement # 102823 source dest. seq. 2 ack. 102823 source dest. seq. 1 ack. 102823 source dest. seq. 1 ack. i just got #10, now i need #11. i just sent #11. source port dest. port sequence # a
9、cknowledgement # 102823 source dest. seq. 101 ack. 102823 source dest. seq. 100 ack. 102823 source dest. seq. 100 ack. 102823 source dest. seq. 101 ack. i just got #11, now i need #12. i just sent #11. tcp 的包格式的包格式 源端口 (16) 目的端口 (16) 顺序号 (32) 头长 (4) 确认序号 (32) 保留 (6) 窗口 (16) 检验和 (16)紧急指针(16) 选项和填充 (可
10、选 ) 数据 (可变长) 20 字节字节 位位 015 1631 u r g a c k p s h r s t s y s f i n tcp 首部 20 字节的 固定首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n 32 bit s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 tcp 数据部分tcp 首部 tcp 报文段 ip 数据部分ip 首部 发送在前 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项
11、 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 源端口和目的端口字段各占 2 字节。端口是运输 层与应用层的服务接口。运输层的复用和分用功能都 要通过端口才能实现。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充
12、 序号字段占 4 字节。tcp 连接中传送的数据流 中的每一个字节都编上一个序号。序号字段的值则指 的是本报文段所发送的数据的第一个字节的序号。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 确认号字段占 4 字节,是期望收到对方的下一个 报文段的数据的第一个字节的序号。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (
13、长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 首部长度占 4 bit,它指出 tcp 报文段首部有多少 个4 字节 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 保留字段占 6 bit,保留为今后使用,但目前 应
14、置为 0。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 紧急比特 urg 当 urg 1 时,表明紧急指 针字段有效。它告诉系统此报文段中有紧急数据, 应尽快传送(相当于高优先级的数据)。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留
15、 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 确认比特 ack 只有当 ack 1 时确认号字 段才有效。当 ack 0 时,确认号无效。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 推送比特 psh (push) 接收 tcp 收到推送比特 置 1 的报文段,就尽快地交付给接收应用进程,而
16、不 再等到整个缓存都填满了后再向上交付。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 复位比特 rst (reset) 当 rst 1 时,表明 tcp 连接中出现严重差错(如由于主机崩溃或其他原因), 必须释放连接,然后再重新建立运输连接。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端
17、口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 同步比特 syn 同步比特 syn 置为 1,就表示 这是一个连接请求或连接接受报文。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 终止比特 fin (final) 用来释放一个连接。当 fi
18、n 1 时,表明此报文段的发送端的数据已发送完 毕,并要求释放运输连接。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 窗口字段窗口字段 占占 2 字节,用来控制对方发送的数据量,单位为字节。字节,用来控制对方发送的数据量,单位为字节。tcp 连连 接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以接的一端根据设置的缓存空间大小确定自己的接收
19、窗口大小,然后通知对方以 确定对方的发送窗口的上限,也称为通知窗口。确定对方的发送窗口的上限,也称为通知窗口。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 检验和检验和 占占 2 2 字节。检验和字段字节。检验和字段检验的范围包括首部和检验的范围包括首部和 数据数据这两部分。在计算检验和时,要在这两部分。在计算检验和时,要在 tcp tcp 报文段的前面加报
20、文段的前面加 上上 12 12 字节的伪首部。字节的伪首部。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 紧急指针字段紧急指针字段 占占 16 bit16 bit。紧急指针指出在本报文段中。紧急指针指出在本报文段中 的紧急数据的最后一个字节的序号。的紧急数据的最后一个字节的序号。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和
21、选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 选项字段选项字段 长度可变。长度可变。tcp tcp 只规定了一种选项,即只规定了一种选项,即最大最大 报文段长度报文段长度 mss (maximum segment size)mss (maximum segment size)。mss mss 告诉对方告诉对方 tcptcp:“我的缓存所能接收的报文段的数据字段的最大长度是我的缓存所能接收的报文段的数据字段的最大长度是 mss mss 个
22、字节。个字节。” ” mss 是 tcp 报文段中的数据字段的最大长度。 数据字段加上 tcp 首部 才等于整个的 tcp 报文段。 tcp 首部 20 字节 固定 首部 目 的 端 口 首部 长度 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 f i n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 填充字段 这是为了使整个首部长度是 4 字节的 整数倍。 2.2 tcp连接的建立与终止连接的建立与终止 n三次握手建立连接三次握手建立连接 n提供全双工的可靠交付的服务提供全双工的
23、可靠交付的服务 n按字节编号按字节编号 n采用可变窗口进行流量控制采用可变窗口进行流量控制 一、建立连接一、建立连接 n在连接建立过程中要解决三个问题:在连接建立过程中要解决三个问题: 要使每一方能够确知对方的存在要使每一方能够确知对方的存在 要允许双方协商一些参数,如:要允许双方协商一些参数,如:mtu、wmax、 qos等等 能对运输实体的资源进行分配,如:缓存大小、能对运输实体的资源进行分配,如:缓存大小、 连接表中的项目等。连接表中的项目等。 n采用采用client/server方式工作方式工作 send syn (seq=100 ctl=syn) syn received host
24、ahost b tcp 使用三次握手建立连接使用三次握手建立连接 1 send syn (seq=100 ctl=syn) syn received send syn, ack (seq=300 ack=101 ctl=syn,ack) host ahost b syn received 1 2 send syn (seq=100 ctl=syn) syn received send syn, ack (seq=300 ack=101 ctl=syn,ack) established (seq=101 ack=301 ctl=ack) host ahost b 1 2 3 syn receiv
25、ed 二、二、 释放连接释放连接 send fin (fin,seq=x) host ahost b 1 fin received send ack (ack=x+1) host ahost b ack received 1 2 send fin (fin,seq=x) half-close 半关闭半关闭 host ahost b 1 send fin (fin,seq=x) fin received send ack (ack=x+1) host ahost b ack received 1 2 send fin (fin,seq=x) half-close 全关闭全关闭 fin recei
26、ved host ahost b 1 send fin (fin,seq=x) fin received send ack,fin (fin,seq=y,ack=x+1) host ahost b fin,ack received 1 2 send fin (fin,seq=x) fin received send ack,fin (fin,seq=y,ack=x+1) host ahost b fin,ack received 1 2 send fin (fin,seq=x) 3 send ack,fin (fin,ack=y+1) full-close 全关闭全关闭 连接建立与终止的时间系
27、列连接建立与终止的时间系列 初始序列号初始序列号 isn n当一端为建立连接而发送它的当一端为建立连接而发送它的sys时,它为连接时,它为连接 选择一个初始序号。选择一个初始序号。isn随时间而变化,因此每随时间而变化,因此每 个连接都将具有不同的个连接都将具有不同的isn。 n在在4 . 4 b s d(和多数的伯克利的实现版)中,(和多数的伯克利的实现版)中, 系统初始化时初始的发送序号被初始化为系统初始化时初始的发送序号被初始化为1,这,这 个变量每个变量每8 ms加加1,另外,每次建立一个连接后,另外,每次建立一个连接后, 这个变量将增加这个变量将增加64000。 连接终止期间报文段的
28、正常交换连接终止期间报文段的正常交换 三、三、 连接建立的超时连接建立的超时 有很多情况导致无法建立连接。如:有很多情况导致无法建立连接。如: n服务器主机没有处于正常状态。服务器主机没有处于正常状态。 n服务器忙服务器忙 b s d版的版的t c p软件采用一种软件采用一种500 ms的定的定 时器时器 n当我们键入一个命令(如当我们键入一个命令(如t e l n e t)后,将建立一个)后,将建立一个6秒秒 的定时器(的定时器(1 2个时钟滴答(个时钟滴答( t i c k),但它可能在之),但它可能在之 后的后的5 . 5秒秒 6秒内的任意时刻超时。秒内的任意时刻超时。 n尽管定时器初始
29、化为尽管定时器初始化为1 2个时钟滴答,但定时计数器会在个时钟滴答,但定时计数器会在 设置后的第一个设置后的第一个0500 ms中的任意时刻减中的任意时刻减1。从那以后,。从那以后, 定时计数器大约每隔定时计数器大约每隔500 ms减减1,但在第,但在第1个个500 ms内内 是可变的(我们使用限定词是可变的(我们使用限定词“大约大约”是因为在是因为在t c p每隔每隔 500 ms获得系统控制的瞬间,系统内核可能会优先处理获得系统控制的瞬间,系统内核可能会优先处理 其他中断)。其他中断)。 tcp的的500 ms定时器定时器 当滴答计数器为当滴答计数器为0时,时,6秒的定时器便会超时,这个定
30、时器会秒的定时器便会超时,这个定时器会 在以后的在以后的2 4秒(秒(4 8个滴答)重新复位。之后的下一个定时器个滴答)重新复位。之后的下一个定时器 将更接近将更接近2 4秒,因为当秒,因为当t c p的的500 ms定时器被内核调用时,定时器被内核调用时, 它就会被修改一次。它就会被修改一次。 四、最大报文段长度四、最大报文段长度mss nmss表示表示tcp报文段的数据长度报文段的数据长度 n当一个连接建立时,连接的双方都要通告各自的当一个连接建立时,连接的双方都要通告各自的 mss。 n当建立一个连接时,每一方都有用于通告它期望当建立一个连接时,每一方都有用于通告它期望 接收的接收的m
31、s s选项(选项(m s s选项只能出现在选项只能出现在s y n 报文段中)。报文段中)。 n如果一方不接收来自另一方的如果一方不接收来自另一方的m s s值,则值,则m s s 就定为默认值就定为默认值5 3 6字节字节. mss的大小的大小 n如果没有分段发生,如果没有分段发生, mss越大越好。越大越好。 n当当t c p发送一个发送一个s y n时,或者是因为一个本地时,或者是因为一个本地 应用进程想发起一个连接,或者是因为收到了另应用进程想发起一个连接,或者是因为收到了另 一端主机的一个连接请求,它能将一端主机的一个连接请求,它能将m s s值设置值设置 为外出接口上的为外出接口上
32、的m t u长度减去固定的长度减去固定的i p首部和首部和 t c p首部长度。首部长度。 n如果目的如果目的i p地址为地址为“非本地的,非本地的,m s s通常的默通常的默 认值为认值为5 3 6。 五、复位报文段五、复位报文段 n一般说来,无论何时一个报文段发往基准一般说来,无论何时一个报文段发往基准 的连接出现错误,的连接出现错误, t c p都会发出一个复位都会发出一个复位 报文段。如:报文段。如: 到不存在的端口的连接请求到不存在的端口的连接请求 异常终止一个连接异常终止一个连接 检测半打开连接检测半打开连接 到不存在的端口的连接请求到不存在的端口的连接请求 n产生复位的一种常见情
33、况是当连接请求到产生复位的一种常见情况是当连接请求到 达时,目的端口没有进程正在听。达时,目的端口没有进程正在听。 n对于对于u d p,当一个数据报到达目的端口时,当一个数据报到达目的端口时, 该端口没在使用,它将产生一个该端口没在使用,它将产生一个i c m p端端 口不可达的信息。口不可达的信息。 n而而t c p则使用复位则使用复位 异常终止一个连接异常终止一个连接 n在排队数据都已发送之后才发送在排队数据都已发送之后才发送f i n,正常情况下没有任,正常情况下没有任 何数据丢失。但也有可能发送一个复位报文段而不是何数据丢失。但也有可能发送一个复位报文段而不是f i n 来中途释放一
34、个连接,称这为异常释放。异常终止一个连来中途释放一个连接,称这为异常释放。异常终止一个连 接对应用程序来说有两个优点:接对应用程序来说有两个优点: (1)丢弃任何待发数据并立即发送复位报文段;)丢弃任何待发数据并立即发送复位报文段; (2)r s t的接收方会区分另一端执行的是异常关闭还是的接收方会区分另一端执行的是异常关闭还是 正常关闭。正常关闭。 n应用程序使用的应用程序使用的a p i必须提供产生异常关闭而不是正常关必须提供产生异常关闭而不是正常关 闭的手段。闭的手段。 检测半打开连接检测半打开连接 n如果一方已经关闭或异常终止连接而另一方却还不知道,如果一方已经关闭或异常终止连接而另一
35、方却还不知道, 我们将这样的我们将这样的t c p连接称为半打开的。任何一端的主机连接称为半打开的。任何一端的主机 异常都可能导致发生这种情况。只要不打算在半打开连接异常都可能导致发生这种情况。只要不打算在半打开连接 上传输数据,仍处于连接状态的一方就不会检测另一方已上传输数据,仍处于连接状态的一方就不会检测另一方已 经出现异常。经出现异常。 n如果服务器突然断电又重新启动其如果服务器突然断电又重新启动其t c p ,它将丢失复位,它将丢失复位 前连接的所有信息,因此它不知道数据报文段中提到的连前连接的所有信息,因此它不知道数据报文段中提到的连 接。接。 nt c p的处理原则是接收方以复位作
36、为应答的处理原则是接收方以复位作为应答 六、同时打开六、同时打开 七、同时关闭七、同时关闭 八、八、tcp选项选项 rfc793 rfc1323 t c p 的的 状状 态态 变变 迁迁 图图 closed established listen close_wait fin_wait_1 syn_rcvd fin_wait_2 closing time_wait syn_sent last_ack 主动打开 被动打开 被动关闭 主动关闭 起点 被动打开 主动打开 发送 syn 同时打开 收到 syn,发送 syn, ack 收到 ack 数据传送 阶段 关闭 发送 fin 关闭 发送 fin
37、关闭 发送 fin 收到 rst 收到 syn 发送 syn, ack 关闭 或超时 收到 ack 收到 syn, ack 发送 ack 收到 ack 收到 ack 收到 fin 发送 ack 收到 fin, ack 发送 ack 收到 fin 发送 ack 同时关闭 收到 fin 发送 ack 发送 syn 定时经过两倍报文段寿命后 关闭 tcp正常连接建立和终止所对应的状态正常连接建立和终止所对应的状态 2.3 tcp2.3 tcp的数据传输的数据传输 n包括包括交互数据流交互数据流和和成块数据流成块数据流 n若按分组数量计算,约有一半的若按分组数量计算,约有一半的t c p报文段包含成块
38、数据报文段包含成块数据 (如(如f t p、电子邮件和、电子邮件和u s e n e t新闻),另一半则包含新闻),另一半则包含 交互数据(如交互数据(如te l n e t和和r l o g i n)。)。 n若按字节计算,则成块数据与交互数据的比例约为若按字节计算,则成块数据与交互数据的比例约为9:1 。 nt c p需要同时处理这两类数据,但使用的处理算法则有所需要同时处理这两类数据,但使用的处理算法则有所 不同。不同。 一、一、tcptcp的交互数据流的交互数据流 n输入输入rlogin 或或telnet后会产生后会产生4个报文段:个报文段: n(1)来自客户的交互按键;)来自客户的交
39、互按键; n(2)来自服务器的按键确认;)来自服务器的按键确认; n(3)来自服务器的按键回显;)来自服务器的按键回显; n( 4)来自客户的按键回显确认。)来自客户的按键回显确认。 一般可以将报文段一般可以将报文段2和和3进行合并进行合并按键确认与按键回显一按键确认与按键回显一 起发送(捎带确认)。起发送(捎带确认)。 telnet有一个选项允许客户发送一行到服务器,通过使有一个选项允许客户发送一行到服务器,通过使 用这个选项可以减少网络的负载。用这个选项可以减少网络的负载。 n在象在象r l o g i n这样的连接上客户一般每次发送这样的连接上客户一般每次发送 一个字节到服务器,这就产生
40、了一些一个字节到服务器,这就产生了一些4 1字节长字节长 的分组:的分组:2 0字节的字节的i p首部、首部、2 0字节的字节的t c p首首 部和部和1个字节的数据。个字节的数据。 n在局域网上,这些小分组(被称为微小分组)通在局域网上,这些小分组(被称为微小分组)通 常不会引起麻烦,因为局域网一般不会出现拥塞。常不会引起麻烦,因为局域网一般不会出现拥塞。 n但在广域网上,这些小分组则会增加拥塞出现的但在广域网上,这些小分组则会增加拥塞出现的 可能。可能。 n一种简单和好的方法就是采用一种简单和好的方法就是采用n a g l e算法算法 rfc 896 nagle算法算法 n若数据是逐个字节
41、到达发送端,则发送端就将第一个若数据是逐个字节到达发送端,则发送端就将第一个 字节发送出去,并将后面到达的字节缓存起来。字节发送出去,并将后面到达的字节缓存起来。 n当收到对第一个字节的确认后,再将缓存中的所有字当收到对第一个字节的确认后,再将缓存中的所有字 符组装成一个报文发送出去,同时继续对到达的字符符组装成一个报文发送出去,同时继续对到达的字符 进行缓存。进行缓存。 n只有在收到确认后才发送下一个报文。只有在收到确认后才发送下一个报文。 n为解决字符到达快、网络速度慢的情况,还规定:当为解决字符到达快、网络速度慢的情况,还规定:当 到达的字节达到窗口大小的一半或者已达到报文的最到达的字节
42、达到窗口大小的一半或者已达到报文的最 大长度时,就立即发送下一个报文。大长度时,就立即发送下一个报文。 n虽然虽然nagle算法已被很多算法已被很多tcp程序采用,但是程序采用,但是 有时候最好不用。有时候最好不用。 n如:在如:在internet上使用上使用x-windows,小消息,小消息 (鼠标移动)必须无时延地发送,以便为进行(鼠标移动)必须无时延地发送,以便为进行 某种操作的交互用户提供实时的反馈。某种操作的交互用户提供实时的反馈。 n当服务器接收到该字符后,它并不发送确认,当服务器接收到该字符后,它并不发送确认, 而是继续等待接收序列中的其他字符。而是继续等待接收序列中的其他字符。
43、 n对交互用户而言,这将产生明显的时延,使用对交互用户而言,这将产生明显的时延,使用 户无法忍受,这时最好关闭这个算法。户无法忍受,这时最好关闭这个算法。 糊涂窗口综合症糊涂窗口综合症 n接受端的缓存已满,而交互式的应用进程一次只从缓存接受端的缓存已满,而交互式的应用进程一次只从缓存 中读取中读取1个字符,然后向发送端发确认,并通知窗口为个字符,然后向发送端发确认,并通知窗口为1 字节(发字节(发40字节的字节的ip报文)。报文)。 n接着,发送端又发来接着,发送端又发来1个字节(发个字节(发41字节的字节的ip报文)。报文)。 n接收端发确认,仍然通知窗口为接收端发确认,仍然通知窗口为1字节
44、。如此进行下字节。如此进行下 去去 v使得网络效率非常低使得网络效率非常低 两种解决方法两种解决方法 nclark方法:禁止接收方发送方法:禁止接收方发送1字节的窗口,而是让接收字节的窗口,而是让接收 端等待一段时间,等到缓存能容纳一个最长的报文段,或端等待一段时间,等到缓存能容纳一个最长的报文段,或 者空出一般的空间,才发送确认。者空出一般的空间,才发送确认。 n发送端不要发送太小的报文段,而是将数据积累成足够大发送端不要发送太小的报文段,而是将数据积累成足够大 的报文段,或者当接收端有一半的空闲缓存时才发送。的报文段,或者当接收端有一半的空闲缓存时才发送。 v这两种方法可配合使用这两种方法
45、可配合使用 n交互数据总是以小于最大报文段长度的分交互数据总是以小于最大报文段长度的分 组发送组发送 二、二、tcptcp的成块数据流的成块数据流 ntcp 采用大小可变的滑动窗口进行流量控制。窗口大小采用大小可变的滑动窗口进行流量控制。窗口大小 的单位是的单位是字节字节。 n在在 tcp 报文段首部的窗口字段写入的数值就是当前给对报文段首部的窗口字段写入的数值就是当前给对 方设置的发送窗口数值的上限。方设置的发送窗口数值的上限。 n发送窗口在连接建立时由双方商定。但在通信的过程中,发送窗口在连接建立时由双方商定。但在通信的过程中, 接收端可根据自己的资源情况,随时动态地调整对方的发接收端可根
46、据自己的资源情况,随时动态地调整对方的发 送窗口上限值送窗口上限值(可增大或减小可增大或减小)。 tcp 的可变滑动窗口的可变滑动窗口 发方收方 window size = 3 send 2 window size = 3 send 1 window size = 3 send 3 发方收方 window size = 3 send 2 window size = 3 send 1 window size = 3 send 3 ack 3 window size = 2 packet 3 is dropped 发方收方 window size = 3 send 2 window size =
47、3 send 1 window size = 3 send 3 ack 3 window size = 2 packet 3 is dropped window size = 2 send 4 window size = 2 send 3 发方收方 window size = 3 send 2 window size = 3 send 1 window size = 3 send 3 ack 3 window size = 2 packet 3 is dropped window size = 2 send 4 window size = 2 send 3 ack 5 window size
48、= 2 window size = 3 发方 收方 收到确认即可前移 1002003004005006007008009001012013014015016017018011 发送窗口 可发送不可发送 指针 n发送端要发送发送端要发送 900 字节长的数据,划分为字节长的数据,划分为 9 个个 100 字节长的报文段,而发送窗口确定为字节长的报文段,而发送窗口确定为 500 字节。字节。 n发送端只要收到了对方的确认,发送窗口就可前发送端只要收到了对方的确认,发送窗口就可前 移。移。 n发送发送 tcp 要维护一个指针。每发送一个报文段,要维护一个指针。每发送一个报文段, 指针就向前移动一个报
49、文段的距离。指针就向前移动一个报文段的距离。 收到确认即可前移 1002003004005006007008009001012013014015016017018011 可发送不可发送 指针 1002003004005006007008009001012013014015016017018011 发送窗口 可发送不可发送 指针发送窗口前移 n发送端已发送了发送端已发送了 400 字节的数据,但只收到对前字节的数据,但只收到对前 200 字节字节 数据的确认,同时窗口大小不变。数据的确认,同时窗口大小不变。 n现在发送端还可发送现在发送端还可发送 300 字节。字节。 已发送 并被确认 已发送但
50、 未被确认 1002003004005006007008009001012013014015016017018011 已发送 并被确认 已发送但 未被确认 可发送不可发送 指针 1002003004005006007008009001012013014015016017018011 已发送 并被确认 可发送 不可 发送 指针 发送窗口前移 发送窗口缩小 n发送端收到了对方对前发送端收到了对方对前 400 字节数据的确认,但字节数据的确认,但 对方通知发送端必须把窗口减小到对方通知发送端必须把窗口减小到 400 字节。字节。 n现在发送端最多还可发送现在发送端最多还可发送 400 字节的数据。字
51、节的数据。 利用可变窗口大小进行流量控制利用可变窗口大小进行流量控制 双方确定的窗口值是双方确定的窗口值是 400 seq = 1 seq = 201 seq = 401 seq = 301 seq = 101 seq = 501 ack = 201, win = 300 ack = 601, win = 0 ack = 501, win = 200 主机 a主机 b 允许 a 再发送 300 字节(序号 201 至 500) a 还能发送 200 字节 a 还能发送 200 字节(序号 301 至 500) a 还能发送 300 字节 a 还能发送 100 字节(序号 401 至 500)
52、a 超时重发,但不能发送序号 500 以后的数据 允许 a 再发送 200 字节(序号 501 至 700) a 还能发送 100 字节(序号 501 至 700) 不允许 a 再发送(到序号 600 的数据都已收到) seq = 201 丢失! 发送数据时,既要考虑到接收端能力,又要使发送数据时,既要考虑到接收端能力,又要使 网络不发生拥塞,发送窗口应满足:网络不发生拥塞,发送窗口应满足: 通知窗口通知窗口 接收端根据接收能力许诺的窗口值接收端根据接收能力许诺的窗口值 拥塞窗口拥塞窗口 发送端根据网络拥塞情况得出的窗口值,发送端根据网络拥塞情况得出的窗口值,是指发送方一是指发送方一 次可传送
53、的字节数。次可传送的字节数。 发送窗口发送窗口 =min通知窗口,拥塞窗口通知窗口,拥塞窗口 使用的拥塞控制技术使用的拥塞控制技术 n慢开始(慢启动)慢开始(慢启动) n加速递减(乘法减小)加速递减(乘法减小) n拥塞避免拥塞避免 1. 当一个连接初始化时,拥塞窗口置为1个mss,并设置慢启动的门 限窗口值。 2.发送端若收到了对所有发出的报文段的确认,就在下一次发送时将 拥塞窗口加倍;若出现超时,则将当时的拥塞窗口值减半,作为 新的门限窗口值,同时将拥塞窗口置为1个mss。 3. 拥塞窗口重新从1个mss开始按指数规律增长,但增长到新的门限 窗口值时,就每次只将拥塞窗口加1个mss ,使拥塞
54、窗口按线性 规律增长。当网络又出现超时时,仍重复上述过程。 实现步骤实现步骤 n “慢启动慢启动”是指每出现一次超时,拥塞窗口都降低到是指每出现一次超时,拥塞窗口都降低到l, 使报文段慢慢注人到网络中。使报文段慢慢注人到网络中。 n“加速递减加速递减”是指每出现一次超时,就将门限窗口值是指每出现一次超时,就将门限窗口值 减半。若超时频繁出现,则门限窗口减小的速率是很减半。若超时频繁出现,则门限窗口减小的速率是很 快的。快的。 n“拥塞避免拥塞避免”是指当拥塞窗口增大到门限窗口值时,是指当拥塞窗口增大到门限窗口值时, 就将拥塞窗口指数增长速度降低为线性增长,避免网就将拥塞窗口指数增长速度降低为线
55、性增长,避免网 络再次出现拥塞。络再次出现拥塞。 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 当 tcp 连接进行初始化时,将拥塞窗口置为 1。图中 的窗口单位不使用字节而使用报文段。 慢开始门限的初始值设置为 16 个报文段, 即 ssthresh = 16。 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始慢开始拥塞避免拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法
56、的实现举例 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端 窗口 rwnd 中的最小值。我们假定接收端窗口足够大, 因此现在发送窗口的数值等于拥塞窗口的数值。 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始慢开始拥塞避免拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1, 发送第一个报文段 m0。 2468101214
57、161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始慢开始拥塞避免拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始慢开始拥塞避免拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 发送端收到 ack1
58、(确认 m0,期望收到 m1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 m1 和 m2 两个报文段。 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 接收端发回 ack2 和 ack3。发送端每收到一个对新报 文段的确认 ack,就把发送端的拥塞窗口加 1。现在 发送端的 cwnd 从 2 增大到 4,并可发送 m4 m6共 4 个报文段。 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始慢开始拥塞避免拥塞避免 更新后
59、的 ssthresh = 12 进入拥塞避免 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 发送端每收到一个对新报文段的确认 ack,就把发送 端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数 按指数规律增长。 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始慢开始拥塞避免拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 当拥塞窗口 cwnd 增长到慢开始
60、门限值 ssthresh 时 (即当 cwnd = 16 时),就改为执行拥塞避免算法, 拥塞窗口按线性规律增长。 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 ssthresh = 16 慢开始慢开始 线性规律增长 拥塞避免拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 慢开始和拥塞避免算法的实现举例 假定拥塞窗口的数值增长到 24 时,网络出现超时(表 明网络拥塞了)。 2468101214161820220 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年自考专业(工商企业管理)试题必考题附答案详解
- 应急安全专项培训课件
- 秋季腹泻与季节因素关联性研究
- 点心供应合同(标准版)
- 传染病护理中消毒灭菌技术与操作规范
- 2025年乐山夹江县从“大学生志愿服务西部计划”人员中考核招聘乡镇事业单位工作人员笔试备考题库及参考答案详解
- 2025年公务员考试时事政治测试卷含答案详解(综合题)
- 2025年数字艺术展览虚拟场景构建与观众互动体验创新报告
- 2025年文化产业发展引导资金申请政策解读报告
- 2025年老年教育课程设置与个性化学习路径创新报告
- 2025年航空知识竞赛必考题库及答案(共140题)
- 【培训课件】网络安全培训
- 2024秋新沪粤版物理8年级上册教学课件 3.1 光的传播与色散
- 2020高考试题研究(工艺流程高考真题)备考建议及说题比赛课件
- 2025年广西公需科目考试题库及答案
- 数据安全技术应用职业技能竞赛理论考试题库500题(含答案)
- 使用错误评估报告(可用性工程)模版
- 话题阅读(十四):旅游与交通-小学英语阅读理解专项训练
- 教师师德师风的培训
- 11.9消防宣传日关注消防安全主题班会课件
- 中国商飞在线测评题
评论
0/150
提交评论