网络及安全面经

TCP

三次握手、四次挥手

握手和挥手

time_wait: 主动关闭连接的一方进入TIME_WAIT状态
close_wait: 对方(主动)关闭连接之后服务器程序自己没有进一步发出ack信号。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直
被程序占着。
time_wait等待2MSL的目的:
为了可靠地实现TCP全双工连接的终止,当主动关闭连接的A端在TIME_WAIT状态等待2MSL时间中, 如果对端B端未收到ACK则重发FIN报文,那么A端仍可以回复ACK。因此在2MSL时间中,如果A端没有收到B端的FIN报文,则表明B端正确接收ACK。

常见问题:
1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2、 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
这是因为:虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文,并保证于此。

IO多路复用

暂时省略

安全攻击及防范

DDoS攻击

方法:

  • 资源消耗类攻击 :Syn Flood、Ack Flood、UDP
  • 服务消耗性攻击 : 利用检索、文件下载等大负载任务,让服务器繁忙无法正常服务
  • 反射类攻击: 又叫放大攻击,利用小流量请求大流量的应答,是服务器繁忙
  • 混合攻击: 自动检测上述方法哪些更有效,采用有效组合攻击手段

防范手段:

  • 资源隔离 : 资源隔离系统主要针对ISO模型的第三层和第四层进行防护,防护系统拥有无比强大的数据和流量处理能力,为用户过滤异常的流量和请求
  • 用户规则: 流量类型、请求频率、数据包特征、正常业务之间的延时间隔等。基于这些规则用户可以在满足正常服务本身的前提下更好地对抗七层类的DDoS,并减少服务端的资源开销
  • 大数据智能分析 : 基于对海量数据进行分析,进而对合法用户进行模型化,并利用这些指纹特征,如:Http模型特征、数据来源、请求源等,有效地对请求源进行白名单过滤,从而实现对DDoS流量的精确清洗。

中间人攻击

ARP欺骗:
1)攻击方进行中间人-单向欺骗,实现得断网!
2)攻击方进行中间人-双向欺骗,实现得窃听、控制、篡改!
ARP防御:
ARP静态绑定、安装ARP防火墙、使用DAI技术

https:
非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥“加密” ?
加密场景,那么肯定希望只有我才能解密,别人只能加密。即公钥加密,私钥解密。
签名场景,既然是签名,就希望只能我才能签名,别人只能验证。即私钥签名,公钥验签

什么是数字签名,数字签名的作用是什么?
数字签名就是使用私钥对数据摘要进行签名,并附带和数据一起发送。
可以起到防篡改、防伪装、防否认的作用。

为什么要对数据的摘要进行签名,而不是直接计算原始数据的数字签名?
数据可能比较大,签名是使用非对称加密算法,比较耗时
防止第三方使用公钥解开签名后,拿到原始数据

什么是数字证书,数字证书存在解决了什么问题?
数字证书就是由 CA 机构使用自己私钥,对证书申请者的公钥进行签名认证。
数字证书解决了如何安全分发公钥的问题,也奠定了信任链的基础。

你可能感兴趣的:(网络及安全面经)