共计 5956 个字符,预计需要花费 15 分钟才能阅读完成。
Linux 运维工程师面试题(2)
祝各位小伙伴们早日找到本人心仪的工作。
继续学习才不会被淘汰。
地球不爆炸,咱们不放假。
机会总是留给有有筹备的人的。
加油,打工人!
1 拜访一个网站的流程
- 关上浏览器,输出网址。首先查找本地缓存,如果有就关上页面,如果没有,利用 DNS 做域名解析;
- 浏览器收回 DNS 申请,递归查问网站的 IP 地址。HOSTS 表 –> 本地 DNS –> 下层 DNS(包含根 DNS);
- 通过了 DNS 解析,将网址转换为 IP 地址,通过 IP 地址找到指定的 Web 服务器,与服务器建设 tcp 三次握手;
- 握手胜利后浏览器收回 HTTP 申请,默认申请的是 index.html;
- 服务器接管到申请后将网页文件发回给浏览器;
- 浏览器接管到服务器返回的网页文件后,浏览器会解析 html 文件,将渲染后的网页文件出现给用户。
- 浏览器将发回的数据及状态码存入 Cache 以便后续快速访问。
2 TCP 三次握手,四次挥手
三次握手
- 客户端向服务器端发送申请报文,报文中蕴含有随机生成的 seq 序列号(x),并且还将报文中 SYN 字段置为 1,示意须要建设 TCP 连贯申请;
- 服务器端接管申请后回复申请报文,报文中蕴含随机生成的 seq(y)序列号,并且将回复报文的 SYN 字段置 1,示意也须要建设连贯申请,双向确认。而且会产生 ACK 验证字段,将 ACK 确认报文字段置为 1,ACK 验证字段数值是在客户端发过来的 seq(x)序列号根底上加 1 进行回复,即回复 ack(x+1)确认号字段,以便客户端收到信息时,通晓本人的 TCP 建设申请已失去了确认,ack 也能够了解为冀望下次客户端发送的 seq 序列号的值;
- 客户端收到服务端发送的建设 TCP 连贯申请后,会使本人的原有序列号(x)加 1 进行再次发送序列号 seq(x+1),同时回复 ACK 验证申请,将 ACK 字段标记为 1,在服务器端发送过去的 seq(y)根底上加 1,即回复 ack 确认管制字段(y+1),以便服务器端收到信息时,通晓本人的 TCP 建设申请曾经失去了确认,同样 ack 也能够了解为冀望下次服务器端发送的 seq 序列号的值。
三次握手的目标是确保两端的序列号同步,并且单方都能够发送和接收数据。如果第一次握手失败,客户端会反复发送 SYN 包;如果第二次握手失败,服务器也会反复发送 SYN+ACK 包;如果第三次握手失败,客户端会从新发送 ACK 包。
四次挥手
- 客户端被动向服务器端发送敞开连贯申请,此时的序列号 seq 为 u,将报文中的 FIN 字段标记为 1,示意要敞开 TCP 连贯;
- 服务器端收到报文后会发送 ACK 报文验证,将 ACK 置为 1,同时发送 ack(u+1)确认字段,此时的序列号 seq 为 v,此次报文示意曾经收到了完结申请;
- 此时服务器可能还有数据须要发送,因而须要期待一段时间。当服务器实现数据发送后,会发送一个 FIN 包,示意曾经完结 TCP 连贯,将 FIN 标记为 1,ACK 标记为 1,此时的序列号 seq 为 w,确认号 ack 为 u +1;
- 客户端收到 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 的区别
- TCP 是一种面向连贯的协定,而 UDP 是无连贯的协定。TCP 是一对一传输,UDP 反对一对一、一对多、多对一和多对多的交互通信;
- TCP 提供牢靠的数据传输,保证数据可能残缺、有序地达到目的地,而 UDP 不提供可靠性保障,数据传输可能会失落、反复或者乱序。
- TCP 将数据分成一些数据段,每个数据段都有一个序列号,能够保证数据的有序性和完整性。而 UDP 将数据封装成数据报,每个数据报都是独立的,可能会失落、反复或者乱序。
- TCP 是面向字节流的,即把应用层传来的报文看成字节流,将字节流拆分成大小不等的数据块,并增加 TCP 首
部;UDP 是面向报文的,对应用层传下来的报文不拆分也不合并,仅增加 UDP 首部; - UDP 比 TCP 快,因为它没有 TCP 的可靠性保障和简单的流量管制和拥塞管制机制。
- UDP 实用于传输量较小但传输速度要求高的利用,例如视频、音频和游戏等;而 TCP 实用于传输量较大但对可靠性和完整性要求较高的利用,例如文件传输、邮件等。
- 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 的区别
- 存储地位:Cookie 保留在客户端浏览器上,而 Session 保留在服务器端。
- 安全性:因为 Cookie 保留在客户端浏览器上,因而能够被窃取和篡改,存在肯定的平安危险;而 Session 保留在服务器端,相对来说更加平安。
- 存储容量:Cookie 的存储容量无限,个别只能保留 4KB 左右的数据;而 Session 的存储容量没有限度,能够保留更多的数据。
- 作用范畴:Cookie 的作用范畴是整个域名下的所有页面,能够在多个页面之间共享数据;而 Session 的作用范畴是以后用户与服务器之间的会话,只能在同一会话期间内共享数据。
- 有效期:Cookie 能够设置有效期,能够长期保留在客户端浏览器上;而 Session 个别会在用户敞开浏览器或者肯定工夫内没有操作时主动生效。
综上所述,Cookie 适宜保留一些不敏感的数据,如用户的偏好设置、购物车信息等;而 Session 适宜保留一些敏感的数据,如用户的登录状态、权限信息等。在理论开发中,通常会依据具体的利用场景和需要来抉择适合的机制。
8 nginx 调优
工作过程绑定,最大上传文件大小,事件驱动模型优化,文件描述符优化,防盗链优化,暗藏软件名称和版本号,对于 404、502 等默认页面的优化,从而对用户敌对展现,禁止歹意域名解析,禁止通过 IP 地址拜访网站,严格设置 web 站点目录的权限,通过 robot 协定以及 HTTP_USER_AGENT 防爬虫优化。避免 ddos 单 ip 并发连贯的管制。status 监控模块得开启等等。limit_rate 限度上传速率。client_max_body_size 容许用户上传的文件最大大小。
chatgpt:
- 调整工作过程数:Nginx 默认开启的工作过程数是 CPU 外围数,能够依据服务器性能和利用负载状况进行适当调整。个别状况下,能够将工作过程数设置为 2 倍或 3 倍的 CPU 外围数。
- 调整文件句柄限度:Nginx 默认的文件句柄限度是 1024,能够依据理论状况进行适当调整。能够通过批改零碎参数或者在 Nginx 配置文件中设置 ”worker_rlimit_nofile” 参数来调整文件句柄限度。
- 启用 TCP 优化参数:Nginx 提供了一些 TCP 优化参数,能够通过设置 ”tcp_nopush”、”tcp_nodelay”、”keepalive_timeout” 等参数来进步 TCP 连贯性能和可靠性。
- 启用 Gzip 压缩:启用 Gzip 压缩能够缩小网络传输的数据量,进步页面加载速度。能够在 Nginx 配置文件中设置 ”gzip” 参数来启用 Gzip 压缩。
- 启用 HTTP 缓存:启用 HTTP 缓存能够缩小服务器负载和页面加载工夫,能够在 Nginx 配置文件中设置 ”proxy_cache_path” 参数来启用 HTTP 缓存。
- 调整 Nginx 内存占用:Nginx 默认的内存占用较低,能够通过设置 ”worker_processes”、”worker_connections” 等参数来调整 Nginx 内存占用,进步性能和可靠性。
9 零碎呈现大量的 time_wait 问题怎么解决
一次意外,服务器蒙受了 ddos 攻打,对咱们造成了极大的影响,尽管咱们把前端用户拜访入口敞开暂停了 ddos 攻打,然而服务器端呈现了大量的 time-wait,导致的后果就是新建连贯失败,而且占用了零碎大量的资源,咱们的长期解决办法就是这样的。
在系统配置 sysctl.conf
外面增加两个参数
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 300
net.ipv4.tcp_syncookies = 1
改成 1 之后,并执行 sysctl -p
命令立刻失效,而后就缓缓下来了。
chatgpt:
time_wait 是 TCP 协定的一种状态,示意一个 TCP 连贯曾经敞开,然而还须要一段时间期待一些提早的数据包达到。如果零碎中存在大量的 time_wait 状态的连贯,可能会导致系统资源的节约和性能降落。以下是一些解决方案:
- 调整 TCP 参数:能够通过调整 TCP 参数来管制 time_wait 的数量和工夫,如批改 tcp_tw_recycle、tcp_tw_reuse 等参数。然而须要留神的是,不倡议在生产环境中调整这些参数,因为会带来潜在的危险。
- 减少服务器资源:time_wait 状态连贯的数量与系统资源无关,减少服务器资源能够升高零碎中 time_wait 状态连贯的数量,如减少内存、CPU、网络带宽等。
- 应用连接池:能够应用连接池来复用曾经建设的 TCP 连贯,防止频繁的建设和敞开连贯。连接池能够升高 time_wait 状态连贯的数量,并且能够进步零碎的性能。
- 应用 TCP 疾速回收技术:TCP 疾速回收技术是一种基于工夫戳的技术,能够让零碎疾速回收 time_wait 状态的连贯。能够通过设置 net.ipv4.tcp_timestamps= 1 来启用 TCP 疾速回收技术。
总之,在解决 time_wait 问题时,须要依据具体的利用场景和系统资源状况综合思考和调整,以进步零碎的性能和可靠性。同时,须要留神防止不正确的调整参数和配置,造成潜在的危险。
10 拿到一台新服务器后须要干什么,做哪些系统优化
更改 ssh 的端口,在公网的机器禁用明码登录,抉择密钥登录的形式;
禁止 root 登录,尽量应用普通用户登录零碎,增加 sudo 权限;
配置工夫同步,设置网卡名称为 eth0 传统命名形式;
开启防火墙,配置好防火墙规定;
优化内核参数,批改资源限度,比方 tcp 参数优化,调大文件描述符;
配置本地 yum 源或者国内源,装置罕用软件包,比方 tcpdump 等工具包。
chatgpt:
- 更新零碎和软件包:首先须要更新操作系统和软件包到最新版本,以获取最新的安全补丁和性能。
- 配置防火墙和安全策略:配置防火墙和安全策略能够爱护服务器免受网络攻击和恶意软件的侵害。
- 配置近程拜访:配置近程拜访能够不便管理员远程管理服务器,然而须要留神安全性,如应用 SSH 加密连贯。
- 装置必要的软件:装置必要的软件能够不便服务器的治理和保护,如编辑器、日志剖析工具、监控工具等。
- 配置系统资源限度:配置系统资源限度能够防止某些过程占用过多的系统资源,导致系统解体或性能降落。
- 配置零碎参数:配置零碎参数能够进步零碎的性能和可靠性,如调整文件句柄数、内存大小、网络缓冲区等。
- 配置系统日志:配置系统日志能够不便管理员查看零碎的运行状况和错误信息,及时发现和解决问题。
- 配置零碎备份:配置零碎备份能够在零碎呈现问题时复原数据和服务,防止数据失落和服务中断。
以上是对新服务器的根本优化倡议,具体的优化办法和步骤须要依据具体的利用场景和系统配置状况综合思考和调整。
对于我
全网可搜《阿贤 Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、GitHub、集体博客
公众号:阿贤 Linux
集体博客:blog.waluna.top
https://blog.waluna.top/
原文链接: Linux 运维工程师面试题(2).