Linux运维工程师面试题(2)

祝各位小伙伴们早日找到本人心仪的工作。
继续学习才不会被淘汰。
地球不爆炸,咱们不放假。
机会总是留给有有筹备的人的。
加油,打工人!

1 拜访一个网站的流程

  1. 关上浏览器,输出网址。首先查找本地缓存,如果有就关上页面,如果没有,利用DNS做域名解析;
  2. 浏览器收回DNS申请,递归查问网站的IP地址。HOSTS表 --> 本地DNS --> 下层DNS(包含根DNS);
  3. 通过了DNS解析,将网址转换为IP地址,通过IP地址找到指定的Web服务器,与服务器建设 tcp 三次握手;
  4. 握手胜利后浏览器收回HTTP申请,默认申请的是index.html;
  5. 服务器接管到申请后将网页文件发回给浏览器;
  6. 浏览器接管到服务器返回的网页文件后,浏览器会解析html文件,将渲染后的网页文件出现给用户。
  7. 浏览器将发回的数据及状态码存入 Cache 以便后续快速访问。

2 TCP 三次握手,四次挥手

三次握手

  1. 客户端向服务器端发送申请报文,报文中蕴含有随机生成的seq序列号(x),并且还将报文中SYN字段置为1,示意须要建设TCP连贯申请;
  2. 服务器端接管申请后回复申请报文,报文中蕴含随机生成的seq(y)序列号,并且将回复报文的SYN字段置1,示意也须要建设连贯申请,双向确认。而且会产生ACK验证字段,将ACK确认报文字段置为1,ACK验证字段数值是在客户端发过来的seq(x)序列号根底上加1进行回复,即回复ack(x+1)确认号字段,以便客户端收到信息时,通晓本人的TCP建设申请已失去了确认,ack也能够了解为冀望下次客户端发送的seq序列号的值;
  3. 客户端收到服务端发送的建设TCP连贯申请后,会使本人的原有序列号(x)加1进行再次发送序列号seq(x+1),同时回复ACK验证申请,将ACK字段标记为1,在服务器端发送过去的seq(y)根底上加1,即回复ack确认管制字段(y+1),以便服务器端收到信息时,通晓本人的TCP建设申请曾经失去了确认,同样ack也能够了解为冀望下次服务器端发送的seq序列号的值。

三次握手的目标是确保两端的序列号同步,并且单方都能够发送和接收数据。如果第一次握手失败,客户端会反复发送SYN包;如果第二次握手失败,服务器也会反复发送SYN+ACK包;如果第三次握手失败,客户端会从新发送ACK包。

四次挥手

  1. 客户端被动向服务器端发送敞开连贯申请,此时的序列号seq为u,将报文中的FIN字段标记为1,示意要敞开TCP连贯;
  2. 服务器端收到报文后会发送ACK报文验证,将ACK置为1,同时发送ack(u+1)确认字段,此时的序列号seq为v,此次报文示意曾经收到了完结申请;
  3. 此时服务器可能还有数据须要发送,因而须要期待一段时间。当服务器实现数据发送后,会发送一个FIN包,示意曾经完结TCP连贯,将FIN标记为1,ACK标记为1,此时的序列号seq为w,确认号ack为u+1;
  4. 客户端收到FIN包后,会回应一个ACK包,示意曾经收到了完结申请,将ACK置为1,序列号seq为u+1,ack为w+1,并进入TIME_WAIT状态。期待一段时间后,客户端敞开连贯。服务器收到ACK包后,也敞开连贯。

四次挥手的目标是确保两端都晓得对方曾经敞开了连贯,并且不会再发送数据。如果客户端收回FIN包后没有收到ACK包,能够重发FIN包;如果服务器收回FIN包后没有收到ACK包,能够从新发送FIN包。如果客户端在TIME_WAIT状态完结之前收到了反复的FIN包,能够疏忽它。

3 apache 和 nginx 有哪几种虚拟主机

  • 基于IP地址的虚拟主机
  • 基于域名的虚拟主机
  • 基于端口号的虚拟主机

4 TCP 和 UDP 的区别

  1. TCP是一种面向连贯的协定,而UDP是无连贯的协定。TCP是一对一传输,UDP反对一对一、一对多、多对一和多对多的交互通信;
  2. TCP提供牢靠的数据传输,保证数据可能残缺、有序地达到目的地,而UDP不提供可靠性保障,数据传输可能会失落、反复或者乱序。
  3. TCP将数据分成一些数据段,每个数据段都有一个序列号,能够保证数据的有序性和完整性。而UDP将数据封装成数据报,每个数据报都是独立的,可能会失落、反复或者乱序。
  4. TCP是面向字节流的,即把应用层传来的报文看成字节流,将字节流拆分成大小不等的数据块,并增加TCP首
    部;UDP是面向报文的,对应用层传下来的报文不拆分也不合并,仅增加UDP首部;
  5. UDP比TCP快,因为它没有TCP的可靠性保障和简单的流量管制和拥塞管制机制。
  6. UDP实用于传输量较小但传输速度要求高的利用,例如视频、音频和游戏等;而TCP实用于传输量较大但对可靠性和完整性要求较高的利用,例如文件传输、邮件等。
  7. TCP反对传输可靠性的多种措施,包含保障包的传输程序、重发机制、流量管制和拥塞管制;UDP仅提供最根本的数据传输能力。

5 nginx 和 apache 的区别

Nginx:

  • 轻量级,采纳 C 进行编写,同样的 web 服务,会占用更少的内存及资源;
  • 抗并发,nginx 以 epoll 和 kqueue 作为开发模型,解决申请是异步非阻塞的,负载能力比apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能放弃低资源低消耗高性能 ,而apache 在 PHP 解决慢或者前端压力很大的状况下,很容易呈现过程数飙升,从而拒绝服务的景象;
  • nginx 解决动态文件好,动态解决性能比 apache 高三倍以上;
  • nginx 的设计高度模块化,编写模块绝对简略;
  • nginx 配置简洁,正则配置让很多事件变得简略,而且改完配置能应用 -t 测试配置有没有问题,apache 配置简单 ,重启的时候发现配置出错了,会很解体;
  • nginx 作为负载平衡服务器,反对 4 层和 7 层负载平衡,七层负载能够无效的避免ddos攻打;
  • nginx 自身就是一个反向代理服务器,也能够作为邮件代理服务器来应用。

Apache:

  • apache 的 rewrite 比 nginx 弱小,在 rewrite 频繁的状况下,用 apache;
  • apache 倒退到当初,模块超多,根本想到的都能够找到;
  • apache 更为成熟,少 bug ,nginx 的 bug 绝对较多;
  • apache 对 PHP 反对比较简单,nginx 须要配合其余后端用;
  • apache 在解决动静申请有劣势,nginx 在这方面是鸡肋,个别动静申请要 apache 去做,nginx 适宜动态和反向;
  • apache 依然是目前的支流,领有丰盛的个性,成熟的技术和开发社区。

两者最外围的区别在于 apache 是同步多过程模型,一个连贯对应一个过程,而 nginx 是异步的,多个连贯(万级别)能够对应一个过程。

须要稳固用apache,须要高性能用nginx

6 什么是反向代理,什么是正向代理,区别是什么?

反向代理和正向代理都是代理服务器的一种利用模式,它们的次要区别在于代理的方向和代理对象不同。

正向代理是在客户端和指标服务器之间设置代理服务器,以代替客户端向指标服务器发送申请,客户端无奈间接拜访指标服务器。正向代理服务器个别用于加密、缓存、管制拜访、内容过滤等性能。例如,翻墙工具就是一种常见的正向代理利用。

反向代理是在指标服务器和客户端之间设置代理服务器,以代替指标服务器向客户端提供服务,客户端无奈间接拜访指标服务器,所有的申请都要通过反向代理服务器。反向代理服务器能够依据客户端的申请抉择不同的指标服务器,从而实现负载平衡和高可用性。例如,一些大型网站和应用程序就会应用反向代理服务器进行负载平衡和缓存。

两者的次要区别在于代理的方向不同。正向代理是代理客户端,把客户端的申请转发到指标服务器;而反向代理是代理服务器端,把指标服务器的响应转发给客户端。

7 cookie和session的区别

  1. 存储地位:Cookie保留在客户端浏览器上,而Session保留在服务器端。
  2. 安全性:因为Cookie保留在客户端浏览器上,因而能够被窃取和篡改,存在肯定的平安危险;而Session保留在服务器端,相对来说更加平安。
  3. 存储容量:Cookie的存储容量无限,个别只能保留4KB左右的数据;而Session的存储容量没有限度,能够保留更多的数据。
  4. 作用范畴:Cookie的作用范畴是整个域名下的所有页面,能够在多个页面之间共享数据;而Session的作用范畴是以后用户与服务器之间的会话,只能在同一会话期间内共享数据。
  5. 有效期:Cookie能够设置有效期,能够长期保留在客户端浏览器上;而Session个别会在用户敞开浏览器或者肯定工夫内没有操作时主动生效。

综上所述,Cookie适宜保留一些不敏感的数据,如用户的偏好设置、购物车信息等;而Session适宜保留一些敏感的数据,如用户的登录状态、权限信息等。在理论开发中,通常会依据具体的利用场景和需要来抉择适合的机制。

8 nginx 调优

工作过程绑定,最大上传文件大小,事件驱动模型优化,文件描述符优化,防盗链优化,暗藏软件名称和版本号,对于404、502等默认页面的优化,从而对用户敌对展现,禁止歹意域名解析,禁止通过IP地址拜访网站,严格设置web站点目录的权限,通过robot协定以及HTTP_USER_AGENT防爬虫优化。避免ddos单ip并发连贯的管制。status监控模块得开启等等。limit_rate限度上传速率。client_max_body_size容许用户上传的文件最大大小。

chatgpt:

  1. 调整工作过程数:Nginx默认开启的工作过程数是CPU外围数,能够依据服务器性能和利用负载状况进行适当调整。个别状况下,能够将工作过程数设置为2倍或3倍的CPU外围数。
  2. 调整文件句柄限度:Nginx默认的文件句柄限度是1024,能够依据理论状况进行适当调整。能够通过批改零碎参数或者在Nginx配置文件中设置"worker_rlimit_nofile"参数来调整文件句柄限度。
  3. 启用TCP优化参数:Nginx提供了一些TCP优化参数,能够通过设置"tcp_nopush"、"tcp_nodelay"、"keepalive_timeout"等参数来进步TCP连贯性能和可靠性。
  4. 启用Gzip压缩:启用Gzip压缩能够缩小网络传输的数据量,进步页面加载速度。能够在Nginx配置文件中设置"gzip"参数来启用Gzip压缩。
  5. 启用HTTP缓存:启用HTTP缓存能够缩小服务器负载和页面加载工夫,能够在Nginx配置文件中设置"proxy_cache_path"参数来启用HTTP缓存。
  6. 调整Nginx内存占用:Nginx默认的内存占用较低,能够通过设置"worker_processes"、"worker_connections"等参数来调整Nginx内存占用,进步性能和可靠性。

9 零碎呈现大量的 time_wait 问题怎么解决

一次意外,服务器蒙受了ddos攻打,对咱们造成了极大的影响,尽管咱们把前端用户拜访入口敞开暂停了ddos攻打,然而服务器端呈现了大量的time-wait,导致的后果就是新建连贯失败,而且占用了零碎大量的资源,咱们的长期解决办法就是这样的。
在系统配置 sysctl.conf 外面增加两个参数

net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 300net.ipv4.tcp_syncookies = 1

改成1之后,并执行 sysctl -p 命令立刻失效,而后就缓缓下来了。

chatgpt:

time_wait是TCP协定的一种状态,示意一个TCP连贯曾经敞开,然而还须要一段时间期待一些提早的数据包达到。如果零碎中存在大量的time_wait状态的连贯,可能会导致系统资源的节约和性能降落。以下是一些解决方案:

  1. 调整TCP参数:能够通过调整TCP参数来管制time_wait的数量和工夫,如批改tcp_tw_recycle、tcp_tw_reuse等参数。然而须要留神的是,不倡议在生产环境中调整这些参数,因为会带来潜在的危险。
  2. 减少服务器资源:time_wait状态连贯的数量与系统资源无关,减少服务器资源能够升高零碎中time_wait状态连贯的数量,如减少内存、CPU、网络带宽等。
  3. 应用连接池:能够应用连接池来复用曾经建设的TCP连贯,防止频繁的建设和敞开连贯。连接池能够升高time_wait状态连贯的数量,并且能够进步零碎的性能。
  4. 应用TCP疾速回收技术:TCP疾速回收技术是一种基于工夫戳的技术,能够让零碎疾速回收time_wait状态的连贯。能够通过设置net.ipv4.tcp_timestamps=1来启用TCP疾速回收技术。

总之,在解决time_wait问题时,须要依据具体的利用场景和系统资源状况综合思考和调整,以进步零碎的性能和可靠性。同时,须要留神防止不正确的调整参数和配置,造成潜在的危险。

10 拿到一台新服务器后须要干什么,做哪些系统优化

更改ssh的端口,在公网的机器禁用明码登录,抉择密钥登录的形式;

禁止root登录,尽量应用普通用户登录零碎,增加sudo权限;

配置工夫同步,设置网卡名称为 eth0 传统命名形式;

开启防火墙,配置好防火墙规定;

优化内核参数,批改资源限度,比方tcp参数优化,调大文件描述符;

配置本地yum源或者国内源,装置罕用软件包,比方tcpdump等工具包。

chatgpt:

  1. 更新零碎和软件包:首先须要更新操作系统和软件包到最新版本,以获取最新的安全补丁和性能。
  2. 配置防火墙和安全策略:配置防火墙和安全策略能够爱护服务器免受网络攻击和恶意软件的侵害。
  3. 配置近程拜访:配置近程拜访能够不便管理员远程管理服务器,然而须要留神安全性,如应用SSH加密连贯。
  4. 装置必要的软件:装置必要的软件能够不便服务器的治理和保护,如编辑器、日志剖析工具、监控工具等。
  5. 配置系统资源限度:配置系统资源限度能够防止某些过程占用过多的系统资源,导致系统解体或性能降落。
  6. 配置零碎参数:配置零碎参数能够进步零碎的性能和可靠性,如调整文件句柄数、内存大小、网络缓冲区等。
  7. 配置系统日志:配置系统日志能够不便管理员查看零碎的运行状况和错误信息,及时发现和解决问题。
  8. 配置零碎备份:配置零碎备份能够在零碎呈现问题时复原数据和服务,防止数据失落和服务中断。

以上是对新服务器的根本优化倡议,具体的优化办法和步骤须要依据具体的利用场景和系统配置状况综合思考和调整。


对于我
全网可搜《阿贤Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、GitHub、集体博客
公众号:阿贤Linux
集体博客:blog.waluna.top
https://blog.waluna.top/

原文链接: Linux运维工程师面试题(2).