您好,欢迎访问三七文档
©2011绿盟科技攻击2TCP的可靠性ProtocolLayerSource:NetworkAssociatesTCP/IP协议栈应用层会话层表示层传输层TCPUDP网络层ICMPRARPARPIGMPIP数据链路层物理层网络接口层由底层网络定义的协议SMTPFTPTELNETDNSSNMPNFSTFTP提供应用程序间接口建立端到端连接提供编址和路由功能物理介质访问二进制数据流传输UDP协议UDP提供无连接的不可靠的数据报服务。UDP是无连接的传输层协议发送数据之前不需要建立连接UDP是一个不可靠的传输层协议没有确认机制不对报文排序没有超时机制没有流量控制机制传输速度快数据不可靠,易丢失和溢出使用UDP的应用程序,需要承担可靠性方面的全部工作伪首部源端口目的端口长度检验和数据首部UDP长度源IP地址目的IP地址017IP数据报字节44112122222字节发送在前数据首部UDP用户数据报用户数据报UDP有两个字段:数据字段和首部字段。首部字段有8个字节,由4个字段组成,每个字段都是两个字节。UDP报文格式TCP协议TCP是一种可靠的、面向连接的基于字节流的传输层协议。由IETF的RFC793说明。工作在OSI模型的第四层,UDP是同一层内另一个重要传输协议。TCP报文结构8TCP首部目的端口首部长度检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FIN32位SYNRSTPSHACKURG位08162431填充TCP数据部分TCP首部TCP报文段IP数据部分IP首部发送在前20字节的固定首部TCP面向连接面向连接意味着两个使用TCP的应用(通常是一个客户端和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。SYN,ACK,SYN+ACK:建立TCP连接FIN,ACK,FIN+ACK:主动关闭TCP连接RST:Reset,重置连接。错误的syn+ack包;直接关闭窗口(telnet,IE)PSH:push,由应用程序处理。建立完连接,传输应用数据时,使用push+ack。TCP连接建立与关闭TCP连接建立与关闭(Flag标志位、序列号、确认号)TCP连接建立TCP连接建立:三次握手发送SYN,请求建立连接(seq=100ctl=SYN)HostAHostB1发送SYN、ACK(seq=300ack=101ctl=SYN、ACK)23发送ACK(seq=101ack=301ctl=ACK)TCP连接关闭TCP连接关闭:四次挥手发送FIN,请求断开连接(seq=101,ack=301,ctl=FIN,ACK)HostAHostB1发送ACK(seq=301,ack=102ctl=ACK)24发送ACK(seq=102,ack=302ctl=ACK)3发送FIN,请求断开连接(seq=301,ack=102ctl=FIN,ACK)TCP状态机TCP有限状态机TCP有限状态机的图中每一个方框都是TCP可能具有的状态。每个方框中的大写英文字符串是TCP标准所使用的TCP连接状态名。状态之间的箭头表示可能发生的状态变迁。箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作。图中有三种不同的箭头。粗实线箭头表示对客户进程的正常变迁。粗虚线箭头表示对服务器进程的正常变迁。另一种细线箭头表示异常变迁。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同时关闭收到FIN发送ACK发送SYN定时经过两倍报文段寿命后关闭TCP状态机1TCP面向连接3TCP/IP安全2TCP可靠性TCP可靠性TCP可靠性:分段传输(MSS,建立连接时协商)数据校验和流量控制——滑动窗口超时重传拥塞控制——慢启动、拥塞避免、快速重传、快速恢复、SACKTCP流量控制TCP流量控制—滑动窗口滑动窗口协议:我们能够一次发送许多数据包,然后等待收到一个确认收到全部数据包的ACK信息。但连续发送的报文数不超过一定限制。客户端发送一次,服务器确认一次(ack),再发送,再确认——效率低既能充分利用网络能力,又能提供可靠性。滑动窗口协议滑动窗口协议TCP采用大小可变的滑动窗口进行流量控制当一个连接建立时,连接的每一端分配一个缓冲区来保存输入的数据,并将缓冲区的尺寸发送给另一端。当数据到达时,接收方发送确认,其中包含了自己剩余的缓冲区尺寸。剩余的缓冲区空间的大小被称为窗口(window)——接收窗口滑动窗口:通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值。发送窗口收到确认即可前移1002003004005006007008009001012013014015016017018011可发送不可发送指针发送端要发送900字节长的数据,划分为9个100字节长的报文段,而发送窗口确定为500字节。发送端只要收到了对方的确认,发送窗口就可前移。发送TCP要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。滑动窗口协议收到确认即可前移可发送不可发送指针1002003004005006007008009001012013014015016017018011发送窗口可发送不可发送指针发送窗口前移已发送但未被确认发送并被确认1002003004005006007008009001012013014015016017018011发送端已发送了400字节的数据,但只收到对前200字节数据的确认,同时窗口大小不变。现在发送端还可发送300字节。滑动窗口协议已发送并被确认已发送但未被确认可发送不可发送指针已发送并被确认可发送不可发送指针发送窗口前移发送窗口缩小10020030040050060070080090010120130140150160170180111002003004005006007008009001012013014015016017018011发送端收到了对方对前400字节数据的确认,但对方通知发送端必须把窗口减小到400字节。现在发送端最多还可发送400字节的数据。滑动窗口协议利用可变窗口大小进行流量控制滑动窗口协议HostAHostB12303接收方的缓冲区0132发送窗口大小为3通报窗口大小为1缓冲区满应用程序读取了1个数据段实际发送窗口大小变为1通报窗口大小为3TCP可靠性什么是TCP超时重传?TCP通过在发送时设置一个超时定时器来解决这个问题,如果定时器超时,TCP重传该数据由于IP层面的不可靠,TCP在传输数据时,数据本身和确认都有可能丢失问题:等待多长时间之后超时?太长:低效,延时长,带宽利用率低太短:造成不必要的重传(占用额外的带宽)TCP采用的是一种自适应的重传计时策略TCP可靠性TCP超时重传思路基本思路:定时器的时间应该比数据往返时间长一些术语:RTO:定时器时间(超时重传时间)RTT:数据往返时间data-1ack-1data-2T1T2T3RTT=T3-T1data-1data-1T1T2RTO=T2-T1未收到ack,重传data报文SRTT;RTTAVRTCP可靠性TCP超时重传算法TCP采用一种适应性重传算法:TimeoutRTT其中为一个大于1的常数加权因子,RTT为估算的往返时间。RTT计算如下:RTT(旧的RTT)(1)(新的往返时延样本)为修正因子,决定了以前估计的RTT的权重,一般取值为7/8。TCP可靠性TCP拥塞控制TCP要能够感知拥塞,并缓解拥塞。什么是拥塞?网络中数据包的总数超过了网络的处理能力,路由器开始丢弃数据包,产生拥塞;TCP使用超时重传,导致大量报文重传,加重拥塞。如何感知?重传定时器超时——拥塞严重乱序,收到重复确认包——拥塞程度尚可TCP可靠性TCP如何缓解拥塞?两个控制变量拥塞窗口(cwnd)慢启动门限(ssthresh)五个算法慢启动算法拥塞避免算法快速重传算法快速恢复算法选择性应答算法(SACK)TCP可靠性两个窗口接收窗口:与接收方的可用缓存大小有关,由接收方通告(rwnd);拥塞窗口:是发送方感受到的网络拥塞的估计(cwnd).TCP能够发送的字节数:许可窗口=min{拥塞窗口,接收窗口}TCP可靠性慢启动算法刚建立连接时,cwnd=1MSS;HostARTTHostBtime直到达到ssthresh门限或产生丢包能够正常收到ACK,cwnd呈指数增长;TCP可靠性拥塞避免算法当拥塞窗口cwnd的值超过了门限值ssthresh,就进入拥塞避免阶段。此时cwnd是线性增长。慢启动拥塞避免门限值TCP可靠性慢启动与拥塞避免工作过程(1)初始化cwnd为1个MSS,ssthresh为65535字节(2)当新的数据被对方确认时,就增加cwnd如果cwnd=ssthresh,就进行慢启动,cwnd指数增长如果cwnd=ssthresh,就进行拥塞避免,cwnd线性增长(3)拥塞发生时,ssthresh设置为cwnd的一半如果超时,cwnd设为1MSS,进入慢启动如果收到重复确认,cwnd设置为拥塞时cwnd值的一半,进入拥塞避免TCP可靠性TCP可靠性慢启动和拥塞避免总结不能完全避免拥塞使网络不容易出现拥塞TCP可靠性快速重传算法在某些情况下,不需要等待超时重传,可更早地重传丢失的报文段。发送方接收方发送M1确认M1t确认M2发送M2发送M3发送M4发送M5发送M6重复确认M2重复确认M2重复确认M2t发送M7收到三个连续的对M2的重复确认立即重传M3丢失TCP可靠性快速恢复算法发送端连续收到3个重复确认,将慢启动门限设置为发送窗口的一半,然后执行拥塞避免算法。242468101214161820220048121620传输轮次拥塞窗口cwnd收到3个重复的确认执行快重传算法慢启动“乘法减小”拥塞避免“加法增大”TCPReno版本TCPTahoe版本(已废弃不用)ssthresh的初始值拥塞避免“加法增大”新的ssthresh值慢启动快恢复TCP可靠性—SACK选择性应答算法(SACK)SACK改变TCP确认机制普通的TCP只确认已连续收到的数据SACK把乱序信息告诉对方,减少重传盲目性。例如:序号1,2,3,5,7的数据收到了,普通TCP:只确认1,2,3,;ack号=4SACK:全部确认,ack号=4,同时告知5,7已经收到。一般TCP的ACK过程data-1data-1data-2data-3data-4data-5ack-data-1data-3data-4data-5ack-data-1ack-data-1ack-data-1data-2data-3data-4data-5data-2丢失服务器中间设备客户端ack-data-1ack-data-1ack-data-1ack-data-1问题:仅有data-2丢失,虽然客户端已经收到其他的data,但是,服务器却要将data-2以及data-2之后的其他Data重传一次效率低下!TCP选项中的SACK功能就是针对这种情况提出的解决方法SACK的确认过程data-1data-1data-2data-3data-4data-5ack-data-
本文标题:TCP协议与攻击
链接地址:https://www.777doc.com/doc-2862221 .html