Linux 网络基础概念详解:从硬件到应用

Linux 网络基础概念详解:从硬件到应用
XRLinux 网络基础概念详解:从硬件到应用
1. 网络硬件基础
1.1 网卡(Network Interface Card,NIC)
网卡是计算机与网络之间的物理接口,负责网络数据的收发。它是网络通信的物理基础。
1.1.1 网卡类型
按接口类型
- RJ45 接口:最常见的以太网接口
- 光纤接口:支持更高速率和更长距离
- 无线接口:支持 WiFi 连接
- USB 接口:便携式网卡
按速率分类
- 10Mbps:早期以太网
- 100Mbps:快速以太网
- 1Gbps:千兆以太网
- 10Gbps:万兆以太网
- 40Gbps/100Gbps:高速数据中心
按功能分类
- 普通网卡:基本网络连接
- 服务器网卡:支持多队列、TOE
- 智能网卡:支持硬件卸载
- 虚拟化网卡:支持 SR-IOV
1.1.2 网卡工作原理
graph TD
A[网卡] --> B[物理层]
B --> C[数据链路层]
C --> D[网络层]
B --> E[信号处理]
B --> F[时钟同步]
B --> G[编码解码]
C --> H[MAC地址]
C --> I[帧处理]
C --> J[错误检测]
D --> K[数据包处理]
D --> L[协议支持]
D --> M[流量控制]
1.1.3 网卡寄存器
控制寄存器
- 命令寄存器:控制网卡操作
- 状态寄存器:反映网卡状态
- 中断寄存器:管理中断
数据寄存器
- 发送缓冲区
- 接收缓冲区
- DMA 控制
配置寄存器
- MAC 地址
- 工作模式
- 速率设置
1.2 网卡驱动
网卡驱动是操作系统与网卡硬件之间的桥梁,负责管理网卡硬件资源,实现数据包的收发。
1.2.1 驱动架构
graph TD
A[应用层] --> B[Socket API]
B --> C[网络协议栈]
C --> D[网卡驱动]
D --> E[网卡硬件]
D --> F[初始化模块]
D --> G[数据收发模块]
D --> H[中断处理模块]
D --> I[状态管理模块]
1.2.2 驱动功能详解
初始化功能
- 硬件检测和识别
- 寄存器初始化
- 中断设置
- DMA 配置
- 缓冲区分配
数据收发功能
- 数据包封装
- 校验和计算
- DMA 传输
- 错误处理
- 流量控制
中断处理功能
- 接收中断
- 发送完成中断
- 错误中断
- 状态变化中断
状态管理功能
- 链路状态监控
- 错误统计
- 性能统计
- 电源管理
1.2.3 驱动工作流程
sequenceDiagram
participant App as 应用程序
participant Kernel as 内核
participant Driver as 网卡驱动
participant NIC as 网卡硬件
App->>Kernel: 系统调用
Kernel->>Driver: 驱动接口调用
Driver->>NIC: 写寄存器
NIC->>Driver: 中断通知
Driver->>Kernel: 中断处理
Kernel->>App: 返回结果
2. 网络接口
2.1 物理接口
2.1.1 单端口网卡
基本特性
- 单个物理接口
- 标准 MAC 地址
- 基本网络功能
- 适用于普通工作站
使用场景
- 个人电脑
- 普通服务器
- 网络终端设备
2.1.2 多端口网卡
类型
- 双端口网卡
- 四端口网卡
- 八端口网卡
高级特性
- 链路聚合
- 负载均衡
- 故障转移
- 多队列支持
应用场景
- 服务器
- 网络设备
- 存储设备
2.2 虚拟接口
2.2.1 VLAN 接口
工作原理
- 基于 802.1Q 协议
- 在数据帧中添加 VLAN 标签
- 实现虚拟局域网隔离
配置示例
1
2
3
4
5
6
7
8
9
10
11# 创建 VLAN 接口
ip link add link eth0 name eth0.100 type vlan id 100
# 配置 IP 地址
ip addr add 192.168.100.1/24 dev eth0.100
# 启用接口
ip link set eth0.100 up
# 查看 VLAN 信息
ip -d link show eth0.100使用场景
- 网络隔离
- 安全区域划分
- 流量控制
2.2.2 子接口
特性
- 基于物理接口创建
- 支持多个 IP 地址
- 独立的路由表
- 独立的防火墙规则
配置示例
1
2
3
4
5
6
7
8
9
10# 创建子接口
ip addr add 192.168.1.100/24 dev eth0:0
ip addr add 192.168.2.100/24 dev eth0:1
# 配置路由
ip route add 192.168.1.0/24 dev eth0:0
ip route add 192.168.2.0/24 dev eth0:1
# 查看子接口
ip addr show eth0:0应用场景
- 多网段配置
- 网络隔离
- 负载均衡
2.2.3 网桥接口
工作原理
- 二层交换功能
- 学习 MAC 地址
- 转发数据帧
- 支持 STP 协议
配置示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 创建网桥
brctl addbr br0
# 添加接口
brctl addif br0 eth0
brctl addif br0 eth1
# 启用网桥
ip link set br0 up
# 配置 IP 地址
ip addr add 192.168.1.1/24 dev br0
# 查看网桥信息
brctl show使用场景
- 虚拟化环境
- 容器网络
- 网络隔离
2.2.4 绑定接口(Bond)
绑定模式
- mode=0:轮询模式
- mode=1:主备模式
- mode=2:XOR 模式
- mode=3:广播模式
- mode=4:802.3ad 模式
- mode=5:适配器传输负载均衡
- mode=6:适配器适应性负载均衡
配置示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 创建绑定接口
ip link add bond0 type bond
# 配置绑定模式
echo 1 > /sys/class/net/bond0/bonding/mode
# 添加从属接口
ip link set eth0 master bond0
ip link set eth1 master bond0
# 启用绑定接口
ip link set bond0 up
# 配置 IP 地址
ip addr add 192.168.1.100/24 dev bond0
# 查看绑定状态
cat /proc/net/bonding/bond0应用场景
- 高可用性
- 负载均衡
- 带宽聚合
3. 网络协议栈
3.1 协议层次
graph TD
A[应用层] --> B[传输层]
B --> C[网络层]
C --> D[数据链路层]
D --> E[物理层]
A --> F[HTTP/FTP/DNS]
A --> G[SMTP/POP3]
A --> H[SSH/TELNET]
B --> I[TCP]
B --> J[UDP]
C --> K[IP]
C --> L[ICMP]
C --> M[IGMP]
D --> N[以太网]
D --> O[ARP]
D --> P[RARP]
E --> Q[网卡驱动]
E --> R[物理介质]
3.2 关键协议详解
3.2.1 TCP/IP 协议族
IP 协议
- 版本:IPv4/IPv6
- 功能:路由和寻址
- 特点:无连接、不可靠
- 数据包格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25+------------------+
| 版本/头长度 |
+------------------+
| 服务类型 |
+------------------+
| 总长度 |
+------------------+
| 标识 |
+------------------+
| 标志/片偏移 |
+------------------+
| TTL |
+------------------+
| 协议 |
+------------------+
| 校验和 |
+------------------+
| 源IP地址 |
+------------------+
| 目标IP地址 |
+------------------+
| 选项 |
+------------------+
| 数据 |
+------------------+
TCP 协议
- 特点:面向连接、可靠传输
- 功能:流量控制、拥塞控制
- 数据包格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21+------------------+
| 源端口 |
+------------------+
| 目标端口 |
+------------------+
| 序列号 |
+------------------+
| 确认号 |
+------------------+
| 标志位 |
+------------------+
| 窗口大小 |
+------------------+
| 校验和 |
+------------------+
| 紧急指针 |
+------------------+
| 选项 |
+------------------+
| 数据 |
+------------------+
UDP 协议
- 特点:无连接、不可靠
- 功能:简单高效
- 数据包格式:
1
2
3
4
5
6
7
8
9
10
11+------------------+
| 源端口 |
+------------------+
| 目标端口 |
+------------------+
| 长度 |
+------------------+
| 校验和 |
+------------------+
| 数据 |
+------------------+
ICMP 协议
- 功能:网络诊断
- 类型:请求/应答
- 常见消息:
- Echo Request/Reply
- Destination Unreachable
- Time Exceeded
- Parameter Problem
3.2.2 应用层协议
HTTP 协议
- 版本:HTTP/1.0、HTTP/1.1、HTTP/2
- 特点:无状态、可扩展
- 请求方法:GET、POST、PUT、DELETE
- 状态码:200、404、500 等
FTP 协议
- 模式:主动模式、被动模式
- 功能:文件传输
- 命令:PUT、GET、LIST
- 安全:FTPS、SFTP
DNS 协议
- 功能:域名解析
- 记录类型:A、AAAA、CNAME、MX
- 查询类型:递归、迭代
- 端口:53
SMTP 协议
- 功能:邮件传输
- 命令:HELO、MAIL、RCPT、DATA
- 安全:STARTTLS、SMTPS
- 端口:25、465
4. 网络端口
4.1 端口概念详解
端口范围
- 0-1023:知名端口
- 1024-49151:注册端口
- 49152-65535:动态端口
端口状态
- LISTEN:监听状态
- ESTABLISHED:已建立连接
- TIME_WAIT:等待关闭
- CLOSE_WAIT:等待关闭
- FIN_WAIT:等待结束
端口复用
- SO_REUSEADDR
- SO_REUSEPORT
- 多进程监听
- 负载均衡
4.2 常见端口及服务
Web 服务
- 80:HTTP
- 443:HTTPS
- 8080:代理服务器
- 8443:HTTPS 代理
数据库服务
- 3306:MySQL
- 5432:PostgreSQL
- 6379:Redis
- 27017:MongoDB
邮件服务
- 25:SMTP
- 110:POP3
- 143:IMAP
- 465:SMTPS
文件服务
- 21:FTP
- 22:SFTP
- 445:SMB
- 2049:NFS
远程管理
- 22:SSH
- 23:Telnet
- 3389:RDP
- 5900:VNC
5. 防火墙
5.1 iptables 详解
5.1.1 表(Tables)
filter 表
- 默认表
- 用于包过滤
- 链:INPUT、OUTPUT、FORWARD
nat 表
- 用于地址转换
- 链:PREROUTING、POSTROUTING、OUTPUT
mangle 表
- 用于数据包修改
- 链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
raw 表
- 用于连接跟踪
- 链:PREROUTING、OUTPUT
5.1.2 链(Chains)
INPUT 链
- 处理入站数据包
- 目标地址为本机
- 常用规则:
1
2
3
4
5
6
7
8# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许特定端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许特定 IP
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
OUTPUT 链
- 处理出站数据包
- 源地址为本机
- 常用规则:
1
2
3
4
5# 允许所有出站流量
iptables -A OUTPUT -j ACCEPT
# 限制特定端口
iptables -A OUTPUT -p tcp --dport 25 -j DROP
FORWARD 链
- 处理转发数据包
- 经过本机的数据包
- 常用规则:
1
2
3
4
5# 允许转发
iptables -A FORWARD -j ACCEPT
# 限制特定网段
iptables -A FORWARD -s 192.168.1.0/24 -j DROP
PREROUTING 链
- 数据包进入路由表之前
- 用于 DNAT
- 常用规则:
1
2# 端口转发
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
POSTROUTING 链
- 数据包离开路由表之后
- 用于 SNAT
- 常用规则:
1
2# 源地址转换
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1
5.1.3 匹配条件
基本匹配
- 源地址:-s
- 目标地址:-d
- 协议:-p
- 接口:-i/-o
扩展匹配
- 状态:-m state
- 多端口:-m multiport
- 连接限制:-m limit
- 字符串:-m string
目标动作
- ACCEPT:接受
- DROP:丢弃
- REJECT:拒绝
- LOG:记录
- DNAT:目标地址转换
- SNAT:源地址转换
5.2 防火墙规则示例
基本防护
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 清除现有规则
iptables -F
iptables -X
iptables -Z
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPTNAT 配置
1
2
3
4
5
6
7
8# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置 SNAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1
# 配置 DNAT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080高级规则
1
2
3
4
5
6
7
8# 限制连接数
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
# 防止 SYN 洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 记录特定流量
iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP: "
6. 完整数据流程
6.1 数据包发送流程
sequenceDiagram
participant App as Java应用
participant Socket as Socket API
participant TCP as TCP层
participant IP as IP层
participant NIC as 网卡驱动
participant HW as 网卡硬件
participant Net as 网络
App->>Socket: 调用write()
Socket->>Socket: 数据复制到内核缓冲区
Socket->>TCP: 数据封装
TCP->>TCP: 添加TCP头
TCP->>TCP: 计算校验和
TCP->>IP: 添加TCP头
IP->>IP: 添加IP头
IP->>IP: 计算校验和
IP->>IP: 路由查找
IP->>NIC: 数据包发送
NIC->>NIC: DMA传输
NIC->>HW: 数据包发送
HW->>HW: 添加帧头
HW->>HW: 计算FCS
HW->>Net: 物理发送
6.2 数据包接收流程
sequenceDiagram
participant Net as 网络
participant HW as 网卡硬件
participant NIC as 网卡驱动
participant IP as IP层
participant TCP as TCP层
participant Socket as Socket API
participant App as Java应用
Net->>HW: 接收数据包
HW->>HW: 校验FCS
HW->>HW: 去除帧头
HW->>NIC: 触发中断
NIC->>NIC: 中断处理
NIC->>NIC: DMA传输
NIC->>IP: 数据包接收
IP->>IP: 校验IP头
IP->>IP: 去除IP头
IP->>TCP: 数据包传递
TCP->>TCP: 校验TCP头
TCP->>TCP: 去除TCP头
TCP->>TCP: 重组数据包
TCP->>Socket: 数据就绪
Socket->>App: 通知应用
App->>Socket: 调用read()
Socket->>App: 返回数据
6.3 详细处理流程
graph TD
A[客户端] -->|发送请求| B[网络]
B -->|数据包到达| C[网卡]
C -->|触发中断| D[网卡驱动]
D -->|DMA传输| E[内核缓冲区]
E -->|软中断| F[网络协议栈]
F -->|协议解析| G[Socket层]
G -->|数据就绪| H[Java NIO]
H -->|事件通知| I[Java应用]
I -->|处理请求| J[业务逻辑]
C -->|硬件校验| K[帧校验]
K -->|校验通过| D
K -->|校验失败| L[丢弃数据包]
F -->|IP层处理| M[路由查找]
M -->|找到路由| F
M -->|未找到路由| N[ICMP错误]
F -->|TCP层处理| O[连接跟踪]
O -->|新连接| P[创建连接]
O -->|已有连接| Q[更新连接]
G -->|Socket处理| R[缓冲区管理]
R -->|缓冲区满| S[流量控制]
R -->|缓冲区空| T[等待数据]
H -->|NIO处理| U[事件循环]
U -->|读事件| V[数据读取]
U -->|写事件| W[数据发送]
I -->|应用处理| X[请求解析]
X -->|业务处理| Y[响应生成]
Y -->|数据发送| Z[响应返回]
7. 网络性能优化
7.1 系统层面
7.1.1 网卡优化
中断合并
- 减少 CPU 中断
- 提高吞吐量
- 配置示例:
1
2
3
4
5# 查看中断合并设置
ethtool -c eth0
# 设置中断合并
ethtool -C eth0 rx-usecs 100 tx-usecs 100
多队列支持
- 多 CPU 处理
- 负载均衡
- 配置示例:
1
2
3
4
5# 查看队列数
ethtool -l eth0
# 设置队列数
ethtool -L eth0 combined 8
大页内存
- 减少 TLB 缺失
- 提高性能
- 配置示例:
1
2
3
4
5# 分配大页
echo 1024 > /proc/sys/vm/nr_hugepages
# 挂载大页文件系统
mount -t hugetlbfs none /dev/hugepages
7.1.2 协议栈优化
TCP 参数调优
- 缓冲区大小
- 超时设置
- 拥塞控制
- 配置示例:
1
2
3
4
5
6
7
8
9
10# 设置 TCP 缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
# 设置 TCP 超时
sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=15
# 设置拥塞控制
sysctl -w net.ipv4.tcp_congestion_control=cubic
连接跟踪
- 优化连接表
- 超时设置
- 配置示例:
1
2
3
4
5# 设置连接跟踪表大小
sysctl -w net.netfilter.nf_conntrack_max=1000000
# 设置超时时间
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=3600
7.2 应用层面
7.2.1 Java 网络优化
NIO 使用
- 非阻塞 IO
- 事件驱动
- 示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26// 创建 Selector
Selector selector = Selector.open();
// 创建 ServerSocketChannel
ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.socket().bind(new InetSocketAddress(8080));
serverChannel.register(selector, SelectionKey.OP_ACCEPT);
// 事件循环
while (true) {
selector.select();
Set<SelectionKey> keys = selector.selectedKeys();
Iterator<SelectionKey> it = keys.iterator();
while (it.hasNext()) {
SelectionKey key = it.next();
it.remove();
if (key.isAcceptable()) {
// 处理连接
} else if (key.isReadable()) {
// 处理读取
} else if (key.isWritable()) {
// 处理写入
}
}
}
连接池管理
- 连接复用
- 超时控制
- 示例配置:
1
2
3
4
5
6
7
8
9
10
11
12
13// 创建连接池
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(20);
// 创建 HttpClient
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.build())
.build();
超时设置
- 连接超时
- 读取超时
- 写入超时
- 示例代码:
1
2
3
4// 设置超时
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port), 5000);
socket.setSoTimeout(5000);
7.2.2 监控指标
网络吞吐量
- 带宽使用率
- 数据包速率
- 错误率
- 监控工具:
1
2
3
4
5
6
7
8
9# 使用 iftop 监控带宽
iftop -i eth0
# 使用 nethogs 监控进程
nethogs eth0
# 使用 iperf 测试带宽
iperf -s
iperf -c server
延迟统计
- 往返时间
- 连接延迟
- 处理延迟
- 监控工具:
1
2
3
4
5# 使用 ping 测试延迟
ping -c 100 server
# 使用 tcpping 测试 TCP 延迟
tcpping -c 100 server 80
错误计数
- 丢包率
- 重传率
- 错误率
- 监控工具:
1
2
3
4
5# 查看网卡统计
ethtool -S eth0
# 查看 TCP 统计
netstat -s
8. 常见问题排查
8.1 网络连接问题
8.1.1 物理层
网线连接
- 检查网线
- 检查接口
- 检查指示灯
- 排查步骤:
1
2
3
4
5
6
7
8# 查看网卡状态
ethtool eth0
# 查看接口信息
ip link show eth0
# 测试网线
mii-tool eth0
网卡状态
- 驱动加载
- 中断配置
- DMA 设置
- 排查步骤:
1
2
3
4
5
6
7
8# 查看驱动信息
lsmod | grep e1000
# 查看中断
cat /proc/interrupts
# 查看 DMA
dmesg | grep DMA
驱动问题
- 驱动版本
- 兼容性
- 配置参数
- 排查步骤:
1
2
3
4
5
6
7
8
9# 更新驱动
modprobe -r e1000
modprobe e1000
# 查看驱动参数
modinfo e1000
# 设置驱动参数
echo "options e1000 debug=1" > /etc/modprobe.d/e1000.conf
8.1.2 网络层
IP 配置
- 地址设置
- 子网掩码
- 网关配置
- 排查步骤:
1
2
3
4
5
6
7
8# 查看 IP 配置
ip addr show
# 配置 IP 地址
ip addr add 192.168.1.100/24 dev eth0
# 配置网关
ip route add default via 192.168.1.1
路由表
- 路由条目
- 默认路由
- 策略路由
- 排查步骤:
1
2
3
4
5
6
7
8# 查看路由表
ip route show
# 添加路由
ip route add 192.168.2.0/24 via 192.168.1.1
# 删除路由
ip route del 192.168.2.0/24
防火墙规则
- 规则配置
- 链设置
- 策略配置
- 排查步骤:
1
2
3
4
5
6
7
8# 查看规则
iptables -L -n -v
# 添加规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 保存规则
iptables-save > /etc/iptables/rules.v4
8.1.3 应用层
端口监听
- 服务状态
- 端口占用
- 访问权限
- 排查步骤:
1
2
3
4
5
6
7
8# 查看端口
netstat -tuln
# 查看进程
lsof -i :80
# 测试端口
telnet localhost 80
服务状态
- 进程状态
- 日志信息
- 配置检查
- 排查步骤:
1
2
3
4
5
6
7
8# 查看服务状态
systemctl status nginx
# 查看日志
journalctl -u nginx
# 检查配置
nginx -t
日志分析
- 错误日志
- 访问日志
- 系统日志
- 排查步骤:
1
2
3
4
5
6
7
8# 查看系统日志
tail -f /var/log/syslog
# 查看应用日志
tail -f /var/log/nginx/error.log
# 分析日志
grep "error" /var/log/nginx/error.log
8.2 性能问题
8.2.1 系统资源
CPU 使用率
- 进程 CPU
- 中断处理
- 上下文切换
- 排查步骤:
1
2
3
4
5
6
7
8# 查看 CPU 使用
top
# 查看中断
cat /proc/interrupts
# 查看上下文切换
vmstat 1
内存使用
- 物理内存
- 虚拟内存
- 缓冲区
- 排查步骤:
1
2
3
4
5
6
7
8# 查看内存使用
free -m
# 查看虚拟内存
vmstat 1
# 查看缓冲区
cat /proc/meminfo
网络带宽
- 带宽使用
- 数据包大小
- 协议分布
- 排查步骤:
1
2
3
4
5
6
7
8# 查看带宽使用
iftop -i eth0
# 查看数据包
tcpdump -i eth0
# 查看协议分布
nethogs eth0
8.2.2 应用资源
连接数
- 活动连接
- 等待连接
- 连接限制
- 排查步骤:
1
2
3
4
5
6
7
8# 查看连接数
netstat -an | grep ESTABLISHED | wc -l
# 查看等待连接
netstat -an | grep LISTEN | wc -l
# 查看连接限制
ulimit -n
线程数
- 活动线程
- 线程池
- 线程限制
- 排查步骤:
1
2
3
4
5
6
7
8# 查看线程数
ps -eLf | wc -l
# 查看线程池
jstack <pid>
# 查看线程限制
ulimit -u
缓冲区大小
- 发送缓冲区
- 接收缓冲区
- 缓冲区限制
- 排查步骤:
1
2
3
4
5
6
7
8
9# 查看缓冲区
sysctl -a | grep mem
# 设置缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
# 查看限制
ulimit -a
9. 总结
Linux 网络是一个复杂的系统,涉及从硬件到应用的多个层次。理解这些基础概念和完整的数据流程,对于网络问题排查和性能优化都至关重要。通过本文的详细介绍,读者可以:
- 理解网络硬件和驱动的工作原理
- 掌握网络接口的配置和管理
- 了解网络协议栈的工作机制
- 熟悉防火墙的配置和使用
- 掌握网络性能优化的方法
- 学会网络问题的排查技巧
参考资料
- Linux 内核网络子系统文档
- TCP/IP 协议详解
- Java NIO 编程指南
- Linux 网络性能调优指南
- iptables 官方文档
- 网络故障排查手册
评论
匿名评论隐私政策










