《《传输控制协议》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《传输控制协议》PPT课件.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第8章章传输控制协议(传输控制协议(TCP)1主要内容主要内容nTCP的服务nTCP的端口号和套接字地址nTCP的报文段nTCP的连接管理与释放nTCP的连接管理状态转换图n流量控制n傻瓜窗口综合症n差错控制n拥塞控制n定时器管理 28.1TCP的服务的服务n面向连接的服务要获得TCP服务,在一个应用进程向另一个应用进程开始发送数据之前,必须先在双方之间建立一条连接,数据传送结束后要释放连接。n每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。3n全双工服务 TCP连接提供全双工服务,所有TCP连接都是点到点的。n字节流传递服务 一个TCP连接就是
2、一个字节流,端到端之间不保留消息的边界。47 68H TCP面向流的概念 发送发送TCP报文段报文段发送方发送方接收方接收方把字节写入把字节写入发送缓存发送缓存从接收缓存从接收缓存读取字节读取字节应用进程应用进程应用进程应用进程1230181716151419202145131211H109 H加上加上TCP首部首部构成构成TCP报文段报文段TCPTCP字节流字节流字节流字节流H表示表示TCP报文段的首部报文段的首部x表示序号为表示序号为x的数据字节的数据字节TCP连接连接5TCP连接uTCP连接是一条虚连接而不是一条真正的物理连接。uTCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报
3、文段应包含多少个字节,而UDP发送的报文长度是应用进程给出的。uTCP可把太长的数据块划分短一些再传送。TCP也可等待积累有足够多的字节后再构成报文段发送出去。6TCP的连接uTCP把连接作为最基本的抽象。u每一条TCP连接有两个端点。uTCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。u端口号拼接到(contatenated with)IP地址即构成了套接字。78.2TCP的端口号和套接字地址的端口号和套接字地址8.2.1 TCP的端口号 TCP采用16bit端口号来识别应用程序。服务器一般都是通过熟知端口来
4、识别。而客户端通常使用的是临时端口号。88.2.2 套接字地址n要使用TCP的服务,需要一对套接字地址。n一个套接字有可能同时被用于多个连接。也就是说,两个或多个连接可能终止于同一个套接字。9套接字(socket)u套接字socket=(IP地址:端口号)u每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。nTCP连接:=socket1,socket2n=(IP1:port1),(IP2:port2)108.3TCP的报文段的报文段nTCP报文段由首部和数据两部分组成。n首部前20字节是固定部分,后面有4N字节是根据需要而增加的选项。n选项部分最多是40字节。11TCP报文段的
5、首部格式首部格式TCP首部首部20 字节的字节的固定首部固定首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FIN32 位位SYNRSTPSHACKURG位位 0 8 16 24 31填填 充充TCP 数据部分数据部分TCP 首部首部TCP 报文段报文段IP 数据部分数据部分IP 首部首部发送在前发送在前12TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口
6、序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。13TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充序号字段占 4 字节。TCP 连接中传送的
7、数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。14TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充u确认号字段占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。u确认号=N:序号N-1为止的数据都已经正确接收。15TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据
8、数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充数据偏移(即首部长度)占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。16TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确
9、认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充保留字段占 6 位,保留为今后使用,但目前应置为 0。17TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充紧急 URG 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。18TCP首部首部20字
10、节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充确认 ACK 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。19TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSY
11、NRSTPSHACKURG位位 0 8 16 24 31填填 充充推送 PSH(PuSH)接收 TCP 收到 PSH=1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。20TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充复位 RST(ReSeT)当 RST 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他
12、原因),必须释放连接,然后再重新建立运输连接。21TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充同步 SYN 同步 SYN=1 表示这是一个连接请求或连接接受报文。22TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指
13、 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充终止 FIN(FINish)用来释放一个连接。FIN 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。23TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充窗口字段占2字节,指发送本报文段一方的接收窗口,从确认号开始允许
14、对方发送的数据量;作为对方设置发送窗口的依据,单位为字节。24TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选 项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。25TCP首部首部20字节字节固定固定首部首部目目 的的 端端 口口数据数据偏移偏移检检 验验 和和选选
15、项项 (长(长 度度 可可 变)变)源源 端端 口口序序 号号紧紧 急急 指指 针针窗窗 口口确确 认认 号号保保 留留FINSYNRSTPSHACKURG位位 0 8 16 24 31填填 充充紧急指针字段 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。268.4.1 建立连接 TCP协议中建立连接采用三次握手(three-way handshake)的方式实现。8.4TCP的连接管理与释放的连接管理与释放27TCP的运输连接的三个阶段u运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
16、u连接建立过程中要解决以下三问题:n要使每一方能够确知对方的存在。要使每一方能够确知对方的存在。n要允许双方协商一些参数(如最大报文段长度,要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。最大窗口大小,服务质量等)。n能够对运输实体资源(如缓存大小,连接表中的能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。项目等)进行分配。28客户服务器方式uTCP连接的建立均是采用客户服务器方式。u主动发起连接建立的应用进程叫做客户(client)。u被动等待连接建立应用进程叫做服务器(server)。29三次握手建立TCP连接SYN=1,seq=xCLOSEDCLOSED
17、主动打开主动打开被动打开被动打开AB客户客户服务器服务器A 的的 TCP 向向 B 发出连接请求报文段,其首部中的发出连接请求报文段,其首部中的同步位同步位 SYN=1,并选择序号,并选择序号 seq=x,表明传送,表明传送数据时的第一个数据字节的序号是数据时的第一个数据字节的序号是 x。30用三次握手建立TCP连接SYN=1,seq=xCLOSEDCLOSED主动打开主动打开被动打开被动打开AB客户客户服务器服务器SYN=1,ACK=1,seq=y,ack=x 1 B 的的 TCP 收到连接请求报文段后,如同意,则收到连接请求报文段后,如同意,则 发回确认。发回确认。B 在确认报文段中应使在
18、确认报文段中应使 SYN=1,使,使 ACK=1,其确认号其确认号ack=x 1,自己选择的序号,自己选择的序号 seq=y。31SYN=1,seq=xACK=1,seq=x+1,ack=y 1CLOSEDCLOSED主动打开主动打开被动打开被动打开AB客户客户服务器服务器SYN=1,ACK=1,seq=y,ack=x 1 A 收到此报文段后向收到此报文段后向 B 给出确认,其给出确认,其 ACK=1,确认号确认号 ack=y 1。A 的的 TCP 通知上层应用进程,连接已经建立。通知上层应用进程,连接已经建立。32SYN=1,seq=xACK=1,seq=x+1,ack=y 1CLOSEDC
19、LOSED数据传送数据传送主动打开主动打开被动打开被动打开AB客户客户服务器服务器SYN=1,ACK=1,seq=y,ack=x 1 B 的的 TCP 收到主机收到主机 A 的确认后,也通知其上层的确认后,也通知其上层 应用进程:应用进程:TCP 连接已经建立。连接已经建立。33SYN-SENTESTAB-LISHEDSYN-RCVDLISTENESTAB-LISHED用三次握手建立TCP连接的各状态SYN=1,seq=xACK=1,seq=x+1,ack=y 1CLOSEDCLOSED数据传送数据传送主动打开主动打开被动打开被动打开AB客户客户服务器服务器SYN=1,ACK=1,seq=y,
20、ack=x 134FIN=1,seq=uCLOSED主动关闭主动关闭数据传送数据传送ESTAB-LISHEDESTAB-LISHEDAB客户客户服务器服务器CLOSED TCP 的连接释放的连接释放 数据传输结束后,通信的双方都可释放连接。数据传输结束后,通信的双方都可释放连接。现在现在 A 的应用进程先向其的应用进程先向其 TCP 发出连接释放发出连接释放 报文段,并停止再发送数据,主动关闭报文段,并停止再发送数据,主动关闭 TCP 连接。连接。A 把连接释放报文段首部的把连接释放报文段首部的 FIN=1,其序号,其序号 seq=u,等待,等待 B 的确认。的确认。35FIN=1,seq=u
21、ACK=1,seq=v,ack=u 1主动关闭主动关闭数据传送数据传送通知通知应用应用进程进程ESTAB-LISHEDESTAB-LISHEDAB客户客户服务器服务器 TCP 的连接释放的连接释放 B 发出确认,确认号发出确认,确认号 ack=u 1,而这个报文段自己的序号而这个报文段自己的序号 seq=v。TCP 服务器进程通知高层应用进程。服务器进程通知高层应用进程。从从 A 到到 B 这个方向的连接就释放了,这个方向的连接就释放了,TCP 连接连接 处于处于半关闭状态半关闭状态。B 若发送数据,若发送数据,A 仍要接收。仍要接收。36FIN=1,seq=uACK=1,seq=v,ack=
22、u 1FIN=1,ACK=1,seq=w,ack=u 1主动关闭主动关闭被动关闭被动关闭数据传送数据传送通知通知应用应用进程进程ESTAB-LISHEDESTAB-LISHEDAB客户客户服务器服务器数据传送数据传送TCP 的连接释放的连接释放 若若 B 已经没有要向已经没有要向 A 发送的数据,发送的数据,其应用进程就通知其应用进程就通知 TCP 释放连接。释放连接。37FIN=1,seq=uACK=1,seq=v,ack=u 1FIN=1,ACK=1,seq=w,ack=u 1主动关闭主动关闭被动关闭被动关闭数据传送数据传送通知通知应用应用进程进程ESTAB-LISHEDESTAB-LIS
23、HEDAB客户客户服务器服务器数据传送数据传送 TCP 的连接释放的连接释放 A 收到连接释放报文段后,必须发出确认。收到连接释放报文段后,必须发出确认。ACK=1,seq=u+1,ack=w 138FIN=1,seq=uACK=1,seq=v,ack=u 1FIN=1,ACK=1,seq=w,ack=u 1主动关闭主动关闭被动关闭被动关闭数据传送数据传送通知通知应用应用进程进程ESTAB-LISHEDESTAB-LISHEDAB客户客户服务器服务器数据传送数据传送 TCP 的连接释放的连接释放 在确认报文段中在确认报文段中 ACK=1,确认号,确认号 ack w 1,自己的序号自己的序号 s
24、eq=u+1。ACK=1,seq=u+1,ack=w 139CLOSEDACK=1,seq=u+1,ack=w 1FIN=1,seq=uACK=1,seq=v,ack=u 1FIN=1,ACK=1,seq=w,ack=u 1FIN-WAIT-1CLOSE-WAITFIN-WAIT-2LAST-ACK等待等待2MSLTIME-WAIT主动关闭主动关闭被动关闭被动关闭数据传送数据传送通知通知应用应用进程进程ESTAB-LISHEDESTAB-LISHEDAB客户客户服务器服务器数据传送数据传送CLOSED5.9.2 TCP 的连接释放的连接释放 TCP 连接必须经过时间连接必须经过时间 2MSL
25、后才真正释放掉。后才真正释放掉。40A必须等待2MSL的时间uMSL:最长报文段寿命(MaximumSegmentLifetime),用于时间等待计时器。u为何要等待2MSL?第一,为了保证A发送的最后一个ACK报文段能够到达B。第二,防止“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样可以使下一个新连接中不会出现这种旧的连接请求报文段。418.4.3 连接复位 当TCP需要连接复位时使用RST报文段,其复位比特RST置1。428.5TCP的连接管理状态转换的连接管理状态转换n在任
26、何时刻,机器只处于某一种状态,并一直保持这个状态,直到某个事件发生。发生的事件使机器进入一个新的状态,即事件可使机器完成某种操作。状态转换表示一个状态到另一个状态的迁移,包括迁移的条件和迁移的动作。43TCP的有限状态机nTCP有限状态机的图中每一个方框都是TCP可能具有的状态。n每个方框中的大写英文字符串是TCP标准所使用的TCP连接状态名。状态之间的箭头表示可能发生的状态变迁。n箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作。n图中有三种不同的箭头。n粗实线箭头表示对客户进程的正常变迁。n粗虚线箭头表示对服务器进程的正常变迁。n另一种细线箭头表示异常变迁。44TC
27、P的有限状态机CLOSEDESTABLISHEDLISTENCLOSE_WAITFIN_WAIT_1SYN_RCVDFIN_WAIT_2CLOSINGTIME_WAITSYN_SENTLAST_ACK主动打开被动打开被动关闭主动关闭起点被动打开主动打开 发送 SYN同时打开收到 SYN,发送 SYN,ACK收到 ACK数据传送 阶段 关闭发送 FIN 关闭发送 FIN 关闭发送 FIN收到 RST 收到 SYN发送 SYN,ACK 关闭或超时收到 ACK 收到 SYN,ACK发送 ACK收到 ACK收到 ACK收到 FIN发送 ACK收到 FIN,ACK 发送 ACK收到 FIN发送 ACK同
28、时关闭收到 FIN发送 ACK发送 SYN定时经过两倍报文段寿命后关闭458 86 6流量控制流量控制nTCP采用可变大小的滑动窗口协议进行流量控制。nTCP的滑动窗口是面向字节的。n窗口包括已发送的字节和未被确认的字节,以及可以发送的字节。n接收方窗口是说明接收方还能再接收的字节数。n在TCP报文段首部的窗口大小字段的值就是当前给对方设置的窗口值。46利用滑动窗口实现流量控制u一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。u流量控制(flowcontrol)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使
29、网络发生拥塞。u利用滑动窗口机制可以很方便地在TCP连接上实现流量控制。47seq=1,DATAseq=201,DATAseq=401,DATAseq=301,DATAseq=101,DATAseq=201,DATAseq=501,DATAACK=1,ack=201,rwnd=300ACK=1,ack=601,rwnd=0ACK=1,ack=501,rwnd=100AB允许允许A发送序号发送序号201至至500共共300字节字节A发送了序号发送了序号101至至200,还能发送,还能发送200字节字节A发送了序号发送了序号301至至400,还能再发送,还能再发送100字节新数据字节新数据A发送了
30、序号发送了序号1至至100,还能发送,还能发送300字节字节A发送了序号发送了序号401至至500,不能再发送新数据了,不能再发送新数据了A超时重传旧的数据,但不能发送新的数据超时重传旧的数据,但不能发送新的数据允许允许A发送序号发送序号501至至600共共100字节字节A发送了序号发送了序号501至至600,不能再发送了,不能再发送了不允许不允许A再发送(到序号再发送(到序号600为止的数据都收到了)为止的数据都收到了)丢失!丢失!流量控制举例A向向B发送数据。在连接建立时,发送数据。在连接建立时,B告诉告诉A:“我的接收窗口我的接收窗口rwnd=400(字节)(字节)”。488.7 8.7
31、 傻瓜窗口综合症傻瓜窗口综合症n接收方通告一个小的窗口,引起发送的报文段很小,而降低传输效率。n该现象可发生在两端中的任何一端.498.7.1 Nagle 算法 Nagle 算法试图解决由于发送应用程序每次向TCP发送小的报文段,如报文段只包括1个字节的数据而引起的问题。强迫发送端TCP等待,让它收集数据,以便发送大块数据。(发送端)508.7.2 Clark解决方案 Clark解决方案是只要数据到达就发送确认,但宣布窗口值为零,直到在缓存有足够的空间能容纳具有最大长度的报文或者缓存已有一半的空间为空了,再发送窗口更新报文段。(接收端)518.7.3 8.7.3 延延迟迟确确认认 n对于应用程
32、序消耗数据比到达得慢所产生的这种傻瓜窗口综合症,还有第二种解决方法,即延迟发送确认。(接收端)n在TCP中,发送方并不要求一接到应用进程传递过来的数据就必须马上将数据传送出去;接收方也不要求尽可能快地发送确认报文段。528 88 8 差错控制差错控制nTCP差错控制包括检测受到损伤的报文段、丢失的报文段、失序的报文段和重复的报文段,以及检测出差错后纠正差错,它除了使用检验和,还使用确认技术和超时机制。53nTCP发送方使用超时机制来恢复报文段丢失问题。nTCP使用累计确认系统。54可靠传输的工作原理停止等待协议(a)无差错情况无差错情况A发送发送 M1确认确认 M1B发送发送 M2发送发送 M
33、3确认确认 M2确认确认 M3A发送发送 M1B超时重传超时重传 M1发送发送 M2确认确认 M1丢弃有差错丢弃有差错的报文的报文(b)超时重传超时重传tttt55请注意u在发送完一个分组后,必须暂时保留已发送的分组的副本。u分组和确认分组都必须进行编号。Why?u超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。56确认丢失和确认迟到A发送发送 M1B超时超时重传重传 M1发送发送 M2丢弃丢弃重复的重复的 M1重传确认重传确认 M1(a)确认丢失确认丢失确认确认 M1A发送发送 M1B超时超时重传重传 M1发送发送 M2丢弃丢弃重复的重复的 M1重传确认重传确认M1(b)确认
34、迟到确认迟到确认确认 M1收下迟到收下迟到的确认的确认但什么也不做但什么也不做tttt57可靠通信的实现u使用上述的确认和重传机制,就可以在不可靠的传输网络上实现可靠通信。u这种可靠传输协议常称为自动重传请求ARQ(AutomaticRepeatreQuest)。uARQ表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。58信道利用率u停止等待协议的优点是简单,但缺点是信道利用率太低。TDRTTATD+RTT+TAB分组分组确认确认tt分组分组确认确认RTT:Round-TripTime;D:Delivery;A:Acknowledgement59信道的利用率U60提高效率
35、方法:流水线传输u发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。u由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。B分组分组ttAACK61连续发送多个分组编号u由于连续发送多个分组中间可能有差错需重发,所以必须每分组加编号。u一旦分组多那么将引起编号占数据位庞大的问题,如一次传送中数千分组是正常的,上千分组编号要占十多位。u如何解决?u 窗口协议62连续ARQ协议实现123456789101112(a)发送方维持发送窗口(发送窗口大小是发送方维持发送窗口(发送窗口大小是5)发送窗口发送窗口(b)收到一个确认后发送窗口向前滑动收到一个确认后发送窗口
36、向前滑动向前向前123456789101112发送窗口发送窗口63连续传送,累积确认u接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。u累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。64Go-back-N(回退N)u如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。u这就叫做Go-back-N(回退N),表示需要再
37、退回来重传已发送过的N 个分组。u可见当通信线路质量不好时,连续ARQ协议会带来负面的影响。65TCP可靠通信的具体实现uTCP连接每一端都必须设有两个窗口:一个发送窗口和一个接收窗口。uTCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于序号而不是基于报文段。uTCP两端的四个窗口常处于动态变化之中。uTCP连接的往返时间RTT也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。(具体算法略)66TCP可靠传输的实现前移前移不允许发送不允许发送已发送并已发送并收到确认收到确认A 的发送窗口的发送窗口=20允许发送的序号允许发送的序号26 27 28 29 30 31 3
38、2 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56B 期望期望收到的序号收到的序号前沿前沿后沿后沿前移前移收缩收缩根据根据 接收端接收端B 给出的窗口值,给出的窗口值,发送端发送端A 构造出自己的发送窗口构造出自己的发送窗口 67TCP可靠传输的实现前移前移不允许发送不允许发送已发送并已发送并收到确认收到确认A 的发送窗口的发送窗口=20允许发送的序号允许发送的序号26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
39、 49 50 51 52 53 54 55 56B 期望期望收到的序号收到的序号前沿前沿后沿后沿前移前移收缩收缩u滑动窗口以滑动窗口以字节字节为单位;为单位;u发送窗口发送窗口:在没有收到:在没有收到B确认的情况下,确认的情况下,A可以连续把窗口中的数据发送可以连续把窗口中的数据发送出去;出去;u已发送的数据在未收到确认之前必须保留,在超时重传时用;已发送的数据在未收到确认之前必须保留,在超时重传时用;u发送窗口后沿:前移发送窗口后沿:前移收到新的确认;不动收到新的确认;不动无新确认且窗口大小不变,无新确认且窗口大小不变,或收到新确认但窗口缩小;或收到新确认但窗口缩小;u发送窗口前沿:前移发送
40、窗口前沿:前移由后沿推动;收缩由后沿推动;收缩窗口缩小,不赞成这么做。窗口缩小,不赞成这么做。68不允许发送不允许发送已发送并已发送并收到确认收到确认A 的发送窗口位置不变的发送窗口位置不变允许发送但尚未发送允许发送但尚未发送26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送但未收到确认已发送但未收到确认56P1P2P3不允许接收不允许接收已发送确认已发送确认并交付主机并交付主机B 的接收窗口的接收窗口允许接收允许接收26 27 28 29 30 31 32 3
41、3 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56未按序收到未按序收到可用窗口可用窗口A A 发送了发送了发送了发送了31-4131-41号数据号数据号数据号数据 P3 P1=A 的的发送窗口发送窗口(又称为通知窗口)(又称为通知窗口)P2 P1=已发送但尚未收到确认的字节数已发送但尚未收到确认的字节数P3 P2=允许发送但尚未发送的字节数(又称为允许发送但尚未发送的字节数(又称为可用窗口可用窗口)69不允许发送不允许发送已发送并已发送并收到确认收到确认A 的发送窗口位置不变的发送窗口位置不变允许发送但尚
42、未发送允许发送但尚未发送26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送但未收到确认已发送但未收到确认56P1P2P3不允许接收不允许接收已发送确认已发送确认并交付主机并交付主机B 的接收窗口的接收窗口允许接收允许接收26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56未按序收到未按序收到可用窗口可用窗口滑动窗口总结滑动窗口总结滑
43、动窗口总结滑动窗口总结 uB只能对按序收到的数据中的最高序号给出确认(只能对按序收到的数据中的最高序号给出确认(按序确认按序确认););u发送窗口由接收窗口确定;发送窗口由接收窗口确定;uP1由接收窗口(过来的确认)确定;由接收窗口(过来的确认)确定;uP2由发送过程确定由发送过程确定;uP3P3由由P1P1确定,原因是在窗口大小不变的情况下,后沿确定,原因是在窗口大小不变的情况下,后沿P1P1推动前沿推动前沿P3P3。70允许发送但尚未发送A 的发送窗口向前滑动26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
44、48 49 50 51 52 53 54 55已发送并收到确认不允许发送已发送但未收到确认56P1P2P3允许接收B 的接收窗口向前滑动26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送确认并交付主机不允许接收56未按序收到A A 收到新的确认号,发送窗口向前滑动收到新的确认号,发送窗口向前滑动 先存下,等待缺少的数据的到达71不允许发送已发送并收到确认A 的发送窗口已满,有效窗口为零26 27 28 29 30 31 32 33 34 35 36 37 38
45、39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送但未收到确认56P1P2P3A 的发送窗口内的序号都已用完,但还没有再收到确认,必须停止发送。72发送缓存最后被确认最后被确认的字节的字节发送应用程序发送应用程序发送缓存发送缓存最后发送最后发送的字节的字节发送窗口发送窗口已发送已发送已发送已发送已发送已发送TCP序号增大序号增大重合:后沿重合:后沿u发送缓存用来暂时存放:发送缓存用来暂时存放:-发送应用程序传送给发送方发送应用程序传送给发送方TCP准备发送的数据;准备发送的数据;-TCP已发送出但尚未收到确认的数据。已发送出但尚未收到确认
46、的数据。73接收缓存接收应用程序接收应用程序已收到已收到已收到已收到接收窗口接收窗口TCP接收缓存接收缓存下一个读取下一个读取的字节的字节序号增大序号增大下一个期望收到的下一个期望收到的字节(确认号)字节(确认号)重合:前沿重合:前沿u接收缓存用来暂时存放:接收缓存用来暂时存放:-按序到达的、但尚未被接收应用程序读取的数据;按序到达的、但尚未被接收应用程序读取的数据;-不按序到达的数据。不按序到达的数据。74需要强调三点uA的发送窗口并不总是和B的接收窗口一样大(因为有一定的时间滞后)。uTCP标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到
47、后,再按序交付上层的应用进程。uTCP要求接收方必须有累积确认的功能,这样可以减小传输开销。758.9 8.9 拥塞控制拥塞控制n接收端通知的窗口和拥塞窗口 接收端通知的窗口是接收方根据其可用缓存大小准许的窗口值。拥塞窗口是发送端根据所感知到的网络拥塞程度得出的窗口值。76n慢启动算法n拥塞避免算法771.慢启动和拥塞避免n发送方维持一个叫做拥塞窗口cwnd(congestionwindow)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。n发送方控制拥塞窗口的原则是:只要网络没有出
48、现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。78慢启动算法的原理n在主机刚刚开始发送报文段时可先设置拥塞窗口cwnd=1,即设置为一个最大报文段MSS的数值。n在每收到一个对新的报文段的确认后,将拥塞窗口加1,即增加一个MSS的数值。n用这样的方法逐步增大发送端的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。79发送方接收方发送 M1 确认 M1发送 M2M3 确认 M2M3 发送 M4M7 确认 M4M7 cwnd=1 cwnd=2 cwnd=4 发送 M8M15cwnd=8 tt发送方每收到一个对新报文
49、段的确认(重传的不算在内)就使 cwnd 加 1。轮次 1轮次 2轮次 380传输轮次(transmissionround)n使用慢启动算法后,每经过一个传输轮次,拥塞窗口cwnd就加倍。n一个传输轮次所经历的时间其实就是往返时间RTT。n“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。n例如,拥塞窗口cwnd=4,这时的往返时间RTT就是发送方连续发送4个报文段,并收到这4个报文段的确认,总共经历的时间。81设置慢启动临界值状态变量ssthreshn慢启动临界值ssthresh的用法如下:当cwndssthresh时,停止使用慢
50、启动算法而改用拥塞避免算法。当cwnd=ssthresh时,既可使用慢启动算法,也可使用拥塞避免算法。n拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,使拥塞窗口cwnd按线性规律缓慢增长。82当网络出现拥塞时n无论在慢启动阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢启动临界值ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。n然后把拥塞窗口cwnd重新设置为1,执行慢启动算法。n这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足