网络适配器
→ 返回 计算机网络
网络适配器(Network Interface Card,NIC)是计算机连接网络的硬件接口,工作在数据链路层与物理层,负责将操作系统的数字信号转换为可在网络介质上传输的电信号、光信号或无线电波。
主要功能
| 功能 | 说明 |
|---|---|
| 数据帧收发 | 封装/解封装以太网帧,添加/校验 FCS |
| MAC 地址标识 | 每块网卡拥有全球唯一的 48 位 MAC 地址 |
| 介质访问控制 | 全双工直接收发;半双工通过 CSMA/CD 检测冲突 |
| 硬件卸载(Offload) | 将 Checksum、分段等计算从 CPU 卸载到网卡芯片 |
| 中断处理 | 数据到达时向 CPU 发中断(或 NAPI 轮询减少中断) |
| 流量控制 | 802.3x 暂停帧,通知对端暂停发送 |
MAC 地址
格式
00 : 1A : 2B : 3C : 4D : 5E
└────────────┘ └────────────┘
OUI(3 字节) 设备序号(3 字节)
厂商唯一标识 厂商自行分配
第一字节最低两位:
bit0 = 0 → 单播地址(Unicast)
bit0 = 1 → 多播地址(Multicast)
bit1 = 0 → 全局唯一(OUI 分配)
bit1 = 1 → 本地管理地址(随机化或手动设置)
| 地址类型 | 示例 | 说明 |
|---|---|---|
| 单播 | 00:1A:2B:3C:4D:5E | 标识单一网卡 |
| 广播 | FF:FF:FF:FF:FF:FF | 同一广播域所有设备接收 |
| 多播 | 01:00:5E:xx:xx:xx | 多播组前缀(IPv4 多播) |
| 随机化 MAC | DA:xx:xx:xx:xx:xx(bit1=1) | 现代手机/OS 连 Wi-Fi 时随机生成,保护隐私 |
MAC 地址的作用范围
主机 A(192.168.1.2)→ 路由器 → 主机 B(10.0.0.5)
局域网段 1:
以太网帧 [src:MAC-A | dst:MAC-路由器] → 路由器
局域网段 2:
以太网帧 [src:MAC-路由器出口 | dst:MAC-B] → 主机 B
MAC 地址只在当前链路段(同一广播域)有效,
经过路由器后源/目标 MAC 都被替换为新的链路段地址。
ARP:IP → MAC 的解析
同局域网内通信,必须先知道目标 IP 对应的 MAC 地址:
主机 A(192.168.1.2)想发数据给 192.168.1.5:
① ARP 请求(广播):
"谁是 192.168.1.5?请告诉我你的 MAC"
src:MAC-A → dst:FF:FF:FF:FF:FF:FF
② ARP 应答(单播):
主机 B(192.168.1.5)回复:
"我是 192.168.1.5,我的 MAC 是 00:AA:BB:CC:DD:EE"
③ 主机 A 缓存 IP→MAC 映射,直接封帧发送
# 查看本机 ARP 缓存
arp -n # Linux
arp -a # Windows
# 手动添加静态 ARP(防 ARP 欺骗)
arp -s 192.168.1.5 00:AA:BB:CC:DD:EEARP 欺骗(ARP Spoofing):攻击者伪造 ARP 应答,将网关 IP 映射到自己的 MAC,截获流量(中间人攻击)。防护:静态 ARP、动态 ARP 检测(DAI)、交换机端口安全。
网卡类型
| 类型 | 接口 | 速率 | 说明 |
|---|---|---|---|
| 有线网卡(Ethernet) | RJ45 | 100M / 1G / 10G / 25G / 100G | 服务器/PC 主流接入 |
| 无线网卡(Wi-Fi) | 内置天线 | 150Mbps~9.6Gbps | IEEE 802.11 系列 |
| 光纤网卡 | SFP/SFP+ 槽 | 1G / 10G / 25G / 100G | 插光模块接光纤 |
| 虚拟网卡 | 软件模拟 | 取决于宿主机 | Docker veth、VPN tun/tap |
| 环回接口(lo) | — | — | 127.0.0.1,本机内部通信 |
| InfiniBand | 专用 | 200Gbps+ | 高性能计算、存储网络 |
全双工 vs 半双工
半双工(Half-Duplex):
收发不能同时进行,使用 CSMA/CD 避免冲突
→ 发送前先监听信道是否空闲
→ 发送中同时检测冲突(检测到冲突则停止,随机等待后重传)
现代交换网络已基本淘汰半双工
全双工(Full-Duplex):
收发完全独立,不存在冲突
→ 每个端口与交换机直接点对点连接,无共享信道
→ 可同时达到标称速率(如 1Gbps 收 + 1Gbps 发)
自动协商(Auto-Negotiation)
网卡与交换机通过 Fast Link Pulse(FLP)自动协商速率和双工模式:
网卡能力广播:[1000BASE-T / 100BASE-TX / 10BASE-T] [全双工 / 半双工]
交换机返回: 选择双方支持的最高能力
结果: 1000BASE-T 全双工
常见问题:一端设为强制 1000M 全双工,另一端自动协商,
可能协商到 100M 半双工导致性能极差(Duplex Mismatch)
硬件卸载(Offload)
高流量下 TCP/IP 栈的 CPU 负担很重,网卡提供硬件卸载特性:
| 特性 | 说明 |
|---|---|
| Checksum Offload | 网卡计算 TCP/UDP/IP 校验和,免去 CPU 计算 |
| TSO(TCP Segmentation Offload) | 将大 TCP 段分割交由网卡完成,减少 CPU 分段次数 |
| GRO(Generic Receive Offload) | 接收时将多个小包合并成大包再交给协议栈 |
| RSS(Receive Side Scaling) | 多队列网卡,将不同流分发到不同 CPU 核,提升并行度 |
| DPDK | 绕过内核协议栈直接由用户态驱动处理包,极致低延迟 |
# 查看/修改 offload 特性(Linux ethtool)
ethtool -k eth0 # 查看所有 offload 状态
ethtool -K eth0 tso off # 关闭 TSO(排障时用)
ethtool -K eth0 gro off # 关闭 GRO常用命令
Linux
# 查看所有网络接口(含 MAC、状态)
ip link show
ip link show eth0 # 单个接口
# 查看 IP 地址(含子网掩码)
ip addr show
ip addr show eth0
# 查看路由表
ip route show
# 启用 / 禁用网卡
ip link set eth0 up
ip link set eth0 down
# 临时设置 IP
ip addr add 192.168.1.100/24 dev eth0
# 查看收发包统计(errors/dropped/overrun)
ip -s link show eth0
# 查看网卡详细信息(速率、双工、自协商状态)
ethtool eth0
# 持续监控网卡流量
watch -n1 'cat /proc/net/dev'Windows
# 查看网卡信息(含 MAC、IP)
ipconfig /all
# 查看 MAC 地址
getmac /v
# 查看 ARP 缓存
arp -a
# 释放 / 重新获取 IP(DHCP)
ipconfig /release
ipconfig /renew
# 刷新 DNS 缓存
ipconfig /flushdns
# 查看网络接口统计
netstat -e虚拟网络接口(Linux)
| 类型 | 说明 | 典型场景 |
|---|---|---|
| veth pair | 成对虚拟网卡,一端发数据另一端收到 | Docker 容器网络(容器内 eth0 ↔ 宿主机 vethXXX) |
| bridge | 虚拟二层交换机,连接多个接口 | Docker bridge 网络、KVM 虚拟机网络 |
| tun | 三层虚拟接口(传递 IP 包) | VPN(OpenVPN、WireGuard) |
| tap | 二层虚拟接口(传递以太网帧) | QEMU/KVM 虚拟机完整以太网模拟 |
| bond | 多网卡聚合,提升带宽或冗余 | 服务器双网卡主备 / 负载均衡 |
| VLAN 子接口 | eth0.10,在单网卡上承载多 VLAN | 一块网卡对接多个 VLAN 的 Trunk 口 |
| macvlan | 在一块物理网卡上创建多个 MAC 地址 | 容器直接接入物理网络,获得独立 MAC/IP |
| ipvlan | 共享 MAC,独立 IP | 容器网络,MAC 受限的环境 |
# 创建 bridge
ip link add br0 type bridge
ip link set eth0 master br0
ip link set br0 up
# 创建 veth pair
ip link add veth0 type veth peer name veth1
# 创建 VLAN 子接口(VLAN 10)
ip link add link eth0 name eth0.10 type vlan id 10
ip link set eth0.10 up