網絡層攻擊防御

網絡層攻擊防御
網絡層攻擊防御主要分為以下三類:

TCP類報文攻擊防御
UDP類報文攻擊防御
ICMP類報文攻擊防御

TCP類報文攻擊防御
TCP正常的交互過程:

圖:TCP正常交互過程
在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。

第一次握手:建立連接時,客戶端發送SYN包到服務器,等待服務器確認。
第二次握手:服務器收到SYN包,回應一個SYN-ACK包。
第三次握手:客戶端收到服務器的SYN-ACK包,向服務器發送確認包ACK,此包發送完畢,完成三次握手。

如果服務器發出的SYN-ACK包異常,客戶端會發送一個RST包給服務器,服務器重新回到等待狀態。
TCP采用四次握手來關閉一個連接。

第一次握手:客戶端發送FIN包到服務器,表示客戶端沒有數據要向服務器發送了,等待服務器確認。
第二次握手:服務器收到FIN包,發送ACK包來確認客戶端的FIN包,如果服務器數據還沒傳完,則不發送FIN包。
第三次握手:當服務器沒有數據要向客戶端發送時,服務器發送FIN包到客戶端,并等待客戶端最終確認。
第四次握手:客戶端收到FIN包,發出ACK包來確認服務器的FIN包,此包發送完畢,完成四次握手,雙方連接斷開。

SYN Flood攻擊原理與防御:
**SYN flood攻擊是虛假源攻擊典型代表,**此類攻擊的最顯著特點就是發送海量變源或變源端口的報文到受害主機,耗盡受害主機資源或網絡資源。
攻擊原理:
SYN Flood攻擊是通過偽造一個源地址的SYN報文,發送給受害主機,受害主機回復SYN-ACK報文給這些地址后,不會收到ACK報文,導致受害主機保持了大量的半連接,直到超時。這些半連接可以耗盡主機資源,使受害主機無法建立正常TCP連接,從而達到攻擊的目的。

制造大量半開連接(SYN? SYN+ACK), 造成服務器資源消耗,形成拒絕服務攻擊。
偽造報文一般源IP地址不存在或者不可達,大量的半開連接消耗了服務器的資源,是服務器無法處理正常的連接請求。

防火墻和Anti-DDoS設備防御方式簡要對比:
針對虛假源,NGFW(防火墻)


方法一: TCP代理 (proxy)
缺點:大量的半開連接都在防火墻建立。看防火墻性能。


方法二:? TCP源探測
偽裝SYN -------------回應錯誤的SYN+ACK
RST-------------------證明是真實源


方法三:首包丟棄+TCP源探測

?

配置:
全局開啟
?anti-ddos syn-flood source-detect alert-rate 3000
接口調用
interface GigabitEthernet0/0/2
?anti-ddos flow-statistic enable
123456

針對虛假源,Anti-ddos 防御方法:


(1).首包丟棄


(2).源認證
偽裝SYN -------------達到閾值,觸發源認證------發送正確SYN+ACK
如果是偽裝源SYN,回應不了ACK
如果是真實的源回ACK,加入白名單 ,再發RST


針對于真實源,限速:

(1) TCP異常限速 (比例限速? 非ACK與ACK設置比例)
(2) 始終限速,除了ACK以后其它都限速


以下為各自詳細防御原理介紹。

Anti-DDoS防御方法:
針對虛假源攻擊防御原理:
Anti-DDoS設備基于目的地址對SYN報文速率進行統計,當SYN報文速率超過閾值時,啟動源認證防御。
基本源認證(Error-seq):

圖:Anti-DDoS基本源認證防御SYN Flood原理


Anti-DDoS設備接收到SYN報文,發送SYN-ACK探測報文到SYN報文中的源IP地址。


Anti-DDoS設備通過校驗接收到的對探測報文的響應報文的真實性來確認源IP地址的真實性,以防止虛假源攻擊。


如果沒有響應報文,則表示之前的SYN報文為攻擊,Anti-DDoS設備不會將該SYN報文發給被防護服務器,有效終止了攻擊。


如果有響應報文,Anti-DDoS設備驗證響應報文是否為真實的報文,如果真實,則表示該源IP地址通過源認證,Anti-DDoS設備將該源IP地址加入白名單,在白名單老化前,從此源IP地址發出的SYN報文都直接被Anti-DDoS設備轉發。白名單老化時間可配置。
未匹配白名單的源IP地址發出的SYN報文則繼續被探測。

?


高級源認證(Right-seq):

圖:Anti-DDoS設備高級源認證防御SYN Flood的處理過程
針對真實源攻擊防御方式:
真實源IP限速。
源IP加入白名單之后將繼續對真實源IP進行統計分析,對異常的源IP進行限速,以防止真實源發起攻擊。
SYN-Ratio異常限速:基于加入白名單的源來統計SYN報文與SYN報文+ACK報文的比例,當這個比例在配置時間內超過“SYN-Ratio比例閾值”時,判定源IP地址異常,則開始對單位時間內該源的SYN報文進行限制,具體機制如下:

在配置的檢測duration時間段內,基于加入白名單的源IP來統計SYN報文和SYN報文+ACK報文的比例。如果該時間段內沒有SYN報文或者ACK報文,則不刷新該時間段內SYN報文和ACK報文的比例以及各自的報文數,該檢測時間段為無效統計duration區間。SYN報文和ACK報文的有效比例值仍按照上一有效duration區間的比值來判斷當前是否仍然存在攻擊,是否需要繼續執行限速。
當SYN-Ratio檢測出異常,則需要執行限速。


限速:
(1) TCP異常限速 (比例限速? 非ACK與ACK設置比例)
(2) 始終限速,除了ACK以后其它都限速

防火墻防御方法:
(1)TCP代理(proxy):
TCP代理是指我們的FW部署在客戶端和服務器中間,當客戶端向服務器發送的SYN報文經過FW時,FW代替服務器與客戶端建立三次握手。一般用于報文來回路徑一致的場景。

圖:TCP代理報文交互過程

如上圖所示,FW收到SYN報文,對SYN報文進行攔截,代替服務器回應SYN-ACK報文。
如果客戶端不能正常回應ACK報文,則判定此SYN報文為非正常報文,FW代替服務器保持半連接一定時間后,放棄此連接。
如果客戶端正常回應ACK報文,FW與客戶端建立正常的三次握手,則判定此SYN報文為正常業務報文,非攻擊報文。FW立即與服務器再建立三次握手,此連接的后續報文直接送到服務器。

整個TCP代理的過程對于客戶端和服務器都是透明的。
TCP代理過程中,FW會對收到的每一個SYN報文進行代理和回應,并保持半連接,所以當SYN報文流量很大時,對FW的性能要求非常的高。
但是TCP代理只能應用在報文來回路徑一致的場景中,如果來回路徑不一致,代理就會失敗。

缺點:大量的半開連接都在防火墻建立。看防火墻性能。

(2)TCP源探測:
TCP源認證是FW防御SYN flood攻擊的另一種方式,沒有報文來回路徑必須一致的限制,所以應用更普遍。

圖:TCP源探測報文交互圖
TCP源認證對客戶端的源只做一次驗證通過后,就加入白名單,后續就不會每次都對這個源的SYN報文做驗證,這樣大大提高了TCP源認證的防御效率和防御性能,可以有效緩解FW性能壓力。
(3)方法三:首包丟棄+TCP源探測

SYN-ACK Flood攻擊與防御:
簡要筆記:

SYN+ACK flood? 攻擊原理:

發送大量偽造SYN+ACK,消耗依賴于會話表的設備性能

防御原理 : 源認證:


偽裝SYN+ACK ----------觸發閾值以后------SYN
如果能回SYN+ACK 加入白名單
如果不能SYN+ACK,那就虛假源

?

SYN-ACK Flood攻擊的最大特點是報文源屬于虛假源,且目的經常為現網存在的對外提供的服務器IP地址。通過對報文源的真實性檢查來防御SYN-ACK Flood攻擊。
攻擊原理:
SYN-ACK Flood攻擊源會假冒服務器,發送大量SYN-ACK報文到攻擊目標網絡,如果網絡出口有依靠會話轉發的網絡設備,比如防火墻、IPS等設備,則大量的SYN-ACK報文會導致這類網絡設備處理性能降低,甚至會話耗盡。
另外,SYN Flood的反射攻擊也可能造成服務器發送大量的SYN-ACK報文。
防御原理:
對于防護對象SYN-ACK Flood防御,Anti-DDoS設備基于目的地址對SYN-ACK報文速率進行統計,當SYN-ACK報文速率超過告警閾值時,啟動源認證防御。
對于服務的SYN-ACK Flood防御,當超過告警閾值時,Anti-DDoS設備直接丟棄SYN-ACK報文。

圖:源認證防御SYN-ACK Flood


Anti-DDoS設備接收到SYN-ACK報文,發送SYN探測報文到SYN-ACK報文中的源IP地址。


Anti-DDoS設備通過源IP地址對探測報文的響應報文校驗源是否真實存在,以防止虛假源攻擊。


如果沒有響應報文,則表示之前的SYN-ACK報文為攻擊,Anti-DDoS設備不會將該SYN-ACK報文發給被防護目標,有效終止了攻擊。


如果有響應報文,Anti-DDoS設備驗證響應報文是否為探測報文的回應報文,如果是,則Anti-DDoS設備將該源IP地址加入白名單,在白名單老化前,從此源IP地址發出的SYN-ACK報文都直接被Anti-DDoS設備轉發。白名單老化時間可配置。
未匹配白名單的SYN-ACK報文則繼續被探測

?


ACK Flood攻擊與防御原理:
簡要筆記:

攻擊原理:

偽造大量ACK報文,擁塞鏈路,消耗依賴于會話轉發設備性能,服務器資源耗盡

防御方法:


(1)會話檢查
嚴格模式-----Anti-ddos部署直路模式
必須匹配會話表,匹配通過,不匹配丟棄
基本模式-----Anti-ddos部署旁路模式
匹配會話-------需要檢查序列號,序列號正確通過
不匹配會話-------第一個ACK可以通過,建立會話表,后續ACK匹配源地址


2)載荷檢查

?


攻擊原理:
攻擊者利用僵尸網絡發送大量的ACK報文,通常會造成以下三種情況的危害。

如果是帶有超大載荷的ACK Flood攻擊,會導致鏈路擁塞。
如果是極高速率的變源變端口ACK Flood攻擊,很容易導致依靠會話轉發的設備轉發性能降低,甚至會話耗盡造成網絡癱瘓。
如果攻擊報文到達服務器,則導致服務器處理性能耗盡,從而拒絕正常服務。

防御原理:
會話檢查:
通常情況下,當ACK報文速率超過閾值時,Anti-DDoS設備啟動對ACK報文的會話檢查。
會話檢查成功的源加入白名單。白名單可以減少會話檢查對正常業務的轉發延遲影響。


嚴格模式
直路部署組網中建議采用“嚴格模式”。

如果ACK報文沒有命中會話表,則Anti-DDoS設備直接丟棄ACK報文。
如果ACK報文命中會話表,則繼續檢查報文序列號,序列號正確的報文允許通過,不正確的報文則被丟棄。

?

基本模式
旁路部署動態引流時,由于報文來回路徑不一致,對于引流前已經建立的會話,Anti-DDoS設備上檢查不到會話,此時建議采用“基本模式”。當連續一段時間內ACK報文速率超過閾值時,啟動會話檢查“基本模式”。

如果ACK報文沒有命中會話表,Anti-DDoS設備會允許第一個ACK報文通過,并建立會話,然后對后續ACK報文進行會話檢查,以確定是否允許后續同源IP發送的ACK報文通過。
如果ACK報文命中會話表,則繼續檢查報文序列號,序列號正確的報文允許通過,不正確的報文則被丟棄。

?

載荷檢查:
載荷檢查是Anti-DDoS設備對會話檢查通過的報文進行的進一步驗證,如果ACK報文載荷內容全一致(如載荷內容全為1等),則丟棄該報文,因為正常報文的載荷內容不會完全一致。
只有啟用了“會話檢查”,才能啟用“載荷檢查”。
FIN/RST Flood攻擊與防御原理:
簡要筆記:

攻擊原理:

同ACK

防御方法:

會話檢查
(1) 不能匹配會話,丟棄
(2)匹配會話,分2種情況

第一種情況 會話由SYN或SYN+ACK創建的,通過
第二種情況 會話由ACK創建,需要檢查序列號,正確通過

?


攻擊原理:
攻擊者利用僵尸網絡發送大量的變源變端口FIN/RST報文攻擊,這些攻擊到達依靠會話轉發的設備上,很容易導致轉發設備性能降低甚至會話耗盡造成網絡癱瘓,從而拒絕正常服務。
防御原理:
當FIN/RST報文速率超過閾值時,啟動會話檢查。

如果Anti-DDoS設備檢查到FIN/RST報文沒有命中會話,直接丟棄報文。
如果Anti-DDoS設備檢查到FIN/RST報文命中會話,則根據會話創建原因和會話檢查結果來判斷該報文是否通過。

如果會話是由SYN或SYN-ACK報文創建的,則允許該FIN/RST報文通過。
如果會話是由其他報文創建的(例如ACK報文),則進一步檢查報文序列號是否正確,序列號正確的報文允許通過,不正確的報文則被丟棄。

?

TCP連接耗盡攻擊與防御原理:
攻擊原理
連接耗盡攻擊是指攻擊者通過僵尸網絡,向服務器發起大量的TCP連接,耗盡服務器的TCP連接資源。連接耗盡一般有以下幾種攻擊類型:

完成三次握手后,不發送任何報文,一直維持這些TCP連接。
完成三次握手后,立刻發送FIN或RST報文,釋放本端連接,同時快速發起新的連接。
連接過程中呈現給服務器端很小的TCP windows size,導致服務器TCP協議棧資源耗盡。
發送大量TCP重傳請求,以很小的流量即可導致被攻擊網絡上行鏈路擁塞。

防御原理
針對此攻擊會耗盡服務器的TCP連接資源的特點,Anti-DDoS設備對目的IP地址的新建連接速率和并發連接數分布進行統計,當新建連接速率或并發連接數大于閾值時,則觸發對源IP地址的相應檢查,當檢查發現異常時,將異常源IP地址加入黑名單,切斷其TCP流量。


源IP地址新建連接速率檢查:啟動源IP地址新建連接速率檢查后,如果某個源IP地址在檢查周期內發起的TCP新建連接數大于閾值,則將該源IP地址判定為攻擊源。


源IP地址并發連接數檢查:啟動源IP地址并發連接數檢查后,如果某個源IP地址的TCP并發連接數大于閾值,則將該源IP地址判定為攻擊源。


慢速連接速率檢查:啟動慢速連接速率檢查后,統計同一源IP地址對同一目的IP地址的連接次數,在各統計時間間隔內,如果連續多次連接數相同,則判定為TCP慢速連接攻擊。


**異常會話檢查:**如果在檢查周期內,某個源IP地址發起的TCP異常會話的連接數大于閾值時,則將該源IP地址判定為攻擊源。判定TCP異常會話依據如下:

空連接檢查:如果在檢查周期內,在某條TCP連接上通過的報文數小于閾值,則判定該連接為異常連接。
重傳會話檢查:當某條TCP連接上重傳報文數量大于閾值時,則判定該連接為異常連接。
慢啟動連接檢查:當某條TCP連接上通過的報文窗口小于閾值時,則判定該連接為異常連接。

當異常會話數超過一定數量時,將此源加入黑名單。異常會話數量可配置。


TCP分片攻擊與防御原理:
攻擊原理
正常的網絡流量中很少出現TCP分片報文,如果網絡中TCP分片報文增多,則很可能正受到DDoS攻擊**。攻擊者向攻擊目標發送大量的TCP分片報文**,通常會造成以下危害:

大量的TCP分片報文消耗帶寬資源,造成被攻擊者的響應緩慢甚至無法正常回應。
網絡設備或服務器收到大量的TCP分片報文,會進行分片重組,這樣會導致網絡設備或服務器的性能降低,甚至無法正常工作。

防御原理
TCP分片分為首分片和后續分片,Anti-DDoS設備只對首分片執行防御動作,如果首分片異常被丟棄了,后續分片因找不到首分片的會話會直接被后續轉發流程丟棄。Anti-DDoS設備基于目的地址對TCP首分片報文速率進行統計,當TCP首分片報文速率超過閾值時,按照以下處理方式:

首先檢查報文源IP地址是否命中白名單,如果沒有命中白名單,則將該源IP所有發送的TCP分片報文直接丟棄。
如果命中白名單,則報文允許通過。
對于真實源發送的分片報文攻擊,Anti-DDoS設備還支持對分片報文限速。

TCP異常報文攻擊與防御原理:
攻擊原理
TCP報文標志位包括URG、ACK、PSH、RST、SYN、FIN六位,攻擊者通過發送非法TCP flag組合的報文,對主機造成危害。
防御原理
檢查TCP報文的各個標志位URG、ACK、PSH、RST、SYN、FIN,如果標志位異常,則認為是TCP異常報文。當TCP異常報文的速率大于告警閾值時,將所有TCP異常報文全部丟棄,并記錄攻擊日志。

6個標志位全為1。
6個標志位全為0。
SYN和FIN位同時為1。
SYN和RST位同時為1。
FIN和RST位同時為1。
PSH、FIN和URG位同時為1。
僅FIN位為1。
僅URG位為1。
僅PSH位為1。
SYN/RST/FIN標記位為1的分片報文。
帶有載荷的SYN、SYN-ACK報文。

UDP類報文攻擊與防御
UDP Flood攻擊與防御原理:
UDP類攻擊中的報文源IP和源端口變化頻繁,但報文負載一般保持不變或具有規律的變化。防御有效方法是使用關聯防御和指紋學習。
簡要筆記:

攻擊原理:

發送大量偽造UDP報文來擁塞鏈路,消耗設備和服務器性能。

Anti-ddos:
防御方法:


(1) 關聯TCP防御
想法:發UDP報文,觸發閾值,啟動TCP報文


(2) 指紋學習


UDP分片攻擊

防御方法:指紋學習

NGFW
防御方法:

指紋學習??? 分片指紋學習?? 限流


攻擊原理:
攻擊者通過僵尸網絡向目標服務器發起大量的UDP報文,這種UDP報文通常為大包,且速率非常快,通常會造成以下危害。從而造成服務器資源耗盡,無法響應正常的請求,嚴重時會導致鏈路擁塞。

一般攻擊效果是消耗網絡帶寬資源,嚴重時造成鏈路擁塞。
大量變源變端口的UDP Flood會導致依靠會話轉發的網絡設備,性能降低甚至會話耗盡,從而導致網絡癱瘓。
如果攻擊報文達到服務器開放的UDP業務端口,服務器檢查報文的正確性需要消耗計算資源,影響正常業務。

Anti-DDoS防御原理:
載荷檢查和指紋學習
當攻擊報文負載有特征時,則可以采用動態指紋學習或特征過濾防御。

載荷檢查:當UDP流量超過閾值時,會觸發載荷檢查。如果UDP報文數據段內容完全一樣,例如數據段內容都為1,則會被認為是攻擊而丟棄報文。
指紋學習:當UDP流量超過閾值時,會觸發指紋學習。指紋由Anti-DDoS設備動態學習生成,將攻擊報文的一段顯著特征學習為指紋后,匹配指紋的報文會被丟棄。動態指紋學習適用于以下類型的UDP Flood攻擊。

報文載荷具有明顯特征。
報文負載內容完全一致。

?


圖:UDP指紋學習
UDP Flood關聯TCP類服務防范:
UDP是無連接的協議,因此無法通過源認證的方法防御UDP Flood攻擊。如果UDP業務流量需要通過TCP業務流量認證或控制,則當UDP業務受到攻擊時,對關聯的TCP業務強制啟動防御,用此TCP防御產生的白名單決定同一源的UDP報文是丟棄還是轉發。
比如,有些服務例如游戲類服務,是先通過TCP協議對用戶進行認證,認證通過后使用UDP協議傳輸業務數據,此時可以通過驗證UDP關聯的TCP類服務來達到防御UDP Flood攻擊的目的。當UDP業務受到攻擊時,對關聯的TCP業務強制啟動防御,通過關聯防御產生TCP白名單,以確定同一源的UDP流量的走向,即命中白名單的源的UDP流量允許通過,否則丟棄。

圖:UDP Flood關聯TCP類服務防御過程
防火墻防御原理:


UDP指紋學習


TCP關聯防御


限流
FW采用限流技術對UDP flood攻擊進行防范,將去往同一目的地址的UDP報文限制在閾值之內,直接丟棄超過閾值的UDP報文,以避免網絡擁塞。
由于限流技術本身無法區分正常轉發報文還是攻擊報文,故建議在指紋防范技術和關聯防御無法防住UDP flood時,才采用限流技術防范UDP flood。


UDP分片攻擊與防御原理:
攻擊原理
攻擊者向攻擊目標發送大量的UDP分片報文,通常會造成以下危害。

一般攻擊效果是消耗網絡帶寬資源,嚴重時造成鏈路擁塞。
大量UDP分片報文會導致具有會話重組功能的網絡設備性能急劇降低。
大量變源變端口的UDP分片報文會導致依靠會話轉發的網絡設備性能降低,甚至會話耗盡導致網絡癱瘓。
如果攻擊報文達到服務器開放的UDP業務端口,服務器檢查報文的正確性需要消耗計算資源,造成服務器響應緩慢甚至無法正常回應。

防御原理
UDP分片分為首分片和后續分片,Anti-DDoS設備只對首分片執行防御動作,如果首分片異常被丟棄了,后續分片因找不到首分片的會話會直接被后續轉發流程丟棄。UDP首分片防御方法和UDP flood防御方法一致。

載荷檢查
指紋學習


防火墻針對UDP分片攻擊:支持指紋學習和限流兩種防御方式

ICMP Flood攻擊與防御
攻擊原理
攻擊者短時間內發送大量的ICMP報文到被攻擊目標,導致依靠會話轉發的網絡設備會話耗盡引起網絡癱瘓,如果采用超大報文攻擊也會導致網絡鏈路擁塞。
防御原理
基本上沒有業務承載在ICMP協議上,而ICMP flood至今仍舊是DDoS攻擊的一大類,因此直接限流即可,將流量限制在較小范圍內,超過閾值部分的報文直接丟棄。

限流: FW針對目的IP進行統計,當到達同一目的IP地址的ICMP流量達到告警閾值時,啟動限流策略,丟棄超過上限的ICMP報文。
阻斷: 同時,FW支持在入接口上阻斷ICMP報文。當FW發現對同一目的地址的ICMP報文超過閾值就認為發生攻擊,FW將沒有命中白名單的ICMP報文全部丟棄,從而保證不被ICMP Flood攻擊影響正常服務。
————————————————
版權聲明:本文為CSDN博主「曹世宏的博客」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_38265137/java/article/details/90267266

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384911.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux之環境變量

常見環境變量 按照慣例,環境變量字符串都是namevalue這樣的形式,大多數name由大寫字母加下劃線組成,一般把name的部分叫做環境變量,value的部分則是環境變量的值。環境變量定義了進程的運行環境,一些比較重要的環境變量…

環境變量操作函數

getenv獲取環境變量值的函數&#xff1b; setenv改變或者添加環境變量函數&#xff1b; unsetenv 取消環境變量&#xff1b; &#xff08;可以在終端上man 函數名來獲取詳細的函數信息&#xff09; #include<stdio.h> #include<stdlib.h> #include<string.h>…

Makefile(三)

在平時使用中&#xff0c;可以使用以下的makefile來編譯單獨的代碼 src $(wildcard *.c) obj $(patsubst %.c, %.o, $(src))CC gcc CFLAGS -Wall -gall:$(target)$(target):%:%.c$(CC) $< -o $ $(CFLAGS).PHONY: clean all clean:-rm -rf $(target) 使用方法就是make 后…

位運算(C++)

C輸出十六進制 #include<iostream> #include<iomanip> using namespace std;int main() {int a 60;int b 13;int c a &b;cout << "a : hex "<<hex << a << endl;cout << "b : hex "<<hex <<…

數學函數(C/C++)

C中包含頭文件<math.h> C包含頭文件<cmath> 函數 double cos&#xff08;double&#xff09; 該函數返回弧度角&#xff08;double型&#xff09;的余弦 double tan&#xff08;double&#xff09; 該函數返回弧度角&#xff08;double型&#xff09;的正切…

數據類型(C++)

不同系統會有不同差異&#xff1a; 類型 位(byte) 范圍 char 1 -128—127 or 0 – 255 unsigned char 1 0 – 255 signed int 1 -128—127 int 4 -2^31 – 2^32-1 unsigned int 4 0 – 2^32 signed int 4 -2^31 – 2^32-1 short int 2 2^15 – 2^15-1 …

日期與時間(C/C++)

C繼承了C語言用于日期和時間操作的結構和函數&#xff0c;使用之前程序要引用<ctime>頭文件 有四個與時間相關的類型:clock_t、time_t、size_t、和tm。類型clock_t、size_t、和time_t能夠把系統時間和日期表示為某種整數。 結構體tm把時間和日期以C結構的形式保存&#x…

標準輸入輸出(C++)

輸入輸出流函數&#xff08;模板&#xff09; #include<iostream> #include<iomanip> using namespace std; int main() {cout << setiosflags(ios::left|ios::showpoint); //設左對齊cout.precision(5); //設置除小數…

拷貝函數和構造函數

類的構造函數&#xff1a; 類的構造函數是類的一種特殊的成員函數&#xff0c;它會在每次創建類的新對象時執行。 構造函數的名稱與類的名稱是完全相同的&#xff0c;并且不會返回任何類型&#xff0c;也不會返回void。 構造函數可用于為某些成員變量初始值。 默認的構造函數是…

拷貝構造函數

拷貝構造函數是一種特殊的構造函數&#xff0c;它在創建對象時&#xff0c;使用的是同一類中之前創建的對象來初始化新創建的對象。拷貝構造函數通常用于&#xff1a; l 通過使用另一個同類型的對象來初始化新創建的對象&#xff1b; l 復制對象把它作為參數傳遞給函數&#…

Linux進程通信之管道

進程間完成數據傳遞需要借助操作系統提供的特殊的方法&#xff0c;比如&#xff1a;文件、管道、信號、共享內存、消息隊列、套接字、命名管道等。但現在常用的進程間通信方式有&#xff1a; 管道 – 使用最簡單 pipe 管道一般讀寫行為 FIFO&#xff08;有名管道&#xff09;&a…

Linux進程通信之文件

父子進程共享打開的文件描述符------使用文件完成進程間通信. /*** fork_share_fd.c***/ #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/wait.h>int main(void) {in…

dup2函數

將當前系統中的進程信息打印到文件中 命令行&#xff1a;ps aux > out 將ps得到的信息重定向到out文件中 使用dup2文件在程序中完成。 int dup2(int oldfd,int newfd); /*** dup2.c ***/ #include<stdio.h> #include<fcntl.h> #include<unistd.h> #includ…

wait()函數

wait()函數&#xff1a;回收僵尸進程 父進程調用wait函數可以回收子進程終止信息。該函數有三個功能&#xff1a; 1&#xff09; 阻塞等待子進程退出 2&#xff09; 回收子進程殘留資源 3&#xff09; 獲取子進程結束狀態&#xff08;退出原因&#xff09; /*** zoom_test.c **…

waitpid()函數

waitpid函數 作用同于wait&#xff0c;但可指定pid進程清理&#xff0c;可以不阻塞。 pid_t waitpid(pid_t pid,int *status,int options);成功&#xff1a;返回清理掉的子進程ID&#xff1b;失敗&#xff1a;-1&#xff08;無子進程&#xff09; 特殊參數和返回情況&#xff1…

孤兒進程、僵尸進程

孤兒進程&#xff1a;父進程先于子進程結束&#xff0c;則子進程成為孤兒進程&#xff0c;子進程的父進程成為init進程&#xff0c;稱為init進程領養孤兒進程。 /*** orphan.c ***/ #include <stdio.h> #include <unistd.h> #include <sys/wait.h>int main(v…

友元函數

類的友元函數是定義在類外部&#xff0c;但有權訪問類的所有私有成員和保護成員。盡管友元函數的原型有在類的定義中出現過&#xff0c;但友元函數并不是成員函數。 友元可以是一個函數&#xff0c;該函數被稱為友元函數&#xff1b;友元也可以是一個類&#xff0c;該類被稱為友…

this指針

在C中&#xff0c;每一個對象都能夠通過this指針來訪問自己的地址。this指針是所有成員函數的隱含參數。因此&#xff0c;在成員函數內部&#xff0c;它可以用來指向調用對象。 友元函數是沒有this指針的&#xff0c;因為友元不是類的成員&#xff0c;只有成員函數才有this指針…

靜態成員

我們可以使用static關鍵字把類成員定義為靜態的。當我們聲明類的成員為靜態時&#xff0c;這意味著無論創建多少個類的對象&#xff0c;靜態成員都只有一個副本。 靜態成員在類的所有對象都是貢獻的。如果不存在其他的初始化語句&#xff0c;在創建第一個對象時&#xff0c;所有…

Linux進程通信之mmap

mmap()函數&#xff1a; void *mmap(void* addr,size_t length,int port,int flags,int fd,off_t offset); 返回&#xff1a;成功&#xff1a;返回創建的映射區首地址&#xff1b;失敗&#xff1a;MAP_FAILED 宏 參數&#xff1a; addr: 建立映射區的首地址&#xff0c;由…