2026-09-23 更新于 2026-10-01

计算机网络笔记

关于计算机网络的笔记。持续更新

写在前面:本笔记侧重于概念和底层的理解。建议先夯实了基础再做题,事半功倍

当前进度:网页访问、逐跳传输、IPv4 子网与路由基础。 先看一次访问的全程,再追问数据怎样转交、下一跳怎样确定;未学内容暂不展开。

阅读路线:网页访问 → 逐跳传输 → 子网与路由。

教材模块 本文位置
网络概述与分层 第一章
MAC、交换机与本地交付 第二章第四部分
IP 转发、ARP 与 NAT 第二章;第三章第四部分
IPv4、子网与路由表 第三章

第一章:从网页访问认识网络

第一部分:打开网页时发生了什么?

先从一次网页访问认识全程。这里以新建 TCP/TLS 连接的 HTTPS 访问为例;先记住各环节解决什么问题,具体机制在后面逐步展开。

1. 找商家:解析 URL,查询地址

浏览器读取 https://www.example.com/index.html,知道主机名和资源路径;需要时通过 DNS 解析取得服务器地址。

类比: 先从店名查到地址。查电话簿和真正寄订单是两件事;DNS 如果需要网络查询,也要使用底层的网络传输。

2. 找本地交接点:选择路由,准备链路交付

本机根据路由表决定下一跳。如果需要交给默认网关,就取得网关接口的 MAC,再向它发送帧。ARP 缓存有效时,不必每次重新询问。

类比: 知道北京商家的地址之后,先找本地能替你发货的网点,而不是直接联系北京最后一位快递员。

3. 建立通信:TCP 和 TLS 分别解决不同问题

  • TCP: 通过三次握手建立连接、同步初始序号等状态,再提供可靠、有序的字节流。可以类比两端建立收发账本,后续能按编号确认和补发。
  • TLS: 验证服务器身份、协商密钥,保护通信内容。可以类比先核验商家身份,再使用防止旁人偷看和篡改的包装。

⚠️ 握手也需要运输。 SYN 等握手报文本身就要经过 IP 和链路层封装。TCP 连接也不是两地之间修出一条专用公路。

4. 提交订单:HTTP 表达真正的请求

1
2
GET /index.html HTTP/1.1
Host: www.example.com

这才是在告诉服务端“我要哪个资源”。它经过 TLS 保护,再交给 TCP、IP 和链路层传送。

服务器接收、逐层处理后,由 Web 服务读懂请求并返回内容。浏览器得到 HTML,还可能继续请求图片、CSS、JavaScript 等资源。

类比: 物流系统负责把订单送达,商家拆开订单才知道你要什么;商家回寄货物时,仍要通过物流系统,但回程不保证走原来的每一个中转站。


第二部分:网络由哪些角色组成?

1. 为什么要把计算机连接起来?

假设宿舍里有两台电脑,你想把自己电脑上的文件交给室友。最直接的办法是拿 U 盘拷过去。但如果对方在另一座城市,或者你们需要实时联机打游戏,总不能一直让快递员搬 U 盘。

计算机网络解决的就是:让相互连接的计算机能够交换数据、共享资源。 在实际使用中,通信往往发生在两端的应用程序之间,比如你的浏览器向服务器上的 Web 服务请求网页。

可以把它想成一套物流系统:每台主机都是可能寄件、收件的地点,通信链路负责运输,中间设备负责把东西交到合适的下一站。

  • 数据通信: 传文件、发消息、接收游戏状态,本质上都是交换数据。
  • 资源共享: 访问远程文件、使用网络打印机,相当于东西不在自己家里,也能通过网络使用。
  • 应用协作: 浏览器和网站服务器各做一部分工作,通过网络配合完成一次网页访问。

⚠️ 易混点:连上网络,不代表已经知道该和谁说话。 就像有了公路,还得知道收货地址、收件部门,以及双方用什么格式填写订单。

2. 网络由什么组成?—— 寄件点、运输线路和中转站

先分清主机、通信链路和交换设备的职责。

  • 主机(端系统): 比如电脑、手机、服务器。可以类比物流系统两端的寄件点和收件点,应用程序在这里产生、使用数据。
  • 通信链路: 设备之间传递数据的通道。可以是有线,也可以是无线,相当于运输线路。
  • 交换设备: 把数据继续送向目的地。交换机、路由器都属于常见的中间设备,但它们依据的信息和负责的范围不同。

从互联网的组成看,还可以分成:

  • 边缘部分: 用户直接使用的主机及其应用。比如你打开 Chrome、服务器处理请求。
  • 核心部分: 把大量网络连起来的路由器和链路,主要承担数据转发。

类比: 你在网店下单、商家备货,属于两端的业务;快递集散中心怎样把包裹运过去,属于中间运输系统的工作。不能把“商家处理订单”和“中转站转运包裹”混为一谈。

3. 互联网为什么叫“网的网”?

宿舍里的设备可以组成一个小网络,校园里又有校园网络,运营商还有自己的网络。这些网络继续互联,才构成我们使用的互联网。

1
本机 → 家庭 / 校园网 → 运营商网络 → 其他网络 → 服务器所在网络

可以类比全国物流:县里的配送网、市里的中转网和跨省运输线路,并不是同一个网点包办全部工作,而是相互衔接。

核心原理:IP 提供共同的网络层规则,让不同底层技术的网络能够互联。 底层可以使用不同的传输方式,不要求全世界都铺同一种线。


第三部分:网络为什么需要协议和分层?

1. 协议是什么?—— 双方都得认同的办事规矩

假设你给商家发一句“老样子”,但商家从来没见过你,它根本不知道该发什么。计算机也一样,不能只把一串比特送过去,就指望对方自动理解。

网络协议,就是通信双方为交换数据而遵守的规则。 可以从三个方面理解:

  • 语法:格式怎么写。 像快递单规定收件人、地址、电话分别填在哪里。网络报文也要规定字段位置、长度和排列方式。
  • 语义:内容是什么意思。 像“到付”两个字意味着由收件人付钱。协议里的标志、编号也各有含义。
  • 同步 / 时序:什么时候做什么。 像先提交订单、再确认接单,不能把相互配合的步骤完全打乱。

⚠️ 易混点:协议不是某个软件的名字,也不等于一根网线。 网线解决传输介质的问题,协议规定通信行为。

2. 为什么要分层?—— 不可能让店员包办整个物流行业

想象你开了一家网店。每收到一个订单,你都得亲自研究货车怎么发动、高速怎么选路、途中丢件怎么补发,还要负责客户沟通。这家店很快就没法经营了。

网络分层也是被同样的问题“逼”出来的:应用希望完成自己的业务,不应该每次都从发电信号开始实现一遍。

于是应用和下面的层次分工。

  • 应用负责表达“我要什么”。
  • 下面的层次提供传输、寻址和交付等服务。
  • 最底层把比特变成能够传播的信号。

实际写程序时,应用可以通过 socket 等接口收发数据,由操作系统协议栈、驱动和网卡继续完成后面的工作。

底层意义:每层把一类问题处理好,通过接口向上提供服务。 这和使用文件接口时,不需要自己控制 SSD 里的电荷,是同一种抽象。

3. 五层体系分别负责什么?—— 从下单到运输

这里采用学习中常用的五层模型。先对应到同一件事:你要向远方的一家店索取一份商品目录。

层次 物流类比 实际职责
应用层 客户和商家约定订单怎么写 规定应用交换的信息及其含义,如 HTTP、DNS
传输层 两端收发部门管理交付 为应用端点提供传输服务,如 TCP、UDP
网络层 跨地区安排包裹去向 通过 IP 寻址和路由完成跨网络交付
数据链路层 当前这一段的装运和交接 在相邻节点之间传送帧
物理层 实际运输所依赖的道路和车辆 通过介质传输比特

这里的类比只用来分清职责。例如 TCP 可以提供可靠、有序的字节流,而 UDP 不提供同样的可靠性保证,不能把传输层整体背成“保证可靠”。

⚠️ 五层是学习用的划分。 OSI 七层模型、TCP/IP 体系的分法有所不同,不能把这些名字当成同一张表。

4. 协议、服务、接口有什么区别?

这三个词很容易背成一团。继续用快递理解:

  • 协议: 两地物流部门之间约定的交接规则,是同层双方的约定。
  • 服务: 物流公司向网店提供“帮你送货”的能力,是下层向上层提供的功能。
  • 接口: 网店在哪里、用什么方式提交寄件请求,是上下层交接的入口。

记忆重点:同层之间讲协议,上下层之间讲服务和接口。 两端应用看起来直接对话,真正的数据仍然要逐层向下,经物理传输,再在另一端逐层向上。


第四部分:数据怎样封装与解封装?

1. 封装:每一层加上自己需要的信息

假设商家要寄一本书。书里写了什么,运输人员不需要读;但收件人是谁、最后送到哪里、当前装上哪趟车,就需要另外的标签。

网络发送数据也是这样。以 TCP、IP 和以太网为例:

1
2
3
4
5
6
7
8
9
应用数据
↓ TCP 加上端口、序号等信息
TCP 报文段
↓ IP 加上源 IP、目的 IP 等信息
IP 数据报
↓ 以太网加上 MAC 等首部信息和校验尾部
以太网帧
↓ 物理层传输
信号

封装的本质:下层把上层交来的内容当作数据,再加上本层完成任务所需的控制信息。

可以把嵌套关系画成:

1
[以太网首部 | IP 首部 | TCP 首部 | 应用数据 | 以太网尾部]

实际传输时,应用数据可能被分成多个报文段,不能理解成一个文件永远对应一个帧。

2. 解封装:到达哪一层,就处理哪一层的信息

收件时,物流人员先看运输标签,单位收发室再看收件部门,最后由具体的人打开信件。

接收端也会逐层处理:

1
收到帧 → 取出 IP 数据报 → 交给 TCP 处理 → 应用取得数据

对于 HTTPS,还需要由 TLS 处理加密内容,应用才能取得 HTTP 信息。

⚠️ 中间路由器不是最终收件人。 普通 IP 转发不需要把所有层都拆开、读懂网页内容后再寄一次;它主要处理到网络层,依据目的 IP 决定下一跳。


本章自测

  1. DNS、TCP、TLS 和 HTTP 在网页访问中分别负责什么?
  2. 为什么应用程序不必自己实现信号发送?
  3. 发送端怎样封装,接收端又怎样解封装?

先按职责复述整条流程,再回头看对应术语。


第二章:数据怎样逐跳传输

先把地址和交付过程分清,再看一个数据报经过各台设备时发生什么。例子中的子网判断先接受结论,第三章再推导它的计算方法。

第一部分:IP、MAC 与端口各管什么?

1. IP:最终送到哪里?

可以把 IP 理解成包裹上用于跨网络交付的地址。路由器查看目的 IP,查询路由表,决定从哪个出口、交给哪个下一跳。

类比: 南昌的集散中心看到收货地址在北京,于是选择合适的北上线路。它负责决定下一站,不需要亲自送到收件人门口。

2. MAC:眼前这一段交给谁?

在以太网场景中,MAC 地址用于当前链路上的帧交付。如果远端服务器不在本地子网,本机通常先把帧交给网关的接口。

于是同一次发送中会同时出现:

1
2
目的 IP:最终服务器
目的 MAC:当前下一跳的接口

类比: 包裹里保留完整收货地址,外面的当前运输标签写着这次交给哪个中转站。不能因为眼前先交给网点,就把最终收货地址改成网点地址。

已知本地链路上下一跳的 IPv4 地址,却不知道对应的 MAC 时,就需要 ARP。在没有有效缓存的简单场景中,本机会广播询问“谁拥有这个 IP”,由对应设备回复。

⚠️ ARP 查的是本地链路上的映射。 访问异地服务器时,本机不需要广播到全国去找服务器的 MAC。

3. 端口:到了这台主机,再交给谁?

一台服务器可能同时运行 Web、SSH 等服务。只知道 IP,就像只写了公司地址,还没有写收件部门。

端口帮助操作系统把数据交给相应的应用端点。例如 HTTPS 的默认服务端口是 443。

注意类比的边界: 端口不是进程的永久身份证。TCP 连接还需要结合双方 IP 和端口等信息区分,不能只看一个端口号。

4. 经过中转站,哪些信息会变?

先采用各段都是以太网、不经过 NAT 等额外处理的简单模型:

1
电脑 → 路由器 R1 → 路由器 R2 → 服务器
  • 源、目的 IP: 通常保持不变,仍然指向通信两端。
  • 源、目的端口: 普通路由转发通常不改动。
  • MAC: 每跨过一台路由器,重新按出口接口和下一跳封装。
  • TTL: 随路由转发递减,因此不能说整个 IP 首部完全不变。

⚠️ 易混点: 经过同一链路内的普通二层交换机,不等于经过路由器;不是每过一个设备就要更换 MAC。家庭网络中的 NAT 则可能改写 IP 和端口。


第二部分:用快递模型理解转发

1. 从家门口到收件人,中间到底发生了什么?

假设你从家里寄一本书到外地。包裹先交给本地网点,再经过不同的集散中心,最后交给收件人。每个中转站只负责安排下一段运输,但安排时仍要看最终收货地址。

对应到网络,可以先画出这条主线:

1
2
浏览器 → 本机 → 默认网关 R1 → 路由器 R2 → 服务器 → 服务端应用
寄件人 → 寄件点 → 本地集散中心 → 目的地集散中心 → 收件单位 → 收件部门

这只是职责类比。真实网络不一定按县、市、省逐级经过,也不保证请求和响应走相同的路线。

2. 一件包裹上,为什么要同时保留三类信息?

包裹上的信息 网络中对应什么 解决的问题
最终收货地址 目的 IP 最终送到哪个网络中的目标接口
收件部门 目的端口 到达主机后,交给哪个应用端点
当前运输标签 目的 MAC 当前以太网链路上,交给哪个下一跳接口

例如访问远端 HTTPS 服务时,第一帧可以同时写着:

1
2
3
目的 MAC:本地网关的接口
目的 IP :远端服务器
目的端口:443

这三项没有矛盾,因为它们回答的是三个不同尺度的问题。 当前交给网关,并不意味着网关是最终收件人。

3. “司机只管下一站”这句话哪里需要修正?

可以用司机类比当前链路的运输,但路由器更像集散中心的分拣员:它必须查看目的 IP,查询路由表,才能决定下一站。

1
2
3
4
5
6
7
处理旧的链路层封装
↓
读取目的 IP,查询路由表
↓
确定出口与下一跳
↓
按下一段链路的规则重新封装并发送

⚠️ 易混点:不关心包裹里的业务,不等于不看最终地址。 普通路由转发不需要读懂你请求哪张图片,但需要知道数据要往哪个目的网络走。


第三部分:跟着数据包走过每一跳

1. 先搭一个能够完整观察的实验网络

下面使用一个内部实验网络:各段都是以太网,路由已经配置好,暂不考虑 NAT、隧道和分片。TCP 与 TLS 连接也已经建立,现在观察一段应用数据的发送。

1
2
3
4
5
6
电脑 A                  路由器 R1               路由器 R2                  服务器 S
192.168.1.10/24 ── 192.168.1.1/24
10.0.12.1/30 ───── 10.0.12.2/30
10.0.2.1/24 ───────────── 10.0.2.8/24

客户端端口:50000 服务端端口:443

路由器连接不同网络,因此有多个接口。下面用 A、R1-入、R1-出、R2-入、R2-出、S 作为对应接口 MAC 的简写,不是真实的 MAC 地址格式。

2. 第一跳:电脑为什么找网关的 MAC?

电脑 A 的本地网络是 192.168.1.0/24,服务器 10.0.2.8 不在其中。假设没有更具体的路由,本机选择默认网关 192.168.1.1。

确定下一跳之后,先查 ARP 缓存;没有有效记录时,再在本地链路广播查询网关的 MAC。

1
2
3
4
5
[以太网首部:A → R1-入
| IP 首部:192.168.1.10 → 10.0.2.8
| TCP 首部:50000 → 443
| TLS 保护后的应用数据
| 以太网校验尾部]

先选下一跳,再解析它的 MAC。 不能还没确定要交给谁,就去找远端服务器的 MAC。

3. 第二跳:R1 收到了发给自己的帧,为什么还要继续转发?

因为“帧发给自己”和“IP 数据报最终发给自己”不是一回事。

R1 接收链路层交付的帧,取出 IP 数据报,发现目的 IP 是 10.0.2.8。查询路由表后,假设应通过 10.0.12.1 接口交给 R2 的 10.0.12.2 接口。

R1 处理 TTL、更新 IPv4 首部校验和,并在需要时用 ARP 取得 R2 对应接口的 MAC,重新封装:

1
2
3
4
5
[以太网首部:R1-出 → R2-入
| IP 首部:192.168.1.10 → 10.0.2.8
| TCP 首部:50000 → 443
| TLS 保护后的应用数据
| 新的以太网校验尾部]

源 MAC 要写 R1 的出口接口,不能继续写电脑 A,也不能拿 R1 的入口接口代替。 路由器不是只有一个笼统的“自己的 MAC”。

4. 最后一跳:R2 把数据送到服务器

R2 查询路由表,发现 10.0.2.0/24 是直连网络,于是下一跳就是服务器本身。需要时,R2 查询服务器的 MAC,再发送最后一帧。

字段 A → R1 R1 → R2 R2 → S
源 MAC A R1-出 R2-出
目的 MAC R1-入 R2-入 S
源 IP 192.168.1.10 192.168.1.10 192.168.1.10
目的 IP 10.0.2.8 10.0.2.8 10.0.2.8
源端口 50000 50000 50000
目的端口 443 443 443
TTL(假设初值 64) 64 63 62

普通路由转发中,两端 IP 和端口保持不变;以太网封装按下一段重新生成。 TTL 会递减,不能把“IP 地址不变”说成“整个 IP 首部不变”。TTL 耗尽的数据报会被丢弃,避免在路由环路中无限转发。

5. 到服务器以后,为什么还要继续向上拆?

服务器发现目的 IP 属于本机,接着根据 IPv4 首部中的协议字段,把载荷交给 TCP。对于已经建立的 TCP 连接,再结合源 IP、源端口、目的 IP、目的端口找到对应连接,把按序整理好的字节交给应用使用。

1
以太网接收 → IP 本地交付 → TCP 连接与字节流处理 → TLS 处理 → HTTP 服务

端口 443 帮助找到服务,但不能把所有访问 443 的客户端都当成同一条连接。新连接的监听入口与已建立连接的数据交付,也不是完全相同的处理阶段。

服务器回复时,两端的 IP、端口方向对调,沿途仍逐跳选择路由、封装帧;回程不必原路返回。


第四部分:交换机怎样完成本地交付?

1. 交换机:在本地链路里,把帧送向合适的接口

1
2
3
电脑 A ── 交换机 ── 电脑 B
│
路由器 R1

普通二层交换机根据目的 MAC 查询 MAC 地址表,选择转发接口;它通过收到帧的源 MAC 学习“哪个地址在什么接口后面”。如果目的地址未知,通常会在同一 VLAN 内向其他接口泛洪;ARP 广播也会在这个范围内传播。

这里的交换机“端口”是连接链路的接口,和 TCP 的 443 端口不是同一个概念。

经过交换机,通常不会改写帧中的源、目的 MAC。 因此,“MAC 逐跳变化”应理解为经过路由器、进入新链路时重新封装,不能理解为每经过一台设备就变化。

2. 同网段通信为什么通常不经过默认网关?

假设 A 为 192.168.1.10/24,B 为 192.168.1.20/24,两者接在同一 VLAN 中。

A 判断 B 在本地子网,直接取得 B 的 MAC,发送 A → B 的帧。交换机把帧转给 B,不需要先绕到默认网关。

“直接交付”不等于两台电脑之间必须有一根独占网线。 中间可以有二层交换机,只是不需要由路由器跨网络转发。反过来,单纯配置成同一 IP 网段,也不能让两个彼此隔离的 VLAN 自动连通。

3. 路由器与最终主机,处理深度有什么不同?

角色 普通转发或接收时主要做什么
二层交换机 查看 MAC 地址表,在本地二层网络内转发帧
路由器 处理链路层封装,依据目的 IP 查路由,再封装发出
最终主机 接收本机的数据,继续交给 TCP / UDP 和应用处理

这是基础模型。设备如果还承担防火墙、NAT 等功能,可能检查更高层字段;不能把“普通 IP 转发不需要读 HTTP”理解成“路由器绝对看不到传输层”。


第五部分:NAT 为什么会改变地址?

1. NAT:为什么家里的源 IP 和端口有时会变化?

家庭网络常用私有地址,例如 192.168.1.10。私有地址不能作为公网中的全局可路由地址使用,家庭出口常通过地址转换让多个设备共享公网 IPv4 地址。

以带端口转换的 NAPT 为例,映射可以示意为:

1
2
3
内网端点 192.168.1.10:50000
↓ 出口转换
外网端点 203.0.113.8:62001

这里的 203.0.113.8 仅用于文档示例。设备记录映射关系,收到相应返回流量时,再转换回内网端点。

⚠️ 易混点:普通路由转发与 NAT 是两种功能。 不能因为家庭路由器常常同时承担它们,就认为每经过一个路由器都必须修改源 IP 或端口。

本章自测

1. 分层与交付

假设你在宿舍访问异地服务器,第一跳经过宿舍网关。

  1. 第一帧的目的 MAC 应该写网关还是服务器?目的 IP 又写谁?
  2. 路由器需要知道你在请求哪张图片,才能决定下一跳吗?
  3. 为什么 TCP 的第一次握手也需要 IP 和链路层封装?
  4. 用寄快递的例子,分别解释协议、服务和接口。

回答时先说清每个角色负责什么,再对应到术语。


2. 本地交换

  1. 交换机根据帧中的什么地址学习,根据什么地址选择转发接口?
  2. 同一 VLAN 内的两台同网段主机通信,目的 MAC 应该写对方还是默认网关?
  3. 经过普通二层交换机,源、目的 MAC 通常会改变吗?

参考思路: ① 学习源 MAC,按目的 MAC 转发;② 对方;③ 通常不会改变。


3. 逐跳转发

  1. 在本章第三部分的实验中,R1 发给 R2 的帧,其源 MAC、目的 MAC、目的 IP 和目的端口分别是什么?
  2. 为什么 R1 收到了目的 MAC 属于自己的帧,却没有把里面的 TCP 数据交给本机的 HTTPS 服务?
  3. 同一 VLAN 内的两台同网段主机经交换机通信,目的 MAC 应该写对方还是网关?
  4. “经过路由器,IP 首部完全不变”错在哪里?“源 IP 永远不变”又错在哪里?

参考思路: ① R1 出口、R2 入口、10.0.2.8、443;② 链路交付终点不等于 IP 最终目的地;③ 对方;④ TTL 等字段会变化,NAT 还可能改写地址和端口。


第三章:子网与路由怎样决定下一跳

上一章已经看到数据需要选择下一跳。这一章追问:电脑凭什么判断目标在本地,以及怎样从路由表选出转发方向?

第一部分:IP 与掩码怎样划分网络?

1. IPv4 地址本质上是什么?

IPv4 地址是一串 32 位二进制数。为了便于阅读,通常把它分成四组,每组 8 位,再写成十进制,每组范围是 0~255。

1
2
192      .168      .1        .10
11000000 .10101000 .00000001 .00001010

IP 地址通常配置在网络接口上。一台设备可以有多个接口和多个 IP,因此“IP 找主机”适合入门理解,但不能反过来认定每台设备只有一个 IP。

2. 为什么只看 IP,还不知道它属于多大的网络?

快递地址需要区分“配送区域”和“区域内的具体地点”。IP 也要区分网络前缀与主机部分,分界位置由子网掩码说明。

1
2
3
地址:192.168.1.10
掩码:255.255.255.0
二进制掩码:11111111.11111111.11111111.00000000

在这里采用的连续掩码中,前面的 1 对应网络位,后面的 0 对应主机位。上例有 24 个网络位、8 个主机位,可以简写为 192.168.1.10/24。

掩码不是另一个收货地址,而是一把划分地址的尺子。 /24 表示前缀长度,不表示有 24 台主机,也不是 IP 的第五段。

3. CIDR 表示法:分界不一定刚好在点号处

CIDR(无类别域间路由)用网络前缀及其长度描述地址块,不必受传统 A、B、C 类地址边界限制。

前缀长度 子网掩码 主机位数 地址总数
/16 255.255.0.0 16 65536
/24 255.255.255.0 8 256
/25 255.255.255.128 7 128
/26 255.255.255.192 6 64
/27 255.255.255.224 5 32

例如 /26 的最后一个字节是 11000000,意味着这个字节的前 2 位仍属于网络,后 6 位才属于主机。不能固定把前三段当网络号、最后一段当主机号。


第二部分:怎样判断目标在不在本地?

1. 网络地址为什么等于 IP AND 子网掩码?

按位与的规则是:两位都是 1 才得到 1。 所以某位与 1 运算时保留原值,与 0 运算时清零。

1
2
3
4
IP:   11000000.10101000.00000001.00001010
掩码: 11111111.11111111.11111111.00000000
AND: 11000000.10101000.00000001.00000000
结果: 192.168.1.0

掩码保留了网络部分、清除了主机部分,得到的 192.168.1.0 就是网络地址;连同前缀长度写成 192.168.1.0/24,表示这个地址块。

2. 判断目标是否在本地子网,要用谁的掩码?

站在发送主机的视角,使用本机接口的掩码分别处理本机 IP 和目标 IP,比较结果。这里先假设单网卡、普通直连子网,没有特殊路由覆盖。

1
2
3
4
5
6
7
8
本机:192.168.1.10/24
本机 IP AND 掩码 = 192.168.1.0

目标 B:192.168.1.20
目标 IP AND 本机掩码 = 192.168.1.0 → 在本地子网

目标 S:10.0.2.8
目标 IP AND 本机掩码 = 10.0.2.0 → 不在本地子网

它不是先询问目标的掩码,才决定怎样发包。双方掩码配置不一致时,还可能出现一方认为可以直接发送、另一方却认为需要网关的情况。

3. 前三段相同,为什么也可能不同网段?

假设三台主机都配置 /26,每个地址块有 64 个地址:

主机 IP 所属网络
A 192.168.1.100/26 192.168.1.64/26
B 192.168.1.120/26 192.168.1.64/26
C 192.168.1.130/26 192.168.1.128/26

100 和 120 都落在 64~127,130 却落在 128~191。所以 A、B 同网段,A、C 不同网段,尽管它们的前三段完全相同。

同网段描述的是地址与前缀的关系,不是物理距离。 隔壁桌的电脑也可能属于另一个子网。


第三部分:怎样算出子网的地址范围?

1. 一个子网里,哪些地址通常不能分配给普通主机?

在常规 IPv4 子网中,保留网络位不变:

  • 主机位全 0:网络地址。 用来表示整个网络。
  • 主机位全 1:广播地址。 用来表示向这个子网广播。
  • 中间的地址:可用主机地址。 可以分配给终端或路由器接口等。

例如 192.168.1.0/24 的网络地址是 .0,广播地址是 .255,通常可用范围是 .1~.254。

1
2
3
主机位数 h = 32 - 前缀长度
地址总数 = 2^h
通常可用主机地址数 = 2^h - 2

⚠️ 公式有适用范围。 /31 点到点链路和 /32 单地址不能机械套用“减 2”。网关接口通常也占用一个可用地址,因此“254 个可用地址”不一定意味着还能接 254 台终端。广播也不代表能穿过路由器传遍互联网。

2. 从 /24 变成 /25,为什么正好分成两半?

原来的 /24 有 8 位主机位。借出其中一位作为网络位后,新增加的网络位可以取 0 或 1,于是分成两个 /25 子网,每个保留 7 位主机位。

子网 网络地址 广播地址 通常可用地址 可用数量
192.168.1.0/25 192.168.1.0 192.168.1.127 192.168.1.1~192.168.1.126 126
192.168.1.128/25 192.168.1.128 192.168.1.255 192.168.1.129~192.168.1.254 126

前缀越长,单个地址块越小。 从 /24 划成两个 /25,地址总数仍是 256,但两个子网分别保留网络地址和广播地址,通常可用地址合计变为 252。

3. 完整算例:192.168.10.70/26 属于哪个网络?

先看前缀:/26 = 24 + 2,最后一个掩码字节为 11000000,也就是 192,完整掩码为 255.255.255.192。

主机位有 32 - 26 = 6 位,每块共 2^6 = 64 个地址。最后一段按 64 分块:

1
2
3
0~63    64~127    128~191    192~255
↑
70 在这里

也可以用二进制复核最后一个字节:

1
2
3
70:   01000110
192: 11000000
AND: 01000000 = 64

由此确定网络地址、广播地址及可用主机地址。

  • 网络地址: 192.168.10.64,所属网络写作 192.168.10.64/26。
  • 广播地址: 192.168.10.127,即把后 6 位全部置为 1。
  • 可用范围: 192.168.10.65~192.168.10.126。
  • 通常可用数量: 64 - 2 = 62。

4. 速算:用块大小确定起点和终点

对于 /25~/30 这类分界落在最后一个字节的题目:

1
2
3
块大小 = 256 - 掩码最后一个字节
网络地址末段 = 向下取整(IP 末段 ÷ 块大小) × 块大小
广播地址末段 = 网络地址末段 + 块大小 - 1

例如 /27 的掩码末段是 224,块大小为 32,起点依次为 0、32、64、96、128、160、192、224。

不能把这个末段速算法原样套到 /20。 /20 的掩码为 255.255.240.0,要在第三个字节按 256 - 240 = 16 分块。例如 192.168.18.70/20 的网络地址是 192.168.16.0,广播地址是 192.168.31.255。


第四部分:怎样选择网关与路由?

1. 默认网关为什么通常要和本机在同一个子网?

默认网关是本机在使用默认路由时,要先交付数据的路由器接口。它就像本地揽件站:你至少要能把包裹先送到它手里,它才有机会替你送往远方。

对于 192.168.1.10/24,常见网关可以是同链路的 192.168.1.1。若随手填成 10.0.0.1,在没有额外直连配置等条件时,本机连这个下一跳都无法直接到达,配置或通信通常会失败。

关键要求是下一跳在所选链路上可直接到达;常规以太网配置中,通常表现为网关与本机同子网。网关也不必固定是 .1,这只是常见习惯。

2. 默认网关与默认路由有什么区别?

  • 默认网关: 强调“交给谁”,例如下一跳 192.168.1.1。
  • 默认路由: 强调“没有更具体的匹配时采用哪条规则”,IPv4 中写作 0.0.0.0/0。

主机也有路由表。例如主机中的一条默认路由可以表示为:

1
目的前缀 0.0.0.0/0 → 下一跳 192.168.1.1 → 本机以太网接口

/0 表示不要求任何地址位匹配,所以能匹配所有 IPv4 目的地址。它是兜底规则,不是说每次发送都必须先去默认网关。

3. 为什么路由表通常按网络前缀组织?

集散中心不必为全国每户人家单独写一条运输规则,可以先按区域组织去向。路由表也可以用一个网络前缀描述一批目的地址,而不是每个主机地址都各写一项。

例如 10.0.2.0/24 可以覆盖该地址块中的多个地址。需要针对单个地址时,也可以使用 /32 主机路由。

4. 多条路由都匹配时,为什么选最长前缀?

假设路由表中有以下规则,出口和下一跳均已正确配置:

目的网络前缀 转发方向
10.0.0.0/8 出口 A
10.1.0.0/16 出口 B
10.1.2.0/24 出口 C
0.0.0.0/0 出口 D

目的 IP 是 10.1.2.100 时,这四条都匹配,但应选择 /24,因为它限制的地址位最多、描述的范围最具体。这就是最长前缀匹配。

可以类比“某省”“某市”“某区”三条配送规则同时适用时,优先采用最具体的那一条。但前提是先匹配成功,不能看见表里有 /24 就无条件选它。

1
2
3
4
10.1.2.100 → 匹配 /8、/16、/24、/0 → 选 /24 → 出口 C
10.1.3.100 → 匹配 /8、/16、/0 → 选 /16 → 出口 B
10.2.3.100 → 匹配 /8、/0 → 选 /8 → 出口 A
192.0.2.10 → 只匹配 /0 → 选 /0 → 出口 D

5. 把子网、路由、ARP 和封装接成一条完整流程

只有直连路由和默认路由时,可以先用这个简化模型理解:

1
2
3
4
5
6
7
8
9
目标在本地子网?
├─ 是 → 下一跳就是目标主机
└─ 否 → 使用默认路由,下一跳是默认网关
↓
查询下一跳的 ARP 缓存
↓ 未命中时
在本地链路发送 ARP 查询
↓
得到下一跳 MAC,封装并发送帧

更一般的规则是先查路由表,再确定下一跳。 有更具体的路由时,跨子网流量不一定走默认网关;没有匹配路由且没有默认路由时,也不能凭空发送。如果下一跳的 ARP 解析失败,则暂时无法完成这一跳的以太网交付。

到这里,子网掩码不再只是计算题里的数字:它帮助形成直连网络的范围;路由选择决定交给谁;ARP 把这个下一跳的 IPv4 地址对应到 MAC;链路层完成当前这一段交付。


本章自测

  1. 192.168.10.70/26 的掩码、网络地址、广播地址和通常可用主机地址数分别是多少?
  2. 192.168.1.100/26 与 192.168.1.130/26 是否同网段?为什么不能只看前三段?
  3. 本机 192.168.1.10/24 经默认网关 192.168.1.1 访问 10.0.2.8,应该 ARP 查询谁?第一帧的目的 IP 是否改成网关?
  4. 路由表同时存在 10.0.0.0/8、10.1.0.0/16 和默认路由,去往 10.1.3.4 应选择哪条?
  5. 将 192.168.1.0/24 均分成两个 /25 后,两个网络地址分别是什么?每个子网通常有多少个可用地址?

参考答案: ① 255.255.255.192、192.168.10.64、192.168.10.127、62;② 不同,分别属于 .64/26 与 .128/26;③ 查询 192.168.1.1,目的 IP 仍为 10.0.2.8;④ /16;⑤ 192.168.1.0 与 192.168.1.128,每个 126 个。


更新于 2026-10-02。按网页访问、逐跳传输、子网与路由组织已学内容。