TCP的三次握手四次分手,DDOS
TCP和UDP的区别 数据库
TCP 是面向链接的、可靠的字节流协议,经过TCP机制保证链接和数据传输是可靠的。
UDP 相对于TCP是不具备可靠性的数据报协议,它虽然保证数据在发送时的顺序,但不保证数据的到达。
三次握手和四次分手 缓存
第一次握手:创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
半链接 服务器
在三次握手过程当中,服务器发送SYN-ACK以后,收到客户端的ACK以前的TCP链接称为半链接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
半链接队列 cookie
在三次握手协议中,服务器维护一个半链接队列,存放半链接。该队列为每一个客户端的SYN包(syn=j)开设一个条目,该条目代表服务器已收到SYN包,并向客户发出确认,正在等待客户的ACK确认包。这些条目所标识的链接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数 网络
SYN-ACK 重传次数 tcp
服务器发送完SYN-ACK包,若是未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,若是重传次数超过系统规定的最大重传次数,系统将该链接信息从半链接队列中删除。注意,每次重传等待的时间不必定相同。
为何须要TIME_WAIT? 网站
为了确保服务端的数据彻底传输给了客户端
为了确保两端能彻底关闭链接。
为了确保后续的链接不会收到“脏数据”
TIME_WAIT 会致使什么问题 操作系统
新建链接失败线程
TIME_WAIT到CLOSED,须要2MSL=60s的时间。这个时间很是长。每一个链接在业务结束以后,须要60s的时间才能彻底释放。若是业务上采用的是短链接的方式,会致使很是多的TIME_WAIT状态的链接,会占用一些资源,主要是本地端口资源。
TIME_WAIT条目超出限制设计
这个限制,是由一个内核参数控制的: sysctl net.ipv4.tcp_max_tw_buckets net.ipv4.tcp_max_tw_buckets = 5000 超出了这个限制会报一条INFO级别的内核日志,而后继续关闭掉链接。并无什么特别大的影响,只是增长了刚才提到的收到脏数据的风险而已。
SYN攻击
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,经过发送大量的半链接请求,耗费CPU和内存资源。
SYN攻击利用TCP协议三次握手的原理,大量发送伪造源IP的SYN包也就是伪造第一次握手数据包,服务器每接收到一个SYN包就会为这个链接信息分配核心内存并放入半链接队列,若是短期内接收到的SYN太多,半链接队列就会溢出,操做系统会把这个链接信息丢弃形成不能链接,当攻击的SYN包超过半链接队列的最大值时,正常的客户发送SYN数据包请求链接就会被服务器丢弃。目标系统运行缓慢,严重者引发网络堵塞甚至系统瘫痪。每种操做系统半链接队列大小不同因此抵御SYN攻击的能力也不同。
Syn攻击是一个典型的DOS攻击。检测SYN攻击很是的方便,当你在服务器上看到大量的半链接状态时,特别是源IP地址是随机的,基本上能够判定这是一次SYN攻击.在Linux下能够以下命令检测是否被Syn攻击
netstat -n -p TCP | grep SYN_RECV
TCP全链接攻击
这种攻击是为了绕过常规防火墙的检查而设计的,通常状况下,常规防火墙大多具有syn cookies或者syn proxy能力,可以有效应对伪造的IP攻击,但对于正常的TCP链接是放过的。但却不知不少网络服务程序能接受的TCP链接数是有限的,一旦有大量的TCP链接,即使是正常的,也会致使网站访问很是缓慢甚至没法访问,正所谓“多情总被无情伤”。TCP全链接攻击就是经过许多僵尸主机不断地与受害服务器创建大量的TCP链接,直到服务器的内存等资源被耗尽而被拖跨,从而形成拒绝服务,这种攻击的特色是可绕过通常防火墙的防御而达到攻击目的。
TCP混乱数据包攻击
TCP混乱数据包攻击与Syn Flood攻击相似,发送伪造源IP的TCP数据包,只不过TCP头的TCP Flags部分是混乱的,多是syn,ack,syn+ack,syn+rst等等,会形成一些防御设备处理错误锁死,消耗服务器CPU内存的同时还会堵塞带宽,在迷惑对手的时候施展最后的致命一击。
UDP Flood攻击
UDP Flood是日渐猖獗的流量型DOS攻击,原理也很简单。常见的状况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。100k PPS的UDP Flood常常将线路上的骨干设备例如防火墙打瘫,形成整个网段的瘫痪。因为UDP协议是一种无链接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。可是,因为UDP协议是无链接性的,因此只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
DNS Flood攻击
UDP DNS Query Flood攻击实质上是UDP Flood的一种,可是因为DNS服务器的不可替代的关键做用,一旦服务器瘫痪,影响通常都很大。UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,一般请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,若是查找不到而且该域名没法直接由服务器解析的时候,DNS服务器会向其上层DNS服务器递归查询域名信息。根据微软的统计数据,一台DNS服务器所能承受的动态域名查询的上限是每秒钟9000个请求。而咱们知道,在一台PC机上能够轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的DNS服务器瘫痪,因而可知DNS服务器的脆弱性。
CC攻击
CC攻击(Challenge Collapsar)是DDOS攻击的一种,是利用不断对网站发送链接请求导致造成拒绝服务的攻击。相比其它的DDOS攻击,CC攻击是应用层的,主要针对网站。CC主要是用来攻击页面的,CC就是模拟多个用户(少线程就是多少用户)不停地进行访问那些须要大量数据操做(就是须要大量CPU时间)的页面,形成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的链接直至就网络拥塞,正常的访问被停止。
这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQL Server、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器创建正常的TCP链接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。这种攻击的特色是能够彻底绕过普通的防火墙防御,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,而且有些Proxy会暴露攻击者的IP地址。
欢迎关注本站公众号,获取更多信息