1、1-理解可靠传输协议的设计理念理解可靠传输协议的设计理念-掌握掌握Tcp协议的强大功能协议的强大功能传输层传输层江西师范大学计算机学院万宇文江西师范大学计算机学院万宇文2课程索引课程索引 传输层的概念和提供的服务传输层的概念和提供的服务 UDP协议的工作原理和协议细节协议的工作原理和协议细节 可靠传输协议的原理和设计可靠传输协议的原理和设计 TCP协议的工作原理和协议细节协议的工作原理和协议细节3学习内容学习内容 传输层的概念和提供的服务传输层的概念和提供的服务 UDP协议的工作原理和协议细节协议的工作原理和协议细节 可靠传输协议的原理和设计可靠传输协议的原理和设计 TCP协议的工作原理和协议
2、细节协议的工作原理和协议细节4传输层的概念传输层的概念 传输层负责端传输层负责端(主机主机)到端到端(主机主机)之间的数据之间的数据传输控制传输控制 传输层依赖于网络层的服务,对应用层提传输层依赖于网络层的服务,对应用层提供传输服务供传输服务应用层应用层传输层传输层网络层网络层链路层链路层物理层物理层应用层应用层传输层传输层网络层网络层链路层链路层物理层物理层5传输层与网络层的关系传输层与网络层的关系网络层为主机之间数据如何经过网络层为主机之间数据如何经过路由器选路到达对方提供服务路由器选路到达对方提供服务传输层加强了网络层的服务,在数据能传输层加强了网络层的服务,在数据能到达对方的前提下,为
3、数据的传输进行到达对方的前提下,为数据的传输进行控制,为进程间进行通信提供服务控制,为进程间进行通信提供服务 6因特网传输层提供的服务因特网传输层提供的服务 不可靠的不可靠的 (“尽力而为尽力而为”), 无序的传输无序的传输(UDP) 可靠可靠(正确、按序正确、按序)的端到端传输的端到端传输 (TCP)面向连接的服务面向连接的服务流量控制流量控制拥塞控制拥塞控制 因特网上不能提供的服务因特网上不能提供的服务:实时性实时性带宽承诺带宽承诺可靠的广播通信可靠的广播通信 7应用层应用层传输层传输层网络层网络层M主机主机2接收方接收方HtHnsegmentM主机主机1MMM进程进程3进程进程4应用层应
4、用层传输层传输层网络层网络层应用层应用层传输层传输层网络层网络层传输层的分用和复用传输层的分用和复用 分用:接收方传输层根据端口号分用到不分用:接收方传输层根据端口号分用到不通的应用层进程通的应用层进程 复用:发送方不同的应用层进程根据不同复用:发送方不同的应用层进程根据不同端口号复用到同一传输层中端口号复用到同一传输层中段段传输层首部传输层首部应用层的数据应用层的数据传输层根据目的端口传输层根据目的端口分用到不同应用进程分用到不同应用进程8套接字的回顾套接字的回顾源源IP : C目标目标IP: B源端口源端口: x目标端口目标端口: 80源源IP: C目标目标IP: B源端口源端口: y目标
5、端口目标端口: 80源源IP: A目标目标IP: B源端口源端口: x目标端口目标端口: 80Web客户端主机客户端主机 AWeb服务器服务器 BWeb客户端主机客户端主机 C客户端客户端A向向服务器服务器B端端请求网页请求网页源端口随机从可用源端口随机从可用端口取,目标端口端口取,目标端口为为80C打开两个浏览打开两个浏览器,向器,向B发送两发送两个网页请求个网页请求9学习内容学习内容 传输层的概念和提供的服务传输层的概念和提供的服务 UDP协议的工作原理和协议细节协议的工作原理和协议细节 可靠传输协议的原理和设计可靠传输协议的原理和设计 TCP协议的工作原理和协议细节协议的工作原理和协议细
6、节10UDP协议概述协议概述 “最简单的最简单的” Internet 传输协议传输协议 提供不可靠的数据传输,又称提供不可靠的数据传输,又称“尽力而为尽力而为的的” 的服务的服务, 其本质是宁缺勿滥,尽力传输其本质是宁缺勿滥,尽力传输 UDP 协议允许协议允许:数据丢失数据丢失应用数据乱序到达应用数据乱序到达无连接的协议无连接的协议 在在UDP收发双方之间收发双方之间, 无需握手建立连接无需握手建立连接 每个每个 UDP 数据段的操作都互相独立数据段的操作都互相独立11UDP协议的首部协议的首部源端口源端口目的端口目的端口长长 度度校验和校验和数数 据据首首 部部IP 数据报数据报数数 据据首
7、首 部部UDP 用户数据报用户数据报源端口和目标端口源端口和目标端口定义发送方和接收定义发送方和接收方的通信进程方的通信进程长度字段定义长度字段定义UDP数据报的总长度数据报的总长度(包包括首部和数据括首部和数据)校验和用于数据传校验和用于数据传输的差错检查,输的差错检查,UDP协议宁缺勿滥协议宁缺勿滥12UDP校验和查错机制校验和查错机制注意:注意:UDP查错的数据包括查错的数据包括IP首部的首部的12字节,称为伪首部,字节,称为伪首部,作为网络层数据的冗余检查,求和是按二进制反码运算求和作为网络层数据的冗余检查,求和是按二进制反码运算求和8 字节字节UDP首部首部153.19.8.1041
8、71.3.14.1112 字节字节伪首部伪首部7 字节字节数据数据填充填充全全 0 17 15 1087 13 15 全全 0数据数据 数据数据 数据数据 数据数据数据数据 数据数据 数据数据 全全 0校验和是网络通信的查错方式之一,校验和是网络通信的查错方式之一,广泛应用于传输层和网络层,发送广泛应用于传输层和网络层,发送方将需检验的数据按照一定的大小方将需检验的数据按照一定的大小求和求和,得到的和,得到的和取反取反得到为校验码得到为校验码13学习内容学习内容 传输层的概念和提供的服务传输层的概念和提供的服务 UDP协议的工作原理和协议细节协议的工作原理和协议细节 可靠传输协议的原理和设计可
9、靠传输协议的原理和设计 TCP协议的工作原理和协议细节协议的工作原理和协议细节14可靠传输协议概述可靠传输协议概述 可靠传输协议保证数据能够可靠传输协议保证数据能够正确、按序正确、按序的的到达对方到达对方 可靠传输协议可以用于数据链路层、网络可靠传输协议可以用于数据链路层、网络层、传输层和应用层层、传输层和应用层 可靠传输协议属于网络前可靠传输协议属于网络前10位的重要课题位的重要课题 讨论:讨论:如果物理信道如果物理信道100%可靠,还需要可可靠,还需要可靠传输协议吗?靠传输协议吗?15停止等待协议停止等待协议 SW(stop and wait)停止等待协议停止等待协议,发送方发送方每发送一
10、个报文,必须收到对方的回复后每发送一个报文,必须收到对方的回复后才能发送发送下一个报文才能发送发送下一个报文 SW协议类似于非流水线作业方式协议类似于非流水线作业方式 可靠传输协议的讨论从可靠传输协议的讨论从SW协议开始协议开始16可靠协议开始起步可靠协议开始起步rdt_send(): 可靠的数据传可靠的数据传输处理函数,处理完将数输处理函数,处理完将数据交给下层据交给下层udt_send(): 不可靠的数据不可靠的数据传输处理函数,将分组通过传输处理函数,将分组通过不可靠的信道传到接收方不可靠的信道传到接收方rdt_rcv(): 可靠的数可靠的数据接收处理函数,据接收处理函数,deliver
11、_data(): 向向上层递交数据,由上层递交数据,由rdt调用调用17rdt1.0 信道完全可靠信道完全可靠 前提:信道完全可靠前提:信道完全可靠数据不会出错数据不会出错数据不会乱序到达,也不会丢失数据不会乱序到达,也不会丢失 可靠协议本身无需做额外的处理可靠协议本身无需做额外的处理18rdt2.0 信道可能出错信道可能出错 前提:信道可能在分组数据中出现位错,前提:信道可能在分组数据中出现位错,但不会丢失但不会丢失 讨论:需要解决的问题,如何查错,如何讨论:需要解决的问题,如何查错,如何从错误中恢复从错误中恢复 从错误中恢复的办法:从错误中恢复的办法:纠错机制纠错机制(代价太大代价太大)使
12、用确认使用确认 (ACKs)和否认和否认 (NAKs)机制机制: 当接收当接收方正确收到分组,则向发送方发送确认信息,方正确收到分组,则向发送方发送确认信息,否则发送否认信息,当收到否则发送否认信息,当收到NAK时,发送方时,发送方重重传传数据数据(发送方发送方缓存缓存数据,提高效率数据,提高效率)19rdt2.0的运行的运行 (无错的情况无错的情况)发送方发送方 FSM接收方接收方 FSM20rdt2.0 运行运行(出错的情况出错的情况)发送方发送方 FSM接收方接收方FSM21rdt2.0 存在的设计缺陷存在的设计缺陷 ACK/NAK 报文出错报文出错?发送方将不会知道接收端发生了什么发送
13、方将不会知道接收端发生了什么!ACK/NAK本身必须增加查错机制本身必须增加查错机制 讨论:当发送方发现讨论:当发送方发现ACK/NAK出错怎么办出错怎么办?对对ACK/NAK本身再发送本身再发送ACK/NAK(不可行不可行)直接重传分组直接重传分组 接收方可能收到重复分组接收方可能收到重复分组重复分组的问题重复分组的问题(接收方收到一个分组无法分清接收方收到一个分组无法分清该分组是重传的分组还是新的分组该分组是重传的分组还是新的分组): 22rdt2.1:信道出错的可靠协议改进信道出错的可靠协议改进 发送方给发送方给每个分组加上序号每个分组加上序号(sequence number ) 接收方
14、丢弃重复分组接收方丢弃重复分组,并再次对分组确认并再次对分组确认 讨论:讨论:序号需要多少个?序号需要多少个?不用不用NAK,只用只用ACK是否可行,如何处理是否可行,如何处理 rdt2.1:只使用只使用ACK,分组采用分组采用0/1循环编号,循环编号,接收方根据序号确定是否是重复分组接收方根据序号确定是否是重复分组23rdt2.1 演示演示发送方发送方接收方接收方100101Ack0正确收到,发正确收到,发0号分组确认,号分组确认,期待期待1号分组号分组发送发送0号分组号分组正确收到正确收到0号分号分组确认,发送组确认,发送1号分组号分组Ack01号分组出错,号分组出错,发发0号分组确号分组
15、确认认1重发重发1号分组号分组Ack1正确收到,发正确收到,发1号分组确认号分组确认11号确认出错,号确认出错,重发重发1号分组号分组Ack1正确收到,判正确收到,判断是重复分组,断是重复分组,发发1号分组确认号分组确认正确收到正确收到1号分组确认,号分组确认,发下一个发下一个0号分组号分组24rdt3.0 数据可能出错和丢失数据可能出错和丢失 讨论:讨论:谁通过何种方式发现数据丢失谁通过何种方式发现数据丢失?发现数据丢失后如何处理?发现数据丢失后如何处理? 发送方通过发送方通过“超时超时” 时间发现数据丢失时间发现数据丢失.对发送的分组定义一个超时时间对发送的分组定义一个超时时间(定时器定时
16、器),若,若在超时时间里没有收到在超时时间里没有收到ACK,则重传该分组,则重传该分组注意注意:数据超时并非一定丢失了数据超时并非一定丢失了如果分组如果分组(或或 ACK)仅仅被延迟了仅仅被延迟了 (没有丢失没有丢失)将将导致重复分组导致重复分组, 但使用序号机制可以控制但使用序号机制可以控制 思考思考:超时时间如何确定超时时间如何确定,固定的还是变化的固定的还是变化的?25rdt3.0 演示演示1发送方发送方接收方接收方发送发送0号分号分组组收到收到ACK0,发送分组发送分组1收到分组收到分组0,发送发送ACK0收到分组收到分组1,发送发送ACK1超时,重传超时,重传分组分组1收到收到ACK
17、1,发送分组发送分组0收到分组收到分组0,发送发送ACK0pkt0ACK0分组分组1丢失丢失pkt1发送方发送方接收方接收方收到分组收到分组0,发送发送ACK0发送发送0号分号分组组pkt0收到分组收到分组0,发送发送ACK0ACK0收到收到ACK0,发送分组发送分组1pkt1数据丢失情况数据丢失情况确认丢失情况确认丢失情况ACK1丢失丢失收到分组收到分组1,发送发送ACK1ACK1pkt1ACK1收到重复分收到重复分组组1,发送发送ACK1ACK1超时,重传超时,重传分组分组1pkt1pkt0收到收到ACK1,发送分组发送分组0pkt026rdt3.0 演示演示2发送方发送方接收方接收方数据
18、超时未丢失情况数据超时未丢失情况pkt0发送发送0号分组号分组pkt1收到收到ACK0,发送发送分组分组1ACK0收到分组收到分组0,发送发送ACK0ACK1收到分组收到分组1,重复分组,重复分组,发送发送ACK1pkt1超时,重传分组超时,重传分组1pkt0收到收到ACK1,发送发送分组分组0ACK0收到分组收到分组0,发送发送ACK0ACK1收到分组收到分组1,发送发送ACK1pkt0收到收到ACK1,重传重传分组分组0收到收到ACK0,发送分发送分组组1收到分组收到分组0,重复分组,重复分组,发送发送ACK027停止等待协议停止等待协议(rdt3.0)讨论讨论 停等协议能否达到可靠传输的
19、目的停等协议能否达到可靠传输的目的 停等协议一定能停等协议一定能100% 正常工作吗?正常工作吗? 停止等待存在的性能问题停止等待存在的性能问题例例:1 Gb/s 链路链路, RTT=30ms, 传播传播1KB 分组分组Ttransmit=8kb109b/sec= 8 us利用率利用率 = U = =8 us(30000 + 8)us 传输延迟传输延迟实际的等待的时间实际的等待的时间= 0.00027网络协议限制了物理资源的利用网络协议限制了物理资源的利用!28滑动窗口协议的讨论滑动窗口协议的讨论 发送方在没有收到对方的发送方在没有收到对方的ACK的时候可以的时候可以发送多个数据包,发送多个数
20、据包,类似于流水线作业方式类似于流水线作业方式 发送方使用发送方使用发送窗口发送窗口限制没收到确认时允限制没收到确认时允许发送的数据量许发送的数据量 序号的个数必须增加序号的个数必须增加 发送方和接收方发送方和接收方需要增加缓存需要增加缓存 常见的两种滑动窗口协议常见的两种滑动窗口协议:GBN(回退回退N步步)和和SR(选择性重传选择性重传)29GBN的工作方式的工作方式 发送方:窗口不满则发送至窗口满,窗口满则等待,发送方:窗口不满则发送至窗口满,窗口满则等待,收到确认窗口向后移动,收到确认窗口向后移动,某个分组出错或丢失则重某个分组出错或丢失则重传该分组及其后面所有已发送但未被确认的分组传
21、该分组及其后面所有已发送但未被确认的分组 接收方:对按序正确到达的分组确认,接收方:对按序正确到达的分组确认,乱序或错误乱序或错误的分组丢弃且发送最后一次正确收到的分组的确认的分组丢弃且发送最后一次正确收到的分组的确认 累积确认累积确认:发送方收到某个分组的确认意味着该分组发送方收到某个分组的确认意味着该分组及之前所有分组接收方都正确收到及之前所有分组接收方都正确收到30GBN的演示的演示发送窗口为发送窗口为4发送方发送方接收方接收方pkt0发送发送0号分组号分组pkt1发送发送1号分组号分组pkt2ACK2收到分组收到分组2,发送发送ACK2ACK1收到分组收到分组1,发送发送ACK1pkt
22、3发送发送2号分组号分组分组分组丢失丢失pkt2pkt4收到收到ACK0,窗口窗口后移,发送分组后移,发送分组4收到分组收到分组0,发送发送ACK0ACK0发送发送3号分组号分组,窗口满窗口满pkt3pkt4pkt5分组分组2超时,重传超时,重传分组分组2及分组及分组3,4,5收到收到ACK1,发送发送分组分组5pkt5收到分组收到分组4,乱序丢弃,乱序丢弃,发送发送ACK1收到分组收到分组3,乱序丢弃,乱序丢弃,重发重发ACK1收到分组收到分组5,乱序丢弃,乱序丢弃,发送发送ACK1ACK1ACK1ACK1收到收到ACK2,发送发送分组分组631SR的工作方式的工作方式 讨论:讨论:GBN存
23、在的不足及改进的方法?存在的不足及改进的方法? SR:选择性重传:选择性重传发送方某个分组出错或丢失发送方某个分组出错或丢失只重传该分组只重传该分组。接收方增加接收窗口接收方增加接收窗口(接收缓存接收缓存),若收到的,若收到的分分组在接收窗口内且乱序,缓存该分组组在接收窗口内且乱序,缓存该分组,等到分,等到分组按序后一起提交组按序后一起提交,接收窗口的大小一般等于发接收窗口的大小一般等于发送方发送窗口的大小送方发送窗口的大小32SR的演示的演示发送窗口为发送窗口为4发送方发送方接收方接收方0 1 2 3 4 5 6 0 1 20 1 2 3 4 5 6 0 1 2pkt00 1 2 3 4 5
24、 6 0 1 2pkt40 1 2 3 4 5 6 0 1 2pkt5pkt10 1 2 3 4 5 6 0 1 2pkt2分组分组丢失丢失0 1 2 3 4 5 6 0 1 2pkt30 1 2 3 4 5 6 0 1 20 1 2 3 4 5 6 0 1 2ACK00 1 2 3 4 5 6 0 1 2ACK1分组分组2超时超时.重传分组重传分组20 1 2 3 4 5 6 0 1 2pkt20 1 2 3 4 5 6 0 1 20 1 2 3 4 5 6 0 1 20 1 2 3 4 5 6 0 1 2ACK3ACK4ACK50 1 2 3 4 5 6 0 1 2ACK20 1 2 3
25、4 5 6 0 1 2乱序在窗乱序在窗口内,缓口内,缓存并确认存并确认33窗口大小和序号的关系窗口大小和序号的关系 GBN窗口的最大值等于序号的个数窗口的最大值等于序号的个数-1 SR窗口的最大值等于序号的一半窗口的最大值等于序号的一半若若SR窗口为窗口为3,序号为,序号为4,上述情况接收方无法判断收到的序,上述情况接收方无法判断收到的序号为号为0的分组是重传的的分组是重传的0号分组还是新发送的号分组还是新发送的0号分组。号分组。34本节小结本节小结 可靠传输协议的总结可靠传输协议的总结查错机制查错机制序号机制序号机制确认机制确认机制超时重传机制超时重传机制缓存机制缓存机制滑动窗口机制滑动窗口
26、机制定时器机制定时器机制35学习内容学习内容 传输层的概念和提供的服务传输层的概念和提供的服务 UDP协议的工作原理和协议细节协议的工作原理和协议细节 可靠传输协议的原理和设计可靠传输协议的原理和设计 TCP协议的工作原理和协议细节协议的工作原理和协议细节36TCP协议协议 TCP协议的设计理念协议的设计理念 TCP协议首部协议首部 TCP协议的连接机制协议的连接机制 TCP协议的流量控制协议的流量控制 TCP协议的拥塞控制协议的拥塞控制37TCP的设计理念的设计理念 TCP属于传输层,实现面向连接的可靠的属于传输层,实现面向连接的可靠的传输传输可靠的传输不能保证传输一定到达对方,但是可靠的传
27、输不能保证传输一定到达对方,但是能保证如果数据到达对方,一定按序正确能保证如果数据到达对方,一定按序正确 TCP使用了可靠的设计理念使用了可靠的设计理念序号机制、确认机制、缓存机制、重传机制、序号机制、确认机制、缓存机制、重传机制、滑动窗口机制滑动窗口机制 TCP包含流量控制和拥塞控制机制包含流量控制和拥塞控制机制注意:不同操作系统的注意:不同操作系统的TCP协议具体实现细节有协议具体实现细节有所不同,但设计基本满足所不同,但设计基本满足RFC 793,RFC 258138TCP协议首部协议首部TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号
28、紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充39TCP的首部细节的首部细节1TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充源端口和目的端口字段源端口和目的端口字段各占各占 2 2 字节。字节。端端口是传输层与应用层的服务接口口是传输层与应用层的服务接口, ,类似一个地类似一个地址标识址标识。传输层的复用和分用功能都要通过端。传输层的复用和分用功能都要通过端口才能实现。口才
29、能实现。 40TCP的首部细节的首部细节2TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充序号字段序号字段占占 4 4 字节。字节。TCP TCP 连接中传送的连接中传送的数据流中的每一个字节都编上一个号数据流中的每一个字节都编上一个号。序号字。序号字段的值指的是本报文段所发送的数据的段的值指的是本报文段所发送的数据的第一个第一个字节字节的编号的编号41TCP的首部细节的首部细节3TCP首部20字节固定首部目 的 端 口首部长度检 验
30、和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充确认号字段确认号字段占占 4 4 字节,字节,是期望收到对方是期望收到对方的下一个报文段的数据的第一个字节的序号的下一个报文段的数据的第一个字节的序号。注意注意:当有数据要发送给对方时,顺便确认,:当有数据要发送给对方时,顺便确认,当没有数据发给对方时,单独发一个确认报文当没有数据发给对方时,单独发一个确认报文。 42TCP的首部细节的首部细节4TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号
31、紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充首部长度首部长度占占4bit4bit,它作为一个二进制数字,表,它作为一个二进制数字,表示示TCPTCP报文段的首部包含的总的字节数报文段的首部包含的总的字节数( (即即2020个固定个固定首部长度加不固定的可选首部长度首部长度加不固定的可选首部长度) ),计算单位按计算单位按照照4 4个字节为单位,如个字节为单位,如11001100表示首部为表示首部为1212* *4=484=48字节字节。 该字段限制了该字段限制了TCPTCP的首部最大值为的首部最大值为6060字节字节保留字段保留字
32、段占占6bit6bit,保留为今后协议的扩保留为今后协议的扩展使用,目前置为展使用,目前置为0 0。 43TCP的首部细节的首部细节4TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充特殊标记特殊标记(Flag),(Flag),每个标记占一个每个标记占一个bit.bit.有特殊约定。有特殊约定。URGURG 紧急比特标记,当紧急比特标记,当URGURG置为置为1 1时,时,表明紧急指针字段有效表明紧急指针字段有效。通。通知本报文段中有紧急
33、数据,应尽快传送知本报文段中有紧急数据,应尽快传送, ,紧急数据的优先级要高。紧急数据的优先级要高。ACKACK 只有当只有当 ACKACK置为置为1 1时,确认号字段才有效时,确认号字段才有效。正常情况下只有第。正常情况下只有第一次握手时一次握手时ACK=0 ACK=0 44TCP的首部细节的首部细节5TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充PSH(PuSH)PSH(PuSH)推送比特,接收方收到推送比特置推送比特,接收方收到
34、推送比特置1 1的报文段,就的报文段,就尽快地将该报文段的数据交付给接收应用进程,而不再等到整个尽快地将该报文段的数据交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付缓存都填满了后再向上交付。 RST (ReSeT) RST (ReSeT) 复位比特,复位比特,当当 RSTRST 1 1 时,表明时,表明 TCP TCP 连接中出连接中出现严重差错现严重差错(如由于主机崩溃或其他原因),必须强行释放连接(如由于主机崩溃或其他原因),必须强行释放连接, ,属于单方面强行断开连接属于单方面强行断开连接。45TCP的首部细节的首部细节6TCP首部20字节固定首部目 的 端 口首部长度检 验
35、 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充SYNSYN同步比特同步比特,SYN ,SYN 置为置为 1 1,表示这是一个连接请求报文。,表示这是一个连接请求报文。正常情况下只有第一次握手和第二次握手时正常情况下只有第一次握手和第二次握手时SYNSYN等于等于, ,其余都等其余都等于于0 0 。FIN(Final)FIN(Final)终止比特终止比特, ,用来正常释放一个连接。用来正常释放一个连接。当当FINFIN 1 1时,时,表明此报文段的发送端的数据已发送完毕表明此报文段的发送端
36、的数据已发送完毕,并请求对方释放连接,并请求对方释放连接,当对方确认后,会释放发送缓存。当对方确认后,会释放发送缓存。 46TCP的首部细节的首部细节7TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充窗口字段窗口字段占占2 2字节。窗口字段是字节。窗口字段是流量控制流量控制的关键,用来控制的关键,用来控制对方发送窗口的大小,单位为对方发送窗口的大小,单位为字节字节。接收方根据自身的缓存大小接收方根据自身的缓存大小确定自己的接收窗口大小,
37、然后通知对方以确定对方的发送窗口确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。的上限。检验和检验和 占占 2 2 字节。检验和字字节。检验和字段检验的范围包括首部和数据这两部段检验的范围包括首部和数据这两部分。在计算检验和时,要在分。在计算检验和时,要在TCP TCP 报文报文段的前面加上段的前面加上 12 12 字节的伪首部。字节的伪首部。47TCP的首部细节的首部细节8TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填
38、充紧急指针字段紧急指针字段 占占 16 bit16 bit。紧急指针指出在本报文段中的紧紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。急数据的最后一个字节的序号。 选项字段选项字段 长度可变。长度可变。TCP TCP 只规定了一种选项,即只规定了一种选项,即最大报文最大报文段长度段长度 MSS (Maximum Segment MSS (Maximum Segment Size)Size)。MSS MSS 告诉对方告诉对方TCPTCP:“我我的缓存所能接收的报文段的数据的缓存所能接收的报文段的数据字段的最大长度是字段的最大长度是 MSS MSS 个字节。个字节。48TCP的首部细节的
39、首部细节9TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充填充字段填充字段 这是为了使整个这是为了使整个首部长度是首部长度是4 4字节的整数倍。从字节的整数倍。从而保证首部长度字段的有效性和而保证首部长度字段的有效性和计算检验和的有效性计算检验和的有效性49TCP 的数据编号与确认的数据编号与确认 序号基于字节序号基于字节随机生成初始序号,之后每个字节都对应一个随机生成初始序号,之后每个字节都对应一个编号,序号是发送数据的第一个字节的编
40、号编号,序号是发送数据的第一个字节的编号 确认号是期望对方发送的下一个数据的第确认号是期望对方发送的下一个数据的第一个字节的编号,即对方下一个报文段的一个字节的编号,即对方下一个报文段的序号序号 TCP的确认属于的确认属于累积确认累积确认,乱序到达的数据乱序到达的数据会会缓存缓存 思考:思考:TCP属于属于GBN还是还是SR50TCP的三次握手建立连接的三次握手建立连接AB第一次握手:第一次握手:A A随机初随机初始化自己的序号始化自己的序号SN(A),SN(A),确认号为确认号为0,0,初始化初始化A A的的接收窗口大小,接收窗口大小, SYN=1 SYN=1表示希望和表示希望和B B做朋友
41、做朋友第二次握手:第二次握手:B B随机随机初始化自己的序号初始化自己的序号SN(B),SN(B),确认号为确认号为A A第第一次握手的序号加一次握手的序号加1 1, ,表示向表示向A A作确认作确认, ,初始初始化化B B的接收窗口大小,的接收窗口大小,SYN=1SYN=1,表示希望和,表示希望和A A做朋友做朋友第三次握手:第三次握手:A A对对B B作确作确认,认,SYN=0,ACK=1,SYN=0,ACK=1,确认确认号为号为B B第二次握手的序第二次握手的序号加号加1 151TCP的三次握手示例的三次握手示例发送 SYN ,请求建立连接(seq=100 ctl=SYN)Host AH
42、ost B1发送 SYN 、ACK(seq=300 ack101 ctl=SYN、ACK)23发送ACK(seq=101 ack301ctl=ACK)52TCP释放连接的过程释放连接的过程异常释放异常释放ABRST=1ACK正常释放正常释放ABFIN=1ACKFIN=1ACK53TCP四次断开示例四次断开示例发送 FIN,请求断开连接(seq=101 ,ack=301,ctl=FIN,ACK)Host AHost B1发送 ACK(seq=301,ack=102ctl=ACK)24发送ACK(seq=102,ack=302 ctl=ACK)Seq91 10ByteSeq296 5ByteAck
43、1013发送 FIN,请求断开连接(seq=301,ack=102 ctl=FIN,ACK)54TCP状态图状态图55TCP的重传机制的重传机制 原则:当数据超时则需要重传原则:当数据超时则需要重传 问题:超时时间如何规定、如何提高效率?问题:超时时间如何规定、如何提高效率?可靠传输协议需要对分组设置超时时间,超时可靠传输协议需要对分组设置超时时间,超时时间应当动态地随着网络的有效带宽和拥塞程时间应当动态地随着网络的有效带宽和拥塞程度不断的变化度不断的变化网络的拥塞程度可以通过往返时延网络的拥塞程度可以通过往返时延RTT来衡量来衡量 TCP的超时时间计算公式的超时时间计算公式Estimated
44、RTT = (1-x)*EstimatedRTT + x*SampleRTT (x=1/8)Timeout = EstimatedRTT + 4*DeviationDeviation = (1-x)*Deviation +x*|SampleRTT-EstimatedRTT|Timeout=*EstimatedRTT (=2)某些某些TCP实现的方法实现的方法56重传的进一步讨论重传的进一步讨论 Karn算法算法(背景:往返时间有时很难估计)背景:往返时间有时很难估计)对重传的数据不计算对重传的数据不计算RTT, timeout=2*timeout; 快速重传提高效率快速重传提高效率当连续收到三
45、个重复的冗余确认则重传对方期当连续收到三个重复的冗余确认则重传对方期望收到的分组望收到的分组57TCP的流量控制的流量控制接收方接收方: : 明确地通过明确地通过TCPTCP首部的窗口字段发送接收窗口大小,从首部的窗口字段发送接收窗口大小,从而限制发送方发送窗口的最大值而限制发送方发送窗口的最大值发送方发送方: : 保证发送窗口大小不超过对方发送地接收窗口的大小保证发送窗口大小不超过对方发送地接收窗口的大小思考:思考:TCPTCP的接收缓存是主机的所有的接收缓存是主机的所有TCPTCP连接共享还是每个连接共享还是每个TCPTCP连连接独占?(需实验验证接独占?(需实验验证) )TCP流量控制示
46、例流量控制示例Host AHost B123Seq=300,ack=101,win=3Seq=100,1ByteAck=104,win=1Seq=101, 1B,win=3Seq=102,1B,win=3Seq=103,1B,win=3Seq=104030132发送窗口大小为3通报窗口大小为1缓冲区满应用程序读取了1个数据段实际发送窗口大小变为1通报窗口大小为359TCP流量控制的特殊情况流量控制的特殊情况1 特殊场景:特殊场景:TCP连接的两端连接的两端A和和B,B接收缓接收缓存满,存满,B此时无任何数据需要发送给此时无任何数据需要发送给A 问题:当问题:当A发送数据给发送数据给B时,时,B
47、发送确认,发送确认,其中接收窗口大小为其中接收窗口大小为0,B的缓存逐渐出现空的缓存逐渐出现空间,但间,但A无法获得这一信息无法获得这一信息,使得使得A无法发送无法发送任何数据给任何数据给B 解决办法:当收到接收窗口为解决办法:当收到接收窗口为0的报文,的报文,A继续发送一个字节的数据(一般响应一个继续发送一个字节的数据(一般响应一个持续定时器后在再发送)持续定时器后在再发送),获得获得B确认报文确认报文中最新的接收窗口大小中最新的接收窗口大小60TCP流量控制的特殊情况流量控制的特殊情况2 愚笨窗口综合症愚笨窗口综合症当接收端交互式应用每次读取一个字节数据时当接收端交互式应用每次读取一个字节
48、数据时,或者发送端每次只发送一个字节数据,将会使或者发送端每次只发送一个字节数据,将会使得得TCP的工作效率很低。的工作效率很低。 解决办法:解决办法:接收端如果接收缓存很小时,会等待一段时间接收端如果接收缓存很小时,会等待一段时间(500ms)等缓存大到一定程度再发送接收窗口等缓存大到一定程度再发送接收窗口给发送端(给发送端(Clark策略策略),提高效率,提高效率发送端如果发送的数据很小,第一次会照常发发送端如果发送的数据很小,第一次会照常发送,后面的会等待一定时间(送,后面的会等待一定时间(500ms)等发送数等发送数据较大时再放入据较大时再放入Tcp段中发送。段中发送。(Nagle算法
49、算法)61TCP的拥塞控制机制的拥塞控制机制 讨论:讨论:什么是拥塞?什么是拥塞?为什么需要拥塞控制?为什么需要拥塞控制?谁应该负责拥塞控制?路由器还是谁应该负责拥塞控制?路由器还是TCP的发送的发送端和接收端?端和接收端?如何发现拥塞,发现拥塞后该如何处理?如何发现拥塞,发现拥塞后该如何处理?如何保证效率?如何保证效率?62TCP的拥塞控制思想的拥塞控制思想 使用拥塞窗口使用拥塞窗口cwnd控制发送窗口大小控制发送窗口大小 发送窗口的上限值发送窗口的上限值 Min rwnd, cwnd 分组超时意味着拥塞,分组收到确认则意味着分组超时意味着拥塞,分组收到确认则意味着网络未拥塞网络未拥塞 拥塞
50、则少发拥塞则少发(拥塞窗口减小拥塞窗口减小),没拥塞则多发,没拥塞则多发(拥拥塞窗口增加塞窗口增加) 在网络未知的情况下拥塞窗口从最小开始,在网络未知的情况下拥塞窗口从最小开始,收到确认拥塞窗口大小增加收到确认拥塞窗口大小增加 为提高效率,开始窗口增加速度快,到了一定为提高效率,开始窗口增加速度快,到了一定阶段窗口增加速度变慢阶段窗口增加速度变慢63TCP的拥塞窗口举例的拥塞窗口举例246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh = 16慢启动慢启动拥塞避免拥塞避免更新后的 ssthresh =