《理解可靠传输协议的设计理念掌握Tcp协议的强大功课件》由会员分享,可在线阅读,更多相关《理解可靠传输协议的设计理念掌握Tcp协议的强大功课件(76页珍藏版)》请在金锄头文库上搜索。
1、-理解可靠传输协议的设计理念理解可靠传输协议的设计理念-掌握掌握Tcp协议的强大功能协议的强大功能传输层传输层江西师范大学计算机学院万宇文江西师范大学计算机学院万宇文1课程索引课程索引传输层的概念和提供的服务传输层的概念和提供的服务UDP协议的工作原理和协议细节协议的工作原理和协议细节可靠传输协议的原理和设计可靠传输协议的原理和设计TCP协议的工作原理和协议细节协议的工作原理和协议细节2学习内容学习内容传输层的概念和提供的服务传输层的概念和提供的服务UDP协议的工作原理和协议细节协议的工作原理和协议细节可靠传输协议的原理和设计可靠传输协议的原理和设计TCP协议的工作原理和协议细节协议的工作原理
2、和协议细节3传输层的概念传输层的概念传输层负责端传输层负责端(主机主机)到端到端(主机主机)之间的数据之间的数据传输控制传输控制传输层依赖于网络层的服务,对应用层提传输层依赖于网络层的服务,对应用层提供传输服务供传输服务应用层应用层传输层传输层网络层网络层链路层链路层物理层物理层应用层应用层传输层传输层网络层网络层链路层链路层物理层物理层4传输层与网络层的关系传输层与网络层的关系网络层为主机之间数据如何经过网络层为主机之间数据如何经过路由器选路到达对方提供服务路由器选路到达对方提供服务传输层加强了网络层的服务,在数据能传输层加强了网络层的服务,在数据能到达对方的前提下,为数据的传输进行到达对方
3、的前提下,为数据的传输进行控制,为进程间进行通信提供服务控制,为进程间进行通信提供服务 5因特网传输层提供的服务因特网传输层提供的服务不可靠的不可靠的 (“尽力而为尽力而为”), 无序的传输无序的传输(UDP)可靠可靠(正确、按序正确、按序)的端到端传输的端到端传输 (TCP)面向连接的服务面向连接的服务流量控制流量控制拥塞控制拥塞控制因特网上不能提供的服务因特网上不能提供的服务:实时性实时性带宽承诺带宽承诺可靠的广播通信可靠的广播通信 6应用层应用层传输层传输层网络层网络层M主机主机2接收方接收方HtHnsegmentM主机主机1MMM进程进程3进程进程4应用层应用层传输层传输层网络层网络层
4、应用层应用层传输层传输层网络层网络层传输层的分用和复用传输层的分用和复用分用:接收方传输层根据端口号分用到不分用:接收方传输层根据端口号分用到不通的应用层进程通的应用层进程复用:发送方不同的应用层进程根据不同复用:发送方不同的应用层进程根据不同端口号复用到同一传输层中端口号复用到同一传输层中段段传输层首部传输层首部应用层的数据应用层的数据传输层根据目的端口传输层根据目的端口分用到不同应用进程分用到不同应用进程7套接字的回顾套接字的回顾源源IP : C目标目标IP: B源端口源端口: x目标端口目标端口: 80源源IP: C目标目标IP: B源端口源端口: y目标端口目标端口: 80源源IP:
5、A目标目标IP: B源端口源端口: x目标端口目标端口: 80Web客户端主机客户端主机 AWeb服务器服务器 BWeb客户端主机客户端主机 C客户端客户端A向向服务器服务器B端端请求网页请求网页源端口随机从可用源端口随机从可用端口取,目标端口端口取,目标端口为为80C打开两个浏览打开两个浏览器,向器,向B发送两发送两个网页请求个网页请求8学习内容学习内容传输层的概念和提供的服务传输层的概念和提供的服务UDP协议的工作原理和协议细节协议的工作原理和协议细节可靠传输协议的原理和设计可靠传输协议的原理和设计TCP协议的工作原理和协议细节协议的工作原理和协议细节9UDP协议概述协议概述“最简单的最简
6、单的” Internet 传输协议传输协议提供不可靠的数据传输,又称提供不可靠的数据传输,又称“尽力而为尽力而为的的” 的服务的服务, 其本质是宁缺勿滥,尽力传输其本质是宁缺勿滥,尽力传输UDP 协议允许协议允许:数据丢失数据丢失应用数据乱序到达应用数据乱序到达无连接的协议无连接的协议在在UDP收发双方之间收发双方之间, 无需握手建立连接无需握手建立连接每个每个 UDP 数据段的操作都互相独立数据段的操作都互相独立10UDP协议的首部协议的首部源端口源端口目的端口目的端口长长 度度校验和校验和数数 据据首首 部部IP 数据报数据报数数 据据首首 部部UDP 用户数据报用户数据报源端口和目标端口
7、源端口和目标端口定义发送方和接收定义发送方和接收方的通信进程方的通信进程长度字段定义长度字段定义UDP数据报的总长度数据报的总长度(包包括首部和数据括首部和数据)校验和用于数据传校验和用于数据传输的差错检查,输的差错检查,UDP协议宁缺勿滥协议宁缺勿滥11UDP校验和查错机制校验和查错机制注意:注意:UDP查错的数据包括查错的数据包括IP首部的首部的12字节,称为伪首部,字节,称为伪首部,作为网络层数据的冗余检查,求和是按二进制反码运算求和作为网络层数据的冗余检查,求和是按二进制反码运算求和8 字节字节UDP首部首部153.19.8.104171.3.14.1112 字节字节伪首部伪首部7 字
8、节字节数据数据填充填充全全 0 17 15 1087 13 15 全全 0数据数据 数据数据 数据数据 数据数据数据数据 数据数据 数据数据 全全 0校验和是网络通信的查错方式之一,校验和是网络通信的查错方式之一,广泛应用于传输层和网络层,发送广泛应用于传输层和网络层,发送方将需检验的数据按照一定的大小方将需检验的数据按照一定的大小求和求和,得到的和,得到的和取反取反得到为校验码得到为校验码12学习内容学习内容传输层的概念和提供的服务传输层的概念和提供的服务UDP协议的工作原理和协议细节协议的工作原理和协议细节可靠传输协议的原理和设计可靠传输协议的原理和设计TCP协议的工作原理和协议细节协议的
9、工作原理和协议细节13可靠传输协议概述可靠传输协议概述可靠传输协议保证数据能够可靠传输协议保证数据能够正确、按序正确、按序的的到达对方到达对方可靠传输协议可以用于数据链路层、网络可靠传输协议可以用于数据链路层、网络层、传输层和应用层层、传输层和应用层可靠传输协议属于网络前可靠传输协议属于网络前10位的重要课题位的重要课题讨论:讨论:如果物理信道如果物理信道100%可靠,还需要可可靠,还需要可靠传输协议吗?靠传输协议吗?14停止等待协议停止等待协议SW(stop and wait)停止等待协议停止等待协议,发送方每发送方每发送一个报文,必须收到对方的回复后才发送一个报文,必须收到对方的回复后才能
10、发送发送下一个报文能发送发送下一个报文SW协议类似于非流水线作业方式协议类似于非流水线作业方式可靠传输协议的讨论从可靠传输协议的讨论从SW协议开始协议开始15可靠协议开始起步可靠协议开始起步rdt_send(): 可靠的数据传可靠的数据传输处理函数,处理完将数输处理函数,处理完将数据交给下层据交给下层udt_send(): 不可靠的数据不可靠的数据传输处理函数,将分组通过传输处理函数,将分组通过不可靠的信道传到接收方不可靠的信道传到接收方rdt_rcv(): 可靠的数可靠的数据接收处理函数,据接收处理函数,deliver_data(): 向向上层递交数据,由上层递交数据,由rdt调用调用16r
11、dt1.0 信道完全可靠信道完全可靠前提:信道完全可靠前提:信道完全可靠数据不会出错数据不会出错数据不会乱序到达,也不会丢失数据不会乱序到达,也不会丢失可靠协议本身无需做额外的处理可靠协议本身无需做额外的处理17rdt2.0 信道可能出错信道可能出错前提:信道可能在分组数据中出现位错,前提:信道可能在分组数据中出现位错,但不会丢失但不会丢失讨论:需要解决的问题,如何查错,如何讨论:需要解决的问题,如何查错,如何从错误中恢复从错误中恢复从错误中恢复的办法:从错误中恢复的办法:纠错机制纠错机制(代价太大代价太大)使用确认使用确认 (ACKs)和否认和否认 (NAKs)机制机制: 当接收当接收方正确
12、收到分组,则向发送方发送确认信息,方正确收到分组,则向发送方发送确认信息,否则发送否认信息,当收到否则发送否认信息,当收到NAK时,发送方时,发送方重重传传数据数据(发送方发送方缓存缓存数据,提高效率数据,提高效率)18rdt2.0的运行的运行 (无错的情况无错的情况)发送方发送方 FSM接收方接收方 FSM19rdt2.0 运行运行(出错的情况出错的情况)发送方发送方 FSM接收方接收方FSM20rdt2.0 存在的设计缺陷存在的设计缺陷ACK/NAK 报文出错报文出错?发送方将不会知道接收端发生了什么发送方将不会知道接收端发生了什么!ACK/NAK本身必须增加查错机制本身必须增加查错机制讨
13、论:当发送方发现讨论:当发送方发现ACK/NAK出错怎么办出错怎么办?对对ACK/NAK本身再发送本身再发送ACK/NAK(不可行不可行)直接重传分组直接重传分组接收方可能收到重复分组接收方可能收到重复分组重复分组的问题重复分组的问题(接收方收到一个分组无法分清接收方收到一个分组无法分清该分组是重传的分组还是新的分组该分组是重传的分组还是新的分组): 21rdt2.1:信道出错的可靠协议改进信道出错的可靠协议改进发送方给发送方给每个分组加上序号每个分组加上序号(sequence number )接收方丢弃重复分组接收方丢弃重复分组,并再次对分组确认并再次对分组确认讨论:讨论:序号需要多少个?序
14、号需要多少个?不用不用NAK,只用只用ACK是否可行,如何处理是否可行,如何处理rdt2.1:只使用只使用ACK,分组采用分组采用0/1循环编号,循环编号,接收方根据序号确定是否是重复分组接收方根据序号确定是否是重复分组22rdt2.1 演示演示发送方发送方接收方接收方100101Ack0正确收到,发正确收到,发0号分组确认,号分组确认,期待期待1号分组号分组发送发送0号分组号分组正确收到正确收到0号分号分组确认,发送组确认,发送1号分组号分组Ack01号分组出错,号分组出错,发发0号分组确号分组确认认1重发重发1号分组号分组Ack1正确收到,发正确收到,发1号分组确认号分组确认11号确认出错
15、,号确认出错,重发重发1号分组号分组Ack1正确收到,判正确收到,判断是重复分组,断是重复分组,发发1号分组确认号分组确认正确收到正确收到1号分组确认,号分组确认,发下一个发下一个0号分组号分组23rdt3.0 数据可能出错和丢失数据可能出错和丢失讨论:讨论:谁通过何种方式发现数据丢失谁通过何种方式发现数据丢失?发现数据丢失后如何处理?发现数据丢失后如何处理?发送方通过发送方通过“超时超时” 时间发现数据丢失时间发现数据丢失.对发送的分组定义一个超时时间对发送的分组定义一个超时时间(定时器定时器),若,若在超时时间里没有收到在超时时间里没有收到ACK,则重传该分组,则重传该分组注意注意:数据超
16、时并非一定丢失了数据超时并非一定丢失了如果分组如果分组(或或 ACK)仅仅被延迟了仅仅被延迟了 (没有丢失没有丢失)将将导致重复分组导致重复分组, 但使用序号机制可以控制但使用序号机制可以控制思考思考:超时时间如何确定超时时间如何确定,固定的还是变化的固定的还是变化的?24rdt3.0 演示演示1发送方发送方接收方接收方发送发送0号分号分组组收到收到ACK0,发送分组发送分组1收到分组收到分组0,发送发送ACK0收到分组收到分组1,发送发送ACK1超时,重传超时,重传分组分组1收到收到ACK1,发送分组发送分组0收到分组收到分组0,发送发送ACK0pkt0ACK0分组分组1丢失丢失pkt1发送
17、方发送方接收方接收方收到分组收到分组0,发送发送ACK0发送发送0号分号分组组pkt0收到分组收到分组0,发送发送ACK0ACK0收到收到ACK0,发送分组发送分组1pkt1数据丢失情况数据丢失情况确认丢失情况确认丢失情况ACK1丢失丢失收到分组收到分组1,发送发送ACK1ACK1pkt1ACK1收到重复分收到重复分组组1,发送发送ACK1ACK1超时,重传超时,重传分组分组1pkt1pkt0收到收到ACK1,发送分组发送分组0pkt025rdt3.0 演示演示2发送方发送方接收方接收方数据超时未丢失情况数据超时未丢失情况pkt0发送发送0号分组号分组pkt1收到收到ACK0,发送发送分组分组
18、1ACK0收到分组收到分组0,发送发送ACK0ACK1收到分组收到分组1,重复分组,重复分组,发送发送ACK1pkt1超时,重传分组超时,重传分组1pkt0收到收到ACK1,发送分发送分组组0ACK0收到分组收到分组0,发送发送ACK0ACK1收到分组收到分组1,发送发送ACK1pkt0收到收到ACK1,重传重传分组分组0收到收到ACK0,发送分发送分组组1收到分组收到分组0,重复分组,重复分组,发送发送ACK026停止等待协议停止等待协议(rdt3.0)讨论讨论停等协议能否达到可靠传输的目的停等协议能否达到可靠传输的目的停等协议一定能停等协议一定能100% 正常工作吗?正常工作吗?停止等待存
19、在的性能问题停止等待存在的性能问题例例:1 Gb/s 链路链路, RTT=30ms, 传播传播1KB 分组分组Ttransmit=8kb109b/sec= 8 us利用率利用率 = U = =8 us(30000 + 8)us 传输延迟传输延迟实际的等待的时间实际的等待的时间= 0.00027网络协议限制了物理资源的利用网络协议限制了物理资源的利用!27滑动窗口协议的讨论滑动窗口协议的讨论发送方在没有收到对方的发送方在没有收到对方的ACK的时候可以的时候可以发送多个数据包,发送多个数据包,类似于流水线作业方式类似于流水线作业方式发送方使用发送方使用发送窗口发送窗口限制没收到确认时允限制没收到确
20、认时允许发送的数据量许发送的数据量序号的个数必须增加序号的个数必须增加发送方和接收方发送方和接收方需要增加缓存需要增加缓存常见的两种滑动窗口协议常见的两种滑动窗口协议:GBN(回退回退N步步)和和SR(选择性重传选择性重传)28GBN的工作方式的工作方式发送方:窗口不满则发送至窗口满,窗口满则等待,发送方:窗口不满则发送至窗口满,窗口满则等待,收到确认窗口向后移动,收到确认窗口向后移动,某个分组出错或丢失则重某个分组出错或丢失则重传该分组及其后面所有已发送但未被确认的分组传该分组及其后面所有已发送但未被确认的分组接收方:对按序正确到达的分组确认,接收方:对按序正确到达的分组确认,乱序或错误乱序
21、或错误的分组丢弃且发送最后一次正确收到的分组的确认的分组丢弃且发送最后一次正确收到的分组的确认累积确认累积确认:发送方收到某个分组的确认意味着该分组发送方收到某个分组的确认意味着该分组及之前所有分组接收方都正确收到及之前所有分组接收方都正确收到29GBN的演示的演示发送窗口为发送窗口为4发送方发送方接收方接收方pkt0发送发送0号分组号分组pkt1发送发送1号分组号分组pkt2ACK2收到分组收到分组2,发送发送ACK2ACK1收到分组收到分组1,发送发送ACK1pkt3发送发送2号分组号分组分组分组丢失丢失pkt2pkt4收到收到ACK0,窗口后窗口后移,发送分组移,发送分组4收到分组收到分
22、组0,发送发送ACK0ACK0发送发送3号分组号分组,窗口满窗口满pkt3pkt4pkt5分组分组2超时,重传超时,重传分组分组2及分组及分组3,4,5收到收到ACK1,发送分发送分组组5pkt5收到分组收到分组4,乱序丢弃,乱序丢弃,发送发送ACK1收到分组收到分组3,乱序丢弃,乱序丢弃,重发重发ACK1收到分组收到分组5,乱序丢弃,乱序丢弃,发送发送ACK1ACK1ACK1ACK1收到收到ACK2,发送分发送分组组630SR的工作方式的工作方式讨论:讨论:GBN存在的不足及改进的方法?存在的不足及改进的方法?SR:选择性重传:选择性重传发送方某个分组出错或丢失发送方某个分组出错或丢失只重传
23、该分组只重传该分组。接收方增加接收窗口接收方增加接收窗口(接收缓存接收缓存),若收到的,若收到的分分组在接收窗口内且乱序,缓存该分组组在接收窗口内且乱序,缓存该分组,等到分,等到分组按序后一起提交组按序后一起提交,接收窗口的大小一般等于发接收窗口的大小一般等于发送方发送窗口的大小送方发送窗口的大小31SR的演示的演示发送窗口为发送窗口为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 6 0 1 2pkt40 1 2 3 4 5 6 0 1 2pkt5pkt10 1 2 3 4 5 6 0 1 2pkt2分组分
24、组丢失丢失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 4 5 6 0 1 2乱序在窗乱序在窗口内,缓口内,缓存并确认存并确认32窗口大小和序号的关系窗口大小和序号的关系GBN窗口的最大
25、值等于序号的个数窗口的最大值等于序号的个数-1SR窗口的最大值等于序号的一半窗口的最大值等于序号的一半若若SR窗口为窗口为3,序号为,序号为4,上述情况接收方无法判断收到的序,上述情况接收方无法判断收到的序号为号为0的分组是重传的的分组是重传的0号分组还是新发送的号分组还是新发送的0号分组。号分组。33本节小结本节小结可靠传输协议的总结可靠传输协议的总结查错机制查错机制序号机制序号机制确认机制确认机制超时重传机制超时重传机制缓存机制缓存机制滑动窗口机制滑动窗口机制定时器机制定时器机制34学习内容学习内容传输层的概念和提供的服务传输层的概念和提供的服务UDP协议的工作原理和协议细节协议的工作原理
26、和协议细节可靠传输协议的原理和设计可靠传输协议的原理和设计TCP协议的工作原理和协议细节协议的工作原理和协议细节35TCP协议协议TCP协议的设计理念协议的设计理念TCP协议首部协议首部TCP协议的连接机制协议的连接机制TCP协议的流量控制协议的流量控制TCP协议的拥塞控制协议的拥塞控制36TCP的设计理念的设计理念TCP属于传输层,实现面向连接的可靠的属于传输层,实现面向连接的可靠的传输传输可靠的传输不能保证传输一定到达对方,但是可靠的传输不能保证传输一定到达对方,但是能保证如果数据到达对方,一定按序正确能保证如果数据到达对方,一定按序正确TCP使用了可靠的设计理念使用了可靠的设计理念序号机
27、制、确认机制、缓存机制、重传机制、序号机制、确认机制、缓存机制、重传机制、滑动窗口机制滑动窗口机制TCP包含流量控制和拥塞控制机制包含流量控制和拥塞控制机制注意:不同操作系统的注意:不同操作系统的TCP协议具体实现细节有协议具体实现细节有所不同,但设计基本满足所不同,但设计基本满足RFC 793,RFC 258137TCP协议首部协议首部TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充38TCP的首部细节的首部细节1TCP首部20字节固
28、定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充源端口和目的端口字段源端口和目的端口字段各占各占 2 2 字节。字节。端端口是传输层与应用层的服务接口口是传输层与应用层的服务接口, ,类似一个地类似一个地址标识址标识。传输层的复用和分用功能都要通过端。传输层的复用和分用功能都要通过端口才能实现。口才能实现。 39TCP的首部细节的首部细节2TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗
29、口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充序号字段序号字段占占 4 4 字节。字节。TCP TCP 连接中传送的连接中传送的数据流中的每一个字节都编上一个号数据流中的每一个字节都编上一个号。序号字。序号字段的值指的是本报文段所发送的数据的段的值指的是本报文段所发送的数据的第一个第一个字节字节的编号的编号40TCP的首部细节的首部细节3TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充确认号字
30、段确认号字段占占 4 4 字节,字节,是期望收到对方是期望收到对方的下一个报文段的数据的第一个字节的序号的下一个报文段的数据的第一个字节的序号。注意注意:当有数据要发送给对方时,顺便确认,:当有数据要发送给对方时,顺便确认,当没有数据发给对方时,单独发一个确认报文当没有数据发给对方时,单独发一个确认报文。 41TCP的首部细节的首部细节4TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充首部长度首部长度占占4bit4bit,它作为一个二进
31、制数字,表,它作为一个二进制数字,表示示TCPTCP报文段的首部包含的总的字节数报文段的首部包含的总的字节数( (即即2020个固定个固定首部长度加不固定的可选首部长度首部长度加不固定的可选首部长度) ),计算单位按照计算单位按照4 4个字节为单位,如个字节为单位,如11001100表示首部为表示首部为12*4=4812*4=48字节字节。 该字段限制了该字段限制了TCPTCP的首部最大值为的首部最大值为6060字节字节保留字段保留字段占占6bit6bit,保留为今后协议的,保留为今后协议的扩展使用,目前置为扩展使用,目前置为0 0。 42TCP的首部细节的首部细节4TCP首部20字节固定首部
32、目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充特殊标记特殊标记(Flag),(Flag),每个标记占一个每个标记占一个bit.bit.有特殊约定。有特殊约定。URGURG 紧急比特标记,当紧急比特标记,当URGURG置为置为1 1时,时,表明紧急指针字段有效表明紧急指针字段有效。通。通知本报文段中有紧急数据,应尽快传送知本报文段中有紧急数据,应尽快传送, ,紧急数据的优先级要高。紧急数据的优先级要高。ACKACK 只有当只有当 ACKACK置为置为1 1时,确
33、认号字段才有效时,确认号字段才有效。正常情况下只有第。正常情况下只有第一次握手时一次握手时ACK=0 ACK=0 43TCP的首部细节的首部细节5TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充PSH(PuSH)PSH(PuSH)推送比特,接收方收到推送比特置推送比特,接收方收到推送比特置1 1的报文段,就的报文段,就尽快地将该报文段的数据交付给接收应用进程,而不再等到整个尽快地将该报文段的数据交付给接收应用进程,而不再等到整个缓存都填
34、满了后再向上交付缓存都填满了后再向上交付。 RST (ReSeT) RST (ReSeT) 复位比特,复位比特,当当 RSTRST 1 1 时,表明时,表明 TCP TCP 连接中出连接中出现严重差错现严重差错(如由于主机崩溃或其他原因),必须强行释放连接(如由于主机崩溃或其他原因),必须强行释放连接, ,属于单方面强行断开连接属于单方面强行断开连接。44TCP的首部细节的首部细节6TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充SYN
35、SYN同步比特同步比特,SYN ,SYN 置为置为 1 1,表示这是一个连接请求报文。,表示这是一个连接请求报文。正常情况下只有第一次握手和第二次握手时正常情况下只有第一次握手和第二次握手时SYNSYN等于等于, ,其余都等其余都等于于0 0 。FIN(Final)FIN(Final)终止比特终止比特, ,用来正常释放一个连接。用来正常释放一个连接。当当FINFIN 1 1时,时,表明此报文段的发送端的数据已发送完毕表明此报文段的发送端的数据已发送完毕,并请求对方释放连接,并请求对方释放连接,当对方确认后,会释放发送缓存。当对方确认后,会释放发送缓存。 45TCP的首部细节的首部细节7TCP首
36、部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充窗口字段窗口字段占占2 2字节。窗口字段是字节。窗口字段是流量控制流量控制的关键,用来控制对的关键,用来控制对方发送窗口的大小,单位为方发送窗口的大小,单位为字节字节。接收方根据自身的缓存大小确接收方根据自身的缓存大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。上限。检验和检验和 占占 2 2 字节。检验和字字节。检验和字
37、段检验的范围包括首部和数据这两部段检验的范围包括首部和数据这两部分。在计算检验和时,要在分。在计算检验和时,要在TCP TCP 报文报文段的前面加上段的前面加上 12 12 字节的伪首部。字节的伪首部。46TCP的首部细节的首部细节8TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充紧急指针字段紧急指针字段 占占 16 bit16 bit。紧急指针指出在本报文段中的紧紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。急数据的最后一个
38、字节的序号。 选项字段选项字段 长度可变。长度可变。TCP TCP 只规定了一种选项,即只规定了一种选项,即最大报文最大报文段长度段长度 MSS (Maximum Segment MSS (Maximum Segment Size)Size)。MSS MSS 告诉对方告诉对方TCPTCP:“我我的缓存所能接收的报文段的数据的缓存所能接收的报文段的数据字段的最大长度是字段的最大长度是 MSS MSS 个字节。个字节。47TCP的首部细节的首部细节9TCP首部20字节固定首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FINSYNR
39、STPSHACKURG比特 0 8 16 24 31填 充填充字段填充字段 这是为了使整个这是为了使整个首部长度是首部长度是4 4字节的整数倍。从字节的整数倍。从而保证首部长度字段的有效性和而保证首部长度字段的有效性和计算检验和的有效性计算检验和的有效性48TCP 的数据编号与确认的数据编号与确认序号基于字节序号基于字节随机生成初始序号,之后每个字节都对应一个随机生成初始序号,之后每个字节都对应一个编号,序号是发送数据的第一个字节的编号编号,序号是发送数据的第一个字节的编号确认号是期望对方发送的下一个数据的第确认号是期望对方发送的下一个数据的第一个字节的编号,即对方下一个报文段的一个字节的编号
40、,即对方下一个报文段的序号序号TCP的确认属于的确认属于累积确认累积确认,乱序到达的数据乱序到达的数据会会缓存缓存思考:思考:TCP属于属于GBN还是还是SR49TCP的三次握手建立连接的三次握手建立连接AB第一次握手:第一次握手:A A随机初随机初始化自己的序号始化自己的序号SN(A),SN(A),确认号为确认号为0,0,初始化初始化A A的的接收窗口大小,接收窗口大小, SYN=1 SYN=1表示希望和表示希望和B B做朋友做朋友第二次握手:第二次握手:B B随机随机初始化自己的序号初始化自己的序号SN(B),SN(B),确认号为确认号为A A第第一次握手的序号加一次握手的序号加1 1,
41、,表示向表示向A A作确认作确认, ,初始初始化化B B的接收窗口大小,的接收窗口大小,SYN=1SYN=1,表示希望和,表示希望和A A做朋友做朋友第三次握手:第三次握手:A A对对B B作确作确认,认,SYN=0,ACK=1,SYN=0,ACK=1,确认确认号为号为B B第二次握手的序第二次握手的序号加号加1 150TCP的三次握手示例的三次握手示例发送 SYN ,请求建立连接(seq=100 ctl=SYN)Host AHost B1发送 SYN 、ACK(seq=300 ack101 ctl=SYN、ACK)23发送ACK(seq=101 ack301ctl=ACK)51TCP释放连接
42、的过程释放连接的过程异常释放异常释放ABRST=1ACK正常释放正常释放ABFIN=1ACKFIN=1ACK52TCP四次断开示例四次断开示例发送 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 5ByteAck1013发送 FIN,请求断开连接(seq=301,ack=102 ctl=FIN,ACK)53TCP状态图状态图54TCP的重传机制的重传机制原则:当数据超时则需要重
43、传原则:当数据超时则需要重传问题:超时时间如何规定、如何提高效率问题:超时时间如何规定、如何提高效率?可靠传输协议需要对分组设置超时时间,超时可靠传输协议需要对分组设置超时时间,超时时间应当动态地随着网络的有效带宽和拥塞程时间应当动态地随着网络的有效带宽和拥塞程度不断的变化度不断的变化网络的拥塞程度可以通过往返时延网络的拥塞程度可以通过往返时延RTT来衡量来衡量TCP的超时时间计算公式的超时时间计算公式EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT (x=1/8)Timeout = EstimatedRTT + 4*DeviationDeviat
44、ion = (1-x)*Deviation +x*|SampleRTT-EstimatedRTT|Timeout=*EstimatedRTT (=2)某些某些TCP实现的方法实现的方法55重传的进一步讨论重传的进一步讨论Karn算法算法(背景:往返时间有时很难估计)背景:往返时间有时很难估计)对重传的数据不计算对重传的数据不计算RTT, timeout=2*timeout;快速重传提高效率快速重传提高效率当连续收到三个重复的冗余确认则重传对方期当连续收到三个重复的冗余确认则重传对方期望收到的分组望收到的分组56TCP的流量控制的流量控制接收方接收方: : 明确地通过明确地通过TCPTCP首部的
45、窗口字段发送接收窗口大小,从首部的窗口字段发送接收窗口大小,从而限制发送方发送窗口的最大值而限制发送方发送窗口的最大值发送方发送方: : 保证发送窗口大小不超过对方发送地接收窗口的大小保证发送窗口大小不超过对方发送地接收窗口的大小思考:思考:TCPTCP的接收缓存是主机的所有的接收缓存是主机的所有TCPTCP连接共享还是每个连接共享还是每个TCPTCP连连接独占?(需实验验证接独占?(需实验验证) )57TCP流量控制示例流量控制示例Host AHost B123Seq=300,ack=101,win=3Seq=100,1ByteAck=104,win=1Seq=101, 1B,win=3Se
46、q=102,1B,win=3Seq=103,1B,win=3Seq=10403接收方的缓冲区接收方的缓冲区0132发送窗口大小为3通报窗口大小为1缓冲区满应用程序读取了1个数据段实际发送窗口大小变为1通报窗口大小为3TCP流量控制的特殊情况流量控制的特殊情况1特殊场景:特殊场景:TCP连接的两端连接的两端A和和B,B接收缓接收缓存满,存满,B此时无任何数据需要发送给此时无任何数据需要发送给A问题:当问题:当A发送数据给发送数据给B时,时,B发送确认,发送确认,其中接收窗口大小为其中接收窗口大小为0,B的缓存逐渐出现空的缓存逐渐出现空间,但间,但A无法获得这一信息无法获得这一信息,使得使得A无法
47、发送无法发送任何数据给任何数据给B解决办法:当收到接收窗口为解决办法:当收到接收窗口为0的报文,的报文,A继续发送一个字节的数据(一般响应一个继续发送一个字节的数据(一般响应一个持续定时器后在再发送)持续定时器后在再发送),获得获得B确认报文确认报文中最新的接收窗口大小中最新的接收窗口大小59TCP流量控制的特殊情况流量控制的特殊情况2愚笨窗口综合症愚笨窗口综合症当接收端交互式应用每次读取一个字节数据时当接收端交互式应用每次读取一个字节数据时,或者发送端每次只发送一个字节数据,将会使或者发送端每次只发送一个字节数据,将会使得得TCP的工作效率很低。的工作效率很低。解决办法:解决办法:接收端如果
48、接收缓存很小时,会等待一段时间接收端如果接收缓存很小时,会等待一段时间(500ms)等缓存大到一定程度再发送接收窗口等缓存大到一定程度再发送接收窗口给发送端(给发送端(Clark策略策略),提高效率,提高效率发送端如果发送的数据很小,第一次会照常发发送端如果发送的数据很小,第一次会照常发送,后面的会等待一定时间(送,后面的会等待一定时间(500ms)等发送数等发送数据较大时再放入据较大时再放入Tcp段中发送。段中发送。(Nagle算法算法)60TCP的拥塞控制机制的拥塞控制机制讨论:讨论:什么是拥塞?什么是拥塞?为什么需要拥塞控制?为什么需要拥塞控制?谁应该负责拥塞控制?路由器还是谁应该负责拥
49、塞控制?路由器还是TCP的发送的发送端和接收端?端和接收端?如何发现拥塞,发现拥塞后该如何处理?如何发现拥塞,发现拥塞后该如何处理?如何保证效率?如何保证效率?61TCP的拥塞控制思想的拥塞控制思想使用拥塞窗口使用拥塞窗口cwnd控制发送窗口大小控制发送窗口大小发送窗口的上限值发送窗口的上限值 Min rwnd, cwnd分组超时意味着拥塞,分组收到确认则意味着分组超时意味着拥塞,分组收到确认则意味着网络未拥塞网络未拥塞拥塞则少发拥塞则少发(拥塞窗口减小拥塞窗口减小),没拥塞则多发,没拥塞则多发(拥拥塞窗口增加塞窗口增加)在网络未知的情况下拥塞窗口从最小开始,在网络未知的情况下拥塞窗口从最小开
50、始,收到确认拥塞窗口大小增加收到确认拥塞窗口大小增加为提高效率,开始窗口增加速度快,到了一定为提高效率,开始窗口增加速度快,到了一定阶段窗口增加速度变慢阶段窗口增加速度变慢62TCP的拥塞窗口举例的拥塞窗口举例246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh = 16慢启动慢启动拥塞避免拥塞避免更新后的 ssthresh = 12进入拥塞避免63快恢复算法快恢复算法 当发送端收到连续三个重复的确认时,就当发送端收到连续三个重复的确认时,就执行执行“乘法减小乘法减小”算法,把慢开始门限算法,把慢开始
51、门限 ssthresh 减半减半,直接进入拥塞避免阶段直接进入拥塞避免阶段242468101214161820220048121620传输轮次拥塞窗口 cwnd收到 3 个重复的确认执行快重传算法慢开始“乘法减小”拥塞避免“加法增大”TCP Reno版本TCP Tahoe 版本(已废弃不用)ssthresh 的初始值拥塞避免“加法增大”新的 ssthresh 值慢开始快恢复64TCP 拥塞控制总结拥塞控制总结两个阶段两个阶段慢启动阶段乘法增慢启动阶段乘法增拥塞避免阶段加法增拥塞避免阶段加法增一个阈值一个阈值定义了慢启动阶段和拥塞避免阶段的分界点定义了慢启动阶段和拥塞避免阶段的分界点超时发生时超
52、时发生时阈值变成超时的窗口大小的一半阈值变成超时的窗口大小的一半回到慢启动回到慢启动思考:假设思考:假设TCP的拥塞窗口被设置为的拥塞窗口被设置为18KB,并且出现了一个超时,并且出现了一个超时,如果接下来的四次传输都正确的话,则拥塞窗口将是多大?假设最如果接下来的四次传输都正确的话,则拥塞窗口将是多大?假设最大数据段长度为大数据段长度为1KB。65TCP 定时器定时器retransmission timer(重传定时器)(重传定时器)每个发送未被确认的分组都需要启动该定时器每个发送未被确认的分组都需要启动该定时器 persistence timer(持续定时器)(持续定时器) keepali
53、ve timer(保活定时器)(保活定时器)该定时器保证该定时器保证TCP的连接是否存在,当一个连的连接是否存在,当一个连接空闲很长时间以后,保活定时器到期,一方接空闲很长时间以后,保活定时器到期,一方查看另一方是否存在。查看另一方是否存在。 时间等待计时器连接终止期间使用的时间等待计时器连接终止期间使用的66重传计时器为了控制丢失的数据段重传计时器为了控制丢失的数据段Host AHost B开启重传计时器,等待确认Ack撤消重传计时器,再发送其他数据 A在重传计时器超时之前接收到ack A在重传计时器超时之前没有接收到ack重传数据,并将重传计时器复位TCP 定时器示例定时器示例167TCP
54、 定时器示例定时器示例2持续计时器为了防止零窗口死锁持续计时器为了防止零窗口死锁Host AHost BAck win=0 A在坚持计时器超时之前接收到通知窗口大小的ack A在坚持计时器超时之前没有接收到通知窗口大小的ack收到win=0的确认,等待对方发送确认来通知窗口的大小,并启动坚持计时器Ack win=3发送探测数据段,提醒接收端确认已丢失,如果没有坚持计时器和探测数据段,ack丢失时,双方将会进入等待死锁的状态Ack win=3丢失68TCP 定时器示例定时器示例3保活计时器防止两个保活计时器防止两个TCP之间的连接长之间的连接长时间的空闲时间的空闲Host AServer在保活计
55、时器超时前,没有收到客户端发来的数据发送探测数据段,如果发送了10个探测数据段,还没有响应,则断开连接建立了TCP连接,开启保活计时器server69TCP 定时器示例定时器示例4时间等待计时器连接终止期间使用的时间等待计时器连接终止期间使用的在发送了最后一个在发送了最后一个ACK后,不立即关闭连接,后,不立即关闭连接,而是等待一段时间,保证能接收到重复的而是等待一段时间,保证能接收到重复的FIN数据段。数据段。Host AHost BFINACKFINACK丢失A发送了最后一个ACK后,不立即关闭连接,等时间等待计时器超时后再关闭,如果A立即关闭,而ACK又丢失了。B会再发送FIN,但是A已
56、经断开了连接,不会发送ACK70TCP安全问题(安全问题(LAND攻击)攻击)71TCP安全问题安全问题(SYN Flood 攻击攻击)攻击方不断持续的发送连接请求的攻击攻击方不断持续的发送连接请求的攻击当主机当主机A接收到来自主机接收到来自主机X的的SYN请求时,请求时,它就必须在侦听队列中对此连接请求保持它就必须在侦听队列中对此连接请求保持75秒的跟踪。秒的跟踪。当多个攻击方同时快速发送当多个攻击方同时快速发送SYN连接请求连接请求给被攻击方时,被攻击方会耗尽给被攻击方时,被攻击方会耗尽TCP相关相关资源而无法提供正常的服务资源而无法提供正常的服务SYN Flood攻击属于攻击属于DoS(
57、Denial of Services)攻击的一种攻击的一种72TCP安全问题安全问题(特殊攻击特殊攻击)利用利用TCP实现上的漏洞进行攻击实现上的漏洞进行攻击例如:将例如:将TCP报文的报文的SYN和和FIN均置为均置为1发发送给对方,早期送给对方,早期TCP的实现会导致系统崩的实现会导致系统崩溃。溃。讨论:讨论:TCP的设计或实现上是否存在漏洞,的设计或实现上是否存在漏洞,如何改进?如何改进?73本章小结本章小结UDP协议的首部协议的首部校验和的计算方法校验和的计算方法可靠数据传输协议的特性可靠数据传输协议的特性SW协议,协议,ARQ协议协议GBN协议,协议,SR协议协议TCP协议协议首部信息首部信息连接管理连接管理重传机制重传机制流量控制流量控制拥塞控制拥塞控制定时器定时器74本章习题本章习题简述可靠传输原理的机制简述可靠传输原理的机制简述简述GBN和和SR的区别的区别UDP协议的特点有哪些?协议的特点有哪些?TCP的特殊标记的特殊标记(flag)有哪些?有哪些?TCP的三次握手发生了什么?的三次握手发生了什么?TCP的确认机制如何实现?的确认机制如何实现?TCP的流量控制和拥塞控制的工作原理。的流量控制和拥塞控制的工作原理。75供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸砒腥悉漠堑脊髓灰质炎(讲课2019)脊髓灰质炎(讲课2019)