《TCPIP协议传输控制协议课件.pptx》由会员分享,可在线阅读,更多相关《TCPIP协议传输控制协议课件.pptx(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1主要内容 TCP的服务 TCP的特点 报文段 TCP连接 流量控制 拥塞控制 TCP定时器 选项28.1TCP的服务1.进程到进程的通信:像UDP那样,TCP也是使用端口号提供进程到进程的通信。以下是TCP使用的一些熟知的端口号。端口号 协议 说明7 Echo 把收到的数据报回送到发送端9 Discard 丢弃收到的任何数据报11 Users 活跃的用户13 Daytime 返回时间和日期17 Quote 返回日期的引用3表续端口号 协议 说明19 Chargen返回字符串20 FTP数据文件传输协议(数据连接)21 FTP控制文件传输协议(控制连接)23 Telnet终端网络25 SMTP
2、简单邮件传送协议53 DNS域名服务器67 BOOTP引导程序协议79 Finger Finger80 HTTP超文本传送协议111 RPC远程过程调用48.1TCP的服务2.流交付服务:和UDP不同,TCP是一种面向流的协议。TCP创建了一种环境,它使得两个进程好像被一个假想的“管道”所连接,而这个管道在因特网上传送两个进程的数据TCP TCP字节流发送进程接受进程58.1TCP的服务2.流交付服务:发送缓存和接收缓存因为发送进程和接收进程并不会以同样的速度写入数据或读取数据,因此TCP需要缓存来存储数据。在每一个方向都有两个缓存,即发送缓存和接收缓存,后面我们将会看到,TCP使用这些缓存进
3、行流量控制和差错控制。68.1TCP的服务2.流交付服务:报文段在传输层,TCP把若干字节构成一个分组,叫做报文段。TCP给每一个报文段添加首部(为了控制的目的),然后把这个报文段交付给IP层进行传输。这些报文段在封装成IP数据报后就被发送出去。78.1TCP的服务3.全双工服务:TCP连接提供全双工服务,即数据可在同一时间双向流动,所有TCP连接都是点到点的。4.面向连接的服务要获得TCP服务,在一个应用进程向另一个应用进程开始发送数据之前,必须先在双方之间建立一条连接,数据传送结束后要释放连接。88.2TCP的特点1.编号系统a)字节号TCP把一个连接中发送的所有数据字节都编上号。在每一个
4、方向的编号都是互相独立的。当TCP从进程接收数据字节时,就把它们存储在发送缓存中,并进行编号。这个编号不一定从0开始,TCP从0(-1)之间产生一个随机数作为第一个字节的编号。98.2TCP的特点1.编号系统b)序号当字节都被编上号后,TCP就给每一个报文段指派一个序号。每一个报文段的序号就是在这个报文段中第一个字节数据的序号。108.2TCP的特点1.编号系统b)序号(续)例1:一个TCP连接要传送6000字节的文件。第一个自己的编号是10001。如果数据用5个报文段来传送,前4个报文段各携带1000字节的数据,最后一个报文段携带2000字节的数据,求各个报文段的序号分别是什么?118.2T
5、CP的特点1.编号系统c)确认号在TCP中,接收数据方使用确认号对它已经收到的字节表示确认。但是,这个确认号定义了这一方期望接收的下一个字节的编号。128.2TCP的特点2.流量控制数据的接收端控制发送端可以发送多少数据。这是为了避免大量的数据使接收端瘫痪。3.差错控制差错控制是面向字节的4.拥塞控制发送端所能发送的数据量不仅要受接收端的控制(流量控制),而且还要由网络的拥塞程度来决定138.3TCP的报文段 源端口地址16位 目的端口地址16位 序号32位 确认号32位首部长度4位保留6位 ACKPSHRSTSYNFINURG 窗口大小16位 紧急指针 检验和16位 选项与填充 首部格式14
6、8.3TCP的报文段p 控制:这个字段定义了6种不同的控制位或标志,在同一时间可设置一位或多位标志标志 说明URG紧急指针字段值有效ACK确认字段值有效PSH推送数据RST连接必须复位SYN在连接建立时对序号进行同步FIN终止了连接158.3TCP的报文段p 检验和:覆盖整个TCP报文段:TCP首部和数据,包括TCP首部、用户数据和TCP的伪首部,格式如下16 源端口地址16位 目的端口地址16位 序号32位 确认号32位首部长度4位保留6位 ACKPSHRSTSYNFINURG 窗口大小16位 紧急指针 检验和16位选项和数据(若字节总数位奇数则必须增加一个填充字节0)32位源IP地址32位
7、目的IP地址全08位协议(6)16位TCP总长度伪首部首部178.4TCP的连接TCP是面向连接的协议。面向连接的传输层协议在源点和终点之间建立一条虚路径,属于一个报文的所有报文段都沿着这条虚拟路径发送。整个的报文使用一条虚路径就使得确认过程以及对损伤或丢失报文的重传更加容易。188.4.1连接建立TCP协议中建立连接采用三次握手(three-wayhandshake)的方式实现。具体工作方式见图19seq=x ack:-seq=y ack=x+1rwnd5000seq=x+1 ack=y+1rwnd10000报文段1:SYN 报文段2:SYN+ACK 报文段3:ACK 主机A 主机B(客户端
8、)(服务器端)TCP协议建立连接三次握手的过程 时间主动打开被动打开20SYN洪泛攻击在TCP中的连接建立过程很容易碰到一个严重的安全问题,这就是SYN洪泛攻击。恶意的攻击者向一个服务器发送大量的SYN报文段,而每一个这样的报文段来自不同的客户,并在IP数据报中使用虚假的源IP地址。服务器以为这些客户要发出主动打开,于是就分配必要的资源。这样大量的资源被占用却没有被使用,如果在短暂的时间内,SYN报文段的数量很大,服务器就会最终因资源耗尽而瘫痪。21数据传送Seq:8001ack:15001A PDA T A字节:80019000客户 服务器Seq:9001ack:15001A PDA T A
9、字节:900110000Seq:15001ack:10001ADA T A字节:1500117000Seq:10000ack:17001A rwnd:10000时间A:ACK标志P:PSH标志22连接终止参加交换数据的双方中的任何一方(客户或服务器)都可以关闭连接。当一个方向的连接被终止时,另外一方还可以继续向对方发送数据,现今大多数的实现允许在连接终止时有两个选项:具有半关闭的三次握手和四次握手23半关闭的三次握手客户 服务器Seq:xack:yF时间A:ACK标志P:PSH标志Seq:yack:x+1AFSeq:xack:y+1A 主动关闭 被动 关闭24seq=2500 ack:-seq
10、=7000 ack=2501seq=7001 ack=2501报文段1:FIN报文段2:ACK 报文段3:FIN 主机A 主机B(客户端)(服务器端)时间四次握手seq=2501 ack=7002报文段4:ACK 25连接复位TCP可以请求把一个连接复位。连接复位表示当前的连接已经被撤销。以下是发生复位的3种情况:1.拒绝连接请求2.异常终止连接3.终止空闲的连接268.5TCP的连接管理状态转换 在任何时刻,机器只处于某一种状态,并一直保持这个状态,直到某个事件发生。发生的事件使机器进入一个新的状态,即事件可使机器完成某种操作。状态转换表示一个状态到另一个状态的迁移,包括迁移的条件和迁移的动
11、作。状态转换图见书上140页 2786 流量控制 TCP采用可变大小的滑动窗口协议进行流量控制。TCP的滑动窗口是面向字节的。窗口包括已发送的字节和未被确认的字节,以及可以发送的字节。接收方窗口是说明接收方还能再接收的字节数。在TCP报文段首部的窗口大小字段的值就是当前给对方设置的窗口值。28滑动窗口协议 使用这种方法时,两个主机为向外通信(发送数据)各使用了一个窗口。这个窗口覆盖了缓存的一部分,在缓存中的字节是从应用进程传送来的,在这窗口中的字节就是可以发送而不必考虑确认的。这个想象中的窗口有两个沿:一个在左边,另一个在右边,这个窗口叫做滑动窗口,因为左沿和右沿都可以滑动。如图所示29n-1
12、 n n+1.m-1 m m+1.缩回合拢 滑动窗口展开窗口大小minimum(rwnd,cwnd)30滑动窗口协议(续)在通信的一端,窗口大小取决于下面两个数中间的较小值:接收窗口(rwnd)和拥塞窗口(cwnd)接收窗口是由对方发送的包含确认的报文段所给出的值,这是另一端在缓存溢出和数据被丢弃前所能接受的字节数。拥塞窗口是由网络为避免拥塞而确定的值。31滑动窗口协议(续)例2:如果接收端的缓存大小是5000字节,其中1000字节用于存放收到而未处理的数据。试问发送端的接收窗口值是多少?例3:如图所示给出了一个滑动窗口的非现实的例子。发送端已经发送了202字节,我们假定cwnd是20字节(现
13、实中,这个数值是几千字节)。接收端已经发送了确认号为200的报文段,其rwnd是9字节。发送窗口值是rwnd和cwnd中的较小的一个,即9字节,字节200到202已经发送出去了,但没有被确认,字节203到字节208可以发送而不必考虑确认,字节209和以上的不能发送32199 200 201.205 206 209.窗口大小minimum(20,9)9202 203 204 207 208下一个要发送的字节已发送且已确认在窗口展开之前不能被发送33滑动窗口协议(续)例4:在图中,服务器收到一个分组,其确认号为202而rwnd是9,主机已经发送出字节203、204、205,cwnd值仍是20,试画
14、出新的窗口 答案34201 202 203.207 208 21 1.窗口大小minimum(20,9)9204 205 206 209 210下一个要发送的字节已发送且已确认在窗口展开之前不能被发送35滑动窗口协议(续)例5:在上图中,发送端收到一个分组,其确认号是206,而rwnd是9。主机已经没有新的字节要发送,cwnd仍是20,试画出新窗口。答案:窗口向右展开了4个字节,从左边合拢了4个字节,窗口大小没变。36205 206 207.21 1 212 215.窗口大小minimum(20,9)9208 209 210 213 214下一个要发送的字节已发送且已确认在窗口展开之前不能被发
15、送37滑动窗口协议(续)窗口关闭:缩回窗口试非常不希望出现的,但是有一个例外:接收端可以用发送rwnd为0的报文段来暂时关闭窗口。这种情况发生是由于接收端因某种原因在一段时间内不愿意从发送端接收任何数据。在这种情况下,发送端并非把窗口大小真正的缩回,而是暂停发送数据,直到新的通告收到为止。即使在接收端的命令下关闭了窗口,发送端仍然可以发送具有一个字节数据的报文段,这就叫做探测(probing),用来防止死锁。38关于TCP滑动窗口的一些要点1.窗口大小是rwnd和cwnd中的较小的一个2.源点并非必须要发送整个窗口大小的数据3.接收端可以使窗口展开或合拢,但不应使它缩回4.终点可以在任何时刻发
16、送确认,只要这不会引起窗口的缩回5.接收端可以暂时关闭窗口,但发送端永远可以在窗口关闭后发送一个字节的报文段。398.7 傻瓜窗口综合症 接收方通告一个小的窗口,引起发送的报文段很小,而降低传输效率。该现象可发生在两端中的任何一端.408.7.1 Nagle 算法 Nagle 算法试图解决由于发送应用程序每次向TCP发送小的报文段,如报文段只包括1个字节的数据而引起的问题。强迫发送端TCP等待,让它收集数据,以便发送大块数据。418.7.1 Nagle 算法(续)1.发送端TCP把它从发送应用程序收到的第一块数据发送出去,哪怕只有1个字节2.在发送第一个报文段以后,发送端TCP就在输出缓存中积
17、累数据并等待,直到或者接收端TCP发送出确认,或者已积累到足够得数据可以装成最大长度得报文段,这时,发送端TCP就可以发送这个报文段3.对剩下的传输,重复步骤2。如果收到了对报文段2得确认,或者已积累到足够的数据可以装成最大长度的报文段,报文段3必须发送出去。428.7.2 Clark解决方案 Clark解决方案是只要数据到达就发送确认,但宣布窗口值为零,直到在缓存有足够的空间能容纳具有最大长度的报文或者缓存已有一半的空间为空了,再发送窗口更新报文段。438.7.3 延迟确认 对于应用程序消耗数据比到达得慢所产生的这种糊涂窗口综合症,还有第二种解决方法,即延迟发送确认。在TCP中,发送方并不要
18、求一接到应用进程传递过来的数据就必须马上将数据传送出去;接收方也不要求尽可能快地发送确认报文段。448.8 差错控制 TCP差错控制包括检测受到损伤的报文段、丢失的报文段、失序的报文段和重复的报文段,以及检测出差错后纠正差错,它除了使用检验和,还使用确认技术和超时机制。TCP发送方使用超时机制来恢复报文段丢失问题。TCP使用累计确认系统。458.8.1 检验和 每一个报文段都包含检验和字段,用来检查收到损伤的报文段。若报文段受到损伤,就有终点TCP将其丢弃,并被认为是丢失了。468.8.2 确认 TCP采用确认来证实收到了报文段。控制报文段不携带数据,但消耗一个序号。控制报文段也需要被确认 A
19、CK报文段永远不需要被确认。47产生确认1.当某一端向另一端发送数据报文段时,必须包含确认,此确认给出它所期望接收的下一个序号。2.当接收端没有数据要发送,并且收到了按序到达的报文段,同时前一个报文段也已经确认了,那么接收端就推迟发送确认报文段,直到另一个报文段到达,或再经过一段时间(通常是500ms)48产生确认(续)3.当具有所期望序号的报文段到达时,同时前一个按序到达的报文段还没有被确认,那么接收端就要立即发送ACK报文段。4.当序号比期望的序号还大的失序报文段到达时,接收端就立即发送ACK报文段,并宣布下一个期望的报文段的序号。5.当一个丢失的报文段到达时,接收端就发送ACK报文段,并
20、宣布下一个所期望的序号6.如果到达一个重复的报文段,接收端就立即发送确认。这就解决了当ACK报文段丢失所带来的问题498.8.3 确认类型 累积确认(ACK):TCP最初是设计累积的确认收到的报文段,接收端忽略所有收到的失序报文段,通告它期望接受的下一个字节的序号。选择确认(SACK):并不是代替ACK而是向发送端报告附加的信息。SACK报告失序的数据块和重复的报文段块。但是TCP首部中并没有提供增加这类信息的地方,因此SACK的实现是在TCP首部后面作为选项。508.8.4 重传 在较新的实现中,重传发生在:当重传定时器时间到,或已经到达了三个重复的ACK报文段。1.RTO之后的重传2.三个
21、重复的ACK报文段之后的重传518.8.5 失序的报文段 数据可能不按序到达,接收TCP把它们暂时存储下来,但TCP保证没有失序的报文段被交付到进程。528.9 拥塞控制 拥塞控制涉及到判断网络性能的两个因素:延时和吞吐量 延时与负载无拥塞区域 拥塞区域容量负载延时53 吞吐量和负载无拥塞区域 拥塞区域容量负载吞吐量8.9 拥塞控制548.9.2 拥塞控制机制 开环拥塞控制 重传策略:好的重传策略可以预防拥塞,重传策略和重传定时器必须设计得能优化效率,同时还能预防拥塞 确认策略:接收端使用得确认策略也能影响拥塞。如果接收端不是对每一个收到得分组进行确认,那么也能够使发送端放慢发送速率,因而有助
22、于预防拥塞。丢弃策略:路由器使用好的丢弃策略可以预防拥塞,而与此同时并不影响传输的完整性。558.9.2 拥塞控制机制(续)闭环拥塞控制机制试图在拥塞发生后减轻拥塞 反压:当一个路由器拥塞时,它可以通知前面上游得路由器降低发送分组的速率。这个动作可以一直循环下去,直到源点前得一个路由器。阻流点:是路由器向源点发出一个分组,通知源点现在发生了拥塞。这类控制和ICMP得源点抑制分组是相似的 发出隐式信号:源点能够检测出拥塞告警得隐式信令,从而放慢其发送速率 发出显式信号:感受拥塞的路由器可以发出显式信号告诉发送端或接收端现在发生了拥塞。568.9.3 TCP中的拥塞控制 接收端通知的窗口和拥塞窗口
23、 接收端通知的窗口是接收方根据其可用缓存大小准许的窗口值。拥塞窗口是发送端根据所感知到的网络拥塞程度得出的窗口值。578.9.3 TCP中的拥塞控制(续)拥塞策略 慢启动算法(指数增大):是指每一次出现超时的时候,拥塞窗口都降到1,使报文段慢慢的注入到网络中。而拥塞窗口的增长速率并不很慢拥塞避免算法588.9.3 TCP中的拥塞控制(续)拥塞策略 慢启动算法 拥塞避免算法(加法增大):如果我们从慢启动算法开始,那么拥塞窗口的大小就按指数规律增长,要在拥塞发生之前避免拥塞,就必须使这种指数增长变慢。TCP定义了另一种算法,叫做拥塞避免。598.9.3 TCP中的拥塞控制(续)拥塞检测若拥塞发生了
24、,拥塞窗口的大小就必须减小。发送端能够猜测到拥塞已发生的唯一方法是它必须重传一个报文段。但是重传发生在以下两种情况中的一种:当RTO定时器超时,或收到三个ACK。在这两种情况下,阈值就下降到一半。608.9.3 TCP中的拥塞控制(续)1.如果发生超时,那么出现拥塞的可能性很大;某个报文段可能在网络中的某处丢失了,而后续的一些报文段也没有消息。在这种情况下,TCP有较强的反应:a.把阈值设置为当前窗口值的一半b.把cwnd设置为一个报文段c.在从慢启动开始618.9.3 TCP中的拥塞控制(续)2.如果收到了3个ACK,那么出现拥塞的可能性就较小;一个报文段可能已经丢失了,但以后的几个报文段又
25、安全的到达了,因为收到了3个ACK,这就叫做快重传和快恢复,在这种情况下,TCP有较弱的反应:a.把阈值设置为当前窗口值的一半b.把cwnd设置为一个阈值c.开始了拥塞避免阶段62拥塞避免算法示例638.10 定时器管理定时器重传定时器 持续定时器 保活定时器 时间等待定时器重传定时器 持续定时器 保活定时器 时间等待定时器定时器 为了实现TCP协议,对每个连接TCP管理4个不同的定时器。648.10.1 重传定时器 处理重传超时(RTO),也就是对报文段的确认的等待时间。当TCP发送一个报文段时,它就创建这个特定报文段的重传定时器。这可能发生两种情况:1.若在定时器截止时间到之前收到了对这个
26、特定报文段的确认,则撤销这个定时器。2.若在收到了对这个特定报文段的确认之前定时器截止期到,则重传这个报文段,并将定时器复位。658.10.1 重传定时器(续)Karn 算法 假定有一个报文段在重传期间未被确认,因而又被重传。当发送端TCP收到对这个报文段的确认时,它无法知道这个确认是对原来报文段的确认还是对重传报文段的确认。新的RTT值要根据报文段发送出的时间来计算的。但是,如果原始的报文段丢失而确认是对重传的报文段的确认,则当前的RTT计算就必须从重传的报文段发送出的时间算起。Karn的解决方法很简单。在计算新的RTT时,不考虑重传报文段的RTT。不要更新RTT的值,直到你发送了一个报文段
27、,并且不需要重传。668.10.1 重传定时器(续)指数退避如果发生了重传,那么大多数的RTO使用指数退避的策略,每产生一次重传,RTO的数值就加倍。因此,如果报文段重传一次,RTO的数值就加倍。如果它重传两次,RTO的数值就变成了四倍,等等。678.10.2 持续定时器 TCP为每一个连接使用一个持续定时器。当发送端TCP收到窗口值为零的确认时,就启动持续定时器。当持续定时器截止期到时,发送端TCP就发送一个特殊的报文段,叫做探测报文段。这个报文段只有一个字节的数据。它有序号,但是它的序号永远不需要确认;甚至在计算剩余数据的序号时,这个序号也被忽略。探测报文段提醒接收端TCP:确认已丢失,必
28、须重传。688.10.3 保活定时器 在某些实现中要使用保活定时器来防止在两个TCP之间的连接实现长时间的空闲。在大多数实现中都是使服务器设置保活定时器。每当服务器收到客户的信息,就把定时器复位,超时通常设置为两个小时。若服务器过了两个小时还没有收到客户的信息,它就发送探测报文段。若发送了10个探测报文段(每一个相隔75s)还没有收到响应,就假定客户出了故障,并终止这个连接。698.10.4 TIMEWAIT定时器 TIMEWAIT定时器是在连接终止期间使用的。当TCP关闭一个连接时,这个连接并不是马上就真正关闭了,它在时间等待期间处于中间过渡状态,以使重复的FIN报文段(如果有的话)在到达目
29、的端后被丢弃。时间等待定时器的值通常设置为一个报文段预计的最大生存时间的两倍。708.11 选项 TCP首部可以有多达40字节的可选信息。选项单字节多字节选项列表结束无操作最大报文段长度窗口扩大因子时间戳允许SACKSACK71本章小结 TCP提供进程到进程、全双工和面向连接的服务 两个设备之间使用TCP软件传送的数据单元叫做报文段,有20-60字节的首部,首部后面是来自应用程序的数据 TCP连接通常包括3个阶段:连接建立、数据传送和连接终止 连接建立需要三次握手;终止连接需要四次握手72本章小结(续)TCP用滑动窗口机制实现流量控制,用来避免接收端因数据过多而负载 TCP的窗口值由接收端通知
30、的窗口值(rwnd)或拥塞窗口值(cwnd)来确定,看哪一个小些,窗口可以由接收端展开或合拢,但不能缩回 在每一个连接中传送的数据的字节都被TCP进行编号,编号从随机产生的数目开始73本章小结(续)TCP使用差错控制来提供可靠的服务。差错控制由检验和、确认和超时来处理。受损伤的和重复的报文段要重传,重复的报文段要丢弃。数据可能不按序到达,接收端TCP把它们暂时存储下来,单TCP保证交付给进程的报文段是按序的。在比较新的实现中,如果重传定时器的截止期到或到达了3个重复地ACK报文段,就要进行重传。74本章小结(续)TCP使用拥塞控制来避免和检测网络中的拥塞 在拥塞控制中,使用慢开始(指数增大),
31、拥塞避免(加法增大)和拥塞检测(乘法减少)等策略。TCP在运行中使用四个定时器:重传定时器、持续定时器、保活定时器和时间等待定时器 在TCP中,任何时刻,只能有一个RTT测量在进行着,计算新的RTO时,不考虑重传报文段的RTT。TCP使用若干个选项提供更多的服务。75练习1.在TCP连接中,客户端的初始序号是2171.客户端打开连接,只发送携带1000字节的数据,然后关闭连接,试问下面每一个序号从客户端发送的报文段中的序号是多少?a.SYN报文段b.数据报文段c.FIN报文段76练习(续)2.在一个连接中,cwnd的值是3000,而rwnd的值是5000.主机已经发送了2000字节,但都没有被确认。试问主机还可以发送多少字节?3.TCP使用初始序号14534打开一个连接,另一端使用21732打开一个连接,试给出在连接建立阶段的三个TCP报文段。4.TCP连接使用10000字节的窗口值,而上一次的确认号是22001。它收到了一个报文段,确认号是24001,通知的窗口大小是12000,试用图说明在这之前与之后的窗口情况。77练习(续)5.窗口内保留的字节是2001到5000.下一个要发送的字节是3001。试用图来说明以下两个事件以后的窗口情况。a.收到了一个ACK报文段,其确认号是2500,通知的窗口大小是4000.b.发送了一个携带1000字节的报文段。
限制150内