1. Linux网络基础概述
作为一名Linux系统管理员,我经常遇到这样的场景:服务器突然无法连接网络,开发人员抱怨应用响应缓慢,或者安全团队要求排查异常流量。这些问题90%以上都能通过扎实的网络基础知识解决。Linux网络栈就像一座精密的立交桥系统,数据包从网卡进入内核,经过协议栈处理,最终到达应用程序,每个环节都可能成为性能瓶颈或故障点。
理解Linux网络基础,意味着你能:
- 快速定位并解决80%的日常网络问题
- 优化服务器网络性能,提升应用吞吐量
- 构建更安全的网络隔离策略
- 为容器化、云计算等进阶技术打下基础
在接下来的内容中,我将结合15年运维经验,从最底层的网络接口配置讲到高层的协议栈调优,带你建立完整的Linux网络知识框架。不同于教科书式的理论讲解,我会重点分享生产环境中真正有用的实战技巧和排错方法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络接口配置与管理
2.1 网卡基础操作
现代Linux系统通常使用iproute2工具集替代传统的ifconfig。以下是最常用的接口操作命令:
bash复制# 查看所有网络接口信息(包括未激活的)
ip addr show
# 启用/禁用网卡(ens33为示例接口名)
ip link set ens33 up
ip link set ens33 down
# 为接口添加IP地址(临时生效)
ip addr add 192.168.1.100/24 dev ens33
# 删除IP地址
ip addr del 192.168.1.100/24 dev ens33
注意:使用ip命令的配置在重启后会丢失,持久化配置需要修改网络配置文件。不同发行版的配置文件位置不同:
- RHEL/CentOS: /etc/sysconfig/network-scripts/ifcfg-*
- Debian/Ubuntu: /etc/network/interfaces
- Rocky Linux: /etc/NetworkManager/system-connections/
2.2 静态IP与DHCP配置
以Rocky Linux为例,设置静态IP需要编辑网络配置文件:
bash复制# 使用nmcli生成新连接配置
nmcli connection add con-name "static-ens33" ifname ens33 type ethernet ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 8.8.4.4"
# 激活新配置
nmcli connection up "static-ens33"
DHCP配置则更简单:
bash复制nmcli connection modify "static-ens33" ipv4.method auto
nmcli connection up "static-ens33"
2.3 网络接口绑定(Bonding)
在生产环境中,网卡绑定可以提高冗余和带宽。常见的绑定模式有:
| 模式 | 名称 | 特点 | 适用场景 |
|---|---|---|---|
| mode=0 | balance-rr | 轮询发送数据包 | 需要负载均衡 |
| mode=1 | active-backup | 主备切换 | 高可用需求 |
| mode=4 | 802.3ad | LACP动态聚合 | 交换机支持LACP |
配置步骤:
bash复制# 加载bonding模块
modprobe bonding
# 创建bond接口
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=1,miimon=100"
# 添加从属接口
nmcli connection add type bond-slave ifname ens33 master bond0
nmcli connection add type bond-slave ifname ens34 master bond0
# 激活配置
nmcli connection up bond0
3. Linux路由与防火墙
3.1 路由表管理
查看路由表的黄金命令:
bash复制ip route show
route -n # 传统命令,逐渐被淘汰
添加静态路由的两种方式:
bash复制# 临时添加(重启失效)
ip route add 10.0.0.0/8 via 192.168.1.1 dev ens33
# 永久生效(RHEL系)
echo "10.0.0.0/8 via 192.168.1.1 dev ens33" > /etc/sysconfig/network-scripts/route-ens33
3.2 iptables与firewalld
虽然nftables正在取代iptables,但大多数生产环境仍在使用iptables。基本操作:
bash复制# 查看所有规则
iptables -L -n -v
# 允许SSH访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 拒绝ICMP请求
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# 保存规则(RHEL系)
service iptables save
firewalld作为更高层的管理工具:
bash复制# 开放HTTP端口
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
# 限制SSH访问IP
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100/32" service name="ssh" accept' --permanent
4. 网络诊断工具集
4.1 基础诊断三件套
bash复制# 测试连通性
ping -c 4 8.8.8.8
# 跟踪路由路径
traceroute www.example.com
mtr www.example.com # 更强大的替代品
# DNS查询
dig +short www.example.com
nslookup www.example.com
4.2 高级流量分析
tcpdump的实战用法:
bash复制# 抓取ens33接口的HTTP流量
tcpdump -i ens33 -nn 'tcp port 80' -w http.pcap
# 显示与192.168.1.100的通信
tcpdump -i any host 192.168.1.100
Wireshark的过滤表达式备忘:
http.request.method == "GET"tcp.port == 22ip.src == 192.168.1.100
4.3 性能瓶颈定位
bash复制# 查看接口统计
ip -s link show ens33
# 监控实时带宽
nload ens33
# 查看连接状态统计
ss -s
# 找出占用带宽的进程
nethogs ens33
5. TCP/IP协议栈调优
5.1 内核参数优化
关键参数存储在/proc/sys/net/目录下,常用调整:
bash复制# 增大TCP窗口大小
echo "net.ipv4.tcp_window_scaling = 1" >> /etc/sysctl.conf
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
# 应对DDOS攻击
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 4096" >> /etc/sysctl.conf
# 生效配置
sysctl -p
5.2 协议特性启用
bash复制# 开启TCP Fast Open(需要客户端支持)
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
# 启用BBR拥塞控制
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
6. 容器网络基础
6.1 Docker网络模式
| 模式 | 命令示例 | 特点 |
|---|---|---|
| bridge | docker run --net=bridge |
默认模式,NAT网络 |
| host | docker run --net=host |
共享主机网络栈 |
| none | docker run --net=none |
无网络接口 |
| overlay | docker swarm mode |
跨主机网络 |
查看容器IP地址:
bash复制docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
6.2 自定义网络
bash复制# 创建自定义bridge网络
docker network create --driver bridge --subnet 172.25.0.0/16 mynet
# 运行容器并指定IP
docker run --network mynet --ip 172.25.3.100 -itd nginx
7. 常见问题排查手册
7.1 网络不通的排查流程
- 检查物理连接:
ip link show查看接口状态 - 验证IP配置:
ip addr show确认IP地址正确 - 测试网关连通性:
ping 网关IP - 检查DNS解析:
dig 目标域名 - 查看路由路径:
traceroute 目标IP - 分析防火墙规则:
iptables -L -n
7.2 性能问题的检查点
- 使用
ethtool检查网卡配置:bash复制ethtool ens33 | grep -E 'Speed|Duplex' - 确认没有丢包:
bash复制ip -s link show ens33 | grep errors - 检查TCP重传:
bash复制
ss -ti | grep retrans
7.3 连接数优化
对于高并发服务,需要调整连接跟踪表大小:
bash复制echo "net.netfilter.nf_conntrack_max = 655360" >> /etc/sysctl.conf
echo "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200" >> /etc/sysctl.conf
查看当前连接数:
bash复制cat /proc/sys/net/netfilter/nf_conntrack_count
