学习

问题整理

2021-03-20  本文已影响0人  TimLi_51bb

Linux基础

1.请用top命令找到当前占用最多的进程

运行top命令后,在键盘上按下大写的“M”字母后,在首行就会显示占用率高进程或者运行终端后,

输入命令:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head然后按回车

2.查询哪个进程占用了端口

  (1) lsof  -i:端口号

(2)netstat -tunlp |grep 端口号

(3)ss -tnlp | grep ssh

LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))

LISTEN 0 128 :::22 :::* users:(("sshd",pid=997,fd=4))

3.查找并列出在一天内/root/目录下改动的文件:

# find /root/ -type f -mtime -1 -exec ls -l {} \; //最后;千万不能少,否则报错

4.linux显示当前目录下占用磁盘空间最大的前10个文件

du -a | sort -n -r | head -n 10

5.详述iptables工作流程以及规则过滤顺序

iptables是采用数据包过滤机制工作的,所以他会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则来匹配进行相关操作。

当防火墙收到数据包时:

1.防火墙是一层一层的过滤的,规则顺序从上到下,从前到后进行归路

2.如果匹配上规则(ACCEPT,DROP)就不会再向下匹配了。

3.如果匹配规则没有明确表明是阻止或者是通过这个数据包,也就是没有匹配上规则,就会继续向下执行下一跳规则。

4.如果以上所有规则都不能匹配上,最后会执行默认规则。

禁止来自10.0.0.188 ip地址访问80端口的请求

iptables -A INPUT -p tcp -s 10.0.0.188 --deport 80 -j DROP

使用iptables 写一条规则:把来源IP为192.168.1.101访问本机80端口的包直接拒

iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT

数据库

1.在MongoDB中创建集合并将其删除的语法是什么?

在MongoDB中创建集合的语法是db.createCollection(name,options)

在MongoDB中删除收集的语法是db.collection.drop()

2.提及插入文档的命令语法是什么?

用于插入文档的命令语法是database.collection.insert(文档)

3.什么是聚合

聚合操作能够处理数据记录并返回计算结果。聚合操作能将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。它相当于 SQL 中的 count(*) 组合 group by。对于 MongoDB 中的聚合操作,应该使用aggregate()方法。db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

4.数据在什么时候才会扩展到多个分片(shard)里?

mongodb 分片是基于区域(range)的.所以一个集合(collection)中的所有的对象都被存放到一个块(chunk)中.只有当存在多余一个块的时候,才会有多个分片获取数据的选项.现在,每个默认块的大小是 64mb,所以你需要至少 64 mb 空间才可以实施一个迁移.

基本原理

1.四次挥手都做什么?为什么挥手需要四次?

第一步,Client主动发起一个Req给Server,里面包含FIN标识位=1,CLient的Seq序列号N,表示的是当前Client在该连接上的当前序列号。

第二步,Server端在收到这个含有FIN的Req消息之后,校验无误之后会立马回复ACK消息给CLient端,消息内部包含ACK标志位为1,同时Seq号码是FIN的请求消息的Seq号+1。此时的Sever同时会主动发个结束标识给Server上面的应用层程序,应用层程序可以决定是立马结束,还是等到服务其上面的该连接中的数据处理完了之后,在发送FIN消息给Client来关掉另外的一半连接。

第三步,Server端在处理完该连接上面的Pending住的数据之后,应用程序会close这个连接。Client会主动发起FIN的Req消息给Client端。消息内部带有,FIN=1的结束符标识位,以及Server端的Seq序列号。

第四步,Client端在收到对应的FIN消息之后,会主动通知应用层程序,告知这个连接现在需要关闭了。然后,Client会回复ACK消息给Server,以便断开另外一个方向的通道,这个消息包含ACK=1的标识位和FIN的REQ带过来的Seq+1。

TCP的连接是全双工的,所以连接的拆除需要单独将两个通道分别拆除,而四次挥手所做的事情就是拆除两条通道和释放资源。

因为TCP是一个全双工协议,必须单独拆除每一条信道。4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。

2.TCP 的拥塞控制原理

适用于低延时、低带宽的网络,它将拥塞控制的过程分为四个阶段:慢启动、拥塞避免、快重传和快恢复,对应的状态如下所示:

慢启动阶段思路是不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小,在没有出现丢包时每收到一个 ACK 就将拥塞窗口大小加一(单位是 MSS,最大单个报文段长度),每轮次发送窗口增加一倍,呈指数增长,若出现丢包,则将拥塞窗口减半,进入拥塞避免阶段;

当窗口达到慢启动阈值或出现丢包时,进入拥塞避免阶段,窗口每轮次加一,呈线性增长;当收到对一个报文的三个重复的 ACK 时,认为这个报文的下一个报文丢失了,进入快重传阶段,要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方,可提高网络吞吐量约20%)而不要等到自己发送数据时捎带确认;

3.CC攻击

CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

确定Web服务器正在或者曾经遭受CC攻击,那如何进行有效的防范呢?

(1).取消域名绑定

一般cc攻击都是针对网站的域名进行攻击,比如我们的网站域名是“www.abc.com”,那么攻击者就在攻击工具中设定攻击对象为该域名然后实施攻击。 对于这样的攻击我们的措施是取消这个域名的绑定,让CC攻击失去目标。

(2).域名欺骗解析

如果发现针对域名的CC攻击,我们可以把被攻击的域名解析到127.0.0.1这个地址上。我们知道127.0.0.1是本地回环IP是用来进行网络测试的,如果把被攻击的域名解析到这个IP上,就可以实现攻击者自己攻击自己的目的,这样他再多的肉鸡或者代理也会宕机,让其自作自受。

(3).更改Web端口

一般情况下Web服务器通过80端口对外提供服务,因此攻击者实施攻击就以默认的80端口进行攻击,所以,我们可以修改Web端口达到防CC攻击的目的。运行IIS管理器,定位到相应站点,打开站点“属性”面板,在“网站标识”下有个TCP端口默认为80,我们修改为其他的端口就可以了。

(4).屏蔽IP

我们通过命令或在查看日志发现了CC攻击的源IP,就可以在防火墙中设置屏蔽该IP对Web站点的访问,从而达到防范攻击的目的。

4.DNS为什么使用UDP

使用UDP传输是由于效率高,传输小于等于512字节报文。

使用TCP传输是由于可以传输大于512字节报文。

使用签名是保证数据来源的可靠性。

使用TCP传输,同样是可以传输证书链、签名。

使用UDP同样可以传输远远大于576字节的数据,只要应用程序可以标识数据ID。

由于历史的原因,互联网上物理链路的最小MTU = 576,基于UDP传输的DNS为了限制报文不超过576,所以将DNS报文限制在512字节。

这样一旦DNS查询应答超过512字节,基于UDP的DNS就只有截短为512字节,那么用户得到的DNS应答就是不完整的

5.traceroute原理

基于UDP实现的traceroute

客户端发送一个TTL为1,端口号大于30000的UDP数据包,到达第一站路由器之后TTL被减去1,返回了一个超时的ICMP数据包,客户端得到第一跳路由器的地址。

客户端发送一个TTL为2的数据包,在第二跳的路由器节点处超时,得到第二跳路由器的地址。

客户端发送一个TTL为3的数据包,数据包成功到达目标主机,返回一个端口不可达错误,traceroute结束

排错问题 English

1.DNS解析外网域名很慢

1.在较大的环境中,每个物理站点上至少有两个域控制器应该是DNS服务器。这将在一个DC意外离线时提供冗余。请注意,必须配置已加入域的计算机使用多个DNS服务器才能利用此优势。

2.如果将多个DC配置为DNS服务器,则应将它们配置为首先相互使用对方进行解析,其次才使用自己。每个DC的DNS服务器列表应包括自己的地址,但不应作为列表中的第一个服务器。如果某个DC只使用自身进行解析,它可能会停止与其他DC进行复制。这在只有一个DC的域中显然不是问题。

3.所有已加入域的计算机必须只使用内部DNS服务器。如果将已加入域的计算机配置为使用外部服务器作为备用DNS服务器,则暂时缺乏与内部DNS服务器的连接将导致该计算机开始使用外部服务器进行解析。该外部服务器将无法解析对AD域内任何内容的查询,当连接恢复时,客户端计算机不会自动转回到内部DNS服务器。这通常表现为无法从受影响的计算机访问域中的资源。请注意,如果您使用小型办公/家庭办公(SOHO)路由器向客户端计算机分配DHCP地址,也可能会将外部DNS服务器分配给这些客户端,除非以其他方式进行了手动配置。

4.使用Active Directory集成的DNS区域来提高安全性并简化DNS复制。

AD集成的DNS区域存储在Active Directory内的目录分区中。这些目录分区与AD的其余部分一起复制;因此,DNS复制不需要额外的配置(即区域传输设置)。此外,AD集成区域还允许使用安全的动态更新。这可以防止从无法通过域验证的计算机上对DNS记录进行更新。

5.在连接互联网的环境中,配置转发器或根目录提示进行外部名称解析。转发器对外部查询能提供更快的响应,但与撰写这篇文章时存在的374个广泛分布的根DNS服务器相比,它们的冗余较少。默认情况下,Windows服务器上存在根目录提示,但转发器必须手动配置。

6.域中的DNS服务器不应彼此用作转发器。转发器是DNS服务器向其发送自身无法回答的查询(即对它不寄存区域中的记录的查询)的服务器。域中的DNS服务器通常都寄存相同的区域,因此,如果其中一个无法回答给定的查询,则它们全都无法做到,将该查询从一个服务器转发到另一个服务器只会造成延迟。

7.配置老化和清理,以避免陈旧的DNS记录。

2.问题1:瞬时写入数据量过大。

    软件设计不合理,在监控服务器上面得程序将读取到所有的数据每隔一定周期一起写入数据库,瞬间数据量过于庞大。下图是数据写入数据库时,磁盘IO脉冲式增加,特别是减少数据读取周期为6秒时,磁盘IO一直保持在100%,造成监控服务器十分卡顿。

解决办法:

    软件上提出建议将程序功能分模块(采集器分类、设备分类或者等级分类)写入数据库,数据库中tables较多,分别写入可降低磁盘IO。

    终端读取数据库的间隔适当加长,不和写操作争抢资源。

问题2:二进制日志文件mysqlbinlog过大

    每天数据产生17G的二进制日志文件mysqlbinlog,磁盘快满了。

    解决办法:对于监控数据来说,其实没有必要保存改变数据库信息的语句。 expire-logs-days,设置清除log文件的天数。或者直接不需要,在my.ini文件中直接关闭,也可降低磁盘IO。

; binary logging - not required for slaves, but recommended

;log-bin=mysql-bin

问题3:数据库没有经过调优

    Mysql数据库没有经过调优。笔者虽不是DBA,但是针对具体问题,结合以前得知识(请参考数据库DB文集)和网络资料,分享一下自己的分析解决思路。

网络题目

1.基于传输层(四层)的负载均衡 和 基于应用层(第七层〉的负载均衡区别

所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

2.异常篇之502/503/504错误

一. 源站不通或源站域名无法解析

CDN 都是公网上的节点,CDN配置的源站必须要公网可达。如果配置的源站IP公网不可达、端口不通或者源站域名没有解析,则会导致CDN回源请求源站失败,报错5xx。

常见的几种异常情况如下:

(1)源站网络不通,测试无法ping通源站IP。ping测试命令:ping 源站IP

(2)源站端口不通或源站直接响应5xx错误。例如以下案例,telnet端口报错Connection timed out

i)如果源站端口配置的是80,则测试80端口是否通:telnet 源站IP 80

ii)如果源站端口配置的是443,则测试443端口是否通。如果源站端口配置的是自定义端口,则测试自定义端口是否通。

iii)可以在CDN控制台获取配置的源站地址和端口,然后本地host绑定到源站,固定源站做七层测试,查看是否是源站直接无响应或源站直接响应5xx、

二,CDN配置了HTTPS回源,但源站不支持HTTPS

(1)源站端口配置成443,但源站不支持HTTPS

在CDN控制台的源站配置界面,如果源站端口配置成443,则CDN回源的时候是HTTPS回源到源站的443端口。源站需要开放443端口,且配置HTTPS证书。如果源站不支持HTTPS访问,则CDN回源失败,报错5xx。对于这种情况,可以把回源端口改成80;如果业务需要443回源的话,那么需要在源站配置HTTPS证书。

三.源站开启了SNI校验,但是CDN没有开启“回源SNI”

CDN回源默认是不带SNI信息的,如果您的源站IP绑定了多个域名,当CDN节点以HTTPS协议访问您的源站时,由于没有带SNI信息,会导致源站无法正确响应HTTPS证书,导致回源失败。因为这个问题导致的错误,一般是503 Service Temporarily Unavailable错误,而且很快就会返回这个错误。您可以在CDN控制台设置开启回源SNI,指明具体访问域名。具体SNI的介绍以及配置方法参考这里

四.源站存在安全防护规则

源站的相关安全防护规则导致的CDN回源异常,通常会在10秒以内就返回5xx错误,大部分情况会返回503 Service Temporarily Unavailable的错误,具体的排查方法和解决方案可以参考文档源站安全策略导致5xx

五. 源站超时无响应导致CDN回源超时

CDN 回源有严格的超时时间,四层 TCP 是 10 秒超时,七层HTTP / HTTPS是 30 秒超时,当超过该时间时即使后续源站响应正常也是会返回 5xx错误,通常因CDN回源超时导致的问题,会响应504Gateway Time-out错误。可以绑定源站去测试源站的响应速度,如果超过30秒,需要检查源站服务,优化源站的响应速度,确保源站返回请求时间控制在一个较短的时间内,另外也可以申请延长CDN域名的默认超时时长,详细请参考配置回源请求超时时间

六. 跨境回源或源站侧网络异常

回源存在跨境链路导致的CDN回源超时,响应5xx错误。例如源站在境外,中国大陆的用户访问的时候,是先访问到中国大陆的CDN节点,然后中国大陆的CDN节点走跨境链路,回源到境外的源站;亦或者源站在中国大陆,境外用户访问的时候先请求到境外的CDN节点,境外的CDN节点走跨境链路,回源到中国大陆的源站。由于CDN回源走的都是公网,这种情况涉及到跨境链路,需要走国际互联网出口以及境外运营商的链路,本身就存在一定的不稳定因素。还有一种情况是源站侧机房的网络差,或源站侧网络不稳定。

3.BGP的四种报文类型:

(1)OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,并认证发送方。两个邻站数据不同的AS,其中一个邻站打算和另一个邻站定期交换路由信息,就必须发送一个OPEN报文,如果邻站接受(如果邻站路由器已经负荷很重可能就会拒绝),就用KEEPALIVE报文响应。这样,两个BGP发言人的邻站关系就建立。

(2)UPDATE(更新)报文:通告新路径或撤销原路径。UPDATE报文是BGP协议的核心内容,BGP发言人可以用UPDATE报文撤销它以前曾经通知过的路由,也可以宣布增加的新的路由。

(3)KEEPALIVE(保活)报文:在无UPDATE时,用来周期性证实邻站的连通性,也作为OPEN的确认。一旦邻站关系建立,就要维持这种关系的建立。为此,两个BGP发言人彼此要周期性地交换保活报文。保活报文很小,不会造成太大的网络开销。

(4)NOTIFICATION(通知)报文:用来发送检测到的错误,或者用于关闭连接。如果接收到的一个报文有问题,就可以使用通知报文告知发送方。

BGP建立邻居过程中,当TCP不能建立成功时,该邻居通常处于什么状态?Active

4.BGP所解决的问题,BGP是为了解决不同路由域之间的消息交互而产生的,其作用是提供路由域间的路由系统,保证在各个自治系统之间交换无环的路由信息。

BGP建立过程:邻居建立过程概述:(1)建立TCP连接,(2)BGP开始发送OPEN消息(3)交换了一对BGP OPEN消息之后,邻居就会进入established状态,即两个活跃BGP对等体之间的稳定状态,此时就可以交换BGP消息了

运维工具

Docker网络模式:

身份认证:SAML协议认证

SAML协议是三者中时间最长的协议,最初版本制定于2001年,并于2005年修改。作为一种安全性断言标记语言,SAML协议既可以用于认证也用于授权。

所谓的安全性断言,就是关于认证、授权以及用户属性(比如用用户的有效或者住址等信息)的声明集合,在SAML中,这些断言以XML的格式传输。

当要验证一个用户身份时,服务提供商(Service Provider, SP,即RP,应有依赖方)会向IDP发出SAML认证请求,该请求中会以XML格式说明认证方式的设置,比如希望IDP以何种方式验证用户;IDP在认证通过用户身份之后,会返回SAML请求响应,同样以XML格式返回断言表明用户身份和相关属性,此外SAML安全性断言信息必须要使用数字签名以保证其完整性和不可抵赖性(没有强制要求对SAML断言加密);SP接收到SAML断言之后,验证其消息来源是否费受信任的IDP,验证通过之后解析XML获得认证信息。

公有云:

优化数据库的方法

选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM

使用连接(JOIN)来代替子查询,适用联合(UNION)来代替手动创建的临时表,事务处理

锁定表、优化事务处理,适用外键,优化锁定表,建立索引,优化查询语句

SQL语言包括哪几部分?每部分都有哪些操作关键字?

SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。

数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等

数据操纵:Select ,insert,update,delete,

数据控制:grant,revoke

数据查询:select

操作主机 FSMO Flexible single master operation )即用于这类特殊的单主机复制机制,以满

足特殊场景下更高效可控的数据同步(如用户密码修改)

FSMO

上一篇下一篇

猜你喜欢

热点阅读