网络基础
运维每天和网络打交道——SSH 要用 TCP、配域名要用 DNS、排查不通要用端口测试。
TCP 三次握手
建立连接前,客户端和服务器要确认双方都能收发:
1 2 3 4 5 6 7 8 9
| 客户端 服务器 │ │ │──── SYN (我想连你) ──────────→│ 第1次 │ │ │←── SYN+ACK (收到,你呢) ──────│ 第2次 │ │ │──── ACK (收到了,开聊) ──────→│ 第3次 │ │ ╞══════ 连接建立 ═══════════════╡
|
面试官问”为什么是三次不是两次”——答:两次只能证明客户端能发、服务器能收;服务器不知道客户端能不能收。第三次确认客户端收到了服务器的回应。
在自己服务器上看
1
| ss -t | awk '{print $1}' | sort | uniq -c
|
输出:
1 2
| 3 ESTAB ← 3 个已建立的连接 1 State ← 表头
|
ss 是 netstat 的替代品,更快更现代。ESTAB = 连接中,LISTEN = 在监听,TIME-WAIT = 刚关闭还在等。
DNS 解析
把域名翻译成 IP:
服务器上 /etc/resolv.conf 存了 DNS 服务器地址:
1
| nameserver 100.100.2.136 ← 阿里云内网 DNS
|
这就是为什么 GitHub 在国内 ping 不通但翻墙能访问——DNS 解析出的 IP 被墙了。
端口测试
测试一个端口通不通,用 nc(netcat):
1 2
| nc -zv 47.99.166.175 443 nc -zv 47.99.166.175 3306
|
| 工具 |
测什么 |
什么情况用 |
ping |
ICMP 协议 |
测延迟,但通了不代表服务活着 |
nc -zv |
TCP 端口 |
测端口通不通,这个通才是真的通 |
curl -v |
HTTP/HTTPS |
看完整请求响应过程 |
双层防火墙
云服务器通常有两层防火墙:
1
| 互联网 → 阿里云安全组(第一层)→ 服务器 iptables(第二层)→ 你的应用
|
安全组 3306 没开 → nc 3306 超时。开了 443 → 浏览器能访问博客。
MySQL 快速上手
用 Docker 一行跑起来
1 2 3 4 5
| docker run -d --name mysql-learn \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=Admin@123 \ -e MYSQL_DATABASE=opsdb \ mysql:8.0
|
基本 CRUD 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| CREATE TABLE servers ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), ip VARCHAR(20), status VARCHAR(20) );
INSERT INTO servers (name, ip, status) VALUES ('博客服务器', '47.99.166.175', '运行中'), ('测试服务器', '10.0.0.1', '已下线');
SELECT * FROM servers; SELECT name, ip FROM servers WHERE status = '运行中';
UPDATE servers SET status = '已下线' WHERE name = '测试服务器';
DELETE FROM servers WHERE name = '测试服务器';
|
进入 MySQL 容器的两种方式
1 2 3 4 5 6
| docker exec -it mysql-learn mysql -uroot -pAdmin@123 opsdb
docker exec -it mysql-learn bash mysql -uroot -pAdmin@123 opsdb
|
运维不一定需要精通 SQL,但至少要会装数据库、连进去、查数据。面试时被问到”用过数据库吗”,能说”我自己在服务器上用 Docker 跑了一个 MySQL,基本的增删改查都会”。