🤵♂️ 个人主页:布说再见 ✍🏻作者简介: 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏📂加关注+
目录
- 运维需要了解
- 你天天用的网络,底层原理居然这么酷?
-
- 1.请解释一下 Linux 和 Windows 系统的区别?
- 2. 如何查看系统的硬件资源使用情况?
- 3.网络基础 “TCP/IP 协议如何工作?
- 传输层(Transport Layer)
- Bash 日志监控脚本
-
-
- Python 定时文件清理脚本
- Ansible 系统巡检 Playbook
- PowerShell 服务监控脚本
-
- 如何管理和优化 Docker 容器?
-
-
- 镜像优化
- 资源限制
- 存储优化
- 网络优化
-
- 总结
运维需要了解
网络基础tcp/ip 、dns、http 运维工具 Docker 脚本能力Shell 监控工具Zabbix、prometheus 了解数据库基础mysql、redis 了解自动化工具,如Ansible、Puppet、Chef、SaltStack等。
你天天用的网络,底层原理居然这么酷?
1.请解释一下 Linux 和 Windows 系统的区别?
内核与架构差异 Linux 基于开源内核(如 Linux Kernel),支持模块化设计,允许用户自定义内核组件。Windows使用闭源的 NT 内核,强调统一性和商业兼容性。Linux 通常运行于更广泛的硬件架构(如 ARM、RISC-V),而 Windows主要支持 x86/64 架构。
2. 如何查看系统的硬件资源使用情况?
在Windows系统中,Ctrl+Shift+Esc
Linux用户
可通过终端命令top或htop查看CPU负载,或使用mpstat命令获取详细统计信息。
查看内存使用
通过free-h命令查看内存和交换分区(Swap)使用情况,-h参数会自动转换为易读单位(GB/MB)。
查看磁盘空间
df -h
使用系统监控工具
pip install glances glances
3.网络基础 “TCP/IP 协议如何工作?
TCP/IP协议是互联网通信的基础,分为四层结构:应用层、传输层、网络层和链路层。传输控制协议(TCP)位于传输层,负责可靠的数据传输,确保数据包有序、无差错地到达目的地。TCP 通过连接建立、数据传输和连接终止三个阶段完成通信。
4.常见应用层协议有哪些?各自的作用是什么?
HTTP/HTTPS:超文本传输协议,用于 Web 页面传输(HTTPS 通过 TLS 加密)。 FTP:文件传输协议,用于文件上传下载(基于 TCP,分控制连接和数据连接)。 SMTP/POP3/IMAP:邮件传输协议(SMTP 发信,POP3/IMAP 收信)。 DNS:域名系统将域名解析为 IP 地址(www.baidu.com→IP)。 DHCP:动态主机配置协议,自动分配 IP 地址及网络参数。
了解4和5
5.HTTP 与 HTTPS 的区别是什么?HTTPS 如何保证安全?
区别:HTTPS 通过 TLS/SSL 加密数据,端口为 443(HTTP 为 80)。 安全原理: 客户端与服务器协商加密算法(如 RSA),生成会话密钥。 服务器通过 CA 证书验证身份,防止中间人攻击。 数据传输时用对称加密(如 AES)提高效率,用非对称加密保护会话密钥。 DNS 解析的过程是怎样的? 客户端先查本地 DNS 缓存,若没有则向本地域名服务器查询。 本地服务器依次向根域名服务器、顶级域名服务器(.com/.cn 等)、权威域名服务器递归查询,最终返回 IP 地址。 为什么 FTP 需要两个连接(控制连接和数据连接)? 控制连接(TCP 21):持续传输命令(如登录、文件操作)。 数据连接(TCP 20):传输实际文件数据(主动模式由服务器发起,被动模式由客户端发起)。
传输层(Transport Layer)
1.TCP 和 UDP 的区别是什么?各自的应用场景有哪些?
| 连接性 | 面向连接(三次握手建立连接) | 无连接(直接发送数据包) |
| 可靠性 | 可靠传输(确认、重传、排序) | 不可靠传输(无确认机制) |
| 传输效率 | 效率低(头部开销大) | 效率高(头部仅 8 字节) |
| 应用场景 | HTTP、FTP、SMTP | 视频流、DNS、SNMP、游戏通信 |
2.TCP 如何实现可靠传输? 确认机制:接收方返回 ACK 确认报文,发送方超时未收到则重传。 序列号(Sequence Number):标记数据顺序,确保接收方按序组装。 流量控制:通过滑动窗口(Window Size)告知发送方当前接收缓冲区大小,避免溢出。 拥塞控制:慢开始(Slow Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)、快恢复(Fast Recovery)。
3.TCP 三次握手的过程是怎样的?为什么需要三次? 过程: 客户端发送 SYN 包(seq=x),请求建立连接。 服务器回复 SYN+ACK 包(seq=y,ack=x+1)。 客户端回复 ACK 包(seq=x+1,ack=y+1),连接建立。 原因:防止失效的连接请求报文段被服务器接收,避免资源浪费(如客户端旧 SYN 延迟到达,服务器若仅两次握手会误判为新连接)。
4.TCP 四次挥手的过程是怎样的?为什么挥手需要四次? 过程: 客户端发送 FIN 包(seq=a),请求关闭连接。 服务器回复 ACK 包(ack=a+1),此时服务器仍可发送数据。 服务器发送 FIN 包(seq=b),请求关闭服务器到客户端的连接。 客户端回复 ACK 包(ack=b+1),等待 2MSL 后关闭连接。 原因:服务器收到 FIN 后,可能还有未发送完的数据,需先回复 ACK 确认,再发送 FIN 关闭连接,因此挥手需要四次。
5.什么是三次握手和四次挥手?,如果服务器无法连接到外网,如何排查?
三次握手是TCP协议建立连接的过程,确保双方具备发送和接收数据的能力。
客户端发送SYN报文:客户端向服务器发送一个SYN(同步序列编号)包,初始序列号为x,状态变为SYN-SENT。
服务器响应SYN-ACK报文:服务器收到SYN包后,发送一个SYN-ACK包,确认号为x+1,同时设置自己的初始序列号为y,状态变为SYN-RECEIVED。
客户端发送ACK报文:客户端收到SYN-ACK包后,发送一个ACK包,确认号为y+1,序列号为x+1,状态变为ESTABLISHED。服务器收到后同样进入ESTABLISHED状态,连接建立完成。
四次挥手是TCP协议断开连接的过程,确保双方数据完全传输完毕。
客户端发送FIN报文:客户端主动关闭连接时,发送FIN包,序列号为u,状态变为FIN-WAIT-1。
服务器响应ACK报文:服务器收到FIN包后,发送ACK包,确认号为u+1,状态变为CLOSE-WAIT。客户端收到ACK后进入FIN-WAIT-2状态。
服务器发送FIN报文:服务器准备好关闭连接时,发送FIN包,序列号为v,状态变为LAST-ACK。
客户端响应ACK报文:客户端收到FIN包后,发送ACK包,确认号为v+1,状态变为TIME-WAIT。服务器收到ACK后关闭连接。客户端等待2MSL(报文最大生存时间)后也关闭连接。
“你有使用过哪些自动化工具或脚本语言?比如 Bash、Python 或 Ansible?”
Bash 日志监控脚本
#!/bin/bash
LOG_FILE="/var/log/nginx/error.log"
ALERT_EMAIL="admin@example.com"
ERROR_THRESHOLD=10
error_count=$(grep -c "ERROR" "$LOG_FILE")
if [ "$error_count" -gt "$ERROR_THRESHOLD" ]; then
mail -s "High Error Rate Detected in Nginx Log" "$ALERT_EMAIL" <<EOF
Warning: $error_count errors found in $LOG_FILE.
Please check the server immediately.
EOF
fi
Python 定时文件清理脚本
import os
import time
from datetime import datetime, timedelta
def clean_old_files(directory, days_threshold):
cutoff = datetime.now() – timedelta(days=days_threshold)
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
mod_time = datetime.fromtimestamp(os.path.getmtime(filepath))
if mod_time < cutoff:
os.remove(filepath)
print(f"Removed: {filepath}")
clean_old_files('/tmp/backups', 30)
Ansible 系统巡检 Playbook
—
– name: System Health Check
hosts: all
tasks:
– name: Check disk usage
command: df –h
register: disk_usage
– name: Check memory usage
command: free –m
register: memory_usage
– name: Save report
copy:
content: |
Disk Usage:
{{ disk_usage.stdout_lines | join('\\n') }}
Memory Usage:
{{ memory_usage.stdout_lines | join('\\n') }}
dest: /var/log/system_check.log
PowerShell 服务监控脚本
$services = @("WinRM", "Spooler", "EventLog")
$output = ""
foreach ($service in $services) {
$status = Get-Service –Name $service | Select-Object Status
$output += "$service Status: $($status.Status)`n"
}
if ($output -match "Stopped") {
Send-MailMessage –From "monitor@domain.com" –To "admin@domain.com" –Subject "Service Alert" –Body $output –SmtpServer "smtp.domain.com"
}
对于日志脚本我应该下个月开始学习,并深入了解。
如何管理和优化 Docker 容器?
镜像优化
- 使用多阶段构建减少镜像层数和体积,例如合并 RUN 指令。
- 选择 Alpine 等轻量级基础镜像,避免包含冗余依赖。
- 定期清理无用镜像:docker image prune -a。
资源限制
- 通过 –memory 和 –cpu 参数限制容器资源,防止单容器耗尽主机资源:docker run –memory=512m –cpus=1.5 my_app
- 使用 docker stats 实时监控资源使用情况。
性能调优技巧
存储优化
- 避免容器存储驱动(如 overlay2)成为瓶颈,对于高 I/O 场景,挂载卷(Volume)替代容器层写入:docker run -v /host/path:/container/path my_app
- 考虑使用 tmpfs mounts 加速临时文件读写。
网络优化
- 选择适当的网络模式(如 host 模式避免 NAT 开销,但牺牲隔离性)。
- 自定义桥接网络优化容器间通信。
编排工具实践 Kubernetes 优化
- 配置 Horizontal Pod Autoscaler(HPA)自动伸缩 Pod 数量。
- 使用 Resource Quotas 和 Limit Ranges 管理命名空间资源。
- 通过 kubectl top 和 Prometheus 监控集群状态。
日志与调试
- 集中日志管理:Fluentd 或 Loki 收集容器日志。
- 使用 kubectl describe pod 排查部署问题。
总结
运维知识体系庞大,需从基础协议(如 TCP/IP、HTTP)、系统操作(Linux/Windows)、自动化工具(Shell/Python/Ansible)到容器技术(Docker/K8s)逐步深入。建议结合实践(如部署简单服务、编写监控脚本)巩固理论,同时关注性能优化与故障排查(如网络连接问题、资源瓶颈),逐步提升运维能力。



