第3章 - IP 地址详解
嗨,朋友!
上一章我们学习了网络分层,知道了网络层负责寻址和路由。那么,**网络层是怎么找到目标设备的呢?**答案就是:IP 地址!
IP 地址就像是互联网上的"门牌号",每台联网的设备都有一个独特的地址。这一章,我会用最通俗的语言,带你彻底搞懂 IP 地址。
🤔 什么是 IP 地址?
生活中的类比 🏠
想象一下,你要给朋友寄快递:
- 没有地址:快递员不知道往哪送,快递就寄丢了
- 有了地址:"北京市朝阳区XX街XX号XX室" → 快递员能准确送达
IP 地址就是互联网上的"门牌号",让数据包能够准确地送达目标设备。
定义
IP 地址(Internet Protocol Address)是分配给网络设备的数字标签,用于标识设备在网络中的位置。
📍 IPv4 地址
IPv4 的格式
IPv4 地址由 4 个数字组成,每个数字的范围是 0-255,用点号分隔。
示例: 192.168.1.100
分解:
192 . 168 . 1 . 100
↑ ↑ ↑ ↑
第1段 第2段 第3段 第4段
为什么是 0-255?
每一段是 8 位二进制数(8 bit = 1 byte):
十进制 → 二进制
0 → 00000000
255 → 11111111
192 → 11000000
168 → 10101000
计算公式:2^8 = 256,所以范围是 0-255(256个数字)
完整示例
IP地址: 192.168.1.100
转换成二进制:
192.168.1.100
= 11000000.10101000.00000001.01100100
总共 32 位(4个字节)
知识点
IPv4 地址空间 = 2^32 = 约 43 亿个地址
🌐 IPv4 地址的分类
IPv4 地址分为 5 类:A、B、C、D、E 类。
分类详解
| 类别 | 第一段范围 | 默认子网掩码 | 网络数 | 主机数 | 用途 |
|---|---|---|---|---|---|
| A类 | 1-126 | 255.0.0.0 | 126 | 1600万 | 大型网络 |
| B类 | 128-191 | 255.255.0.0 | 16000 | 65000 | 中型网络 |
| C类 | 192-223 | 255.255.255.0 | 200万 | 254 | 小型网络 |
| D类 | 224-239 | - | - | - | 组播 |
| E类 | 240-255 | - | - | - | 实验用 |
A 类地址
格式: N.H.H.H
(N = 网络地址, H = 主机地址)
示例: 10.0.0.1
特点:
- 第一段: 1-126
- 可容纳约 1600 万台主机
- 适合超大型网络(如政府、大型企业)
B 类地址
格式: N.N.H.H
示例: 172.16.0.1
特点:
- 第一段: 128-191
- 可容纳约 65000 台主机
- 适合中型网络(如大学、中型企业)
C 类地址
格式: N.N.N.H
示例: 192.168.1.1
特点:
- 第一段: 192-223
- 可容纳 254 台主机
- 适合小型网络(如家庭、小公司)
🏠 公网 IP vs 私网 IP
公网 IP(Public IP)🌍
定义:可以在互联网上直接访问的 IP 地址
特点:
- ✅ 全球唯一
- ✅ 可以从互联网访问
- ❌ 数量有限,很珍贵
- ❌ 需要向 ISP(运营商)购买
示例:
百度的公网 IP: 220.181.38.148
阿里云服务器: 47.98.xxx.xxx
你家的公网 IP: 通过访问 https://ip.cn 查看
私网 IP(Private IP)🏠
定义:只能在内部网络使用的 IP 地址
特点:
- ✅ 免费使用
- ✅ 可以重复(不同网络可以用相同的私网 IP)
- ❌ 不能直接访问互联网
- ❌ 需要通过 NAT 转换
私网 IP 范围:
| 类别 | 私网 IP 范围 | 用途 |
|---|---|---|
| A类 | 10.0.0.0 - 10.255.255.255 | 企业内网 |
| B类 | 172.16.0.0 - 172.31.255.255 | 中型网络 |
| C类 | 192.168.0.0 - 192.168.255.255 | 家庭网络 |
示例:
家里的设备:
路由器: 192.168.1.1
你的电脑: 192.168.1.100
你的手机: 192.168.1.101
你的平板: 192.168.1.102
→ 都是私网 IP,只能在家里互相访问
对比图解
互联网(使用公网 IP)
↓
路由器
(公网IP: 123.45.67.89)
↓
NAT 转换
↓
家庭局域网(使用私网 IP)
├── 电脑 (192.168.1.100)
├── 手机 (192.168.1.101)
└── 平板 (192.168.1.102)
🔍 特殊的 IP 地址
1. 本地回环地址 🔄
127.0.0.1 (localhost)
作用: 指向本机自己
用途: 测试本地服务
示例:
// Node.js 本地测试
const express = require('express');
const app = express();
app.listen(3000, () => {
// 访问 http://localhost:3000 或 http://127.0.0.1:3000
console.log('服务运行在 http://localhost:3000');
});
2. 广播地址 📢
255.255.255.255
作用: 向网络中所有设备发送消息
用途: 网络发现、DHCP
3. 网络地址和广播地址
网络: 192.168.1.0/24
网络地址: 192.168.1.0 ← 表示这个网络本身
广播地址: 192.168.1.255 ← 向所有主机发送消息
可用主机: 192.168.1.1 - 192.168.1.254 (共254个)
4. 默认网关
通常是: 192.168.1.1 或 192.168.0.1
作用: 连接局域网和互联网的"大门"
设备: 通常是路由器
🆕 IPv6 地址
为什么需要 IPv6?
问题:IPv4 地址只有约 43 亿个,已经不够用了!
- 全球人口: 80 亿
- 联网设备: 手机、电脑、平板、智能家居、IoT...
- 43 亿个 IP 地址 → 完全不够用!
解决方案:IPv6 提供了 340万亿万亿万亿个地址!
IPv6 的格式
IPv6 地址由 8 组 4 位十六进制数组成,用冒号分隔:
完整格式:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
简化规则:
1. 前导零可以省略
2001:db8:85a3:0:0:8a2e:370:7334
2. 连续的0可以用 :: 代替(只能用一次)
2001:db8:85a3::8a2e:370:7334
IPv6 特殊地址
::1 ← 本地回环地址(相当于 IPv4 的 127.0.0.1)
:: ← 未指定地址
fe80::/10 ← 链路本地地址
fc00::/7 ← 私有地址
ff00::/8 ← 组播地址
IPv4 vs IPv6 对比
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位 | 128位 |
| 地址数量 | 43亿 | 340万亿万亿万亿 |
| 地址格式 | 点分十进制 | 冒号分十六进制 |
| 示例 | 192.168.1.1 | 2001:db8::1 |
| 地址配置 | 手动或DHCP | 自动配置 |
| 安全性 | 可选 | 内置IPsec |
💻 如何查看 IP 地址?
Windows 系统
# 方法1: 使用 ipconfig
ipconfig
# 输出示例:
# IPv4 地址 . . . . . . . . . . . : 192.168.1.100
# 子网掩码 . . . . . . . . . . . : 255.255.255.0
# 默认网关. . . . . . . . . . . . : 192.168.1.1
# 方法2: 查看详细信息
ipconfig /all
Linux/Mac 系统
# 方法1: 使用 ifconfig
ifconfig
# 方法2: 使用 ip 命令(推荐)
ip addr show
# 方法3: 查看公网 IP
curl ifconfig.me
使用程序查看
Node.js 示例:
const os = require('os');
// 获取网络接口信息
const networkInterfaces = os.networkInterfaces();
Object.keys(networkInterfaces).forEach(name => {
networkInterfaces[name].forEach(info => {
if (info.family === 'IPv4' && !info.internal) {
console.log(`接口: ${name}`);
console.log(`IP地址: ${info.address}`);
console.log(`子网掩码: ${info.netmask}`);
}
});
});
// 输出示例:
// 接口: eth0
// IP地址: 192.168.1.100
// 子网掩码: 255.255.255.0
Python 示例:
import socket
# 获取本机 IP 地址
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
print(f"主机名: {hostname}")
print(f"IP地址: {ip_address}")
# 输出示例:
# 主机名: MyComputer
# IP地址: 192.168.1.100
🎯 实际应用场景
前端开发
// 调用后端 API
fetch('http://192.168.1.200:3000/api/users')
.then(res => res.json())
.then(data => console.log(data));
// 在开发环境中:
// localhost (127.0.0.1) → 访问本地服务
// 192.168.1.x → 访问局域网内其他设备
后端开发
// Express 监听所有网络接口
app.listen(3000, '0.0.0.0', () => {
console.log('服务运行在 3000 端口');
});
// 0.0.0.0 表示监听所有 IP 地址:
// - 127.0.0.1:3000 (本机访问)
// - 192.168.1.100:3000 (局域网访问)
// - 公网IP:3000 (如果有公网 IP)
运维配置
# 配置静态 IP 地址(Ubuntu)
sudo vim /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24 # 静态 IP 地址
gateway4: 192.168.1.1 # 默认网关
nameservers:
addresses:
- 8.8.8.8 # Google DNS
- 114.114.114.114 # 国内 DNS
# 应用配置
sudo netplan apply
测试工程师
# 测试网络连通性
ping 192.168.1.1
# 查看路由路径
traceroute www.baidu.com
# 抓包分析(Wireshark)
# 过滤特定 IP 的流量:
# ip.addr == 192.168.1.100
🔢 IP 地址的二进制计算
为什么要学二进制?
因为计算机只认识 0 和 1,理解二进制可以帮你:
- 理解子网掩码(下一章)
- 计算网络地址
- 理解 IP 地址分配
十进制转二进制
示例: 192 转二进制
128 64 32 16 8 4 2 1 ← 二进制位权值
1 1 0 0 0 0 0 0 ← 192 的二进制
计算: 128 + 64 = 192
结果: 11000000
实用表格(常用数字)
| 十进制 | 二进制 | 十进制 | 二进制 |
|---|---|---|---|
| 0 | 00000000 | 128 | 10000000 |
| 1 | 00000001 | 192 | 11000000 |
| 255 | 11111111 | 224 | 11100000 |
| 254 | 11111110 | 168 | 10101000 |
💡 长安的学习建议
- 记住私网 IP 范围 - 192.168.x.x 是最常见的家庭网络
- 理解公网和私网的区别 - 这在实际工作中非常重要
- 多动手查看 - 用 ipconfig 或 ifconfig 查看自己的 IP
- 了解 IPv6 - 虽然现在还是 IPv4 为主,但 IPv6 是未来趋势
📝 小结
这一章我们学习了:
✅ IP 地址的概念:互联网上的"门牌号"
✅ IPv4 格式:4 个 0-255 的数字,总共 32 位
✅ IPv4 分类:A、B、C、D、E 类
✅ 公网 IP vs 私网 IP:公网 IP 全球唯一,私网 IP 可以重复
✅ 特殊 IP 地址:127.0.0.1(本机)、192.168.x.x(私网)
✅ IPv6:128 位,地址数量几乎无限
✅ 实际应用:前端、后端、运维、测试都需要理解 IP 地址
🎯 下一步
现在你已经理解了 IP 地址,但是子网掩码是什么?为什么要划分子网?下一章我们会详细讲解!
💪 练习题
判断以下 IP 地址是公网 IP 还是私网 IP?
- 192.168.1.1
- 47.98.123.45
- 10.0.0.1
- 172.16.0.1
你的电脑 IP 是 192.168.1.100,你的手机 IP 是 192.168.1.101,它们能互相访问吗?
为什么需要 IPv6?
答案提示
IP 地址类型:
- 192.168.1.1 → 私网 IP(C类私网范围)
- 47.98.123.45 → 公网 IP(不在私网范围内)
- 10.0.0.1 → 私网 IP(A类私网范围)
- 172.16.0.1 → 私网 IP(B类私网范围)
能互相访问吗?
- ✅ 可以!因为它们在同一个局域网(192.168.1.x)
- 可以通过文件共享、局域网聊天、远程桌面等方式互访
为什么需要 IPv6?
- IPv4 地址只有 43 亿个,已经不够用
- 全球联网设备数量远超 43 亿(手机、电脑、IoT 设备等)
- IPv6 提供了几乎无限的地址空间(340万亿万亿万亿个)
- IPv6 还提供了更好的安全性和自动配置功能
