网络基础与子网划分

本文合并自:06-网络基础-子网划分-路由-网关.md、03-网络基础.md

本文覆盖计算机网络基本概念、OSI 七层与 TCP/IP 四层模型、常见协议、IPv4/IPv6 地址分类与格式、子网掩码与子网划分计算、路由概念、默认网关、route/ip route 命令与静态路由、网络分层排错思路及练习题。

本章要点

  • 理解网络的组成与分类(LAN/MAN/WAN)、常见拓扑结构、传输介质与网线制作标准(568A/568B)。
  • 分清交换机与路由器的职责差异,理解单播、广播、组播三种通信方式。
  • 掌握 OSI 七层模型与 TCP/IP 四层模型的对应关系、各层协议与设备、数据封装与解封装过程。
  • 掌握 IP、ICMP、ARP、TCP、UDP 等常见协议的作用,理解 TCP 三次握手与四次挥手,能解释 TIME_WAIT/CLOSE_WAIT。
  • 理解 IPv4 地址的分类(A/B/C/D/E)、特殊地址、三个私网网段,了解 IPv6 表示方法。
  • 理解子网掩码如何通过二进制"与运算"确定网络号,掌握网络号、广播地址、可用主机数的计算。
  • 掌握子网划分的完整计算步骤,会做 VLSM 变长子网与超网聚合,熟记常用掩码速查表。
  • 掌握两节点能通信的三个条件与上网三要素:IP、Gateway、DNS。
  • 掌握默认网关的作用、路由表解读、静态路由增删、最长前缀匹配、ip_forward 与 NAT 概念。
  • 熟练使用分层排查法与 ping/traceroute/mtr/telnet/nc/ss/netstat/tcpdump 定位网络故障。

一、网络基础概念

1.1 什么是网络

网络是通过网线或无线网络将多个设备连接在一起,使数据可以通过网络介质传输的一种方式。

要连接到网络,至少需要满足两个条件:

  1. 网络适配器(网卡)。
  2. 网络服务提供商提供的账号密码。

从组成上看,一个可用的网络包含以下要素:

组成要素 说明
主机(节点) 计算机、服务器、手机、打印机等终端设备,通过网卡接入网络
传输介质 双绞线、光纤、同轴电缆或无线电波,负责承载信号
网络设备 网卡、集线器、交换机、路由器、防火墙等,负责转发与控制流量
网络协议 TCP/IP 协议族等规则集合,规定数据格式、寻址与差错处理方式
网络服务 Web、DNS、DHCP、FTP、NFS 等对外提供的应用能力

1.2 网络类型

目前最成功的两种网络类型:

类型 说明
Ethernet(以太网) 局域网技术
Internet(因特网) 全球互联网络

1.3 按覆盖范围分类

分类 缩写 覆盖范围
局域网 LAN 短距离资源共享
城域网 MAN 介于局域网和广域网之间
广域网 WAN 覆盖一个城市、一个国家甚至全球

三者的进一步对比:

对比项 LAN(局域网) MAN(城域网) WAN(广域网)
典型范围 一间机房、一栋楼、一个园区(几十米到几千米) 一个城市(几公里到几十公里) 跨城市、跨国家,直至全球
典型速率 高(1Gbps ~ 100Gbps) 较高 相对较低,受运营商链路限制
典型技术 以太网、Wi-Fi 城域以太网、MPLS 专线、MPLS VPN、Internet
归属 通常由单位自建自管 运营商或大型单位 运营商(电信、联通、移动等)
延迟 微秒到毫秒级 毫秒级 几十到几百毫秒

1.4 常见拓扑结构

拓扑结构描述网络中节点与链路的连接形式:

拓扑 结构说明 优点 缺点
总线型 所有节点挂在一根共享的主干电缆上(早期同轴以太网) 布线省、成本低 冲突多,主干断则全网瘫痪,故障定位困难
星型 所有节点连到中心设备(交换机) 结构清晰、单点故障不影响其他节点、易扩展 中心设备故障则该网段瘫痪
环型 节点首尾相连成环,数据沿环单向传递(如 Token Ring、FDDI) 传输时延确定 任一节点或链路故障影响整环,扩展不便
树型(分层) 星型的层级扩展:核心层—汇聚层—接入层 便于分区管理,适合大规模园区网 上层设备故障影响面大
网状 节点之间存在多条冗余链路(骨干网常用) 冗余度高、可靠性最好 布线与设备成本高,配置复杂
混合型 上述几种组合,实际生产环境最常见 兼顾成本与可靠性 规划设计要求高

数据中心内部通常采用"接入—汇聚—核心"三层树型结构,或叶脊(Spine-Leaf)网状结构。

1.5 传输介质与网线制作标准

常见传输介质:

介质 说明 典型距离
双绞线(Twisted Pair) 最常用的局域网介质,分屏蔽(STP)与非屏蔽(UTP);按性能分 Cat5、Cat5e、Cat6、Cat6a、Cat7 等 单段不超过 100 米
同轴电缆 早期总线以太网使用,现多用于有线电视、监控 几百米
光纤 抗干扰、带宽高、距离远;单模(长距离)与多模(短距离) 多模数百米,单模数十公里
无线电波 Wi-Fi、4G/5G、蓝牙等无线接入 视功率与频段而定

双绞线共 8 根芯(4 对),按颜色分为:橙白、橙、绿白、绿、蓝白、蓝、棕白、棕。

T568B 线序(最常用):

1 橙白    2 橙    3 绿白    4 蓝    5 蓝白    6 绿    7 棕白    8 棕

T568A 线序:

1 绿白    2 绿    3 橙白    4 蓝    5 蓝白    6 橙    7 棕白    8 棕

由此产生两种网线:

网线类型 两端线序 用途
直通线(正线) 两端都用 568B(或两端都用 568A) 连接不同类型设备:电脑 ↔ 交换机、交换机 ↔ 路由器
交叉线(反线) 一端 568A,另一端 568B 连接同类型设备:电脑 ↔ 电脑、交换机 ↔ 交换机(老设备)

说明:

  • 百兆以太网(100BASE-TX)实际只用到 1、2、3、6 四根芯,其中 1、2 发送,3、6 接收;千兆以太网(1000BASE-T)8 根芯全部使用,因此千兆网线必须 8 芯全通。
  • 现代交换机与网卡普遍支持 Auto-MDI/MDIX 自动翻转,直通线也能连接同类设备,但考试与规范场合仍需掌握两种线序。
  • 网线制作步骤:剥皮 → 按线序理线排齐 → 剪平(保留约 14mm)→ 插入水晶头(RJ45)确认 8 根芯到底 → 压线钳压实 → 用网线测试仪测通(1~8 灯依次对应点亮)。

1.6 交换机与路由器的区别

概念 说明
点播(单播) 点对点通信
广播 访问范围是整个局域网
组播(多播) 在一个广播域(局域网)内,有相同组播地址的主机在同一个组
交换机 同网段互相访问,不隔离广播
路由器 可跨网段路由(跨网段访问),隔离广播

网络通信的类型(细化说明):

  • 点对点(单播):平常大多数网络行为都是点对点,例如发邮件、从 HTTP 下载文件、从 DNS 服务器获取域名解析。
  • 组播(点对多点):用于视频会议、集群等场景。
  • 广播(点对多点):例如 DHCP 获取地址、ARP(Address Resolution Protocol,地址解析协议)。

交换机与路由器对照表:

对比项 交换机(Switch) 路由器(Router)
工作层次 二层(数据链路层),三层交换机可做三层转发 三层(网络层)
转发依据 MAC 地址表 路由表(目标 IP 网段)
地址类型 MAC 地址 IP 地址
广播域 不隔离广播,一台交换机默认是一个广播域(可用 VLAN 划分) 隔离广播,每个接口是一个广播域
冲突域 每个端口一个冲突域(全双工无冲突) 每个接口一个冲突域
典型用途 局域网内主机互联,同网段高速转发 连接不同网段/不同网络,实现跨网段通信、NAT、上网出口
端口数量 多(24、48 口常见) 少(几个到十几个)

补充设备:

  • 集线器(Hub):一层设备,简单复制信号到所有端口,所有端口共享带宽,处于同一冲突域,已被交换机淘汰。
  • 网桥(Bridge):二层设备,交换机的前身,端口少。
  • 防火墙:多在三层及以上工作,按策略过滤流量。
  • 三层交换机:具备路由能力的交换机,常用于园区网核心,转发性能高于传统路由器,但 WAN 接口与 NAT 能力弱。

1.7 两节点能通信的条件

  1. 物理上连通:线缆符合规格,交换机加电。
  2. 有正确的路由:知道到达目的地的路。
  3. 有通信的权限:防火墙等策略允许通行。

排错时按这三个条件依次验证,可以快速缩小问题范围。


二、OSI 七层模型与 TCP/IP 四层模型

2.1 网络协议分层模型总览

OSI 七层模型:

层级 名称
第七层 应用层
第六层 表示层
第五层 会话层
第四层 传输层
第三层 网络层
第二层 数据链路层
第一层 物理层

TCP/IP 四层模型:

层级 名称
第四层 应用层
第三层 传输层
第二层 网络层
第一层 网络接口层

分层的意义:把复杂的通信过程拆分为若干相对独立的层次,每层只负责自己的职责并为上层提供服务;下层实现改变时不影响上层,便于标准化、排错与开发。

2.2 OSI 各层职责、协议与设备

层级 名称 核心职责 典型协议/标准 典型设备 数据单元(PDU)
7 应用层 直接为用户进程提供网络服务接口 HTTP、HTTPS、FTP、SSH、Telnet、SMTP、POP3、IMAP、DNS、DHCP、SNMP、NFS 主机应用程序、应用层网关 数据(Data)/ 报文
6 表示层 数据格式转换、编码解码、加密解密、压缩 ASCII、Unicode、JPEG、MPEG、SSL/TLS(跨 5/6 层) — 数据
5 会话层 建立、管理、终止会话,进行会话同步与校验点 RPC、NetBIOS、SQL 会话 — 数据
4 传输层 端到端可靠/不可靠传输、分段与重组、流量控制、差错恢复、端口寻址 TCP、UDP、SCTP 防火墙(四层)、四层负载均衡(LVS) 段(Segment,TCP)/ 数据报(Datagram,UDP)
3 网络层 逻辑寻址(IP)、路由选择、分片与重组 IP、ICMP、IGMP、ARP(介于 2/3 层)、路由协议 RIP/OSPF/BGP 路由器、三层交换机 包(Packet)/ 数据报
2 数据链路层 物理寻址(MAC)、成帧、差错检测(CRC)、介质访问控制 Ethernet(IEEE 802.3)、PPP、HDLC、VLAN(802.1Q)、STP、Wi-Fi(802.11) 交换机、网桥、网卡 帧(Frame)
1 物理层 在介质上传输比特流,规定电气、机械、时序特性 RS-232、RJ45、IEEE 802.3 物理规范、光纤规范 网线、光纤、中继器、集线器、收发器 位(Bit)/ 比特流

记忆口诀(自下而上):物、链、网、传、会、表、应;即"物流网传会表演"。

2.3 TCP/IP 四层模型与 OSI 的对应关系

TCP/IP 四层 对应 OSI 层 主要协议
应用层 应用层 + 表示层 + 会话层 HTTP、HTTPS、FTP、SSH、DNS、DHCP、SMTP、NFS
传输层 传输层 TCP、UDP
网络层(互联网层) 网络层 IP、ICMP、IGMP、ARP
网络接口层(链路层) 数据链路层 + 物理层 Ethernet、PPP、Wi-Fi、驱动与网卡

也有教材使用 TCP/IP 五层模型(把网络接口层再拆为数据链路层与物理层),本质与四层一致。

2.4 数据封装与解封装

PDU(Protocol Data Unit,协议数据单元):每一层在处理数据时形成的数据格式统称。上层数据到达本层后,本层会给它加上自己的头部(有的层还加尾部),形成本层的 PDU 再交给下层,这个过程叫封装(Encapsulation);接收方由下向上逐层剥掉头部,叫解封装(De-encapsulation)。

发送方封装过程(自上而下):

应用层    :                          [ 用户数据 Data ]
传输层    :              [ TCP/UDP 头 |  用户数据  ]        => 段 Segment
网络层    :      [ IP 头 | TCP 头 |  用户数据  ]            => 包 Packet
数据链路层: [ 以太网帧头 | IP 头 | TCP 头 | 数据 | FCS 帧尾 ] => 帧 Frame
物理层    : 1010110001110101...                             => 比特流 Bit

接收方解封装过程(自下而上):

物理层     : 接收比特流,还原为帧
数据链路层 : 校验 FCS,检查目的 MAC 是否为本机 -> 剥掉帧头帧尾,上交 IP 包
网络层     : 检查目的 IP 是否为本机,按协议号(6=TCP,17=UDP,1=ICMP)上交 -> 剥掉 IP 头
传输层     : 按目的端口号找到对应进程/套接字 -> 剥掉 TCP/UDP 头
应用层     : 交给应用程序处理原始数据

关键字段与"多路复用"的对应关系:

层 头部关键字段 作用
数据链路层 源/目的 MAC、类型字段(0x0800=IPv4、0x0806=ARP、0x86DD=IPv6)、FCS 同网段寻址与差错检测
网络层 源/目的 IP、TTL、协议号、标识/标志/片偏移 跨网段寻址、防环、分片重组
传输层 源/目的端口、序号、确认号、标志位、窗口 找到具体进程、可靠传输与流控

补充概念:

  • MTU(Maximum Transmission Unit):链路层一次能承载的最大数据字节数,以太网默认 1500。IP 包超过 MTU 时会分片;ping -M do -s <size> 可用于探测路径 MTU。
  • MSS(Maximum Segment Size):TCP 单个段能携带的最大数据量,以太网上通常为 1500 - 20(IP) - 20(TCP) = 1460。
  • 数据传输的实际路径:源主机自上而下封装 → 经交换机(二层转发,帧头改写发生在路由器处)→ 路由器逐跳解封装到三层、查路由表、重新封装新帧头 → 目的主机自下而上解封装。整个过程中源/目的 IP 通常不变(NAT 除外),而源/目的 MAC 每经过一台三层设备都会改变。

三、常见协议

3.1 IP 协议

  • 位于网络层,提供无连接、不可靠、尽最大努力交付的分组传送服务,可靠性由上层 TCP 保证。
  • 负责逻辑寻址(IP 地址)与路由转发;IPv4 头部固定 20 字节(不含选项)。
  • 关键字段:版本、首部长度、TOS/DSCP(服务质量)、总长度、标识/标志/片偏移(分片重组)、TTL(每经一台路由器减 1,减到 0 丢弃并回送 ICMP 超时,用于防止环路)、协议号、首部校验和、源 IP、目的 IP。
  • 常见协议号:1=ICMP,2=IGMP,6=TCP,17=UDP,89=OSPF。

3.2 ICMP 协议

ICMP(Internet Control Message Protocol,互联网控制报文协议)用于传递差错报告与控制信息,工作在网络层,不使用端口号。

类型/代码 报文 用途
Type 8 Echo Request ping 发出的请求
Type 0 Echo Reply ping 的应答
Type 3 Destination Unreachable 目标不可达(代码 0=网络不可达、1=主机不可达、3=端口不可达、4=需分片但设置了 DF)
Type 11 Time Exceeded TTL 超时,traceroute 依赖此报文
Type 5 Redirect 路由重定向,提示更优网关

常用命令:

ping -c 4 192.168.1.1        # 发 4 个 ICMP 请求
ping -c 3 www.baidu.com      # 同时验证 DNS 与外网连通性
ping -s 1472 -M do 8.8.8.8   # 探测 MTU(1472+28=1500)

注意:许多服务器和防火墙会禁用 ICMP,ping 不通不能直接断定主机宕机,应结合 telnet/nc 测端口。

3.3 ARP 协议与 ARP 缓存

ARP(Address Resolution Protocol,地址解析协议)用于由已知的 IP 地址查询对应的 MAC 地址,工作在数据链路层与网络层之间,只在同一广播域内有效。

工作流程:

  1. 主机 A 要发数据给同网段的 B(192.168.1.20),先查本机 ARP 缓存。
  2. 缓存中没有,则发送 ARP 请求广播:目的 MAC 为 ff:ff:ff:ff:ff:ff,内容是"谁是 192.168.1.20,请告诉 192.168.1.10"。
  3. 网段内所有主机都收到,只有 B 发现问的是自己,用单播 ARP 应答回复自己的 MAC。
  4. A 把 IP -> MAC 的对应关系写入 ARP 缓存(有老化时间,Linux 默认约 60 秒基础老化,达到 gc_thresh 时清理),随后正常通信。
  5. 若目标不在同网段,A 会请求网关的 MAC,把帧发给网关,由网关继续转发。

相关命令:

arp -n                       # 查看 ARP 缓存(传统命令)
ip neigh show                # 查看邻居表(推荐)
ip neigh show dev eth0
arp -d 192.168.1.20          # 删除某条 ARP 缓存
ip neigh del 192.168.1.20 dev eth0
arp -s 192.168.1.20 00:0c:29:11:22:33   # 添加静态 ARP 绑定(防 ARP 欺骗)
arping -I eth0 192.168.1.20  # 直接发送 ARP 请求探测

ip neigh 状态含义:REACHABLE(可达)、STALE(陈旧待验证)、DELAY/PROBE(探测中)、FAILED(解析失败,常见于目标不存在)、PERMANENT(静态)。

派生概念:

  • 免费 ARP(Gratuitous ARP):主机主动广播自己的 IP-MAC 对应关系,用于检测 IP 冲突、以及 keepalived/VIP 漂移后刷新交换机与主机的 ARP 缓存。
  • 代理 ARP(Proxy ARP):路由器代替其他网段的主机应答 ARP。
  • ARP 欺骗:攻击者伪造 ARP 应答,把网关 IP 对应到自己的 MAC,实现中间人攻击;防护手段包括静态绑定、交换机端口安全、DHCP Snooping + DAI。
  • RARP:由 MAC 反查 IP,早期无盘工作站使用,已被 DHCP 取代。

3.4 TCP 协议

TCP(Transmission Control Protocol)是面向连接、可靠、基于字节流的传输层协议。

可靠性机制:序号与确认(ACK)、超时重传、快速重传、滑动窗口流量控制、拥塞控制(慢启动、拥塞避免、快恢复)、校验和、按序交付与去重。

TCP 头部关键标志位:

标志 含义
SYN 请求建立连接,同步序号
ACK 确认号有效
FIN 数据发送完毕,请求关闭连接
RST 复位连接(对方端口未监听或连接异常时返回)
PSH 尽快把数据推给应用层
URG 紧急指针有效

3.4.1 三次握手(建立连接)

客户端                                          服务端
  |                                               | (LISTEN)
  |----- 1. SYN, seq=x ------------------------->| 
  |                                               | (SYN_RECV)
  |<---- 2. SYN+ACK, seq=y, ack=x+1 -------------|
  | (SYN_SENT -> ESTABLISHED)                     |
  |----- 3. ACK, seq=x+1, ack=y+1 -------------->|
  |                                               | (ESTABLISHED)
  1. 客户端发送 SYN,携带初始序号 seq=x,进入 SYN_SENT。
  2. 服务端回应 SYN+ACK,自己的序号 seq=y,确认号 ack=x+1,进入 SYN_RECV(半连接,存放于半连接队列)。
  3. 客户端回 ACK,ack=y+1,双方进入 ESTABLISHED,连接建立,可以传数据。

为什么是三次而不是两次:两次握手无法让服务端确认客户端确实收到了自己的 SYN+ACK,也无法防止历史失效的 SYN 造成服务端白白建立连接、浪费资源。

相关运维知识:SYN Flood 攻击就是大量伪造源 IP 的 SYN 塞满半连接队列,缓解手段是开启 net.ipv4.tcp_syncookies=1、增大 tcp_max_syn_backlog、缩小 tcp_synack_retries。

3.4.2 四次挥手(断开连接)

主动关闭方                                     被动关闭方
  |----- 1. FIN, seq=u ------------------------->|
  | (FIN_WAIT_1)                                 | (CLOSE_WAIT)
  |<---- 2. ACK, ack=u+1 ------------------------|
  | (FIN_WAIT_2)                                 |
  |<---- 3. FIN, seq=w --------------------------|
  |                                              | (LAST_ACK)
  |----- 4. ACK, ack=w+1 ----------------------->|
  | (TIME_WAIT, 等 2MSL -> CLOSED)                | (CLOSED)
  1. 主动关闭方(通常是客户端)数据发完,发送 FIN,进入 FIN_WAIT_1。
  2. 被动关闭方回 ACK,进入 CLOSE_WAIT;此时它仍可继续发送剩余数据(TCP 是全双工,需要分别关闭两个方向)。主动方进入 FIN_WAIT_2。
  3. 被动方数据也发完,发送 FIN,进入 LAST_ACK。
  4. 主动方回 ACK,进入 TIME_WAIT,等待 2MSL 后变为 CLOSED;被动方收到 ACK 即 CLOSED。

为什么是四次:关闭是双向的,一个方向的 FIN 只表示"我不再发数据了",对方可能还有数据要发,因此需要各自发一次 FIN 并各自被确认。

3.4.3 TCP 状态机与 TIME_WAIT / CLOSE_WAIT

状态 出现在 含义
LISTEN 服务端 监听端口,等待连接
SYN_SENT 客户端 已发 SYN,等待对端响应
SYN_RECV 服务端 收到 SYN 并回了 SYN+ACK,半连接状态
ESTABLISHED 双方 连接已建立,可收发数据
FIN_WAIT_1 主动关闭方 已发 FIN,等待对端 ACK
FIN_WAIT_2 主动关闭方 己方 FIN 已被确认,等待对端的 FIN
CLOSE_WAIT 被动关闭方 收到对端 FIN 并已 ACK,等待本端应用调用 close()
LAST_ACK 被动关闭方 已发出自己的 FIN,等待最后的 ACK
TIME_WAIT 主动关闭方 已发最后的 ACK,等待 2MSL 后彻底关闭
CLOSING 双方 双方几乎同时关闭的少见状态
CLOSED 双方 连接不存在

TIME_WAIT 说明:

  • 只出现在主动关闭连接的一方,持续 2MSL(MSL 为报文最大生存时间,Linux 固定约 60 秒,即 TIME_WAIT 约 60 秒,内核宏 TCP_TIMEWAIT_LEN)。
  • 存在意义:① 确保最后一个 ACK 丢失时,对端重发的 FIN 还能被响应,让对端可靠关闭;② 让本次连接的迟到报文在网络中消亡,避免干扰使用相同四元组的新连接。
  • 大量 TIME_WAIT 常见于高并发短连接的客户端或反向代理(Nginx 主动关闭后端连接)。危害主要是占用本地端口。
  • 常见优化:开启长连接/连接池(最有效)、net.ipv4.tcp_tw_reuse=1(客户端侧复用,需 tcp_timestamps=1)、扩大 net.ipv4.ip_local_port_range。不要使用已被移除的 tcp_tw_recycle(NAT 环境下会导致连接失败)。

CLOSE_WAIT 说明:

  • 只出现在被动关闭的一方,表示对端已经关闭,而本端应用程序没有调用 close()/shutdown() 释放 socket。
  • 大量 CLOSE_WAIT 基本可以断定是应用程序 BUG(异常分支未关闭连接、连接池泄漏、线程阻塞未回收),不是内核参数能解决的问题;它不会自动超时消失,会一直占用文件描述符直至进程退出。
  • 排查方法:
ss -tan state close-wait                       # 列出 CLOSE_WAIT 连接
ss -tanp | grep CLOSE-WAIT                     # 带进程信息
netstat -ant | awk '/^tcp/{S[$NF]++} END{for(a in S) print a, S[a]}'   # 各状态计数
lsof -p <PID> | grep -c TCP                    # 查看某进程占用的连接数

3.5 UDP 协议与 TCP 对比

UDP(User Datagram Protocol)是无连接、不可靠、面向报文的传输层协议,头部仅 8 字节(源端口、目的端口、长度、校验和)。

对比项 TCP UDP
连接方式 面向连接,需三次握手 无连接,直接发送
可靠性 可靠:确认、重传、排序、去重 不可靠:可能丢包、乱序、重复
传输单位 字节流(无边界,需应用自己分包) 数据报(保留消息边界)
头部开销 20 字节起 8 字节
流量/拥塞控制 有(滑动窗口、慢启动等) 无
速度与时延 较慢、时延抖动大 快、时延低
支持通信方式 只能一对一 支持一对一、一对多(广播/组播)
典型应用 HTTP/HTTPS、SSH、FTP、SMTP、MySQL、NFS(TCP) DNS 查询、DHCP、SNMP、TFTP、NTP、语音视频、QUIC、syslog

3.6 端口号

  • 端口号为 16 位,范围 0 ~ 65535,用于标识同一主机上的不同网络进程;IP + 协议 + 端口 唯一确定一个通信端点,"源 IP + 源端口 + 目的 IP + 目的端口"称为四元组。
  • 分类:
    • 0 ~ 1023:知名端口(Well-Known),由 IANA 分配,Linux 下绑定需要 root 权限。
    • 1024 ~ 49151:注册端口,常见服务软件使用。
    • 49152 ~ 65535:动态/私有端口,客户端随机源端口取自此范围(Linux 实际范围见 cat /proc/sys/net/ipv4/ip_local_port_range)。
  • 端口号建议取值范围为 1024 ~ 65535(如使用 nc 做测试时自选端口)。
  • 本机服务与端口对应关系记录在 /etc/services。

常用端口号对照表:

端口 协议 服务 说明
20 TCP FTP-Data FTP 数据连接(主动模式)
21 TCP FTP FTP 控制连接,明文传输
22 TCP SSH/SFTP/SCP 加密远程登录与文件传输
23 TCP Telnet 明文远程登录,不安全,常被当作测端口的工具
25 TCP SMTP 发送邮件
53 UDP/TCP DNS 域名解析:查询用 UDP,区域传送和大响应用 TCP
67/68 UDP DHCP 67 服务端,68 客户端
69 UDP TFTP 简单文件传输,PXE 装机常用
80 TCP HTTP 明文 Web
110 TCP POP3 接收邮件
111 TCP/UDP rpcbind/portmap NFS、NIS 等 RPC 服务端口映射
123 UDP NTP 时间同步
137/138/139 UDP/TCP NetBIOS Windows 网络邻居
143 TCP IMAP 接收邮件
161/162 UDP SNMP 网络设备监控
389 TCP LDAP 目录服务(636 为 LDAPS)
443 TCP HTTPS HTTP over TLS(HTTP/3 使用 UDP 443)
445 TCP SMB/CIFS Windows 文件共享
465/587 TCP SMTPS/Submission 加密发信
514 UDP Syslog 日志收集
873 TCP rsync rsync 守护进程模式
993/995 TCP IMAPS/POP3S 加密收信
1521 TCP Oracle Oracle 数据库
2049 TCP/UDP NFS 网络文件系统
3306 TCP MySQL/MariaDB 数据库
3389 TCP RDP Windows 远程桌面
5432 TCP PostgreSQL 数据库
5672 TCP AMQP RabbitMQ
6379 TCP Redis 缓存数据库
8080 TCP HTTP-Alt Tomcat 等应用服务器常用
9200/9300 TCP Elasticsearch REST 接口 / 集群通信
11211 TCP/UDP Memcached 缓存
27017 TCP MongoDB 数据库

3.7 常见应用层协议

协议 端口 传输层 作用与要点
HTTP 80 TCP 超文本传输协议,无状态请求-响应模型;方法 GET/POST/PUT/DELETE/HEAD;状态码 2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误;HTTP/1.1 支持长连接(Keep-Alive)
HTTPS 443 TCP HTTP + SSL/TLS,提供加密、完整性校验与服务端身份认证;握手过程为协商加密套件、验证证书、交换会话密钥后转对称加密
FTP 21(控制)、20(数据) TCP 文件传输协议,明文;主动模式(PORT,服务端从 20 端口主动连客户端,易被客户端防火墙阻挡)与被动模式(PASV,服务端开高端口等客户端连,穿越 NAT 更友好);安全替代为 SFTP(走 SSH 22)与 FTPS
SSH 22 TCP 安全外壳协议,加密远程登录、执行命令、文件传输(scp/sftp)、端口转发与隧道
DNS 53 UDP 为主,TCP 辅 域名与 IP 相互解析。记录类型:A(IPv4)、AAAA(IPv6)、CNAME(别名)、MX(邮件)、NS(权威服务器)、PTR(反向)、TXT、SOA。解析顺序:浏览器/系统缓存 → /etc/hosts → /etc/resolv.conf 指定的 DNS → 根域 → 顶级域 → 权威域。递归查询由本地 DNS 代为完成,迭代查询在各级 DNS 之间进行
DHCP 67(服务端)、68(客户端) UDP 自动为客户端分配 IP、掩码、网关、DNS。四步过程:DISCOVER(客户端广播)→ OFFER(服务端提供)→ REQUEST(客户端请求确认)→ ACK(服务端确认),含租期与续租(租期一半时续租)
Telnet 23 TCP 明文远程登录,生产禁用;常用来测试 TCP 端口是否开放
SMTP/POP3/IMAP 25 / 110 / 143 TCP 发信 / 收信(下载后可删除)/ 收信(服务端保留并同步状态)
NTP 123 UDP 时间同步,集群、日志与认证(Kerberos)强依赖时间一致
SNMP 161/162 UDP 网络设备与服务器监控采集
NFS 2049(依赖 111 rpcbind) TCP/UDP 类 UNIX 平台的网络文件共享

详见 09-02-NFS与autofs.md


四、IP 地址

4.1 IPv4 与 IPv6

版本 格式 示例
IPv4 四个点分十进制数字 10.1.1.35、192.168.1.1
IPv6 六组点分十六进制数字(因互联网急剧扩张、IPv4 地址不足而发展的下一代 IP) fe80::20c:29ff:fe21:fd31

IPv4 地址是一个 32 位的二进制数字,由网络地址和主机地址两部分组成。

IPv4 地址由四个十进制数字表示,每个十进制数可转换为一个八位二进制数。例如:

10.1.1.35 转换为二进制:
00001010.00000001.00000001.00100011

每一位对应的权值(掩码 255 时):

位序:  1   2   3   4   5  6  7  8
权值:128  64  32  16  8  4  2  1

练习:将以下二进制转换为十进制:

11000000.10101000.00000001.01100100

(答案见本文"练习"一节。)

十进制转二进制的实用方法:

用 128、64、32、16、8、4、2、1 依次去减,能减则该位为 1,不能减则为 0。例如 183:

183 - 128 = 55  -> 1
 55 - 64  < 0   -> 0
 55 - 32  = 23  -> 1
 23 - 16  = 7   -> 1
  7 - 8   < 0   -> 0
  7 - 4   = 3   -> 1
  3 - 2   = 1   -> 1
  1 - 1   = 0   -> 1
=> 183 = 10110111

也可使用系统自带计算器的"程序员"(编程)模式做进制转换,或用命令行:

# 十进制转二进制
echo 'obase=2; 183' | bc          # 输出 10110111
# 二进制转十进制
echo 'ibase=2; 10110111' | bc     # 输出 183
printf '%d\n' 0b10110111          # bash 4.2+ 亦可

4.2 IP 地址管理机构

IP 地址由全球性机构 IANA 统一管理,各区域分配机构如下:

机构 负责区域
AfriNIC 非洲地区
APNIC 亚太地区(中国所在区域)
ARIN 北美地区
LACNIC 拉丁美洲及加勒比群岛
RIPE NCC 欧洲、中东和中亚

4.3 IP 地址分类

IP 地址分为 A、B、C、D、E 五类,互联网上实际使用的只有 A、B、C 三类。

类别 网络位/主机位 开头标识(固定首位) 地址范围 默认子网掩码 说明
A 类 前 8 位网络位,后 24 位主机位 首位为 0 1 - 127(0.0.0.1 ~ 127.255.255.255) 255.0.0.0(/8) 以 0 开头,适合超大型网络
B 类 前 16 位网络位,后 16 位主机位 前两位为 10 128 - 191(128.0.0.0 ~ 191.255.255.255) 255.255.0.0(/16) 以 10 开头,适合中大型网络
C 类 前 24 位网络位,后 8 位主机位 前三位为 110 192 - 223(192.0.0.0 ~ 223.255.255.255) 255.255.255.0(/24) 以 110 开头,适合小型网络
D 类 组播地址(无网络/主机位划分) 前四位为 1110 224 - 239(224.0.0.0 ~ 239.255.255.255) — 多播地址,保留用于寻址一组计算机或同一协议组的主机
E 类 军方使用与预留 前五位为 11110 240 - 247(240.0.0.0 ~ 247.255.255.255);广义为 240.0.0.0 ~ 255.255.255.255 — 保留地址,公网未使用,一般用于科研实验或私有网络以解决 IP 不足

各类地址的二进制范围:

A 类:00000000.00000000.00000000.00000001 ~ 01111111.11111111.11111111.11111111
B 类:10000000.00000000.00000000.00000000 ~ 10111111.11111111.11111111.11111111
C 类:11000000.00000000.00000000.00000000 ~ 11011111.11111111.11111111.11111111
D 类:11100000.00000000.00000000.00000000 ~ 11101111.11111111.11111111.11111111
E 类:11110000.00000000.00000000.00000000 ~ 11110111.11111111.11111111.11111111

判断类别的速算法:只看第一个十进制数(第一字节)落在 1-127 / 128-191 / 192-223 / 224-239 / 240-255 哪个区间即可。

常见 D 类(组播)保留地址举例:224.0.0.1(本网段所有主机)、224.0.0.2(本网段所有路由器)、224.0.0.5/6(OSPF)、224.0.0.9(RIPv2)、224.0.0.18(VRRP,keepalived 使用)。

4.4 特殊地址

地址/地址段 用途
0.0.0.0 32 位全为 0。作为本机地址时代表本机本身(DHCP 未获取地址前的源地址);在监听语境中代表"本机所有 IP";在路由表中代表"全世界所有地址",即默认路由;代表所有 IP
255.255.255.255 32 位全为 1,受限广播地址(全网广播),不被路由器转发
127.0.0.1 ~ 127.255.255.255 本地环回地址,代表本机本身,用于测试本机 TCP/IP 协议是否正常
网络地址(主机位全 0) 标识一个网段本身,如 192.168.1.0/24,不能分配给主机
广播地址(主机位全 1) 定向广播,发给该网段所有主机,如 192.168.1.255,不能分配给主机
169.254.0.0/16 链路本地地址(APIPA)。DHCP 获取失败时系统自动配置,只能同网段通信,看到它基本说明没拿到 DHCP 地址
224.0.0.0/4 组播地址段

某些集群软件也会使用环回地址,例如 LVS 集群的 DR(Direct Routing)架构。

4.5 三个私网网段

以下地址为内网(局域网)地址,不能在公网上路由,由 RFC1918 定义,可在不同单位内部重复使用,通过 NAT 转换后访问公网:

类别 私网网段 CIDR 表示 可用地址数
A 类 10.0.0.0 ~ 10.255.255.255 10.0.0.0/8 约 1677 万
B 类 172.16.0.0 ~ 172.31.255.255 172.16.0.0/12 约 104 万
C 类 192.168.0.0 ~ 192.168.255.255 192.168.0.0/16 约 6.5 万

注意 B 类私网是 172.16 ~ 172.31,共 16 个 B 类网段,不是只有 172.16。

4.6 IPv6 简介

IPv4 地址长 32 位,理论上约 43 亿个,已分配枯竭;IPv6 地址长 128 位,数量约 3.4×10^38,同时简化了首部、取消了广播与分片、内置 IPsec、支持地址自动配置(SLAAC)。(IPv6 此处不深入展开,不必强记分类。)

表示方法:

  • 采用冒分十六进制:8 组,每组 4 个十六进制数,组间用 : 分隔。
完整写法:2001:0DB8:0000:0000:0000:0000:1428:57AB
  • 前导零可省略:
2001:DB8:0:0:0:0:1428:57AB
  • 连续的全零组可用 :: 压缩一次(整个地址只能出现一个 ::):
2001:DB8::1428:57AB
::1        等价于 0:0:0:0:0:0:0:1    IPv6 环回地址(相当于 IPv4 的 127.0.0.1)
::         等价于全 0                 未指定地址(相当于 0.0.0.0)
  • 前缀长度用 CIDR 方式书写,如 2001:db8::/32、fe80::/10;主机地址通常为 /64。
  • 在 URL 中需用方括号括起:http://[2001:db8::1]:80/。

常见地址类型:

类型 前缀 说明
全球单播地址 2000::/3 相当于 IPv4 公网地址
链路本地地址 fe80::/10 自动生成,仅本链路有效,示例 fe80::20c:29ff:fe21:fd31(常由 MAC 通过 EUI-64 生成),使用时需指明接口如 ping6 fe80::1%eth0
唯一本地地址 fc00::/7(实际用 fd00::/8) 相当于 IPv4 私网地址
组播地址 ff00::/8 IPv6 用组播取代广播,如 ff02::1 所有节点、ff02::2 所有路由器
任播地址 与单播同段 发给"最近的一个"成员

常用命令:

ip -6 addr show                 # 查看 IPv6 地址
ip -6 route show                # 查看 IPv6 路由
ping6 ::1                       # 测试本机 IPv6 协议栈
ping6 -I eth0 fe80::1           # 指定接口 ping 链路本地地址
ss -6 -tuln                     # 查看 IPv6 监听端口
sysctl -w net.ipv6.conf.all.disable_ipv6=1    # 临时关闭 IPv6

五、子网掩码与子网划分

5.1 基本原理

IP 地址 = 网络号 + 主机号。子网掩码(netmask)决定 IP 属于哪个网段。

  • 同一网段的不同 IP 可以直接通信。
  • 不同网段的两个 IP 需要经过路由才能通信。

子网掩码把一个 IP 地址分成两部分:左边是网络部分,右边是主机部分。掩码的二进制形式一定是"连续的 1 后面跟连续的 0",1 的个数就是网络位长度。

判断两个 IP 是否在同一网段的方法:将 IP 地址与子网掩码做按位与(AND)运算(对应位都为 1 才取 1,否则取 0),得到网络号。网络号相同则在同一网段。

以 192.168.0.183/24 为例:

IP   11000000.10101000.00000000.10110111
掩码 11111111.11111111.11111111.00000000
与   11000000.10101000.00000000.00000000   => 192.168.0.0

由此可得:

  • 网络号:主机部分的二进制位全部为 0,如 10.1.1.0。
  • 广播地址:主机部分的二进制位全部为 1,如 10.1.1.255。
  • 可用 IP 数量:主机部分除去网络号和广播地址,剩下的都是可用 IP。

网络号相同就是同一个网段;同一网段的节点在默认配置下可以直接通信。

计算方法示范(以 172.16.33.44/16 为例):

172.16.33.44 => 10101100.00010000.00100001.00101100
/16 掩码     => 11111111.11111111.00000000.00000000
与运算结果   => 10101100.00010000.00000000.00000000   => 172.16.0.0   (网络号)
主机位置 1   => 10101100.00010000.11111111.11111111   => 172.16.255.255(广播地址)

可使用系统自带计算器的"程序员"(编程)模式做进制转换。

5.2 CIDR 前缀表示与掩码换算

CIDR(Classless Inter-Domain Routing,无类别域间路由)用 IP/前缀长度 的方式表示网络,如 192.168.1.0/24,其中 /24 表示前 24 位是网络位。CIDR 打破了 A/B/C 类的固定边界,使地址分配更灵活。

点分十进制掩码与前缀长度换算:把前缀长度按 8 位一组拆开,满 8 位的组写 255,不足的组按权值累加。

单字节内可能出现的掩码值只有 9 种:

该字节中 1 的个数 二进制 十进制
0 00000000 0
1 10000000 128
2 11000000 192
3 11100000 224
4 11110000 240
5 11111000 248
6 11111100 252
7 11111110 254
8 11111111 255

举例:

/18 => 11111111.11111111.11000000.00000000 => 255.255.192.0
/26 => 11111111.11111111.11111111.11000000 => 255.255.255.192
/30 => 11111111.11111111.11111111.11111100 => 255.255.255.252

反过来,255.255.255.128 中 1 的个数为 8+8+8+1 = 25,即 /25。

5.3 网络地址、广播地址与可用主机数的计算公式

设前缀长度为 m(即掩码中 1 的个数),主机位数为 h = 32 - m:

计算项 公式 / 方法
网络地址 IP AND 掩码(主机位全置 0)
广播地址 网络地址 OR 反掩码(主机位全置 1)
该网段地址总数 2^(32-m)
可用主机数 2^(32-m) - 2(减去网络地址与广播地址)
第一个可用 IP 网络地址 + 1
最后一个可用 IP 广播地址 - 1
地址块步长(block size) 256 - 掩码中最后一个非 0 字节的值

特例说明:

  • /31(2^1 - 2 = 0)按 RFC3021 用于点对点链路,两个地址都可用。
  • /32 表示单个主机地址(主机路由),常用于回环、VIP、路由条目。

5.4 计算示例:10.1.1.35/8 与 10.1.1.36/24 能否互通

第一个 IP:10.1.1.35/255.0.0.0

  00001010.00000001.00000001.00100011   (10.1.1.35)
& 11111111.00000000.00000000.00000000   (255.0.0.0)
----------------------------------------
  00001010.00000000.00000000.00000000   网络号:10.0.0.0
  • 网络号:10.0.0.0(即 10.0.0.0/8)
  • 主机号:1.1.35
  • 广播地址:10.255.255.255
  • 可用主机范围:10.0.0.1 ~ 10.255.255.254

第二个 IP:10.1.1.36/255.255.255.0

  00001010.00000001.00000001.00100100   (10.1.1.36)
& 11111111.11111111.11111111.00000000   (255.255.255.0)
----------------------------------------
  00001010.00000001.00000001.00000000   网络号:10.1.1.0
  • 网络号:10.1.1.0(即 10.1.1.0/24)
  • 主机号:36
  • 广播地址:10.1.1.255
  • 可用主机范围:10.1.1.1 ~ 10.1.1.254

两个 IP 的网络号不同(10.0.0.0 ≠ 10.1.1.0),不能直接互通。

5.5 子网划分的计算公式

子网划分的本质:向主机位借位当作子网位,用一个大网段切分出多个小网段,从而隔离广播域、节约地址、便于管理。

设默认掩码位数为 n,划分后掩码位数为 m:

计算项 公式
子网数量 2^(m - n)
每个子网可用主机数 2^(32 - m) - 2(减 2 是去掉网络号和广播地址)

可用 Shell 快速计算:

echo $[2**(m-n)]       # 子网数
echo $[2**(32-m)-2]    # 每子网可用主机数

实际执行示例:

# 192.168.1.0/25:C 类默认 /24,借 1 位
echo $[2**(25-24)]     # 2      子网数
echo $[2**(32-25)-2]   # 126    每子网可用主机数

# 172.16.0.0/18:B 类默认 /16,借 2 位
echo $[2**(18-16)]     # 4
echo $[2**(32-18)-2]   # 16382

5.6 子网划分的完整计算步骤

以"把 192.168.10.0/24 划分为 4 个子网"为例,标准步骤如下:

  1. 确定默认掩码位数 n:192.168.10.0 是 C 类地址,默认掩码 /24,n = 24。
  2. 确定需要借的位数:需要 4 个子网,2^k ≥ 4,取 k = 2,则新掩码 m = n + k = 26,即 255.255.255.192。
  3. 计算每个子网的主机数:2^(32-26) - 2 = 64 - 2 = 62 台。
  4. 计算步长(block size):256 - 192 = 64,即每个子网在最后一个字节上间隔 64。
  5. 列出各子网的网络地址:从 0 开始按步长递增 —— 0、64、128、192。
  6. 写出每个子网的广播地址与可用范围:广播地址 = 下一个网络地址 - 1。
子网 网络地址 可用 IP 范围 广播地址 掩码
1 192.168.10.0/26 192.168.10.1 ~ 192.168.10.62 192.168.10.63 255.255.255.192
2 192.168.10.64/26 192.168.10.65 ~ 192.168.10.126 192.168.10.127 255.255.255.192
3 192.168.10.128/26 192.168.10.129 ~ 192.168.10.190 192.168.10.191 255.255.255.192
4 192.168.10.192/26 192.168.10.193 ~ 192.168.10.254 192.168.10.255 255.255.255.192

反向题型(按主机数需求划分):若每个子网需容纳 30 台主机,则 2^h - 2 ≥ 30,得 h = 5,掩码 m = 32 - 5 = 27,即 255.255.255.224,步长 256 - 224 = 32,一个 C 类可划分出 2^(27-24) = 8 个子网。

5.7 示例一:192.168.1.0/25

即 192.168.1.0/255.255.255.128,C 类默认掩码为 /24。

  • 子网数:2^(25-24) = 2
  • 每子网可用主机数:2^(32-25) - 2 = 126
子网 网络号 可用 IP 范围 广播地址
1 192.168.1.0 192.168.1.1 ~ 192.168.1.126 192.168.1.127
2 192.168.1.128 192.168.1.129 ~ 192.168.1.254 192.168.1.255

5.8 示例二:172.16.0.0/18

即 172.16.0.0/255.255.192.0,B 类默认掩码为 /16。

  • 子网数:2^(18-16) = 4
  • 每子网可用主机数:2^(32-18) - 2 = 16382
子网 网络号 可用 IP 范围 广播地址
1 172.16.0.0 172.16.0.1 ~ 172.16.63.254 172.16.63.255
2 172.16.64.0 172.16.64.1 ~ 172.16.127.254 172.16.127.255
3 172.16.128.0 172.16.128.1 ~ 172.16.191.254 172.16.191.255
4 172.16.192.0 172.16.192.1 ~ 172.16.255.254 172.16.255.255

此例中借位发生在第三个字节,步长为 256 - 192 = 64,因此第三字节按 0、64、128、192 递增。

5.9 VLSM 变长子网掩码

VLSM(Variable Length Subnet Mask):在同一个大网段内,根据各子网实际主机数量的不同,使用不同长度的掩码划分,避免定长划分造成的浪费。

划分原则:先满足需求最大的子网,从大到小依次分配,且每个子网的起始地址必须对齐其块大小。

例题:把 192.168.20.0/24 分配给以下四个部门。

部门 需要主机数
办公区 100
研发区 50
测试区 20
路由器互联链路 2

计算过程:

  1. 办公区 100 台:2^7 - 2 = 126 ≥ 100,取 /25,块大小 128 → 192.168.20.0/25(可用 .1 ~ .126,广播 .127)。
  2. 研发区 50 台:2^6 - 2 = 62 ≥ 50,取 /26,块大小 64 → 从 128 开始 → 192.168.20.128/26(可用 .129 ~ .190,广播 .191)。
  3. 测试区 20 台:2^5 - 2 = 30 ≥ 20,取 /27,块大小 32 → 从 192 开始 → 192.168.20.192/27(可用 .193 ~ .222,广播 .223)。
  4. 互联链路 2 台:2^2 - 2 = 2,取 /30,块大小 4 → 从 224 开始 → 192.168.20.224/30(可用 .225 ~ .226,广播 .227)。

结果汇总:

部门 网段 掩码 可用范围 广播
办公区 192.168.20.0/25 255.255.255.128 .1 ~ .126 .127
研发区 192.168.20.128/26 255.255.255.192 .129 ~ .190 .191
测试区 192.168.20.192/27 255.255.255.224 .193 ~ .222 .223
互联链路 192.168.20.224/30 255.255.255.252 .225 ~ .226 .227
剩余可用 192.168.20.228 ~ 192.168.20.255 — 可继续按需划分 —

点对点链路使用 /30 是经典做法(2 个可用地址),支持 RFC3021 的设备可用 /31 进一步节约。

5.10 超网与路由聚合

超网(Supernetting)/ 路由汇总(Route Summarization)/ CIDR 聚合:与子网划分相反,把多个连续的小网段合并成一个大网段,用一条路由条目代表多条,从而缩小路由表规模、加快查表、减少路由震荡传播。

聚合方法:找出这些网段网络地址的公共二进制前缀,前缀长度就是聚合后的掩码长度。

例题:聚合以下 4 个网段。

192.168.8.0/24  => 11000000.10101000.00001000.00000000
192.168.9.0/24  => 11000000.10101000.00001001.00000000
192.168.10.0/24 => 11000000.10101000.00001010.00000000
192.168.11.0/24 => 11000000.10101000.00001011.00000000
                                      ^^^^^^ 前 22 位完全相同

前两个字节 16 位相同,第三字节前 6 位 000010 相同,共 16 + 6 = 22 位 → 聚合结果 192.168.8.0/22,掩码 255.255.252.0,覆盖 192.168.8.0 ~ 192.168.11.255。

再例:10.1.0.0/16 ~ 10.1.3.0/16 类似地可聚合为 10.0.0.0/14(需网段连续且起始地址对齐块大小)。

聚合的前提条件:

  1. 被聚合的网段必须连续。
  2. 聚合后的网络地址必须能被块大小整除(对齐),例如 /22 的块大小为 4,起始第三字节必须是 0、4、8、12…。
  3. 聚合可能会多覆盖(包含未实际使用的地址),需确保不会把不属于本方向的网段误吸收。

典型应用:企业出口路由汇总、BGP 路由宣告聚合、ip route add 10.0.0.0/8 via ... 一条路由覆盖所有内网。

5.11 常用掩码速查表

以 C 类网段(默认 /24)为基准的划分表:

前缀 点分十进制掩码 反掩码/通配符 块大小 子网数(相对 /24) 每网段总地址 可用主机数
/24 255.255.255.0 0.0.0.255 256 1 256 254
/25 255.255.255.128 0.0.0.127 128 2 128 126
/26 255.255.255.192 0.0.0.63 64 4 64 62
/27 255.255.255.224 0.0.0.31 32 8 32 30
/28 255.255.255.240 0.0.0.15 16 16 16 14
/29 255.255.255.248 0.0.0.7 8 32 8 6
/30 255.255.255.252 0.0.0.3 4 64 4 2
/31 255.255.255.254 0.0.0.1 2 128 2 2(RFC3021 点对点)
/32 255.255.255.255 0.0.0.0 1 256 1 1(单主机)

大网段速查:

前缀 掩码 可用主机数 相当于
/8 255.0.0.0 16777214 1 个 A 类
/12 255.240.0.0 1048574 16 个 B 类
/16 255.255.0.0 65534 1 个 B 类 / 256 个 C 类
/18 255.255.192.0 16382 64 个 C 类
/20 255.255.240.0 4094 16 个 C 类
/22 255.255.252.0 1022 4 个 C 类
/23 255.255.254.0 510 2 个 C 类

Linux 下可用 ipcalc 快速验证:

ipcalc -b -m -n 192.168.10.130/26     # CentOS 7 自带(iputils/initscripts 提供)
ipcalc -a -b -n -m -p 192.168.10.130/26
sipcalc 192.168.10.0/26               # 功能更强,需额外安装

六、网关与路由

6.1 路由的作用

路由的作用是使两台处于不同网段的计算机能够相互访问。

示意图:

内网 IP:192.168.1.0/24          192.168.1.0/24
             张三家                    李四家
外网 IP:  71.1.1.1/8              81.1.1.1/8

6.2 默认网关的作用

默认网关(Default Gateway)是本网段通往其他所有网段的"出口",通常是本网段路由器(或三层交换机)在该网段上的接口地址。

  • 主机发送数据前,先用自己的掩码判断目标 IP 是否与自己同网段:
    • 同网段:通过 ARP 拿到对方 MAC,直接二层转发。
    • 不同网段:把数据包的目的 IP 保持不变,但目的 MAC 填写默认网关的 MAC,交给网关代为转发。
  • 因此默认网关必须与本机 IP 在同一网段,否则不可达(除非配置了特殊的 onlink 路由)。
  • 在路由表中,默认网关体现为目标 0.0.0.0/0 的一条默认路由。
  • 一台主机通常只应有一个默认网关;配置多个默认网关会导致回包路径混乱(多网卡场景应使用策略路由或明细静态路由解决)。

上互联网的三要素:

  1. IP 地址
  2. Gateway(网关)
  3. DNS

使用 ping 检查网关连通情况:

ping -c 1 192.168.0.1

外网 IP ping 不通时,先检查路由表,再检查网关配置。

网卡配置文件中 GATEWAY=、DNS1= 等永久配置项详见 07-02-网卡配置与远程管理.md

6.3 查看路由表

在 Linux 下使用 route -n 查看系统路由表:

route -n

输出示例:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth1
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1

路由表字段说明:

字段 含义
Destination 目标网段
Gateway 网关地址(0.0.0.0 表示直连,无需网关)
Genmask 子网掩码
Flags 路由标志(U 表示启用,G 表示网关路由)
Metric 度量值/开销,值越小越优先
Ref 引用次数(Linux 未使用,恒为 0)
Use 查找该路由的次数
Iface 出站网卡

Flags 常见取值:

标志 含义
U Up,该路由有效、已启用
G Gateway,需要经过网关(间接路由);没有 G 表示目标直连
H Host,目标是一台主机(/32),而不是一个网段
D 由 ICMP 重定向动态生成
M 被 ICMP 重定向修改过
! 拒绝路由(reject)

上例的三行含义:

  1. 192.168.1.0/24 直连在 eth1,无需网关(Gateway 为 0.0.0.0)。
  2. 169.254.0.0/16 链路本地路由,Metric 较大(1002),一般由 DHCP 失败或系统自动添加。
  3. 0.0.0.0/0 默认路由,凡是前两条都匹配不上的目标,都交给网关 192.168.1.1,从 eth1 发出(标志 UG)。

查看带 UG 标识的行里是否有网关 IP,即可判断默认网关是否配置成功。

使用 ip route(推荐,iproute2 工具集):

ip route show
ip r            # 简写
ip route get 8.8.8.8         # 查询内核实际会用哪条路由、走哪个网卡、源地址是什么
ip route show table all      # 查看所有路由表(含 local/main/default)

输出示例与解读:

default via 192.168.1.1 dev eth0 proto static metric 100
169.254.0.0/16 dev eth0 scope link metric 1002
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50 metric 100
字段 含义
default via X 默认路由,下一跳为 X,等价于 0.0.0.0/0
dev eth0 出接口
proto kernel 该路由由内核在配置 IP 时自动生成(直连路由);static 为手工/配置文件添加;dhcp 由 DHCP 下发
scope link 目标在本链路上可直接到达;scope host 为本机;global 为全局
src 192.168.1.50 走此路由时默认使用的源地址
metric 优先级,越小越优先

route -n 属于 net-tools(ifconfig/netstat/arp 同族),CentOS 7 起默认可能未安装,推荐统一使用 iproute2 的 ip/ss 系列命令。

6.4 路由查找规则与最长前缀匹配

访问一个 IP 时,系统按以下顺序查找路由表:

  1. 路由表中若有目标网段的条目,则从该条目指定的网卡发出。
  2. 若没有匹配的网段条目,则查找默认路由(即网关,目标为 0.0.0.0/0 的那条),把数据包交给网关处理。
  3. 若连默认路由也没有,则报告网络不可达(Network is unreachable),数据包被丢弃。

路由选择原则(优先级由高到低):

  1. 最长前缀匹配(Longest Prefix Match):多条路由都能匹配目标 IP 时,掩码最长(最精确)的那条胜出,与书写顺序无关。
  2. 路由协议优先级 / 管理距离:同样精确度下,按来源可信度选择(直连 > 静态 > 动态路由 OSPF/RIP)。
  3. 度量值 Metric:同来源、同精确度时,Metric 小者优先。
  4. 若上述完全相同,则形成等价多路径(ECMP),进行负载分担。

最长前缀匹配示例:路由表中有

0.0.0.0/0        via 192.168.1.1     # 默认路由
10.0.0.0/8       via 192.168.1.2
10.1.0.0/16      via 192.168.1.3
10.1.1.0/24      via 192.168.1.4
10.1.1.100/32    via 192.168.1.5

访问不同目标时的选择:

目标 IP 命中路由 下一跳 原因
10.1.1.100 10.1.1.100/32 192.168.1.5 32 位最精确(主机路由)
10.1.1.200 10.1.1.0/24 192.168.1.4 24 位比 16、8 位更精确
10.1.9.5 10.1.0.0/16 192.168.1.3 不在 /24 内,退到 /16
10.9.9.9 10.0.0.0/8 192.168.1.2 只有 /8 匹配
8.8.8.8 0.0.0.0/0 192.168.1.1 都不匹配,走默认路由

可用 ip route get 直接验证内核的选择结果:

ip route get 10.1.1.200
# 输出示例:10.1.1.200 via 192.168.1.4 dev eth0 src 192.168.1.50

6.5 静态路由的添加与删除

iproute2 方式(推荐):

# 添加默认路由 / 删除默认路由
sudo ip r add default via 192.168.0.1        # 添加默认路由
sudo ip r del default                        # 删除默认路由
sudo ip route add default via 192.168.1.1 dev eth0 metric 100

# 添加到某网段的静态路由(下一跳网关)
sudo ip route add 10.1.1.0/24 via 192.168.1.254
sudo ip route add 172.16.0.0/16 via 192.168.1.254 dev eth0

# 添加主机路由(/32)
sudo ip route add 10.8.8.8/32 via 192.168.1.254

# 添加直连(无网关)路由,走某个接口
sudo ip route add 10.2.2.0/24 dev eth1

# 修改与替换
sudo ip route change 10.1.1.0/24 via 192.168.1.253
sudo ip route replace default via 192.168.1.2

# 删除
sudo ip route del 10.1.1.0/24
sudo ip route del 10.1.1.0/24 via 192.168.1.254

# 黑洞路由(丢弃到某网段的流量)
sudo ip route add blackhole 192.0.2.0/24

net-tools(route)方式:

route add -net 10.1.1.0 netmask 255.255.255.0 gw 192.168.1.254         # 添加网段路由
route add -net 10.1.1.0/24 dev eth1                                    # 走指定网卡
route add -host 10.8.8.8 gw 192.168.1.254                              # 添加主机路由
route add default gw 192.168.1.1                                       # 添加默认网关
route del -net 10.1.1.0 netmask 255.255.255.0 gw 192.168.1.254         # 删除网段路由
route del default gw 192.168.1.1                                       # 删除默认网关

以上命令重启网络或系统后失效。永久保存静态路由(CentOS 7):

# 方式一:写入网卡对应的 route-<网卡名> 文件
cat > /etc/sysconfig/network-scripts/route-eth0 <<'EOF'
10.1.1.0/24 via 192.168.1.254 dev eth0
172.16.0.0/16 via 192.168.1.254 dev eth0
EOF

# 方式二:旧式三行写法
# ADDRESS0=10.1.1.0
# NETMASK0=255.255.255.0
# GATEWAY0=192.168.1.254

# 生效
systemctl restart network

小实验(静态路由验证思路):

ip route get 10.1.1.5                # 添加前:看走的是默认路由
ip route add 10.1.1.0/24 via 192.168.1.254
ip route get 10.1.1.5                # 添加后:应改为经 192.168.1.254
traceroute -n 10.1.1.5               # 观察第一跳是否变化
ip route del 10.1.1.0/24             # 清理实验环境

6.6 Linux 开启路由转发

Linux 主机默认不转发不属于自己的数据包。要让它充当路由器(或做 NAT 网关、容器/虚拟机宿主机),必须开启 IP 转发。

临时开启(重启失效):

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1

查看当前状态(0 关闭,1 开启):

cat /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward

永久开启:编辑 /etc/sysctl.conf(或在 /etc/sysctl.d/ 下新建 .conf 文件)加入:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

然后使其生效:

sysctl -p
sysctl --system        # 加载 /etc/sysctl.d/ 下所有配置

作为路由器还需注意:

  • 两侧网段的主机要把这台 Linux 的对应接口 IP 设为自己的网关。
  • 防火墙 FORWARD 链必须允许转发:
iptables -P FORWARD ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 相关内核参数:net.ipv4.conf.all.rp_filter(反向路径过滤,不对称路由时可能丢包)、net.ipv4.conf.all.send_redirects。

6.7 NAT 与 SNAT / DNAT

NAT(Network Address Translation,网络地址转换):在数据包经过网关时修改其源或目的 IP(及端口),使私网地址能够访问公网、或把公网请求引入内网服务器。它是缓解 IPv4 地址枯竭的核心技术,同时隐藏内网结构、提供一定安全性。

类型 修改内容 发生方向 典型用途
SNAT(Source NAT) 修改源 IP 出方向(内网 → 公网) 让内网多台主机共享公网 IP 上网
MASQUERADE(伪装) SNAT 的特例,源 IP 自动取出接口当前地址 出方向 出口 IP 动态获取(ADSL/DHCP)时使用
DNAT(Destination NAT) 修改目的 IP 入方向(公网 → 内网) 端口映射/发布内网服务器,如把公网 80 映射到内网 Web 服务器
PAT / NAPT(端口多路复用) 同时修改 IP 与端口 双向 多台内网主机共用一个公网 IP,靠端口区分会话;家用路由器即此方式
全锥/受限锥形等类型 — — 描述 NAT 对外部入向包的宽松程度,影响 P2P 穿透

工作过程(SNAT 示例):内网 192.168.1.10:52000 访问 8.8.8.8:80,网关公网地址 1.1.1.1。

出方向:192.168.1.10:52000 -> 8.8.8.8:80
        经网关 SNAT 改写为 1.1.1.1:61000 -> 8.8.8.8:80,并在连接跟踪表中记录映射
入方向:8.8.8.8:80 -> 1.1.1.1:61000
        网关查连接跟踪表,反向还原为 8.8.8.8:80 -> 192.168.1.10:52000

iptables 配置示例(需先开启 ip_forward):

# SNAT:内网 192.168.1.0/24 出公网,源地址改为固定公网 IP 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.1.1.1

# MASQUERADE:公网 IP 动态时使用
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# DNAT:把访问网关 1.1.1.1:80 的请求转到内网 192.168.1.20:8080
iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 \
    -j DNAT --to-destination 192.168.1.20:8080

# 查看 NAT 规则与连接跟踪
iptables -t nat -nvL
conntrack -L
cat /proc/net/nf_conntrack | head

firewalld 方式:

firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --permanent --zone=public \
    --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.20
firewall-cmd --reload

注意事项:

  • SNAT 在 POSTROUTING 链(路由后),DNAT 在 PREROUTING 链(路由前),顺序不能颠倒。
  • NAT 依赖连接跟踪表(conntrack),高并发场景需关注 nf_conntrack_max 是否被打满(日志出现 nf_conntrack: table full, dropping packet)。
  • NAT 会破坏端到端透明性,对 FTP 主动模式、SIP、IPsec 等协议需要专门的 ALG 模块(如 nf_nat_ftp)。
  • 服务端看到的来源 IP 是 NAT 后的地址,Web 场景需依赖 X-Forwarded-For 获取真实客户端 IP。

七、网络排错的分层思路

7.1 按 OSI 层次自下而上排查

网络故障排查的通用原则:先物理后逻辑,先本地后远端,先分层定位再深入。

层次 检查内容 常用手段
物理层 网线是否插好、水晶头是否松动、网口指示灯是否闪烁、光模块与光纤、交换机是否加电、网卡是否被禁用 看指示灯、mii-tool、ethtool eth0(Link detected / Speed / Duplex)、换线换口
数据链路层 网卡状态是否 UP、MAC 地址是否正常、ARP 能否解析网关、VLAN 与端口配置、双工/速率协商、是否有大量错误包 ip link show、ip a s、ip neigh show、arping、ethtool -S eth0(错误计数)
网络层 IP/掩码是否正确、是否与网关同网段、路由表与默认网关是否正确、能否 ping 通网关与公网 IP、TTL 与路径 ip a、ip r、ping、traceroute、mtr、ip route get
传输层 端口是否监听、端口是否被防火墙拦截、连接状态是否异常(大量 TIME_WAIT/CLOSE_WAIT/SYN_RECV) ss -tuln、telnet ip port、nc -zv ip port、netstat -ant、iptables -nvL
应用层 DNS 解析是否正常、服务进程是否存活、配置与权限、证书是否过期、应用日志 ping 域名、dig/nslookup/host、curl -v、systemctl status、查看服务日志、tcpdump 抓包分析

7.2 六步网络故障排查法(实操流程)

遇到网络问题,按以下顺序逐步排查:

  1. 检查物理网线
    • 查看物理网口的黄灯是否闪烁。不闪烁则检查物理网线是否正常;闪烁则继续。
    • 执行 sudo mii-tool 网卡设备名,显示 link ok 代表网卡连接正常。
  2. 查看右上角网络连接状态,确认有线网络是否已连接。
  3. 查看当前网卡是否为停用状态:ip a s 查看 state 是 UP 还是 DOWN;若为 DOWN,执行 sudo ip l set enp0s25 up。
  4. 查看当前网卡是否有 IP:ip a s 查看;没有则临时获取(dhclient 或添加临时 IP),也可通过 ifcfg-* 永久配置。
  5. 检查网关(路由器)连接情况:ping -c 1 网关IP;外网 IP ping 不通先查路由表,再查网关配置。
  6. 检查 DNS 解析情况:ping -c 3 www.baidu.com;域名 ping 不通但外网 IP 能通则为 DNS 问题。

对应的常用命令:

sudo mii-tool enp0s25                # 检查物理链路,link ok 表示物理连接正常
ip a s                               # 查看网卡状态(UP/DOWN)与 IP
sudo ip l set enp0s25 up             # 启用网卡
sudo dhclient enp0s25                # 动态获取 IP
route -n                             # 查看路由表,确认 UG 行有网关
ping -c 1 192.168.0.1                # 测网关
ping -c 3 www.baidu.com              # 测 DNS 与外网

mii-tool 不太可靠:报告 link ok 通常确实 OK,但网线接触不好时也可能报 link ok;报 no link 则一般是网线没接好。

网卡查看与启停、临时/永久配置 IP(ifcfg-*)、DNS 与 hosts、主机名设置等配置细节详见 07-02-网卡配置与远程管理.md

7.3 常用排错工具及其定位用途

工具 主要用途 定位的层次 示例
ping 测试目标可达性、丢包率、往返时延(RTT);基于 ICMP 网络层 ping -c 4 -W 1 192.168.1.1、ping -s 1472 -M do 8.8.8.8(探 MTU)、ping -I eth1 8.8.8.8(指定出口)
traceroute 逐跳显示数据包经过的路由器,定位在哪一跳开始不通或延迟突增;默认 UDP,-I 用 ICMP,-T 用 TCP(可穿透部分防火墙) 网络层 traceroute -n 8.8.8.8、traceroute -T -p 443 www.baidu.com
tracepath 与 traceroute 类似,无需 root,还能发现路径 MTU 网络层 tracepath 8.8.8.8
mtr traceroute + ping 的结合,持续探测并实时统计每跳丢包率与延迟,最适合判断中间某跳丢包/抖动 网络层 mtr -n 8.8.8.8、mtr -r -c 100 8.8.8.8(生成报告)
telnet 测试目标 TCP 端口是否开放(能连上即端口通),也可手工发 HTTP 请求 传输层/应用层 telnet 192.168.1.20 3306
nc(netcat) 端口探测、点对点传输、监听端口做服务端模拟;比 telnet 更灵活,可测 UDP 传输层 nc -zv 192.168.1.20 80、nc -zvu 192.168.1.20 53(UDP)、nc -l 8000(监听)
ss 查看套接字:监听端口、连接状态统计、进程归属;比 netstat 快得多(读 netlink) 传输层 ss -tuln(监听端口)、ss -tanp、ss -s(汇总)、ss -tan state time-wait
netstat 传统套接字与路由查看工具(net-tools) 传输层/网络层 netstat -tuln、netstat -rn(路由表)、netstat -i(接口统计与错误包)、netstat -ant \| awk '/^tcp/{S[$NF]++} END{for(a in S) print a, S[a]}'
tcpdump 抓包,最终定位手段:确认包到底有没有发出去、有没有收到、被谁 RST、握手停在哪一步 全部层次 tcpdump -i eth0 -nn host 192.168.1.20 and port 80、tcpdump -i any -nn tcp port 3306 -c 100 -w /tmp/a.pcap(用 Wireshark 分析)
dig / nslookup / host DNS 解析排查:解析结果、使用的 DNS、解析耗时、记录类型 应用层 dig www.baidu.com +short、dig @223.5.5.5 example.com A、dig +trace example.com、nslookup www.baidu.com
curl 应用层验证:HTTP 状态码、响应头、TLS 握手、各阶段耗时 应用层 curl -I http://ip/、curl -v https://host/、curl -o /dev/null -s -w '%{time_connect} %{time_total}\n' url
ethtool 网卡物理层信息:链路是否 detected、协商速率与双工、驱动、错误统计 物理层/链路层 ethtool eth0、ethtool -S eth0
ip 地址、链路、路由、邻居表的统一管理与查看 链路层/网络层 ip a、ip r、ip neigh、ip -s link(收发与错误统计)
iftop / nload / iotop 实时流量与带宽占用,定位"谁占满了带宽" — iftop -i eth0 -nNP
nmap 批量端口扫描与主机发现(需授权使用) 传输层 nmap -sT -p 1-1000 192.168.1.20、nmap -sn 192.168.1.0/24
iperf3 带宽与吞吐量测试,验证链路质量 传输层 服务端 iperf3 -s;客户端 iperf3 -c 服务端IP -t 30

典型排错决策树:

ping 网关不通 ──> 物理层/链路层问题:查网线、网卡 state、IP 与掩码是否同网段、ARP(ip neigh)
   |
   通
   v
ping 公网 IP(如 223.5.5.5) 不通 ──> 网络层:查默认路由 ip r、网关本身、运营商链路,traceroute/mtr 定位断点
   |
   通
   v
ping 域名不通 ──> 应用层 DNS:查 /etc/resolv.conf、dig @其他DNS 验证、/etc/hosts 是否有错误条目
   |
   通
   v
telnet/nc 目标端口不通 ──> 传输层:目标服务是否监听(ss -tuln)、两端防火墙(iptables -nvL / 云安全组)、SELinux
   |
   通
   v
端口通但业务异常 ──> 应用层:curl -v 看状态码、查服务日志、tcpdump 抓包看 RST/重传/超时

八、练习

8.1 二进制与十进制转换

题目: 将以下二进制转换为十进制。

11000000.10101000.00000001.01100100

答案: 192.168.1.100

计算过程:

11000000 = 128+64                = 192
10101000 = 128+32+8              = 168
00000001 = 1                     = 1
01100100 = 64+32+4               = 100

8.2 判断是否同网段(一)

题目: 10.1.1.35/8 与 10.1.1.36/24 能否互通?

答案: 不能。10.1.1.35/8 的网络号是 10.0.0.0,10.1.1.36/24 的网络号是 10.1.1.0,两者网络号不同,不在同一网段,必须经过路由才能通信。详细计算过程见本文 5.4 节。

8.3 判断是否同网段(二)

题目: 判断 10.1.0.35/24 和 10.1.1.36/16 能否互通?(提示:分别计算网络号后比较。)

答案与计算过程:

第一个 IP 10.1.0.35/24(掩码 255.255.255.0):

  00001010.00000001.00000000.00100011   (10.1.0.35)
& 11111111.11111111.11111111.00000000   (255.255.255.0)
----------------------------------------
  00001010.00000001.00000000.00000000   网络号:10.1.0.0/24
  • 网络号:10.1.0.0,广播地址:10.1.0.255,可用范围:10.1.0.1 ~ 10.1.0.254

第二个 IP 10.1.1.36/16(掩码 255.255.0.0):

  00001010.00000001.00000001.00100100   (10.1.1.36)
& 11111111.11111111.00000000.00000000   (255.255.0.0)
----------------------------------------
  00001010.00000001.00000000.00000000   网络号:10.1.0.0/16
  • 网络号:10.1.0.0,广播地址:10.1.255.255,可用范围:10.1.0.1 ~ 10.1.255.254

结论:不能正常互通。 虽然两者算出的网络号数值都是 10.1.0.0,但掩码不同,网段范围不同,双方的判断是不对称的:

  • 站在 10.1.0.35/24 的角度:自己的网段是 10.1.0.0/24(10.1.0.1 ~ 10.1.0.254),目标 10.1.1.36 不在其中,它会认为对方是外网段,必须把包交给默认网关;若没有配置正确的网关或网关没有到达对方的路由,则直接不可达。
  • 站在 10.1.1.36/16 的角度:自己的网段是 10.1.0.0/16(10.1.0.1 ~ 10.1.255.254),目标 10.1.0.35 在其中,它会认为对方同网段,直接发 ARP 二层通信。

这种"一方认为同网段、另一方认为跨网段"的配置属于典型的掩码配置错误,结果是通信单向或完全失败。结论:两个 IP 要能直接通信,必须 IP 与掩码都配置一致,使双方算出的网段完全相同。

8.4 计算网络号与广播地址(PPP1)

题目: 计算以下地址的网络号与广播地址。

  • 172.16.33.44/16
  • 172.16.33.44/18
  • 192.168.253.55/8
  • 192.168.253.55/15
  • 10.192.54.128/26

方法:将 IP 转为二进制,掩码为 1 的位保留、为 0 的位置 0 得网络号,为 0 的位置 1 得广播地址。参考本文"子网掩码与网络号"(5.1 节)中的示范。

答案与计算过程:

(1)172.16.33.44/16,掩码 255.255.0.0

IP       10101100.00010000.00100001.00101100
掩码     11111111.11111111.00000000.00000000
网络号   10101100.00010000.00000000.00000000  => 172.16.0.0
广播     10101100.00010000.11111111.11111111  => 172.16.255.255
  • 网络号:172.16.0.0,广播地址:172.16.255.255
  • 可用范围:172.16.0.1 ~ 172.16.255.254,可用主机数:2^16 - 2 = 65534

(2)172.16.33.44/18,掩码 255.255.192.0

第三字节 33 = 00100001,/18 只保留其前 2 位 00,其余置 0 得 0,置 1 得 63。

IP       10101100.00010000.00100001.00101100
掩码     11111111.11111111.11000000.00000000
网络号   10101100.00010000.00000000.00000000  => 172.16.0.0
广播     10101100.00010000.00111111.11111111  => 172.16.63.255
  • 网络号:172.16.0.0,广播地址:172.16.63.255
  • 可用范围:172.16.0.1 ~ 172.16.63.254,可用主机数:2^14 - 2 = 16382

(3)192.168.253.55/8,掩码 255.0.0.0

IP       11000000.10101000.11111101.00110111
掩码     11111111.00000000.00000000.00000000
网络号   11000000.00000000.00000000.00000000  => 192.0.0.0
广播     11000000.11111111.11111111.11111111  => 192.255.255.255
  • 网络号:192.0.0.0,广播地址:192.255.255.255
  • 可用范围:192.0.0.1 ~ 192.255.255.254,可用主机数:2^24 - 2 = 16777214
  • 注意:192.168.253.55 本身是 C 类地址,这里人为使用 /8 掩码,属于练习换算的题目,说明掩码由配置决定,与地址的传统类别无关。

(4)192.168.253.55/15,掩码 255.254.0.0

第二字节 168 = 10101000,/15 保留其前 7 位 1010100,最后一位置 0 得 10101000 = 168,置 1 得 10101001 = 169。

IP       11000000.10101000.11111101.00110111
掩码     11111111.11111110.00000000.00000000
网络号   11000000.10101000.00000000.00000000  => 192.168.0.0
广播     11000000.10101001.11111111.11111111  => 192.169.255.255
  • 网络号:192.168.0.0,广播地址:192.169.255.255
  • 可用范围:192.168.0.1 ~ 192.169.255.254,可用主机数:2^17 - 2 = 131070

(5)10.192.54.128/26,掩码 255.255.255.192

第四字节 128 = 10000000,/26 保留其前 2 位 10,其余置 0 得 10000000 = 128,置 1 得 10111111 = 191。

IP       00001010.11000000.00110110.10000000
掩码     11111111.11111111.11111111.11000000
网络号   00001010.11000000.00110110.10000000  => 10.192.54.128
广播     00001010.11000000.00110110.10111111  => 10.192.54.191
  • 网络号:10.192.54.128,广播地址:10.192.54.191
  • 可用范围:10.192.54.129 ~ 10.192.54.190,可用主机数:2^6 - 2 = 62
  • 注意本题中 10.192.54.128 恰好就是网络地址本身,不能分配给主机使用。

8.5 子网划分计算题

题目: 请问 10.0.0.0/11 划分了多少个子网?(提示:A 类默认掩码为 /8。)

答案与计算过程:

  • A 类默认掩码位数 n = 8,划分后 m = 11,即向主机位借了 11 - 8 = 3 位。
  • 子网数:2^(m-n) = 2^(11-8) = 2^3 = 8 个子网。
  • 每个子网可用主机数:2^(32-m) - 2 = 2^21 - 2 = 2097152 - 2 = 2097150 台。
  • 掩码:/11 = 11111111.11100000.00000000.00000000 = 255.224.0.0
  • 步长:256 - 224 = 32,即第二字节按 0、32、64、96、128、160、192、224 递增。

8 个子网明细:

子网 网络地址 可用 IP 范围 广播地址
1 10.0.0.0/11 10.0.0.1 ~ 10.31.255.254 10.31.255.255
2 10.32.0.0/11 10.32.0.1 ~ 10.63.255.254 10.63.255.255
3 10.64.0.0/11 10.64.0.1 ~ 10.95.255.254 10.95.255.255
4 10.96.0.0/11 10.96.0.1 ~ 10.127.255.254 10.127.255.255
5 10.128.0.0/11 10.128.0.1 ~ 10.159.255.254 10.159.255.255
6 10.160.0.0/11 10.160.0.1 ~ 10.191.255.254 10.191.255.255
7 10.192.0.0/11 10.192.0.1 ~ 10.223.255.254 10.223.255.255
8 10.224.0.0/11 10.224.0.1 ~ 10.255.255.254 10.255.255.255

验证命令:

echo $[2**(11-8)]       # 8
echo $[2**(32-11)-2]    # 2097150

8.6 补充练习(自测)

  1. 192.168.1.0/24 要划分给 6 个部门,每个部门至少 25 台主机,应使用什么掩码?各子网网段是什么?

    • 答案: 需要 6 个子网,2^3 = 8 ≥ 6,借 3 位得 /27(255.255.255.224);每子网可用 2^5 - 2 = 30 ≥ 25,满足要求。步长 32,子网为 192.168.1.0/27、.32/27、.64/27、.96/27、.128/27、.160/27、.192/27、.224/27,取前 6 个即可。
  2. 172.16.20.200/28 属于哪个网段?它的广播地址与可用范围是什么?

    • 答案: /28 掩码 255.255.255.240,步长 16。200 ÷ 16 = 12.5,落在第 13 个块 192 ~ 207。网络地址 172.16.20.192/28,广播地址 172.16.20.207,可用范围 172.16.20.193 ~ 172.16.20.206(14 台)。
  3. 把 10.10.0.0/24、10.10.1.0/24、10.10.2.0/24、10.10.3.0/24 聚合成一条路由。

    • 答案: 第三字节 0、1、2、3 的二进制前 6 位均为 000000,公共前缀 16 + 6 = 22 位,聚合为 10.10.0.0/22(掩码 255.255.252.0)。
  4. 一条点对点专线链路,最省地址的掩码是什么?可用地址几个?

    • 答案: 传统用 /30(255.255.255.252),2 个可用地址;支持 RFC3021 的设备可用 /31,2 个地址均可用,最省。
  5. 某主机 IP 为 192.168.5.130/25,网关配置为 192.168.5.1,能否正常上网?为什么?

    • 答案: 不能。/25 使该主机所在网段为 192.168.5.128/25(范围 .129 ~ .254),而网关 192.168.5.1 属于 192.168.5.0/25 网段,与主机不在同一网段,主机无法通过 ARP 找到网关,默认路由不可用。应把网关改为 192.168.5.129(或调整主机掩码为 /24)。
  6. 服务器上出现数百个 CLOSE_WAIT 且持续不减,最可能的原因是什么?如何排查?

    • 答案: 应用程序收到对端 FIN 后没有调用 close() 释放连接(代码 BUG 或连接池泄漏),不是内核参数问题。用 ss -tanp state close-wait 找到对应进程与对端,再结合 lsof -p PID 与应用代码/日志排查未关闭连接的分支。

8.7 其他配套练习

以下练习属于网卡配置、远程管理与网络文件共享的实操内容,题目与答案在对应文档中完整给出:

  • 操练 mii-tool(PPP2)、修改主机名(PPP3)、使用 SSH 登录服务器(PPP4)、操练 scp(PPP5)、使用 nc 传输文件和文件夹(PPP6)、rsync 应用(PPP7)、使用公钥登录 SSH 服务器(PPP8)。

    详见 07-02-网卡配置与远程管理.md

  • 练习 NFS(PPP9):两人配合搭建 NFS 服务(共享端配置 /etc/exports,访问端 showmount/mount)。

    详见 09-02-NFS与autofs.md

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏