计算机网络笔记
关于计算机网络的笔记。持续更新
写在前面:本笔记侧重于概念和底层的理解。建议先夯实了基础再做题,事半功倍
当前进度:网页访问、逐跳传输、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 | GET /index.html |
这才是在告诉服务端“我要哪个资源”。它经过 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 | 应用数据 |
封装的本质:下层把上层交来的内容当作数据,再加上本层完成任务所需的控制信息。
可以把嵌套关系画成:
1 | [以太网首部 | IP 首部 | TCP 首部 | 应用数据 | 以太网尾部] |
实际传输时,应用数据可能被分成多个报文段,不能理解成一个文件永远对应一个帧。
2. 解封装:到达哪一层,就处理哪一层的信息
收件时,物流人员先看运输标签,单位收发室再看收件部门,最后由具体的人打开信件。
接收端也会逐层处理:
1 | 收到帧 → 取出 IP 数据报 → 交给 TCP 处理 → 应用取得数据 |
对于 HTTPS,还需要由 TLS 处理加密内容,应用才能取得 HTTP 信息。
⚠️ 中间路由器不是最终收件人。 普通 IP 转发不需要把所有层都拆开、读懂网页内容后再寄一次;它主要处理到网络层,依据目的 IP 决定下一跳。
本章自测
- DNS、TCP、TLS 和 HTTP 在网页访问中分别负责什么?
- 为什么应用程序不必自己实现信号发送?
- 发送端怎样封装,接收端又怎样解封装?
先按职责复述整条流程,再回头看对应术语。
第二章:数据怎样逐跳传输
先把地址和交付过程分清,再看一个数据报经过各台设备时发生什么。例子中的子网判断先接受结论,第三章再推导它的计算方法。
第一部分:IP、MAC 与端口各管什么?
1. IP:最终送到哪里?
可以把 IP 理解成包裹上用于跨网络交付的地址。路由器查看目的 IP,查询路由表,决定从哪个出口、交给哪个下一跳。
类比: 南昌的集散中心看到收货地址在北京,于是选择合适的北上线路。它负责决定下一站,不需要亲自送到收件人门口。
2. MAC:眼前这一段交给谁?
在以太网场景中,MAC 地址用于当前链路上的帧交付。如果远端服务器不在本地子网,本机通常先把帧交给网关的接口。
于是同一次发送中会同时出现:
1 | 目的 IP:最终服务器 |
类比: 包裹里保留完整收货地址,外面的当前运输标签写着这次交给哪个中转站。不能因为眼前先交给网点,就把最终收货地址改成网点地址。
已知本地链路上下一跳的 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 | 浏览器 → 本机 → 默认网关 R1 → 路由器 R2 → 服务器 → 服务端应用 |
这只是职责类比。真实网络不一定按县、市、省逐级经过,也不保证请求和响应走相同的路线。
2. 一件包裹上,为什么要同时保留三类信息?
| 包裹上的信息 | 网络中对应什么 | 解决的问题 |
|---|---|---|
| 最终收货地址 | 目的 IP | 最终送到哪个网络中的目标接口 |
| 收件部门 | 目的端口 | 到达主机后,交给哪个应用端点 |
| 当前运输标签 | 目的 MAC | 当前以太网链路上,交给哪个下一跳接口 |
例如访问远端 HTTPS 服务时,第一帧可以同时写着:
1 | 目的 MAC:本地网关的接口 |
这三项没有矛盾,因为它们回答的是三个不同尺度的问题。 当前交给网关,并不意味着网关是最终收件人。
3. “司机只管下一站”这句话哪里需要修正?
可以用司机类比当前链路的运输,但路由器更像集散中心的分拣员:它必须查看目的 IP,查询路由表,才能决定下一站。
1 | 处理旧的链路层封装 |
⚠️ 易混点:不关心包裹里的业务,不等于不看最终地址。 普通路由转发不需要读懂你请求哪张图片,但需要知道数据要往哪个目的网络走。
第三部分:跟着数据包走过每一跳
1. 先搭一个能够完整观察的实验网络
下面使用一个内部实验网络:各段都是以太网,路由已经配置好,暂不考虑 NAT、隧道和分片。TCP 与 TLS 连接也已经建立,现在观察一段应用数据的发送。
1 | 电脑 A 路由器 R1 路由器 R2 服务器 S |
路由器连接不同网络,因此有多个接口。下面用 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 | [以太网首部:A → R1-入 |
先选下一跳,再解析它的 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 | [以太网首部:R1-出 → R2-入 |
源 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 | 电脑 A ── 交换机 ── 电脑 B |
普通二层交换机根据目的 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 | 内网端点 192.168.1.10:50000 |
这里的 203.0.113.8 仅用于文档示例。设备记录映射关系,收到相应返回流量时,再转换回内网端点。
⚠️ 易混点:普通路由转发与 NAT 是两种功能。 不能因为家庭路由器常常同时承担它们,就认为每经过一个路由器都必须修改源 IP 或端口。
本章自测
1. 分层与交付
假设你在宿舍访问异地服务器,第一跳经过宿舍网关。
- 第一帧的目的 MAC 应该写网关还是服务器?目的 IP 又写谁?
- 路由器需要知道你在请求哪张图片,才能决定下一跳吗?
- 为什么 TCP 的第一次握手也需要 IP 和链路层封装?
- 用寄快递的例子,分别解释协议、服务和接口。
回答时先说清每个角色负责什么,再对应到术语。
2. 本地交换
- 交换机根据帧中的什么地址学习,根据什么地址选择转发接口?
- 同一 VLAN 内的两台同网段主机通信,目的 MAC 应该写对方还是默认网关?
- 经过普通二层交换机,源、目的 MAC 通常会改变吗?
参考思路: ① 学习源 MAC,按目的 MAC 转发;② 对方;③ 通常不会改变。
3. 逐跳转发
- 在本章第三部分的实验中,R1 发给 R2 的帧,其源 MAC、目的 MAC、目的 IP 和目的端口分别是什么?
- 为什么 R1 收到了目的 MAC 属于自己的帧,却没有把里面的 TCP 数据交给本机的 HTTPS 服务?
- 同一 VLAN 内的两台同网段主机经交换机通信,目的 MAC 应该写对方还是网关?
- “经过路由器,IP 首部完全不变”错在哪里?“源 IP 永远不变”又错在哪里?
参考思路: ① R1 出口、R2 入口、10.0.2.8、443;② 链路交付终点不等于 IP 最终目的地;③ 对方;④ TTL 等字段会变化,NAT 还可能改写地址和端口。
第三章:子网与路由怎样决定下一跳
上一章已经看到数据需要选择下一跳。这一章追问:电脑凭什么判断目标在本地,以及怎样从路由表选出转发方向?
第一部分:IP 与掩码怎样划分网络?
1. IPv4 地址本质上是什么?
IPv4 地址是一串 32 位二进制数。为了便于阅读,通常把它分成四组,每组 8 位,再写成十进制,每组范围是 0~255。
1 | 192 .168 .1 .10 |
IP 地址通常配置在网络接口上。一台设备可以有多个接口和多个 IP,因此“IP 找主机”适合入门理解,但不能反过来认定每台设备只有一个 IP。
2. 为什么只看 IP,还不知道它属于多大的网络?
快递地址需要区分“配送区域”和“区域内的具体地点”。IP 也要区分网络前缀与主机部分,分界位置由子网掩码说明。
1 | 地址:192.168.1.10 |
在这里采用的连续掩码中,前面的 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 | IP: 11000000.10101000.00000001.00001010 |
掩码保留了网络部分、清除了主机部分,得到的 192.168.1.0 就是网络地址;连同前缀长度写成 192.168.1.0/24,表示这个地址块。
2. 判断目标是否在本地子网,要用谁的掩码?
站在发送主机的视角,使用本机接口的掩码分别处理本机 IP 和目标 IP,比较结果。这里先假设单网卡、普通直连子网,没有特殊路由覆盖。
1 | 本机:192.168.1.10/24 |
它不是先询问目标的掩码,才决定怎样发包。双方掩码配置不一致时,还可能出现一方认为可以直接发送、另一方却认为需要网关的情况。
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 | 主机位数 h = 32 - 前缀长度 |
⚠️ 公式有适用范围。 /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 | 0~63 64~127 128~191 192~255 |
也可以用二进制复核最后一个字节:
1 | 70: 01000110 |
由此确定网络地址、广播地址及可用主机地址。
- 网络地址:
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 | 块大小 = 256 - 掩码最后一个字节 |
例如 /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 | 10.1.2.100 → 匹配 /8、/16、/24、/0 → 选 /24 → 出口 C |
5. 把子网、路由、ARP 和封装接成一条完整流程
只有直连路由和默认路由时,可以先用这个简化模型理解:
1 | 目标在本地子网? |
更一般的规则是先查路由表,再确定下一跳。 有更具体的路由时,跨子网流量不一定走默认网关;没有匹配路由且没有默认路由时,也不能凭空发送。如果下一跳的 ARP 解析失败,则暂时无法完成这一跳的以太网交付。
到这里,子网掩码不再只是计算题里的数字:它帮助形成直连网络的范围;路由选择决定交给谁;ARP 把这个下一跳的 IPv4 地址对应到 MAC;链路层完成当前这一段交付。
本章自测
192.168.10.70/26的掩码、网络地址、广播地址和通常可用主机地址数分别是多少?192.168.1.100/26与192.168.1.130/26是否同网段?为什么不能只看前三段?- 本机
192.168.1.10/24经默认网关192.168.1.1访问10.0.2.8,应该 ARP 查询谁?第一帧的目的 IP 是否改成网关? - 路由表同时存在
10.0.0.0/8、10.1.0.0/16和默认路由,去往10.1.3.4应选择哪条? - 将
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。按网页访问、逐跳传输、子网与路由组织已学内容。