应用层 │ HTTP/SSH/DNS/...
传输层 │ TCP/UDP
网络层 │ IP/ICMP/ARP
数据链路层 │ 以太网帧/VLAN
物理层 │ 网卡驱动/网线
| 命名 | 来源 | 说明 |
|---|---|---|
| eth0/eth1 | 传统命名 | 按检测顺序 |
| ens33 | PCI插槽 | systemd predictable naming |
| enp0s3 | PCI位置 | bus+slot |
| enx001122334455 | MAC地址 | USB网卡 |
| lo | 回环 | 127.0.0.1 |
| docker0 | 桥接 | Docker创建 |
$ ip addr show | head -25
1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 52:54:00:2d:df:12 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 10.3.4.3/22 metric 100 brd 10.3.7.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe2d:df12/64 scope link valid_lft forever preferred_lft forever 3: br-0ce8d170b79f: mtu 1500 qdisc noqueue state UP group default link/ether 66:eb:f8:f6:93:34 brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 brd 172.18.255.255 scope global br-0ce8d170b79f valid_lft forever preferred_lft forever inet6 fe80::64eb:f8ff:fef6:9334/64 scope link valid_lft forever preferred_lft forever 4: docker0: mtu 1500 qdisc noqueue state DOWN group default link/ether 32:25:20:2d:f4:a7 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::3025:20ff:fe2d:f4a7/64 scope link
$ ip link show | head -15
1: lo:mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:2d:df:12 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 3: br-0ce8d170b79f: mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 66:eb:f8:f6:93:34 brd ff:ff:ff:ff:ff:ff 4: docker0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 32:25:20:2d:f4:a7 brd ff:ff:ff:ff:ff:ff 5: vethf680c5f@if2: mtu 1500 qdisc noqueue master br-0ce8d170b79f state UP mode DEFAULT group default link/ether ea:af:d9:da:08:f3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
# 添加IP地址
sudo ip addr add 192.168.1.100/24 dev eth0
# 删除IP地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 启用/禁用接口
sudo ip link set eth0 up
sudo ip link set eth0 down
# 修改MTU
sudo ip link set eth0 mtu 9000
$ ip route show | head -10
default via 10.3.4.1 dev eth0 proto dhcp src 10.3.4.3 metric 100 10.3.4.0/22 dev eth0 proto kernel scope link src 10.3.4.3 metric 100 10.3.4.1 dev eth0 proto dhcp scope link src 10.3.4.3 metric 100 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 172.18.0.0/16 dev br-0ce8d170b79f proto kernel scope link src 172.18.0.1 183.60.82.98 via 10.3.4.1 dev eth0 proto dhcp src 10.3.4.3 metric 100 183.60.83.19 via 10.3.4.1 dev eth0 proto dhcp src 10.3.4.3 metric 100
# 添加默认路由
sudo ip route add default via 192.168.1.1
# 添加静态路由
sudo ip route add 10.0.0.0/8 via 192.168.1.254
# 删除路由
sudo ip route del 10.0.0.0/8
# 查看路由到某IP的路径
ip route get 8.8.8.8
$ ls /etc/netplan/
50-cloud-init.yaml
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: true
eth1:
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
# 应用配置
sudo netplan apply
sudo netplan try # 交互式测试,超时自动回退
# 查看连接
nmcli device status
nmcli connection show
# 创建静态IP连接
sudo nmcli connection add con-name static ifname eth0 type ethernet \
ip4 192.168.1.100/24 gw4 192.168.1.1
# 修改DNS
sudo nmcli connection modify static ipv4.dns "8.8.8.8 8.8.4.4"
# 启用/禁用连接
sudo nmcli connection up static
sudo nmcli connection down static
$ ss -tlnp | head -10
State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=364290,fd=5),("nginx",pid=364289,fd=5),("nginx",pid=1055,fd=5))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=364290,fd=6),("nginx",pid=364289,fd=6),("nginx",pid=1055,fd=6))
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1000,fd=3),("systemd",pid=1,fd=87))
LISTEN 0 511 0.0.0.0:12440 0.0.0.0:* users:(("node",pid=544551,fd=25))
LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:(("systemd-resolve",pid=803,fd=17))
LISTEN 0 10 127.0.0.1:9222 0.0.0.0:* users:(("chrome",pid=1295,fd=73))
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=803,fd=15))
LISTEN 0 4096 127.0.0.1:45063 0.0.0.0:* users:(("containerd",pid=1049,fd=14))
LISTEN 0 511 127.0.0.1:12442 0.0.0.0:* users:(("node",pid=544551,fd=27))# ping - 测试连通性
ping -c 3 8.8.8.8
# traceroute - 路由追踪
traceroute 8.8.8.8
# mtr - 持续路由追踪
mtr 8.8.8.8
# nslookup/dig - DNS查询
dig google.com
nslookup google.com
# curl - HTTP测试
curl -I https://www.google.com
# nc - 端口测试
nc -zv host 22
# tcpdump - 抓包
sudo tcpdump -i eth0 -n port 80
# 创建命名空间
sudo ip netns add ns1
sudo ip netns add ns2
# 在命名空间中运行命令
sudo ip netns exec ns1 ip link
# 连接两个命名空间(veth pair)
sudo ip link add veth1 type veth peer name veth2
sudo ip link set veth1 netns ns1
sudo ip link set veth2 netns ns2
# 配置IP并测试
sudo ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth1
sudo ip netns exec ns1 ip link set veth1 up
sudo ip netns exec ns2 ip addr add 10.0.0.2/24 dev veth2
sudo ip netns exec ns2 ip link set veth2 up
sudo ip netns exec ns1 ping -c 2 10.0.0.2
# 1. 检查接口状态
ip link show
# 2. 检查IP地址
ip addr show
# 3. 检查路由
ip route show
# 4. 测试本地回环
ping -c 1 127.0.0.1
# 5. 测试网关
ping -c 1 192.168.1.1
# 6. 测试外网IP
ping -c 1 8.8.8.8
# 7. 测试DNS
ping -c 1 google.com
# 8. 抓包分析
sudo tcpdump -i eth0 -n# 1. 查看本机网络配置
ip addr
ip route
cat /etc/resolv.conf
# 2. 测试网络连通性
ping -c 3 8.8.8.8
dig google.com
# 3. 查看监听端口
ss -tlnp
# 4. 追踪路由
traceroute 8.8.8.8 2>/dev/null || tracepath 8.8.8.8✅ 理解Linux网络栈
✅ 掌握ip命令
✅ 学会Netplan/nmcli配置
✅ 了解网络命名空间
✅ 掌握网络诊断工具
# 双网卡绑定,提供冗余和负载均衡
# /etc/netplan/01-bond.yaml
network:
version: 2
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: active-backup # 主备模式
# mode: balance-rr # 轮询
# mode: 802.3ad # LACP(需交换机支持)
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
| 模式 | 编号 | 说明 |
|---|---|---|
| balance-rr | 0 | 轮询,需要交换机支持 |
| active-backup | 1 | 主备,无需交换机配置 |
| balance-xor | 2 | 基于MAC哈希 |
| 802.3ad | 4 | LACP,需交换机支持 |
# /etc/netplan/01-vlan.yaml
network:
version: 2
vlans:
vlan10:
id: 10
link: eth0
addresses: [10.10.10.100/24]
vlan20:
id: 20
link: eth0
addresses: [10.10.20.100/24]
# 调整TCP缓冲区
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
# TCP连接优化
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
sudo sysctl -w net.core.somaxconn=65535
# 持久化 /etc/sysctl.conf
echo "net.core.rmem_max=16777216" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
#!/bin/bash
# net-diag.sh - 网络诊断脚本
echo "===== 网络诊断报告 ====="
echo "时间: $(date)"
echo
echo "--- 1. 接口状态 ---"
ip -br addr
echo "\n--- 2. 路由表 ---"
ip route show
echo "\n--- 3. DNS配置 ---"
cat /etc/resolv.conf | grep nameserver
echo "\n--- 4. 连通性测试 ---"
ping -c 2 -W 2 127.0.0.1 > /dev/null && echo "✅ 回环" || echo "❌ 回环"
ping -c 2 -W 2 $(ip route | grep default | awk '{print $3}') > /dev/null && echo "✅ 网关" || echo "❌ 网关"
ping -c 2 -W 2 8.8.8.8 > /dev/null && echo "✅ 外网IP" || echo "❌ 外网IP"
ping -c 2 -W 2 google.com > /dev/null && echo "✅ DNS" || echo "❌ DNS"
echo "\n--- 5. 监听端口 ---"
ss -tlnp | head -10
echo "\n--- 6. 网络连接统计 ---"
ss -s
echo "\n--- 7. ARP表 ---"
ip neigh show | head -5