网络层攻击防御

网络层攻击防御
网络层攻击防御主要分为以下三类:

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.mzph.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;由…