网络 ·

网络基础小白入门:IP、MAC、子网掩码、路由、VLAN 一口气讲懂

用生活比喻讲清网络七层里最常用的那几块:IP 地址是哪家哪户、MAC 是身份证、子网掩码负责划小区、路由器负责跨小区送信、VLAN 是把一个大写字楼按公司拆成独立门禁。附 ping/traceroute 等实际命令。

网络基础小白入门:IP、MAC、子网掩码、路由、VLAN 一口气讲懂

网络概念听起来很抽象,但其实就是**“把一封信从你家寄到朋友家”的计算机版**。本章我们把最常见的几个概念都用生活比喻讲透,再配合实际命令去验证,小白也能看懂。

一、先搭个整体模型:寄信的故事

你想给住在隔壁城市的朋友写封信:

我们生活里的东西对应计算机网络概念作用
你本人一台电脑 / 手机发件人
朋友另一台电脑 / 服务器收件人
朋友身份证号(18 位唯一)MAC 地址(物理地址)物理世界里唯一的身份证明,网卡出厂就烧在芯片里,不会变
“北京市朝阳区建国路 88 号 SOHO A 座 1203 室”IP 地址(192.168.1.100)网络世界里的”现在住哪”,搬家(换网络)IP 就会变
小区名 + 门牌范围(哪几栋是本小区)子网掩码 + 网段判断朋友是不是和你”住在同一个小区(同一个子网)”
小区物业/保安交换机(Switch)同一栋楼(同个 LAN / VLAN)内,从”302 给 501 送信”直接交给保安就够,不出小区
小区门口的收发室路由器(Router)的网关 IP跨小区 / 跨城市送信时,你先把信丢给收发室,收发室决定下一步送给谁
全国邮政运输网络互联网路由系统收发室之间层层接力
写字楼里的”公司门禁”VLAN(虚拟局域网)同一个物理大楼(交换机)里,A 公司的人不能随便串门到 B 公司
快递单号上的电话端口号同一台机器上跑着很多应用:微信用一个端口,浏览器用一个端口,邮件用的 25 / 110 —— 端口号用来把数据递给正确的 APP
全国邮政编码查询中心DNS 服务器你只知道朋友名字”百度”,不知道它家地址 → 问 DNS,DNS 返回”百度家 IP = 220.181.38.148”

有了这个模型,后面所有概念都会顺。

二、MAC 地址:身份证,一生不变

MAC(Media Access Control)地址网卡全球唯一硬件地址,由 6 组 16 进制数组成,每组两个字符,用冒号或短横线分开,例如:

8C:85:90:12:34:56      ← Wi-Fi 网卡 MAC
3C:7C:3F:9A:BC:DE      ← 手机蓝牙 MAC
  • 前 3 组 = 厂商标识(OUI),比如 8C:85:90 是苹果,3C:7C:3F 是华为。
  • 后 3 组 = 厂商出厂序号。

MAC 地址是”本地有效”的:只在同一个局域网(同一个小区 / 同一个交换机)里用来找”隔壁那台机器”。数据包一旦要跨路由器出小区,外层的 MAC 就会被替换成”路由器口的 MAC”,而不是最终目标机器的 MAC。

查看你自己电脑的 MAC:

# macOS
ifconfig en0 | grep ether
# 或
networksetup -getmacaddress en0

# Linux
ip link show | grep link/ether

# Windows PowerShell
Get-NetAdapter | Select-Object Name, MacAddress

三、IP 地址:现在住在哪

IP(Internet Protocol)地址 是网络世界分配给每台主机的可改变的逻辑地址。现在主流有两种:

  • IPv4(99% 场景见的这个):32 位,写作 4 段 0~255,用点分开:192.168.1.100,总共约 43 亿个(早已不够分,所以才有 NAT 内网穿透 + IPv6)。
  • IPv6(未来版):128 位,8 段十六进制:240e:3b1:4f01:1::200,地址多得”地球上每粒沙子都能分到一个”。

这篇重点讲 IPv4。

3.1 三类”常用”的 IP(背下来 80% 场景够用)

种类示例能不能上网(公网)说明
私网 IP(内网 IP)10.x.x.x
172.16~31.x.x
192.168.x.x
❌ 只在你家 / 公司内网用全球重复使用,靠路由器做 NAT 才能上网
公网 IP220.181.38.148ISP(电信/联通/移动)分配给你的全球唯一地址
回环地址(本机)127.0.0.1 / localhost永远指向你自己的机器,不经过网卡
链路本地地址169.254.x.x自动配置失败时电脑给自己分的(看到这个基本 = DHCP 挂了拿不到 IP)
组播 / 广播224.0.0.1255.255.255.255发给”一组 / 全部”机器

一个反直觉但很重要的事实:世界上绝大多数电脑都没有公网 IP。你家 Wi-Fi 里的手机、电视、笔记本都共享一个公网 IP 出门——这就是 NAT(网络地址转换)。

3.2 看你自己的 IP

# macOS / Linux:看所有网卡 IP
ip a                         # Linux 最推荐
ifconfig                     # 旧命令(macOS 也能用)

# Windows PowerShell
ipconfig
Get-NetIPAddress

典型输出:

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 8c:85:90:12:34:56
    inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
                          ↑ 你的 IP         ↑ 子网掩码           ↑ 广播地址
    inet6 fe80::10aa:f0ff:feb9:dead%en0 prefixlen 64 scopeid 0x6

同时你还会看到 gateway: 192.168.1.1(路由器的内网口地址,小区收发室)。

3.3 用 ping 验证连通性

网络里最基础的命令:

ping -c 4 127.0.0.1        # ① ping 自己(先确认你自己的网卡/TCP栈是活的)
ping -c 4 192.168.1.1      # ② ping 网关(看和小区收发室通不通)
ping -c 4 223.5.5.5        # ③ ping 公共 DNS(看能不能出小区→出到外面)
ping -c 4 www.baidu.com    # ④ ping 域名(再加上 DNS 解析测试)

按照 ① 自己 → ② 网关 → ③ 公网 IP → ④ 公网域名 的顺序排查,哪一步不通问题就在哪。

四、子网掩码 + 网段:划分小区

4.1 子网掩码到底是干嘛的

IP 地址 = “小区名(网络号)” + “门牌号(主机号)” 两部分组合。 子网掩码就是一把”卡尺”,告诉你哪些位是小区名、哪些位是门牌号。

掩码写成 IPv4 的样子,或者用一个斜杠数字(CIDR 前缀)表示:

常见写法CIDR含义
255.0.0.0/8第 1 段 = 小区,后 3 段 = 门牌(能住 ~1677 万台机器,A 类私网 10.0.0.0/8)
255.255.0.0/16前 2 段 = 小区,后 2 段 = 门牌(~65534 台,B 类私网 172.16.0.0/16)
255.255.255.0/24前 3 段 = 小区,最后 1 段 = 门牌(254 台可用,家用路由器最常见的!)
255.255.255.128/25前 25 位 = 小区,主机位只剩 7 位 = 126 台可用(把 /24 对半切两半)
255.255.255.192/2662 台
255.255.255.252/30只剩 2 台可用(点到点链路常用,比如运营商给你家宽带的上联网段)

4.2 怎么算”我和目标 IP 在不在同一个小区(子网)”

规则:把 IP 和 子网掩码 做二进制”按位与 AND”,结果相同 = 同网段。

举例:你的 IP 192.168.1.100/24,想去 192.168.1.88192.168.2.88

掩码 255.255.255.0    11111111.11111111.11111111.00000000

192.168.1.100 AND 掩码 = 192.168.1.0   ← 你的网段
192.168.1.88  AND 掩码 = 192.168.1.0   ← 一样!= 同小区,直接广播找 MAC
192.168.2.88  AND 掩码 = 192.168.2.0   ← 不一样!= 跨小区,先丢给网关路由器

4.3 划分子网的小公式(面试常考)

给定一个 /24,想分 6 个部门:

  1. 子网个数至少 2^n ≥ 6 → n=3,所以要借 3 位主机位做子网位
  2. 新前缀 = 24 + 3 = /27
  3. 新掩码 = 255.255.255.224(前 27 位都是 1)
  4. 主机位剩下 32-27 = 5 位,所以每个子网可用主机数 2^5 - 2 = 30 台(减 2 是”子网网络号 + 广播号”不能用)
  5. 子网之间 步长 = 256 - 224 = 32,所以:
    • 子网 1:192.168.1.0/27 (可用 IP:1~30)
    • 子网 2:192.168.1.32/27(33~62)
    • 子网 3:192.168.1.64/27(65~94)
    • … 依次 +32 即可

一个在线辅助工具:https://www.calculator.net/ip-subnet-calculator.html (做方案时用它验证)

五、ARP:知道 IP,怎么问它的 MAC 是多少?

刚才讲到”同小区”可以直接通信,但网卡只能按 MAC 找机器——你知道对方 IP,但不知道它 MAC,怎么办?

这就是 ARP(Address Resolution Protocol,地址解析协议) 干的活:

  1. 你大吼一声(广播):

    “Who has 192.168.1.88? Tell 192.168.1.100”

  2. 所有人都听到了,但 IP 是 88 的那个人站出来(单播回复你):

    “192.168.1.88 is at 3c:7c:3f:aa:bb:cc”

  3. 你把这对映射存到 ARP 缓存arp -a 看),有效期一般 10~20 分钟。
# 查看本机 ARP 表
arp -a                    # macOS / Linux
# Linux 新命令更好用:
ip neigh show

# Windows
arp -a
Get-NetNeighbor

典型输出:

? (192.168.1.1) at a8:5e:45:01:02:03 on en0 ifscope [ethernet]
? (192.168.1.88) at 3c:7c:3f:aa:bb:cc on en0 ifscope [ethernet]

🔥 安全小提示:ARP 是没有”身份认证”的,恶意用户可以伪造”我是 192.168.1.1(网关)“回复你 → 这就是 ARP 欺骗 / ARP 投毒(中间人攻击、断网攻击的基础)。公司网里靠交换机的 DAI(动态 ARP 检测)+ DHCP Snooping 防。

六、路由:跨小区送信的路线规划

6.1 路由表是什么

每台电脑 / 每个路由器都有一张 路由表,它写着:

要去某网段,应该把包递给**下一跳(Next Hop)的谁,从哪个网卡(Interface)**出去。

看你自己电脑的:

# macOS
netstat -rn

# Linux
ip route show
route -n

# Windows PowerShell
route print
Get-NetRoute

典型输出(Linux):

default via 192.168.1.1 dev en0                ← 默认路由:所有不知道怎么走的,全丢给网关 192.168.1.1
10.8.0.0/24 via 10.8.0.1 dev tun0              ← 走 VPN 的网段(tun0 是虚拟网卡)
192.168.1.0/24 dev en0 proto kernel scope link ← 本机直连小区,不用绕网关

匹配原则:最长前缀匹配(Longest Prefix Match)—— 路由表里”前缀越长越精确”的那条优先。比如去 10.8.0.100,既命中 default /0 又命中 10.8.0.0/24,走 /24 那条(更长)。

6.2 数据包走一趟完整路径(北京 → 百度)

你的电脑 192.168.1.100
     │ 去 220.181.38.148:80
     │ 一查路由 → 不在同小区,下一跳 = 网关 192.168.1.1

家里路由器(内网口 192.168.1.1 / 公网口 100.12.34.56)
     │ 查它自己的路由表 → 默认路由到 ISP 电信的 BARS 局端路由器

ISP 电信城域网 → 省级骨干 → 国家级骨干 → 百度接入机房的边界路由器

百度机房里的核心交换机 → 接入交换机 → 最终某台百度 WEB 服务器
   (每一跳都做一次:目标 MAC 改成"下一跳 MAC",但 目标 IP 220.181.38.148 永远不变!)

记住:IP(地址)沿途不变,MAC(下一站送达的地址)每跳一变

6.3 追踪路径:traceroute / tracert

# macOS / Linux
traceroute www.baidu.com        # 用 UDP 探测(结果里 *** 代表运营商禁了 ICMP 超时回应,正常)

# Windows
tracert -d www.baidu.com        # -d = 不做反向 DNS,快很多
mtr -rw www.baidu.com           # 更现代的工具,traceroute + ping 持续统计,强烈推荐

看到每一跳 1 192.168.1.1 2ms → 2 100.12.32.1 5ms → 3 ...,就是数据包从你到百度途经的每一台路由器。某一跳开始全 * 或者延迟突然飙 300ms,基本就是那里运营商堵了。

七、VLAN:一个写字楼里拆成多个独立公司

你公司 1 层楼 100 台机器接在一个 48 口大交换机上,有财务、研发、行政。为了安全:

  • 财务电脑不能被研发的随便访问(里面都是工资表、合同)
  • 行政广播个打印机,不能把研发 60 台机器都吵一遍(广播风暴)

VLAN(Virtual Local Area Network,虚拟局域网) 就是在同一台物理交换机上,逻辑上切成好几台”虚拟交换机”——不同 VLAN 之间就是不通,必须经过三层(路由器/三层交换机)才能互访,跟它们物理上在不在一起没关系。

7.1 VLAN ID 范围

  • 1-4094(标准 802.1Q VLAN 头部 12 bit,所以 2^12 = 4096 个,扣除 0/4095 保留)
  • VLAN 1 = 默认 VLAN(所有端口刚出厂都在 VLAN 1,生产建议别用,改 native 到别的)
  • 1002-1005 是思科老令牌环保留,别用

7.2 交换机端口的两种模式

模式用途进出时 VLAN tag 处理
Access(接入端口)电脑/打印机/摄像头(终端)进交换机时加上该 VLAN 的 tag;出交换机时剥掉 tag,所以电脑根本不知道有 VLAN 这回事
Trunk(干线端口)另一台交换机 / 路由器 / 防火墙(设备互联)允许带多个 VLAN 的 tag 一起过(除了 Native VLAN 不打 tag,其余都带)

一个交换机典型配置(伪命令,华三 / 华为 / 思科大同小异):

interface GigabitEthernet 1/0/1          # 接财务电脑
  switchport mode access
  switchport access vlan 10

interface GigabitEthernet 1/0/2          # 接研发电脑
  switchport mode access
  switchport access vlan 20

interface GigabitEthernet 1/0/48         # 接上层三层交换机
  switchport mode trunk
  switchport trunk allowed vlan 10,20,99
  switchport trunk native vlan 99

这样 VLAN 10 的机器想跟 VLAN 20 说话,必须绕到上面那台三层交换机去走路由——这就实现了隔离 + 可控访问

7.3 VLAN 间通信怎么搞?三种做法

  1. 单臂路由(老):路由器一个口接交换机 Trunk,子接口分别是 VLAN10/20 的网关。便宜但性能差(一个口走所有流量)。
  2. 三层交换机(现在最常用):交换机本身支持路由,建 interface Vlanif 10interface Vlanif 20 两个 SVI 接口作为网关,转发在背板硬件里做,速度很快。
  3. 防火墙 / 核心路由器:流量要经过安全策略、NAT、审计的,走它们做 VLAN 间网关。

八、端口 + TCP/UDP:把数据包递给正确的 APP

同一台电脑上跑着微信、Chrome、SSH、远程桌面,IP 都是 192.168.1.100,网卡收到一大包数据,怎么知道给哪个 APP?——靠端口号(16 bit,0~65535)

端口段用途
0~1023 知名端口特权端口,root/管理员才能绑
1024~49151 注册端口常见服务占用:3306 MySQL / 6379 Redis / 8080 开发 Web…
49152~65535 动态/临时端口客户端发起连接时操作系统随便挑一个作为”源端口”

几个必须认识的:

端口协议服务
20/21TCPFTP(数据/控制)
22TCPSSH(远程终端)
23TCPTelnet(明文,废弃,别用)
25TCPSMTP 发邮件
53UDP/TCPDNS 域名解析
80TCPHTTP 明文
110TCPPOP3 收邮件
443TCPHTTPS(TLS 加密)
445TCPSMB 共享文件夹(勒索病毒重灾区,公网一定别开)
3306TCPMySQL
3389TCPWindows RDP 远程桌面
5432TCPPostgreSQL
6379TCPRedis
8080TCPTomcat / 开发 Web

TCP vs UDP 一句话区分

TCP(可靠,打电话)UDP(快,发微信语音)
连接三次握手建立连接、四次挥手断开无连接,直接发
可靠性丢了自动重传、按序到达不保证顺序,丢了也不管
拥塞控制有(慢启动、拥塞避免)没有,你发多快就多快
开销大(首部 20 字节 + 状态机)小(首部 8 字节)
典型应用HTTP/HTTPS、SSH、邮件、FTP、MySQLDNS、直播、VoIP 语音、游戏、NTP、Quic(HTTP/3 基于 UDP)

验证某台机器某个端口开没开:

# 通用:telnet 太老,推荐 nc / ncat
nc -zv 192.168.1.200 22           # 22 SSH 通吗?
nc -zv 192.168.1.200 3306         # 3306 MySQL 通吗?

# Windows PowerShell 自带(不用装任何东西!)
Test-NetConnection 192.168.1.200 -Port 22
# TcpTestSucceeded: True 就是通

# 看你自己本机已经监听了哪些端口
# macOS / Linux
ss -lntp                         # -l 监听 -n 不解析 -t TCP -p 进程
netstat -lntp                    # 老命令

# Windows
Get-NetTCPConnection -State Listen
netstat -ano | findstr LISTENING

九、DNS:把 www.baidu.com 翻译成 IP

你在浏览器输 www.baidu.com,电脑不能直接用域名发包(路由器不认中文名),得先去查 IP——这就是 DNS(Domain Name System,域名系统)

9.1 一条典型查询流程

浏览器输入 baidu.com
  → 先查浏览器缓存 → 系统 hosts 文件 → 系统 DNS 缓存
  → 还没有?去问"本地 DNS 解析器"(一般就是你家路由器 192.168.1.1,或者 223.5.5.5 / 8.8.8.8 这种公共 DNS)
  → 本地解析器"递归查询"从根 (.) → .com 顶级域 → baidu.com 权威 → www.baidu.com 的 A 记录
  → 拿到 220.181.38.148,返回给浏览器

9.2 常用资源记录(RR)类型

类型作用示例
A域名 → IPv4www A 220.181.38.148
AAAA域名 → IPv6www AAAA 240e:...::1
CNAME别名 → 另一个域名cdn.example.com CNAME example.cdn-dns.com
MX邮件服务器(数字=优先级)@ MX 10 mail.example.com
TXT存文本:SPF 防伪造、DMARC、域名所有权验证@ TXT "v=spf1 include:_spf.google.com ~all"
NS该域的权威 DNS 服务器是谁@ NS ns1.example-dns.com

9.3 DNS 排查命令三件套

# ① nslookup(全平台通用)
nslookup www.baidu.com
nslookup -type=MX gmail.com          # 查 MX 邮件记录
nslookup www.baidu.com 223.5.5.5     # 指定 223.5.5.5 作为解析器

# ② dig(Mac/Linux 最好用,推荐)
dig www.baidu.com
dig +short www.baidu.com             # 只要结果一行
dig MX gmail.com +noall +answer      # 指定记录类型 + 只看答案段
dig @223.5.5.5 www.baidu.com         # 指定 DNS 服务器

# ③ Windows 带的 Resolve-DnsName
Resolve-DnsName -Name www.baidu.com -Type A
Resolve-DnsName -Name gmail.com -Type MX

DNS 出问题的典型现象:能 ping 通 8.8.8.8,但 ping 不通 www.baidu.com(报错 “Unknown host” 或 “Name or service not known”)。修法:看 /etc/resolv.conf(Linux)或 ipconfig /all 的 DNS servers 列表,换个靠谱的(阿里 223.5.5.5/223.6.6.6、腾讯 119.29.29.29、114 114.114.114.114、Google 8.8.8.8)。

十、TCP 三次握手 & 四次挥手(为什么面试总考)

TCP 要”可靠”,所以建立连接前双方要”确认对方收发能力 OK”——这就是三次握手(Three-way Handshake)

Client                         Server
  │ SYN seq=x                    │   ①:我要建立连接,初始序号 x
  │ ───────────────────────────▶ │
  │                              │
  │  SYN+ACK seq=y, ack=x+1      │   ②:好的,收到 x,我也发 y,期待你发 x+1
  │ ◀─────────────────────────── │
  │                              │
  │ ACK ack=y+1                  │   ③:收到 y,期待你发 y+1,连接建立!
  │ ───────────────────────────▶ │

为什么不是两次?—— 因为网络里可能有”迟到的旧连接请求 SYN”,两次握手 Server 会直接信并开连接,浪费资源。三次握手 Client 会在第三步发 ACK,Server 收到才真的开,能挡住幽灵包。

断开是四次挥手(数据是双工的,两边都要单独关):

Client                         Server
  │ FIN seq=u                    │   ①:我没数据啦
  │ ───────────────────────────▶ │
  │              ACK ack=u+1     │   ②:知道了(但 Server 可能还在发数据)
  │ ◀─────────────────────────── │
  │                              │   Server 发完最后一份数据了
  │              FIN seq=v       │   ③:我也没数据啦
  │ ◀─────────────────────────── │
  │ ACK ack=v+1                  │   ④:收到,等 2MSL 彻底关闭
  │ ───────────────────────────▶ │

抓包验证:sudo tcpdump -i en0 host www.baidu.com and port 80,或用 Wireshark 界面更直观。


十一、一张图速记:数据从 App 出去的封装过程

┌──────────────┐
│  HTTP GET /  │   ← 应用层
│   (数据)     │
├──────────────┤
│  TCP HEAD │ DATA│   ← 传输层:加"源端口/目标端口 + 序号"
├──────────────┤
│ IP HEAD │ TCP │ DATA│   ← 网络层:加"源 IP / 目标 IP"
├──────────────┤
│MAC │ IP │ TCP │ DATA│ FCS  ← 数据链路层:加"源 MAC / 下一跳 MAC + 帧校验"
└──────────────┘

变成一串 01 电信号 / 光信号 / Wi-Fi 载波 → 在物理层发出去 → 对方逐层拆掉 → 露出 HTTP 数据

每一层只关心自己的头,这就是分层模型(TCP/IP 四层 / OSI 七层) 的好处:底层换 WIFI、换 5G、换光纤,上层的 HTTP 完全不用改。

十二、排障通用 Checklist(抄下来不会错)

遇到”上不了网 / 访问不通 / 服务连不上”,按这个顺序来,省 80% 时间:

  1. 物理层:网线插了吗?Wi-Fi 连上了吗?ifconfig 网卡是 UP?
  2. IP 层
    • ipconfig / ip a → IP/掩码/网关对吗?
    • ping 127.0.0.1 → 自己 TCP/IP 栈
    • ping 网关 → 到小区收发室
    • ping 223.5.5.5 → 出公网
    • ping www.baidu.com → DNS
  3. 路由层
    • ip route / route print → 默认网关有吗?
    • traceroute / tracert -d 目标IP → 哪一跳开始丢/慢
  4. 端口 / 传输层
    • nc -zv / Test-NetConnection 目标 IP 端口 → 端口通吗
    • ss -lntp / netstat -ano → 服务端真的在监听?
  5. 应用层
    • curl -v http://目标:端口/xxx → HTTP 状态码(2xx?4xx?5xx?)
    • 日志看服务端报错:Nginx error.log、应用 app.log
  6. 安全层(经常被忽略!):
    • 本机防火墙:ufw status / firewall-cmd --list-all / Windows 高级防火墙
    • 云安全组 / ACL:入方向放了目标端口吗?
    • SELinux:getenforce 为 Enforcing 时很多 13 Permission denied 都赖它

参考资料

问问 AI