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地址。
歡迎關注本站公眾號,獲取更多信息