本章从系统讲解 Linux 网络------IP 地址基础、网络配置命令(ifconfig / ip / route / ss / nmcli)、配置文件、TCP/IP 协议原理(三次握手、四次挥手、报文结构、状态转移)等。原文所有内容完整保留,同时补充了 Mermaid 图、对比表、生活例子和概念解释。
📌 本章核心概念一览
| 概念 | 一句话理解 |
|---|---|
| IP 地址 | 网络上主机的唯一标识,由网络位+主机位组成,配合掩码确定"同网段"。 |
| 子网掩码 | 用二进制 1 标出"网络位",与 IP 做 AND 运算得到网络地址。 |
| 网关 | 本网段出口设备,跨网段通信时数据包先发到网关,由它转发。 |
| 路由 | 路由表记录"目标网段 → 下一跳/出口",选路就是查表决定往哪发。 |
| DNS | 把域名解析成 IP,Linux 最多 3 个 DNS,只有主 DNS 不可达才用备用。 |
| TCP | 面向连接、可靠、字节流;先握手建连,传完再挥手断开。 |
| UDP | 无连接、不保证可靠、按数据报收发;简单快速,适合实时或查询。 |
| 三次握手 | 双方互换 SYN/ACK,确认"都能发、都能收",才进入数据传输。 |
| 四次挥手 | 一方说 FIN,对方先 ACK 再发自己的 FIN,最后再 ACK,保证双向都关干净。 |
📑 目录
- [一、网络基础:IP 地址、子网掩码与路由](#一、网络基础:IP 地址、子网掩码与路由)
- [二、Linux 主机接入网络的要素](#二、Linux 主机接入网络的要素)
- 三、网络配置方式总览
- 四、网络接口命名
- [五、ifcfg 系列命令:ifconfig / route / netstat](#五、ifcfg 系列命令:ifconfig / route / netstat)
- [六、iproute2 系列命令:ip / ss](#六、iproute2 系列命令:ip / ss)
- [七、nmcli 命令(CentOS 7)](#七、nmcli 命令(CentOS 7))
- 八、配置文件详解
- [九、TCP/IP 协议基础](#九、TCP/IP 协议基础)
- [十、TCP 报文头部结构详解](#十、TCP 报文头部结构详解)
- [十一、TCP 连接:三次握手与四次挥手](#十一、TCP 连接:三次握手与四次挥手)
- [十二、TCP 状态转移全过程](#十二、TCP 状态转移全过程)
- [十三、TCP 可靠传输机制](#十三、TCP 可靠传输机制)
- 十四、命令对比速查
- [十五、Shell 脚本与练习题](#十五、Shell 脚本与练习题)
- 附录
一、网络基础:IP 地址、子网掩码与路由 🏠
1.1 什么是 IP 地址?
概念定义 :IP 地址 (Internet Protocol Address)是分配给网络中每台主机(或网卡)的逻辑地址,用来在网络上唯一标识该主机,使数据包能够被正确投递。IPv4 地址长度为 32 位二进制,通常写成 4 段十进制(点分十进制),每段 0--255。
生活例子 :IP 地址就像你家的门牌号。快递员(数据包)根据门牌号才能找到你家(目标主机)。
结构要点:
-
二进制形式 :32 位,例如
11011101.00100010.00010111.00001100。 -
点分十进制 :每 8 位一段,写成
221.34.23.12。 -
网络位 + 主机位 :前若干位表示"哪条街"(网络),后若干位表示"哪一户"(主机);具体划分由子网掩码决定。
示例:221.34.23.12
11011101 . 00100010 . 00010111 . 00001100
221 . 34 . 23 . 12
1.2 IP 地址分类(A/B/C/D/E)
概念定义 :早期 IPv4 按第一字节的高位 把地址划成 A、B、C、D、E 五类,用于区分"网络位占多少、主机位占多少",从而确定默认掩码和每网段可容纳主机数。现在实际组网多用 CIDR(无类编址),不再严格按类,但理解分类有助于看默认掩码和网段范围。
🌐 IPv4 地址
A 类
1.x.x.x ~ 126.x.x.x
大型网络
B 类
128.x.x.x ~ 191.x.x.x
中型网络
C 类
192.x.x.x ~ 223.x.x.x
小型网络
D 类
224 ~ 239
组播
E 类
240 ~ 255
实验保留
| 类别 | 首位模式 | 第一字节范围 | 默认掩码 | 网络数 | 每网络主机数 | 用途 |
|---|---|---|---|---|---|---|
| A 类 | 0xxxxxxx |
1--126 | 255.0.0.0(/8) | 126(127 回环) | 2^24 - 2 = 16,777,214 | ISP、大型企业 |
| B 类 | 10xxxxxx |
128--191 | 255.255.0.0(/16) | 2^14 = 16,384 | 2^16 - 2 = 65,534 | 中型企业、学校 |
| C 类 | 110xxxxx |
192--223 | 255.255.255.0(/24) | 2^21 = 2,097,152 | 2^8 - 2 = 254 | 小公司、家庭 |
| D 类 | 1110xxxx |
224--239 | --- | --- | --- | 组播(多播) |
| E 类 | 1111xxxx |
240--255 | --- | --- | --- | 实验 / 保留 |
⚠️ 为什么减 2:主机位全 0 = 网络地址(这条街本身),主机位全 1 = 广播地址(给这条街所有人喊话)。
⚠️ 127.0.0.1 是本机回环测试地址(localhost),不属于任何类。
1.3 私有地址(内网地址)
生活例子 :私有地址像小区内部门牌------小区内互相认识,但快递到了小区门口要通过保安亭(NAT 网关)转成公网地址才能寄出去。
| 类别 | 私有地址范围 | CIDR 表示 | 常见场景 |
|---|---|---|---|
| A 类 | 10.0.0.0 -- 10.255.255.255 | 10.0.0.0/8 | 大公司内网、云 VPC |
| B 类 | 172.16.0.0 -- 172.31.255.255 | 172.16.0.0/12 | Docker 默认网络 |
| C 类 | 192.168.0.0 -- 192.168.255.255 | 192.168.0.0/16 | 家庭路由器、办公室 |
其他特殊地址:
169.254.0.0/16:保留地址(DHCP 获取失败时自动分配)127.0.0.0/8:回环地址
1.4 子网掩码与 CIDR
概念定义 :子网掩码 (Netmask)是一串与 IP 等长的二进制数,其中为 1 的位对应 IP 的网络位,为 0 的位对应主机位 。将 IP 与掩码按位做 AND 运算 ,得到的就是网络地址 (网段本身);主机位全 0 表示网络地址,主机位全 1 表示广播地址,因此同一网段内可用主机数要减 2。
生活例子 :子网掩码就像一把"尺子",标出 IP 中哪一段是街道号、哪一段是门牌号。
计算示例:
IP: 192.168.1.100 = 11000000.10101000.00000001.01100100
MASK: 255.255.255.0 = 11111111.11111111.11111111.00000000
←--- 网络位(24 位)---→ ←--- 主机位(8 位)---→
IP AND MASK = 网络地址 = 192.168.1.0
CIDR 表示法 :用"斜杠 + 网络位个数"简写掩码,如 192.168.1.100/24 表示前 24 位为网络位,等价于掩码 255.255.255.0。
1.5 路由与网关
概念定义:
- 网关 (Gateway):本网段的"出口"设备(通常是路由器接口)。当目标 IP 与自己在不同网段 时,主机不会直接发往目标,而是把数据包发给网关,由网关再查表转发(即"下一跳")。
- 路由 (Routing):根据路由表决定"发往某目标的数据包应从哪个接口、经哪个下一跳发出"的过程。路由表里每条记录包含:目标网段、掩码、下一跳(网关)、出口网卡等。
生活例子 :网关 像小区大门------出小区的包裹都先到大门。路由像快递分拣表------查表决定"这个地址的包裹该走哪个大门、下一站送哪"。
路由条目的三种类型:
| 类型 | 目标 | 含义 | 生活例子 |
|---|---|---|---|
| 主机路由 | 单个 IP | 只针对某一台主机 | 指定给某个人的快递路线 |
| 网络路由 | 一个网段(如 10.0.0.0/8) | 发往该网段的包都走这条 | 某条街的包裹统一路线 |
| 默认路由 | 0.0.0.0/0 | 所有"未命中其他条目"的包都走这条 | "其他一律走大门" |
1.6 DNS 服务器
概念定义 :DNS (Domain Name System,域名系统)把域名 (如 www.baidu.com)解析成 IP 地址 (如 220.181.38.148),这样用户只需记住名字,由系统自动查表得到地址再发起连接。
生活例子 :DNS 像电话簿------你报名字,它给你号码。
Linux 行为要点 :可配置最多 3 个 DNS 服务器。只有当前正在用的那个 DNS 不可达时才会尝试下一个;若某次解析请求失败(例如域名不存在),不会自动换第二个 DNS 重试,而是直接返回失败。
1.7 ICANN 与 IANA
- ICANN(Internet Corporation for Assigned Names and Numbers):互联网名称与数字地址分配机构,负责域名和 IP 等资源的政策与协调。
- IANA(Internet Assigned Numbers Authority):互联网号码分配局,负责全球 IP 地址块、协议号等具体分配。
本节概念小结 :IP 是主机的逻辑地址,掩码 用来从 IP 中析出网络地址和主机范围;网关 是本网段出口,路由 决定"发往某目标该走哪条路";DNS 把域名解析成 IP。同网段通信只需 IP+掩码;跨网段必须经网关并依赖路由表;用域名访问则还需 DNS。
二、Linux 主机接入网络的要素 🔗
本地通信
跨网段通信
域名解析
IP + NETMASK
同网段主机
GATEWAY 网关
远程主机
DNS 服务器
www.example.com
| 要素 | 作用 | 生活例子 |
|---|---|---|
| IP 地址 | 本机在网络中的身份 | 你家门牌号 |
| 子网掩码 | 确定网络范围 | 你在哪条街 |
| 网关 | 跨网段通信的出口 | 小区大门 |
| DNS | 域名 → IP 解析 | 电话簿 |
| 主机名 | 本机名称标识 | 你家名字 |
三、网络配置方式总览 📋
概念要点 :Linux 下网络属性(IP、掩码、网关、DNS 等)的配置有两种层次 ------从哪里读 (配置文件 vs 当前内核状态)和谁在分配 (手动静态 vs DHCP 动态)。命令改的是当前内核状态 ,重启或重启网络服务后会按配置文件重新加载,所以命令配置默认是临时的;要永久生效,必须改配置文件并重启网络服务。
网络配置方式
手动静态配置
动态分配 DHCP
命令方式
立即生效,重启失效
配置文件
需重启服务,永久有效
ifcfg 系列
ifconfig / route / netstat
iproute2 系列
ip / ss
NetworkManager
nmcli / nmtui
/etc/sysconfig/network-scripts/ifcfg-IFACE
| 方式 | 生效时间 | 持久性 | 适用 |
|---|---|---|---|
| 命令配置 | 立即生效 | 重启网络服务或主机后失效 | 临时测试、排障 |
| 配置文件 | 需重启服务后才生效 | 永久有效(重启机器仍保留) | 生产环境 |
| DHCP | 由 DHCP 服务器分配,续约时可能变 | 依赖租约,不能固定 IP | 办公电脑、笔记本 |
⚠️ DHCP (Dynamic Host Configuration Protocol):由局域网内的 DHCP 服务器自动分配 IP、掩码、网关、DNS 等;主机无法在 DHCP 模式下"写死"固定 IP。若获取失败,系统可能使用 169.254.x.x 的链路本地地址。
四、网络接口命名 🏷️
4.1 传统命名
| 类型 | 命名 | 示例 |
|---|---|---|
| 以太网 | eth# | eth0, eth1, eth2 |
| PPP 网络 | ppp# | ppp0, ppp1 |
4.2 CentOS 7 可预测命名方案
CentOS 7 支持多种命名机制,按优先级依次尝试:
| 优先级 | 来源 | 命名格式 | 示例 |
|---|---|---|---|
| 1 | Firmware/BIOS 板载索引 | eno# | eno1, eno2 |
| 2 | PCI-E 扩展槽索引 | ens# | ens1, ens33 |
| 3 | 硬件物理位置 | enp#s# | enp2s0 |
| 4 | MAC 地址 | enx# | eno16777736 |
| 5 | 以上不可用 | 传统 eth# | eth0 |
4.3 命名格式组成
| 前缀 | 含义 |
|---|---|
| en | Ethernet,以太网 |
| wl | WLAN,无线局域网 |
| ww | WWAN,无线广域网 |
| 后缀 | 含义 |
|---|---|
| o<index> | 集成设备的索引号 |
| s<slot> | 扩展槽索引号 |
| x<MAC> | 基于 MAC 地址 |
| p<bus>s<slot> | 基于总线和槽的拓扑 |
五、ifcfg 系列命令:ifconfig / route / netstat 🔧
5.1 ifconfig 命令
生活例子 :
ifconfig就像去邮局查看/修改你家门牌号------能看到当前地址,也能临时换一个。
查看网卡信息
bash
ifconfig # 显示所有激活的网卡
ifconfig -a # 显示所有网卡,包括未激活的
ifconfig eth0 # 只看 eth0
CentOS 7 显示含义:
| 字段 | 含义 |
|---|---|
eno16777736 |
网卡接口名称 |
flags: UP |
网卡启用激活状态 |
mtu 1500 |
最大传输单元(Maximum Transmission Unit)1500 字节 |
inet |
IPv4 地址 |
netmask |
子网掩码 |
broadcast |
广播地址 |
inet6 |
IPv6 地址 |
ether/HWaddr |
MAC 硬件地址 |
txqueuelen 1000 |
以太网传输队列长度 |
RX packets/bytes |
接收的报文数量和总大小 |
TX packets/bytes |
发送的报文数量和总大小 |
RX/TX errors |
接收/发送错误数 |
dropped |
丢包数 |
overruns |
溢出数 |
配置 IP 地址
bash
# 两种写法
ifconfig eth0 172.16.251.48 netmask 255.255.0.0
ifconfig eth0 172.16.251.48/16
# 配置后立即生效,但重启网络服务或主机后失效
# 远程连接修改 IP 会导致原地址消失→掉线!
添加多个地址(别名接口)
bash
ifconfig eth0:0 192.168.2.24/24 # 给 eth0 添加别名 eth0:0
ifconfig eth0:1 10.0.0.1/8 # 再加一个 eth0:1
# 别名接口不支持 DHCP 动态获取
启用 / 关闭 / 删除
bash
ifconfig eth0 up # 启用网卡
ifconfig eth0 down # 关闭网卡
ifconfig eth1 0 # 删除 eth1 上的地址(将 IP 设为 0)
ifup eth0 # 通过配置文件启用(需 ifcfg-eth0 存在)
ifdown eth0 # 通过配置文件关闭
混杂模式
bash
ifconfig eth0 promisc # 进入混杂模式(抓取所有经过网卡的包)
ifconfig eth0 -promisc # 关闭混杂模式
管理 IPv6 地址
bash
ifconfig eth0 add addr/prefixlen # 添加 IPv6
ifconfig eth0 del addr/prefixlen # 删除 IPv6
5.2 route 命令
生活例子 :
route就像查看/编辑快递分拣表------看包裹该往哪个方向送,或添加一条新路线。
查看路由表
bash
route -n # 以数字显示,不反解地址(省资源)
输出字段:
| 字段 | 含义 | 说明 |
|---|---|---|
Destination |
目标地址 | 要去哪里 |
Gateway |
下一跳网关 | 0.0.0.0 表示直连,不需要网关 |
Genmask |
目标网络掩码 | 目标有多大范围 |
Flags |
标志 | U=启用 G=网关 H=主机路由 |
Metric |
度量值 | 到达目标的开销/跳数 |
Iface |
出口网卡 | 从哪块网卡发出 |
| Flags 标志 | 含义 |
|---|---|
| U | route is up(路由启用) |
| H | target is a host(目标是主机) |
| G | use gateway(使用网关) |
| R | reinstate route for dynamic routing |
| D | dynamically installed by daemon or redirect |
| M | modified from routing daemon or redirect |
| A | installed by addrconf |
| C | cache entry |
| ! | reject route(拒绝路由) |
⚠️ G 标志表示使用了网关,但只有目标是 0.0.0.0 的才是默认网关。
添加路由
bash
# 添加网络路由
route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1
route add -net 192.168.0.0/24 gw 172.16.2.10
# 添加主机路由(不用指定掩码)
route add -host 192.168.3.20 gw 172.16.123.110
# 添加默认路由(两种写法等价)
route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1
route add default gw 192.168.10.1
⚠️ 下一跳地址必须与自己的某块网卡在同一网段内且存在。
删除路由
bash
route del -net 10.0.0.0/8 gw 192.168.10.1
route del -net 10.0.0.0/8
route del -host 192.168.3.20
route del default
route del -net 0.0.0.0
5.3 netstat 命令
生活例子 :
netstat就像快递站监控大屏------看有多少包裹在运输中、哪些端口在"开门接客"、路由表长什么样。
bash
netstat -rn # 显示路由表(等价于 route -n)
netstat -tan # TCP 所有连接,数字显示
netstat -uan # UDP 所有连接
netstat -tnl # TCP 监听状态的连接
netstat -unl # UDP 监听状态
netstat -tunlp # TCP+UDP 监听,显示进程名和 PID
netstat -I # 所有接口的统计
netstat -Ieth0 # 指定接口统计(注意中间无空格)
| 选项 | 含义 |
|---|---|
-t |
TCP 连接 |
-u |
UDP 连接 |
-w |
raw socket 裸套接字 |
-l |
监听状态 |
-a |
所有状态 |
-n |
数字格式显示 IP 和端口 |
-e |
扩展格式 |
-p |
显示进程及 PID |
-r |
显示路由表 |
-I |
显示接口统计 |
TCP 状态:LISTEN、ESTABLISHED、SYN_SENT、SYN_RECV、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、LAST_ACK、TIME_WAIT、CLOSED
5.4 hostname / hostnamectl 命令
bash
# CentOS 6
hostname # 查看主机名
hostname NEWHOSTNAME # 设置(当前有效,重启失效)
# CentOS 7
hostnamectl status # 显示主机名信息
hostnamectl set-hostname NEWHOSTNAME # 设置(永久有效,直接修改配置文件)
六、iproute2 系列命令:ip / ss 🆕
iproute2 和内核关系紧密,直接放置到内核生效,版本号与内核一致。
rpm -qi iproute可查看。
6.1 ip 命令总览
ip 命令
ip link
网络设备配置
ip addr
协议地址管理
ip route
路由管理
ip netns
网络名称空间
生活例子 :
ip是ifconfig+route的"升级合体版"------一个命令搞定网卡管理、地址管理和路由管理。
ip link --- 网络设备配置
bash
ip link show # 显示所有设备属性
ip -s link show # 显示统计信息
ip -s link show eth0 # 指定网卡详情
ip link set eth0 up # 启用
ip link set eth0 down # 禁用
ip link set eth0 mtu 1000 # 设置 MTU
ip link set eth0 name ethtest # 重命名(需先 down)
ip link set eth0 address aa:aa:aa:aa:aa:aa # 修改 MAC(测试后改回)
ip link set eth0 multicast on # 启用多播
ip link set eth0 multicast off # 禁用多播
ip link set eth0 netns PID # 移到指定网络名称空间
ip netns --- 网络名称空间
bash
ip netns list # 列出所有 netns
ip netns add NAME # 创建
ip netns del NAME # 删除
ip netns exec NAME COMMAND # 在指定 netns 中执行命令
ip addr --- 协议地址管理
bash
ip addr show # 显示所有接口地址
ip addr show dev eth0 # 指定接口
ip addr show dev eth0 to 192.168.100.1/24 # 过滤特定网段
# 添加地址(可加 label 别名)
ip addr add 10.1.1.10/8 dev eth1 label eth1:0
ip addr add 192.168.100.1/24 dev eth0 label eth0:0
# 删除地址
ip addr del 10.2.2.2/8 dev eth0
# 刷新(删除所有地址)
ip addr flush dev eth0
ip addr flush eth0 to 10/8 # 删除所有以 10 开头的地址
scope参数:global全局可用,link接口可用,host仅本机可用。
ip route --- 路由管理
bash
ip route show # 显示路由表(等价 route -n)
# 添加
ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100
ip route add 192.168.3.5/24 dev eth0 # 无网关
ip route add 192.168.3.5/24 via 192.168.20.1 dev eth0 # 有网关
ip route add default via GW # 默认路由
ip route add to 10.0.1.0/24 dev eth1 via 192.168.100.6
# 删除
ip route del 192.168.3.5/24
ip route del TYPE PREFIX
# 刷新
ip route flush to 10/8 # 删除所有以 10 开头的路由
# 其他
ip route change ... # 修改
ip route replace ... # 修改或新增
ip route get TYPE PREFIX # 查询单条路由
6.2 ss 命令
ss是netstat的现代替代,速度更快,信息更全。
bash
ss -tan # TCP 所有连接,数字显示
ss -uan # UDP 所有连接
ss -tnl # TCP 监听
ss -tunlp # TCP+UDP 监听+进程
ss -motan # 带内存和计时器信息
| 选项 | 含义 |
|---|---|
-t |
TCP |
-u |
UDP |
-w |
raw socket |
-l |
监听状态 |
-a |
所有状态 |
-n |
数字格式 |
-p |
进程及 PID |
-e |
扩展信息 |
-m |
内存用量 |
-o |
计时器信息 |
过滤功能(FILTER)
bash
# 按端口过滤
ss -tan '( dport = :22 or sport = :22 )'
# 按状态过滤
ss -tan state ESTABLISHED
七、nmcli 命令(CentOS 7)🖥️
bash
nmcli device status # 显示网络设备状态
nmcli connection show # 显示连接列表
nmcli connection up IFACE # 启用连接
nmcli connection down IFACE # 禁用连接
修改 IP 地址
bash
nmcli conn modify IFACE [+|-]setting.property value
# 示例
nmcli conn modify eth0 ipv4.address "192.168.1.100/24"
nmcli conn modify eth0 ipv4.gateway "192.168.1.1"
nmcli conn modify eth0 ipv4.dns "8.8.8.8"
nmcli conn modify eth0 ipv4.method manual # 静态 IP
nmcli conn up eth0 # 使修改生效
nmtui :CentOS 7 提供的 text window 图形化配置工具,执行 nmtui 即可进入。
八、配置文件详解 📄
概念要点 :Red Hat 系(CentOS/RHEL)的网络持久配置 通过文本配置文件 完成。修改后不会立刻生效,需要重启网络服务 (如 systemctl restart network)或重启主机,之后每次开机会按这些文件加载。若同时用命令改了当前状态,重启网络服务会用配置文件覆盖当前状态。
8.1 网卡配置文件
路径 :/etc/sysconfig/network-scripts/ifcfg-IFACE(如 ifcfg-eth0、ifcfg-eno16777736)。文件名中的 IFACE 必须与配置项 DEVICE 一致,表示"这份配置绑定到哪块网卡"。
| 参数 | 含义 | 示例 |
|---|---|---|
DEVICE |
设备名(需与文件名一致) | DEVICE=eth0 |
ONBOOT |
开机是否自动激活 | ONBOOT=yes |
BOOTPROTO |
引导协议:static/none/dhcp/bootp | BOOTPROTO=static |
TYPE |
接口类型 | TYPE=Ethernet |
IPADDR |
IP 地址 | IPADDR=172.16.12.23 |
NETMASK |
子网掩码(CentOS 7 也支持 PREFIX) | NETMASK=255.255.0.0 |
GATEWAY |
默认网关 | GATEWAY=172.16.0.1 |
DNS1 |
主 DNS | DNS1=172.16.0.1 |
DNS2 |
备用 DNS | DNS2=8.8.8.8 |
UUID |
唯一标识(可省) | UUID=xxx-xxx-xxx |
HWADDR |
MAC 地址(要与真实一致,可省) | HWADDR=00:0C:29:96:C5:24 |
USERCTL |
普通用户能否控制此接口 | USERCTL=no |
PEERDNS |
DHCP 时是否覆盖 /etc/resolv.conf | PEERDNS=no |
IPV6INIT |
是否初始化 IPv6 | IPV6INIT=no |
NM_CONTROLLED |
是否受 NetworkManager 控制 | NM_CONTROLLED=no |
完整示例:
ini
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0C:29:96:C5:24
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID=2d225e7-232232-3435-44364566-dddf23
IPADDR=172.16.12.23
NETMASK=255.255.0.0
GATEWAY=172.16.0.1
DNS1=172.16.0.1
IPV6INIT=no
USERCTL=no
PEERDNS=no
8.2 路由配置文件
路径:/etc/sysconfig/network-scripts/route-IFACE(如 route-eth0)
两种格式(不可混用):
bash
# 格式一:每行一条
10.0.0.0/8 via 192.168.10.1
192.168.2.0/24 via 172.16.0.1
# 格式二:每三行一条
ADDRESS0=10.0.0.0
NETMASK0=255.0.0.0
GATEWAY0=192.168.10.1
8.3 DNS 配置文件
bash
# /etc/resolv.conf,最多三条
nameserver 172.16.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
8.4 本地解析文件
bash
# /etc/hosts(优先于 DNS 查询)
# 格式:IP 主机名 别名
172.16.0.1 www.magedu.com www
查询顺序:/etc/hosts → DNS 服务器
8.5 主机名配置
bash
# /etc/sysconfig/network
HOSTNAME=myserver
# 此方法设置后不会立即生效,需重读配置文件或重启
8.6 别名接口配置文件
bash
# /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static # 别名不支持 DHCP
IPADDR=192.168.2.24
NETMASK=255.255.255.0
ONBOOT=yes
8.7 重启网络服务
bash
# CentOS 6
service network restart
# CentOS 7
systemctl restart network.service
8.8 CentOS 6 网络管理注意
- CentOS 6 上 NetworkManager 不完善,集群、虚拟化桥接在此服务下无法使用
- 建议使用
network服务,关闭NetworkManager - 网络服务有两种:network 和 NetworkManager
8.9 GUI/TUI 配置工具
bash
# CentOS 6
setup # TUI
system-config-network-tui # TUI
system-config-network-gui # GUI
# CentOS 7
nmtui # TUI
九、TCP/IP 协议基础 📡
9.1 网络通信过程概述
概念关系 :网络间主机通信依赖 TCP/IP 协议栈 。数据从 A 发往 B 时,应用层数据经过传输层 (TCP/UDP 封装端口、可靠性等)→ 网络层 (IP 封装地址、选路)→ 链路层 (如以太网帧)→ 物理发出;对方按相反顺序解封装,最终交给对应应用程序。整条路径依赖:IP + 掩码 (判断是否同网段)、路由/网关 (跨网段时找下一跳)、DNS(若用域名则先解析为 IP)。
小结 :只有本机 IP、掩码、网关、路由、DNS 配置正确,且中间网络可达,两台主机才能正常通信。
9.2 TCP 与 UDP 对比
概念定义:
- TCP (Transmission Control Protocol,传输控制协议):面向连接 、可靠 、字节流 。通信前要先建立连接 (三次握手),传完后断开连接 (四次挥手);每个发出的报文都需要对方确认 ,超时则重传 ,并对乱序报文重排后交付,因此适合对正确性要求高的应用。
- UDP (User Datagram Protocol,用户数据报协议):无连接 、不保证可靠 、按数据报收发。不建连、不确认、不重传,发出去就不管,适合对实时性要求高、能容忍少量丢失的场景。
传输层协议
TCP 传输控制协议
UDP 用户数据报协议
面向连接
字节流
可靠传输
无连接
数据报
不可靠但快
| 对比项 | 🔒 TCP | 🚀 UDP |
|---|---|---|
| 连接 | 面向连接(先建连再传数据) | 无连接(直接发) |
| 数据方式 | 字节流(收发次数无固定对应关系) | 数据报(发一次应对应收一次) |
| 可靠性 | 应答、重传、排序 | 无保证,丢包不重传 |
| 头部 | 20--60 字节 | 8 字节 |
| 典型应用 | HTTP、FTP、SSH、邮件 | DNS、视频流、游戏、广播/多播 |
生活例子 :TCP 像挂号信 ------要签收回执,没收到就再寄。UDP 像传单------发出去即可,不保证对方一定收到,但省事、速度快。
9.3 TCP 字节流 vs UDP 数据报(概念辨析)
TCP 字节流:

- 发送端:应用多次调用"写",数据先进入 TCP 发送缓冲区 ;TCP 按自己的规则(如 MSS、拥塞窗口)把缓冲区里的数据切分成若干个报文段 发出。因此写了几次 与发出几个报文段没有一一对应关系。
- 接收端:收到的多个报文段按序号 重排后放入 TCP 接收缓冲区 ,应用可以一次读很多、或分多次读 。因此收到几个报文段 与读了几次也没有一一对应关系。
- 结论 :TCP 对应用呈现的是无边界字节流,不保留"消息"边界。
UDP 数据报:
- 发送端:每执行一次"写",就封装成一个 UDP 数据报并发出,写几次就发几个包。
- 接收端:必须针对每个数据报各读一次 ,否则会丢包;若一次读的缓冲区小于该数据报长度,多出的部分会被截断。
- 结论 :UDP 保留消息边界,一发一收一一对应。

十、TCP 报文头部结构详解 📦
10.1 头部结构图

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源端口号 (16bit) | 目的端口号 (16bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 序号 (32bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 确认号 (32bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 头部 |保留 |U|A|P|R|S|F| 窗口大小 (16bit) |
| 长度 | 6位 |R|C|S|S|Y|I| |
| 4bit | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 校验和 (16bit) | 紧急指针 (16bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 选项(0~40字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
固定头部 20 字节 + 可选头部 最多 40 字节 = TCP 头部最长 60 字节。
10.2 各字段详解(一句话理解)
| 字段 | 位数 | 一句话理解 |
|---|---|---|
| 源端口 | 16 | 本端应用对应的端口(客户端多为临时端口) |
| 目的端口 | 16 | 对端应用对应的端口(服务端多为知名端口,如 80、22) |
| 序号 | 32 | 本端在本连接里已发送字节流的"编号",用于排序与确认 |
| 确认号 | 32 | 表示"已收到到该序号之前的数据",通常为对方序号+1 |
| 头部长度 | 4 | 以 4 字节为单位,最大 15,故头部最长 60 字节 |
| URG | 1 | 为 1 时紧急指针有效,表示有紧急数据需优先处理 |
| ACK | 1 | 为 1 时确认号有效,该报文段是对对方数据的确认 |
| PSH | 1 | 提示接收方尽快把数据交给应用,腾出接收缓冲区 |
| RST | 1 | 为 1 表示复位,要求对方断开并放弃本连接 |
| SYN | 1 | 为 1 表示同步,用于建立连接时交换初始序号 |
| FIN | 1 | 为 1 表示本端不再发数据,用于关闭连接 |
| 窗口大小 | 16 | 接收方声明还能收多少字节,供发送方做流量控制 |
| 校验和 | 16 | 对头部+数据做校验,检测传输是否出错 |
| 紧急指针 | 16 | 与 URG 配合,指出紧急数据结束位置(序号偏移) |
10.3 头部选项(TCP Options)
| kind 值 | 名称 | 说明 |
|---|---|---|
| 0 | 选项结束 | 标记选项列表结束 |
| 1 | 空操作 | 填充用 |
| 2 | 最大报文段长度(MSS) | 通常设为 MTU-40=1460 字节(以太网) |
| 3 | 窗口扩大因子 | 实际窗口 = 窗口值 × 2^m,提高吞吐量 |
| 4 | 选择性确认(SACK 允许) | 只重传丢失的报文段,不重传已收到的 |
| 5 | SACK 实际工作选项 | 告知已缓存的不连续数据块 |
| 8 | 时间戳 | 准确计算回路时间 |
知名端口 (定义在
/etc/services):HTTP=80, DNS=53, FTP=21, SSH=22, HTTPS=443

十一、TCP 连接:三次握手与四次挥手 🤝
11.1 三次握手建立连接
服务器 客户端 服务器 客户端 CLOSED LISTEN SYN_SENT SYN_RCVD ESTABLISHED ESTABLISHED 双方开始传输数据 SYN=1, seq=i SYN=1, ACK=1, seq=j, ack=i+1 ACK=1, seq=i+1, ack=j+1

| 次数 | 方向 | 标志 | 说明 |
|---|---|---|---|
| 第 1 次 | 客户端 → 服务器 | SYN=1, seq=i | 客户端发起连接请求,进入 SYN_SENT |
| 第 2 次 | 服务器 → 客户端 | SYN=1, ACK=1, seq=j, ack=i+1 | 服务器确认并发送自己的 SYN,进入 SYN_RCVD |
| 第 3 次 | 客户端 → 服务器 | ACK=1, ack=j+1 | 客户端确认,双方进入 ESTABLISHED |
生活例子:
- 你:"在吗?"(SYN)
- 对方:"在的,你说吧"(SYN+ACK)
- 你:"好的,我开始说了"(ACK)→ 开始聊天
11.2 为什么必须三次?两次不行吗?
核心原因 :要双向确认 "双方都能发、都能收",并同步初始序号,防止旧报文被误用。
两次握手的问题(死锁) :若只做两次------客户端发 SYN,服务器回 SYN+ACK 并认为连接已建立。若这份 SYN+ACK 在半路丢失 ,客户端永远收不到,不知道服务器已准备好,也不会发第三个 ACK。服务器却以为连接已建立,开始发数据;客户端收到的是"陌生"的数据包(没建立过连接),可能直接丢弃或发 RST。结果:服务器在发、客户端不认,形成死锁 。三次握手的第三报(客户端 ACK)保证:只要连接建立成功,双方都确认过对方的序号与收发能力。
11.3 四次挥手关闭连接
服务器 客户端 服务器 客户端 ESTABLISHED(双方通信中) FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_2 服务器继续发送剩余数据... LAST_ACK TIME_WAIT CLOSED 等待 2MSL 后 CLOSED FIN=1, seq=i ACK=1, ack=i+1 FIN=1, seq=j ACK=1, ack=j+1
| 次数 | 方向 | 标志 | 说明 |
|---|---|---|---|
| 第 1 次 | 客户端 → 服务器 | FIN=1, seq=i | 客户端说"我没数据了",进入 FIN_WAIT_1 |
| 第 2 次 | 服务器 → 客户端 | ACK=1, ack=i+1 | 服务器说"收到",进入 CLOSE_WAIT |
| 第 3 次 | 服务器 → 客户端 | FIN=1, seq=j | 服务器也说"我也没了",进入 LAST_ACK |
| 第 4 次 | 客户端 → 服务器 | ACK=1, ack=j+1 | 客户端确认,进入 TIME_WAIT → 2MSL 后 CLOSED |

生活例子:
- 你:"我说完了"(FIN)
- 对方:"嗯我知道了"(ACK)------但对方可能还有话没说完
- 对方:"我也说完了"(FIN)
- 你:"好的,挂了"(ACK)→ 等几秒确认对方收到 → 真正挂断
11.4 为什么关闭需要四次而不是三次?
建立时能合并 :服务器收到 SYN 后,既要确认(ACK)又要声明自己的序号(SYN),可以放在同一个报文 里(SYN+ACK),所以建立只需三次(客户端 SYN → 服务器 SYN+ACK → 客户端 ACK)。
关闭时不能合并 :收到对方的 FIN 只表示对方不再发数据了 ,己方可能还有数据要发给对方,因此不能立刻也发 FIN。正确做法是:先回 ACK ("你的 FIN 我收到了")→ 己方继续发完剩余数据 → 再发 FIN ("我这边也没数据了")。所以 ACK 和 FIN 是两个独立步骤 ,对应两次挥手;加上对方先发的一次 FIN 和最后对你 FIN 的 ACK,一共四次。
十二、TCP 状态转移全过程 🔄
12.1 所有 TCP 状态
| 状态 | 含义 | 出现在 |
|---|---|---|
| CLOSED | 初始/最终状态,连接不存在 | 双方 |
| LISTEN | 等待连接请求 | 服务器 |
| SYN_SENT | 已发送 SYN,等待确认 | 客户端 |
| SYN_RCVD | 已收到 SYN 并回复,等待最终确认 | 服务器 |
| ESTABLISHED | 连接建立完成,可传输数据 | 双方 |
| FIN_WAIT_1 | 已发送 FIN,等待对方 ACK | 主动关闭方 |
| FIN_WAIT_2 | 已收到 ACK,等待对方 FIN | 主动关闭方 |
| CLOSE_WAIT | 已收到对方 FIN,等自己应用关闭 | 被动关闭方 |
| LAST_ACK | 已发送 FIN,等待最后的 ACK | 被动关闭方 |
| TIME_WAIT | 等待 2MSL 后关闭 | 主动关闭方 |
| CLOSING | 双方同时关闭(少见) | 双方 |
12.2 状态转移图
服务器 listen()
客户端 connect() 发 SYN
收到 SYN, 发 SYN+ACK
收到 SYN+ACK, 发 ACK
收到 ACK
主动关闭 发 FIN
收到 FIN, 发 ACK
收到 ACK
收到 FIN, 发 ACK
发 FIN
收到 ACK
2MSL 超时
CLOSED
LISTEN
SYN_SENT
SYN_RCVD
ESTABLISHED
FIN_WAIT_1
CLOSE_WAIT
FIN_WAIT_2
TIME_WAIT
LAST_ACK
12.3 TIME_WAIT 状态(概念要点)
定义 :主动关闭连接的一方,在发出对对方 FIN 的最后一个 ACK 之后,进入 TIME_WAIT,等待 2×MSL(MSL = Maximum Segment Lifetime,报文段在网络中的最大生存时间)后才进入 CLOSED。
存在原因:
- 可靠终止:最后一个 ACK 可能丢失。若己方不等待就关掉,对方重传的 FIN 就无人应答;对方会反复重传。在 TIME_WAIT 期间若收到重传的 FIN,可以再发一次 ACK,保证连接被正常关掉。
- 防止旧报文干扰新连接 :同一四元组(源/目 IP、源/目端口)在 2×MSL 内可能还有迟到的旧报文。若立刻用同一端口建新连接,可能误收这些旧包。等待 2×MSL 可让旧报文在网络中"过期",避免与新连接混淆。
12.4 RST 复位报文段
概念定义 :RST (Reset)是 TCP 头部的一个标志位。携带 RST=1 的报文段称为复位报文段 ,含义是"终止当前连接,不要继续用这个连接";收到 RST 的一方会立刻把连接关闭,并通知应用程序连接被对端重置。
常见触发场景:
- 向未监听 的端口发起连接,或向不存在的服务发数据 → 对端回 RST。
- 连接超时 、提前关闭 、在已关闭的 socket 上收到数据 → 可能发 RST。
- 异常终止连接(如强制关闭、程序崩溃)→ 发 RST 通知对方。
- 向处于 LISTEN 的端口发送非 SYN 的包(例如直接发数据)→ 可能回 RST。
十三、TCP 可靠传输机制 🛡️
概念定义 :可靠传输 指 TCP 保证按序、无重复、无丢失地把应用层交给它的字节流交给对端应用。实现依赖多种机制配合,而不是单一点。
13.1 机制总览
TCP 可靠传输
发送应答机制
每个报文段必须被确认
超时重传机制
定时器超时未应答则重传
报文排序
乱序到达的报文重排后交付
流量控制
接收窗口控制发送速度
拥塞控制
避免网络过载
13.2 发送应答机制(ACK)
发送端每发一个 TCP 报文段(或一批),都依赖接收端回传 ACK (确认号表示"已收到到哪一字节")。只有被确认的数据才视为已成功送达;未确认的会留在发送缓冲区,等待 ACK 或超时重传。
13.3 超时重传机制
发送端为每个已发出但未确认的报文段维护重传定时器 。若在定时时间内未收到对应 ACK,则重传 该报文段并重置定时器。这样即使网络丢包,也能通过重传补上。另外,IP 层可能乱序、重复递交,TCP 会根据序号 对收到的报文段排序、去重后再交付给应用。
13.4 流量控制与拥塞控制(概念区分)
- 流量控制 :解决"接收方 处理不过来"的问题。通过 TCP 头部的窗口字段,接收方告诉发送方"我还能收多少字节";发送方不会发超过该窗口的数据,避免撑满接收缓冲区。
- 拥塞控制 :解决"网络 承载不了"的问题。发送方根据丢包、超时等信号,动态调整发送速率(如慢启动、拥塞避免、快速重传、快速恢复),避免把网络塞爆导致大面积丢包。
十四、命令对比速查 🆚
14.1 ifconfig vs ip 命令
| 操作 | ifconfig(旧) | ip(新) |
|---|---|---|
| 查看所有网卡 | ifconfig -a |
ip link show / ip addr show |
| 查看指定网卡 | ifconfig eth0 |
ip addr show dev eth0 |
| 配置 IP | ifconfig eth0 IP/MASK |
ip addr add IP/MASK dev eth0 |
| 删除 IP | ifconfig eth0 0 |
ip addr del IP/MASK dev eth0 |
| 添加别名 | ifconfig eth0:0 IP/MASK |
ip addr add IP/MASK dev eth0 label eth0:0 |
| 启用/关闭 | ifconfig eth0 up/down |
ip link set eth0 up/down |
| 修改 MTU | --- | ip link set eth0 mtu 9000 |
| 改名 | --- | ip link set eth0 name newname |
| 刷新所有地址 | --- | ip addr flush dev eth0 |
14.2 route vs ip route
| 操作 | route(旧) | ip route(新) |
|---|---|---|
| 查看路由 | route -n |
ip route show |
| 添加网络路由 | route add -net DEST gw GW |
ip route add DEST via GW dev DEV |
| 添加默认路由 | route add default gw GW |
ip route add default via GW |
| 删除路由 | route del -net DEST |
ip route del DEST |
| 刷新路由 | --- | ip route flush to PREFIX |
14.3 netstat vs ss
| 操作 | netstat(旧) | ss(新) |
|---|---|---|
| TCP 所有连接 | netstat -tan |
ss -tan |
| UDP 监听 | netstat -unl |
ss -unl |
| 显示进程 | netstat -tunlp |
ss -tunlp |
| 路由表 | netstat -rn |
ip route show |
| 过滤端口 | --- | ss -tan '( dport = :22 )' |
| 过滤状态 | --- | ss -tan state ESTABLISHED |
| 接口统计 | netstat -Ieth0 |
ip -s link show eth0 |
14.4 CentOS 6 vs CentOS 7 网络管理
| 对比项 | CentOS 6 | CentOS 7 |
|---|---|---|
| 接口命名 | eth0, eth1 | eno1, ens33, enp2s0 |
| 管理工具 | ifconfig + route | ip 命令 + nmcli/nmtui |
| 服务管理 | service network restart |
systemctl restart network.service |
| 配置 GUI | setup / system-config-network |
nmtui |
| 主机名 | hostname + 配置文件 |
hostnamectl set-hostname(永久) |
| NetworkManager | 不完善,建议关闭 | 功能完善,推荐使用 |
| 掩码 | NETMASK= | 也支持 PREFIX= |
十五、Shell 脚本与练习题 📝
15.1 脚本:自动分区、格式化磁盘
练习要求:
- 列出所有磁盘,让用户选择(quit 退出,错误重选)
- 提醒用户操作可能损坏数据,确认后继续
- 抹除所有分区,创建三个主分区(20M、512M、128M swap),格式化
bash
#!/bin/bash
echo "Initial a disk ..."
echo -e "\033[31mWarning:\033[0m"
fdisk -l 2> /dev/null | grep -o "^Disk /dev/[sh]d[a-z]"
read -p "You choice :" PARTDISK
if [ $PARTDISK == 'quit' ]; then
echo "quit"
exit 7
fi
until fdisk -l 2> /dev/null | grep -o "^Disk /dev/[sh]d[a-z]" | grep "^Disk $PARTDISK" &> /dev/null; do
read -p "Wrong option, You choice again:" PARTDISK
done
read -p "Will destroy all data, continue:" CHOICE
until [ $CHOICE == 'y' -o $CHOICE == 'n' ]; do
read -p "Will destroy all data, continue:" CHOICE
done
if [ $CHOICE == 'n' ]; then
echo "quit"
exit 9
else
echo "Partitioning..."
dd if=/dev/zero of=$PARTDISK bs=512 count=1
sync
sleep 3
echo "n
p
1
+20M
n
p
2
+512M
n
p
3
+128M
t
3
82
w" | fdisk $PARTDISK &> /dev/null
partprobe $PARTDISK
sync
sleep 2
mke2fs -j ${PARTDISK}1 &> /dev/null
mke2fs -j ${PARTDISK}2 &> /dev/null
mkswap ${PARTDISK}3
fi
15.2 脚本:卸载指定磁盘所有挂载
bash
#!/bin/bash
#
for I in $(mount | grep "/dev/sdb" | awk '{print $1}'); do
fuser -km $I
umount $I
echo "$I unmounted ok."
done
dd if=/dev/zero of=/dev/sdb bs=512 count=1
sync
sleep 3
15.3 练习题
练习 1:写一个脚本为指定硬盘自动创建分区(前提:新增一块硬盘 /dev/sdb)
- 列出所有磁盘供选择,quit 退出,选错重选
- 确认操作可能损坏数据
- 抹除分区后创建三个主分区:20M + 512M + 128M(swap)
📖 参考答案
见 15.1 脚本。关键点:
fdisk -l 2>/dev/null | grep -o "^Disk /dev/[sh]d[a-z]"列出磁盘until循环校验输入dd if=/dev/zero of=$PARTDISK bs=512 count=1抹除分区表echo "..." | fdisk实现非交互式分区partprobe通知内核重读分区表
练习 2:使用 ping 命令测试 192.168.0.151 到 192.168.0.254 所有主机是否在线
- 在线显示绿色 "ip is up."
- 不在线显示红色 "ip is down."
- 分别用 while、until、for(两种形式)实现
提示:ping -c 1 -W 1 IP
📖 for 循环参考
bash
#!/bin/bash
for IP in $(seq 151 254); do
if ping -c 1 -W 1 192.168.0.$IP &>/dev/null; then
echo -e "\033[32m192.168.0.$IP is up.\033[0m"
else
echo -e "\033[31m192.168.0.$IP is down.\033[0m"
fi
done
📖 while 循环参考
bash
#!/bin/bash
IP=151
while [ $IP -le 254 ]; do
if ping -c 1 -W 1 192.168.0.$IP &>/dev/null; then
echo -e "\033[32m192.168.0.$IP is up.\033[0m"
else
echo -e "\033[31m192.168.0.$IP is down.\033[0m"
fi
let IP++
done
练习 3:网络配置综合
- 给 eth0 配置 IP 172.16.251.48/16
- 添加路由到 10.0.0.0/8 网段,网关 172.16.0.1
- 添加默认路由,网关 172.16.0.1
- 用 ip 命令完成同样的操作
- 配置写入配置文件使其永久生效
📖 参考答案
bash
# ifconfig/route 方式
ifconfig eth0 172.16.251.48/16
route add -net 10.0.0.0/8 gw 172.16.0.1
route add default gw 172.16.0.1
# ip 方式
ip addr add 172.16.251.48/16 dev eth0
ip route add 10.0.0.0/8 via 172.16.0.1 dev eth0
ip route add default via 172.16.0.1
# 配置文件(永久)
# /etc/sysconfig/network-scripts/ifcfg-eth0:
# DEVICE=eth0
# BOOTPROTO=static
# IPADDR=172.16.251.48
# NETMASK=255.255.0.0
# GATEWAY=172.16.0.1
# ONBOOT=yes
# /etc/sysconfig/network-scripts/route-eth0:
# 10.0.0.0/8 via 172.16.0.1
# 重启服务
# systemctl restart network.service
附录
A. 网络连通性测试工具 🔍
| 命令 | 作用 | 示例 |
|---|---|---|
ping |
测试 IP 是否可达(ICMP 协议) | ping -c 5 -w 10 172.16.251.48 |
mtr |
网络连通性判断(比 ping 更详细) | mtr 8.8.8.8 |
traceroute |
查看到目标经过的所有网关 | traceroute www.baidu.com |
bash
ping -c 5 172.16.251.48 # 发送 5 个 ICMP 包
ping -w 10 172.16.251.48 # 最多测试 10 秒
B. awk 快速参考
bash
df -Ph | awk '{print $1}' # 取第一列
df -Ph | awk '{print $1,$3}' # 取 1、3 列
df -Ph | awk '{print $0}' # 所有字段
df -Ph | awk '{print $NF}' # 最后一个字段
awk -F: '{print $1,$3}' /etc/passwd # 以冒号分隔取 1、3 列
fdisk -l 2>/dev/null | grep "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'
C. RHEL 网络相关文件路径
| 文件路径 | 用途 |
|---|---|
/etc/sysconfig/network-scripts/ifcfg-IFACE |
网卡 IP 配置 |
/etc/sysconfig/network-scripts/route-IFACE |
静态路由 |
/etc/sysconfig/network |
主机名、全局网络设置 |
/etc/resolv.conf |
DNS 服务器 |
/etc/hosts |
本地域名解析 |
/etc/services |
知名端口号定义 |
/proc/sys/net/ipv4/ip_forward |
IP 转发开关 |
RHEL5: /etc/modprobe.conf |
模块别名 |
RHEL6: /etc/udev/rules.d/70-persistent-net.rules |
网卡命名规则 |
D. 常用网络端口
| 端口 | 服务 | 端口 | 服务 |
|---|---|---|---|
| 20/21 | FTP | 22 | SSH |
| 23 | Telnet | 25 | SMTP |
| 53 | DNS | 80 | HTTP |
| 110 | POP3 | 143 | IMAP |
| 443 | HTTPS | 3306 | MySQL |
| 5432 | PostgreSQL | 6379 | Redis |