计算机网络要解决的是不同设备如何寻址、互联、可靠地交换数据,以及网络故障如何定位的问题。本文根据一次循序渐进的学习讨论,整理家庭局域网、地址与路由、TCP/UDP、DNS/NAT、HTTP/HTTPS、网络分层、VLAN 以及 OSPF/BGP 等知识,重点保留自己的理解与容易混淆的地方,供复习和后续实践使用。

# 一、从家庭网络理解局域网与互联网

# 1.1 LAN、WAN 和互联网

  • 局域网(LAN,Local Area Network):通常在家庭、办公室、实验室等较小范围内,由一个组织或家庭管理。局域网设备可以在不连接互联网时相互通信。
  • 广域网(WAN,Wide Area Network):连接较大地理范围内的网络,例如不同城市的企业网络或运营商骨干网络。
  • 互联网(Internet):由多个网络通过 IP 协议体系互联组成的全球网络,不是某一台路由器或某一个局域网。

家庭上网的简化路径:

手机 / 电脑 ── Wi-Fi 或网线 ── 家庭路由器 ── 运营商网络 ── 互联网 ── 网站服务器
                  │
             家庭局域网(LAN)

我的理解: 家里的设备先加入同一个家庭网络,再通过路由器与外部网络通信。这个基本框架是正确的。需要补充的是,家庭无线路由器往往集成了无线 AP、以太网交换功能、路由和防火墙等功能。

# 1.2 交换机、路由器与无线 AP

设备 主要关注 典型作用
二层交换机 MAC 地址、交换机端口 在同一 VLAN 内转发以太网帧
路由器 目的 IP、路由表 在不同 IP 网络之间转发数据包
无线 AP Wi-Fi 接入与二层帧 让无线终端接入局域网

注意:“交换机处于链路层、路由器处于网络层”适用于典型二层交换机与路由器。三层交换机也能执行 IP 路由。

# 二、IP、MAC、子网和默认网关

# 2.1 IP 地址与 MAC 地址的分工

  • IP 地址:用于网络层寻址,例如 192.168.1.10。它告诉网络数据包的源端与目的端在哪里。
  • MAC 地址:用于以太网等链路层的本地帧交付,例如 A4:5E:60:12:34:56。
  • 端口号:TCP/UDP 用于区分主机上的网络通信端点,例如 192.168.1.10:50000。

记忆:IP 决定发往哪个主机或网络;MAC 决定当前链路这一跳交给谁;端口号帮助找到哪个应用端点。

# 容易弄错:MAC 的长度与能否修改

我的早期理解中,把 MAC 地址说成“16 位”,这是错误的。常见以太网 MAC 地址是 48 位(6 字节),通常用 12 个十六进制数字表示。

典型 MA-L 分配方式是前 24 位组织标识(OUI)、后 24 位由组织分配,但 MAC 地址方案并非都必须按这一种方式理解。MAC 通常具有唯一性,却不是绝对不会重复,也可以被软件随机化或修改。修改对外呈现的 MAC 不等于硬件变成一块新网卡,更不必然需要烧录固件。

# 2.2 子网掩码

IPv4 地址有 32 位,子网掩码用于区分网络部分与主机部分。

示例配置(非实测):

电脑 A:192.168.1.10/24
电脑 B:192.168.1.20/24
电脑 C:192.168.2.10/24

/24 = 255.255.255.0

网络地址的计算方式:

网络地址 = IP 地址 按位与 子网掩码

A 和 B 的网络地址都是 192.168.1.0,C 的网络地址是 192.168.2.0。在普通网络规划中,A 和 B 可通过同一二层网络直接通信;C 通常需要路由器或三层交换机进行跨子网转发。

易混点: 不能永远只看 IP 前三组是否一致。比如 /25、/26 会在同一个 192.168.1.x 范围中划分更小的子网。还要考虑 VLAN、设备隔离和防火墙规则。

# 2.3 默认网关

默认网关是目标网络没有更具体匹配路由时,设备通常选用的下一跳路由器。

假设电脑配置:

IP:192.168.1.10
掩码:255.255.255.0
默认网关:192.168.1.1

访问 8.8.8.8 时,电脑发现目的地址不在本地子网,于是按路由表把 IP 包交给 192.168.1.1。

需要区分两种地址:

  • IP 包的目的 IP:仍然是 8.8.8.8。
  • 第一跳以太网帧的目的 MAC:是默认网关对应的 MAC,而不是远端 8.8.8.8 的 MAC。

# 三、DHCP 与 ARP

# 3.1 DHCP:自动获取网络参数

DHCP(动态主机配置协议)通常提供 IP、掩码、默认网关、DNS 等配置。常见首次获取地址的过程简称 DORA:

Discover → Offer → Request → ACK

我的理解与修正: 重新加入同一个网络时,设备可能尝试请求之前使用的 IP;但地址能否继续使用,取决于租约状态、服务器分配策略等,并不是“申请这个 IP 的永久权限”。

# 3.2 ARP:已知 IPv4,获取本地下一跳 MAC

同一二层网络中,如果 A 已经知道 B 的 IPv4 地址,却不知道 MAC,可广播 ARP 请求:

A:谁拥有 192.168.1.20?
B:我拥有该 IP,我的 MAC 是 BB:BB:BB:BB:BB:BB。
A:将这条 IP → MAC 映射加入 ARP 缓存。

ARP 广播的范围是同一个二层广播域。访问外部 IP 时,主机通常 ARP 查询网关的 MAC,而不是远端服务器的 MAC。

# 3.3 ARP 欺骗为什么麻烦

ARP 欺骗利用传统 ARP 缺乏原生身份认证的特点,发送伪造 ARP 信息使其他设备缓存错误映射。例如:

正确:192.168.1.1 → 路由器真实 MAC
错误:192.168.1.1 → 攻击者 MAC

后续发送给网关的二层帧可能被引导至攻击者,造成中间人攻击或网络中断。攻击既可以借助伪造应答,也可能使用免费 ARP,不限定只有一种报文形式。

难以处理的原因在于:清掉缓存只是修复表面状态;如果攻击源持续发送虚假映射,缓存就可能再次被污染。某些设备还缺乏 DAI(动态 ARP 检测)、DHCP Snooping 等防护能力。

常见防护思路:管理设备接入、限制广播域、在支持的交换机上正确配置 DAI/DHCP Snooping、对固定节点进行适当绑定。MAC 变化不一定是攻击,还可能来自网关切换或设备更换。

# 四、交换机 MAC 表、ARP 表与路由表

表 通常由谁维护 根据什么查 得到什么
MAC 地址表 二层交换机 目的 MAC,结合 VLAN 出端口
ARP 缓存表 IPv4 主机、路由器 下一跳 IPv4 地址 下一跳 MAC
路由表 主机、路由器、三层交换机 目的 IP 地址 下一跳、出接口等

一个同子网通信的典型过程是:

  1. 主机先通过路由表确定目标属于本地直连网络。
  2. 通过 ARP 缓存或 ARP 请求获得目标 MAC。
  3. 主机封装以太网帧,交换机按 MAC 地址表转发。
  4. 接收端按协议逐层处理数据。

跨网段通信时,ARP 解析的是下一跳网关的 MAC。这也解释了为什么 ARP 欺骗时,路由表本身可能完全正常,但数据仍被送到了错误的二层目的地。

# 五、TCP/IP 与 OSI 网络分层

教学五层模型 主要职责 示例协议或技术
应用层 应用通信规则 HTTP、DNS、DHCP、SMTP
传输层 进程通信、端口、可靠性机制 TCP、UDP
网络层 IP 寻址、路由、诊断 IPv4、IPv6、ICMP
数据链路层 本地链路帧交付 以太网、VLAN
物理层 电、光、无线信号传输 网线、光纤、无线介质

正式的 TCP/IP 四层模型 通常将链路层与物理层合并为“网络接口层”;OSI 七层 还在应用层以下单列表示层、会话层。实际互联网协议不一定严格一对一对应 OSI 每一层。

# 5.1 封装与解封装

以基于 TCP 的 HTTPS 为例,逻辑封装过程是:

应用层 HTTP 请求
       ↓ TLS 加密保护
TCP 首部 + TLS 数据
       ↓
IP 首部 + TCP 报文段
       ↓
以太网帧首部 + IP 数据包 + 帧校验序列
       ↓
电信号 / 光信号 / 无线信号

接收方按反方向逐层处理,即解封装。路由器转发时通常重新封装链路层帧、递减 IPv4 TTL;如果不存在 NAT 等额外处理,普通转发不会自动改变源、目的 IP。

# 六、TCP 与 UDP

# 6.1 TCP:面向连接的可靠字节流

TCP 的主要能力:建立连接、按序交付、确认与重传、滑动窗口、流量控制、拥塞控制。

三次握手(简化):

客户端                       服务器
  SYN       ───────────────→
            ←─────────────── SYN + ACK
  ACK       ───────────────→
          建立连接

典型四次挥手(简化):

主动关闭方                   被动关闭方
  FIN       ───────────────→
            ←─────────────── ACK
            ←─────────────── FIN
  ACK       ───────────────→

TCP 是全双工的,两个方向的关闭可以分开进行。在一些情况下,最后的 ACK 与 FIN 报文也可合并,因此“四次挥手”是典型过程,不是所有连接都严格呈现四个独立报文。

TCP 是字节流:调用两次 send(),接收端不一定对应两次 recv(),应用需要自行定义消息边界。

# 6.2 UDP:无连接的数据报

UDP 不需要 TCP 式的三次握手,默认不保证可靠到达和顺序,保留数据报边界,首部仅 8 字节。

“无连接”不等于“只要知道 MAC 和 IP 即可发送”。UDP 仍然依赖 IP 寻址、链路层传输,并使用源端口与目的端口。UDP 上层也可以自行设计可靠传输机制,QUIC 就是一个典型例子。

比较 TCP UDP
连接 面向连接 无连接
数据单位 字节流 数据报
可靠和按序交付 协议内置 不保证
首部 最小 20 字节 8 字节
常见用途 文件传输、数据库、Web 实时音视频、游戏、部分 DNS

# 6.3 滑动窗口、流量控制与拥塞控制

滑动窗口:让发送方能维持多个未确认的字节,不必逐个数据段停止等待。TCP 的 ACK 确认号通常表示下一个期望按序收到的字节序列号,不是“第几个包”。

  • 流量控制:主要保护接收端,接收方通告 rwnd(接收窗口)。
  • 拥塞控制:主要根据网络反馈控制在途数据量,发送方维护 cwnd(拥塞窗口)。

简化关系:

可容纳的最大在途数据量 ≤ min(rwnd, cwnd)

如果已有数据未确认,还能继续发送的新数据量会进一步减少。经典拥塞控制包括慢启动和拥塞避免,但现代系统可能使用 CUBIC、BBR 等不同算法。

# 七、IP 数据包、TTL、MTU 和 IPv6

# 7.1 IPv4 数据包

IPv4 数据包由首部与载荷组成。基本首部 20 字节,存在选项时可更长。重要字段有:

字段 作用
源 IP / 目的 IP 寻址与转发
TTL 限制逐跳转发次数
Protocol 标识上层协议
Total Length 整个 IPv4 数据包长度
Identification / Flags / Fragment Offset IPv4 分片控制与重组
Header Checksum IPv4 首部校验

常见 IPv4 Protocol 数值:ICMP = 1、TCP = 6、UDP = 17、OSPF = 89。

# 7.2 TTL:防止无限路由环路

TTL(Time To Live)虽然名字有“时间”,但在现代 IPv4 转发中实际主要充当跳数限制。

发送端:TTL = 64
经过第一台路由器:TTL = 63
经过第二台路由器:TTL = 62
……

TTL 耗尽时,路由器丢弃数据包,通常发送 ICMP Time Exceeded。Windows 的 tracert 就利用逐渐增加的 TTL 探测沿途部分路由节点。

# 7.3 MTU 与分片

MTU(Maximum Transmission Unit)表示链路所能承载的最大网络层数据包大小。普通以太网常用 MTU 为 1500 字节。

当 IPv4 数据包超过下一跳 MTU 时:

  • 允许分片:可能被拆成多个 IP 分片,接收端负责重组。
  • DF(Don't Fragment)置位:不能被中间路由器分片,通常丢弃并返回 ICMP 错误。

分片增加额外首部开销;某片丢失还可能导致原数据报无法重组,因此网络通常会尽量避免不必要的分片。

# 7.4 IPv4 与 IPv6

项目 IPv4 IPv6
地址长度 32 位 128 位
示例 192.168.1.10 2001:db8:1234::10
基本首部 最小 20 字节 固定 40 字节
地址解析 ARP 基于 ICMPv6 的 NDP
跳数限制 TTL Hop Limit
中间路由器分片 条件允许时支持 不执行分片
广播 支持 不使用广播

IPv6 地址空间更大,一般无需像家用 IPv4 一样依靠 NAPT 共享公网地址;但仍需要防火墙,且某些场景仍会使用 NAT64 等转换技术。

# 八、ICMP、ping 与 tracert

ICMP 主要用于 IP 网络中的错误报告与诊断,不是 TCP 或 UDP 的一个端口服务。

  • ping 通常通过 ICMP Echo Request / Echo Reply 测试可达性,并测量 RTT(往返时间)。
  • tracert 利用不同 TTL 对中间路由器进行逐跳探测。

示例命令(未在本文执行,不代表实测结果):

ping 192.168.1.1
ping 8.8.8.8
tracert -d 8.8.8.8

# 8.1 8.8.8.8 为什么可以 ping 通

8.8.8.8 是 Google Public DNS 提供服务的公网 IPv4 地址。电脑不需要与该地址处于同一子网;经默认网关、运营商网络及互联网路由转发,就可以到达提供该地址服务的网络节点。

能 ping 通只表示 ICMP 探测收到了响应,不表示当前一定在使用 Google DNS,也不代表 DNS、HTTPS 等所有业务都正常。Google 公共 DNS 使用 Anycast 等机制部署,不能简单理解为全世界都在 ping 同一台物理计算机。

tracert 某一跳出现 * * * 也不必然意味着故障:路由器可能限制 ICMP 回复,但仍正常转发业务数据。

# 九、DNS 与 NAT

# 9.1 DNS:域名解析

DNS(Domain Name System)用于查询域名对应的记录,例如 A(IPv4)、AAAA(IPv6)、CNAME(别名)、MX(邮件服务器)、NS(权威名称服务器)等。

www.example.com ── DNS 查询 ──→ 对应的 IP 地址记录

递归解析器可能直接命中缓存,也可能依次联系根服务器、顶级域服务器和权威服务器。DNS 可以使用 UDP、TCP,以及 DoH/DoT 等加密传输方案。

# 9.2 NAT:地址转换

NAT(Network Address Translation)改变数据包中的网络地址。家庭 IPv4 网络常见的是 NAPT/PAT,会利用端口映射让多个私有地址设备共享一个公网 IPv4 地址。

示例映射(非实测):

192.168.1.10:50001 ──→ 公网 IP:40001
192.168.1.20:50002 ──→ 公网 IP:40002

路由器记录转换关系,以便把返回数据送回正确的内部终端。NAT 不等于防火墙;外部能否主动访问内部设备,还与 NAT 映射、端口转发、防火墙策略等有关。

容易混淆:DNS 解决“域名查 IP”;NAT 解决“地址和端口如何转换”。

# 10.1 HTTP:请求与响应

HTTP 是应用层协议,定义客户端向服务器发送请求、服务器返回响应的规则。

示例 HTTP 请求(非抓包结果):

GET /index.html HTTP/1.1
Host: example.com

常见方法有 GET、POST、PUT、PATCH、DELETE。常见状态码:

状态码 含义
200 成功
301 永久重定向
400 请求错误
401 未通过认证
403 拒绝访问
404 资源不存在
500 服务端内部错误
502 网关收到无效上游响应

# 10.2 HTTPS:用 TLS 保护 HTTP

HTTP 本身不提供传输加密和服务器身份认证。HTTPS 通过 TLS 提供通信机密性、完整性保护及证书身份验证。

HTTP/1.1 或 HTTP/2
       ↓
      TLS
       ↓
      TCP
       ↓
       IP

HTTP/3 是重要例外:它通过基于 UDP 的 QUIC 传输,并集成 TLS 1.3 握手机制。

数字证书通常包含域名、公钥、有效期和签名等信息;浏览器通过可信 CA 链及域名检查来验证服务器身份。HTTPS 不能证明网站内容本身值得信任。

# 10.3 HTTP 无状态与会话维持

HTTP 本身不会自动保存跨请求的用户登录身份,网站通常借助额外的会话或凭证机制。

概念 本质
Cookie 浏览器保存并按规则携带的数据
Session 服务端或应用维护的会话状态
Token 可供服务器验证的凭证
JWT 一种结构化令牌格式,通常可通过签名验证

典型 Cookie + Session 流程:

用户登录 → 服务端验证 → 创建会话
       → 浏览器保存 Session ID Cookie
       → 后续请求携带 Cookie
       → 服务端根据 Session ID 查询会话

Token 也可以放在 Cookie 中,不是只能放在 HTTP Authorization 头。普通签名 JWT 的 Payload 不是加密数据,不要在其中直接放密码、密钥等敏感信息。

# 十一、VLAN、Trunk 与 STP

# 11.1 VLAN:划分二层广播域

VLAN(虚拟局域网)使同一套物理交换设备能够划分不同二层广播域。例如:

VLAN 10 → 研发部门 → 192.168.10.0/24
VLAN 20 → 财务部门 → 192.168.20.0/24
VLAN 30 → 访客网络 → 192.168.30.0/24

一个 VLAN 配一个 IP 子网是常见设计,但 VLAN 与子网不是同一个概念,也不强制严格一一对应。

即使两台电脑都配置 192.168.1.x/24,如果它们位于隔离的 VLAN,也不能仅靠普通二层广播和 ARP 直接互通。不同 VLAN 间通信通常需要三层交换机或路由器,并受到 ACL/防火墙等策略约束。

# 11.2 Access 和 Trunk

  • Access 端口:典型情况下连接普通终端,收发不带 VLAN 标签的帧。
  • Trunk 端口:通常在网络设备之间携带多个 VLAN,可借助 IEEE 802.1Q 标签区分。

VLAN 不是加密机制,它只能隔离二层广播域,不能单独替代防火墙。

# 11.3 STP:避免二层交换环路

STP(生成树协议)通过逻辑阻塞部分冗余链路,避免二层环路及广播风暴。以太网二层广播帧不像 IPv4 包那样依靠 TTL 终止,因此交换环路需要特别处理。

# 十二、静态路由、动态路由、OSPF 与 BGP

# 12.1 路由表与路由协议

  • 路由表/转发表:用于实际选择目的网络的下一跳和出接口。
  • 路由协议:帮助设备交换可达性信息、计算并维护路由。

家庭路由器常通过默认路由将未知外部目的地的流量交给运营商,不需要持有互联网全量路由信息。

# 12.2 静态路由与动态路由

项目 静态路由 动态路由
配置来源 管理员手工设置 协议自动学习
适用范围 小型、稳定网络 网络规模较大、拓扑变化较多
链路变化 通常需额外处理 协议可重新收敛
开销 通常较低 需要交换控制信息与计算

# 12.3 OSPF:自治系统内部的链路状态路由

OSPF 通过 Hello 维护邻居关系、交换 LSA 链路状态通告、维护 LSDB,并通过 SPF(最短路径优先)算法根据 Cost 计算路径。这里“最短”是协议度量开销较小,不一定表示地理距离短。

OSPF 直接封装在 IP 中,协议号为 89,不通过 TCP/UDP 端口。

# 12.4 BGP:自治系统之间的路由策略

BGP 是路径向量路由协议,广泛用于自治系统(AS)之间交换网络前缀可达性信息,也存在 iBGP 在 AS 内传播 BGP 路由的场景。

BGP 根据本地策略及路由属性选路,AS_PATH 是其中一个重要属性,但BGP 不保证总选择 AS_PATH 最短的路线。BGP 使用 TCP 端口 179。

项目 OSPF BGP
典型用途 AS 内部路由 AS 之间路由交换与策略控制
协议类别 链路状态 路径向量
主要依据 链路状态、Cost 策略和路由属性
传输 IP 协议号 89 TCP 179

# 十三、一次 HTTPS 访问如何串起全部知识

假设电脑已经通过 DHCP 得到:

IPv4:192.168.1.10/24
默认网关:192.168.1.1

访问 https://www.example.com 时,可以从逻辑上理解为:

  1. DNS 查询域名对应的 IP(或命中缓存)。
  2. 路由表 选择目标 IP 的下一跳,通常是默认网关。
  3. ARP 取得本地下一跳 MAC(如果缓存中没有)。
  4. TCP 建立连接(这里以基于 TCP 的 HTTPS 为例)。
  5. TLS 进行密钥协商和服务器身份验证。
  6. HTTP 生成请求,经 TLS、TCP、IP、链路层逐层封装后发送。
  7. 家庭路由器转发并可能执行 NAT/PAT;互联网中的路由器继续按目的 IP 转发。
  8. 服务器处理请求并返回响应;客户端逐层解封装、解密并显示网页。

这不是严格单线发生的时间顺序:DNS 请求、TCP 握手、TLS 握手本身也都要依靠 IP 和链路层传输,NAT 发生于相应的数据包经过网关时。

# 十四、Windows 网络命令备忘

以下命令仅为学习和排查用例,不是本次学习中提供的实际运行记录。其中示例网关应按实际网络配置修改。

命令:查看本机配置及缓存

ipconfig /all
arp -a
route print -4
getmac /v

命令:测试连通性与路由路径

ping 127.0.0.1
ping 192.168.1.1
ping 8.8.8.8
tracert -d 8.8.8.8

命令:查看 DNS 与连接

nslookup www.baidu.com
nslookup www.baidu.com 8.8.8.8
netstat -ano

排查时可以从本机配置、到网关、到外部 IP、DNS、TCP/HTTPS 应用逐步定位。需要注意:ping 被拦截、tracert 不回复中间节点,都不等于实际数据业务一定中断。

# 十五、易混点速查

易混之处 正确记法
同一个局域网 = 互联网 错,LAN 内通信可以独立于互联网
MAC 地址 16 位 错,常见以太网 MAC 是 48 位
修改 MAC = 换了一块网卡 错,软件修改不改变网卡硬件
DHCP 重新连接一定分配原 IP 错,取决于租约和服务器策略
同一子网 IP 就一定能通信 不一定,还要有二层连通性与允许的访问策略
ARP 可以查询远端公网服务器 MAC 通常不会,先查询本地下一跳 MAC
UDP 无连接 = 不需要端口 错,UDP 同样使用端口号
MAC 表 = ARP 表 = 路由表 三者分别解决端口、地址映射、路由下一跳
ping 通 8.8.8.8 = DNS 正常 错,ping 主要测试 ICMP 连通性
TCP 流量控制 = 拥塞控制 前者关注接收方,后者关注网络
HTTPS = 网站一定安全 错,TLS 保护通信并验证连接身份,不保证内容可信
VLAN = 子网 错,VLAN 在二层,IP 子网在三层
BGP 总选最短 AS_PATH 错,选路受策略和多种路由属性影响

# 十六、总结与后续练习

目前已经建立起一条比较完整的理解链条:DHCP 提供网络配置 → DNS 解析域名 → 路由表决定下一跳 → ARP 获得链路层地址 → 交换机按 MAC 转发 → IP 跨网转发 → TCP/UDP 提供进程间传输 → HTTP/HTTPS 等应用协议交换数据。

本文以概念学习和命令示例为主,尚未提供 Wireshark 抓包、路由器配置截图或真实故障排查结果,不能把上述示例当成实测结论。适合下一阶段动手验证的内容有:

  1. 使用 Wireshark 观察 ARP 请求应答、DNS 解析、TCP 三次握手。
  2. 对照 arp -a、route print -4 和 ipconfig /all,解释一条实际上网连接的下一跳。
  3. 在可控实验网络中配置两个 VLAN,观察跨 VLAN 通信与三层路由。
  4. 阅读一次 tracert 输出,区分“节点不回复 ICMP”和“路由转发真的失败”。

最终记忆:MAC 解决当前链路的交付,IP 解决跨网络的寻址与转发,TCP/UDP 解决应用进程间的数据传输;其余协议和机制围绕地址分配、解析、安全、管理及路径维护相互配合。