轩辕李的博客 轩辕李的博客
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

轩辕李

勇猛精进,星辰大海
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 分布式

  • 代码质量管理

  • 基础

  • 操作系统

  • 计算机网络

    • 谈谈IP
      • 一、网络协议的分层
      • 二、什么是 IP 地址
        • 1、查看 IP
      • 三、IP 地址是怎么来的
      • 四、CIDR
        • 1、网络号与主机号
        • 2、子网掩码(前缀长度)
        • 3、一个特殊的 CIDR 计算
        • 4、默认网关
      • 五、局域网中 IP 地址的分配
        • 1、静态 IP 地址分配
        • 2、动态 IP 地址分配(DHCP)
      • 六、IPv6
      • 七、总结
    • DNS与HTTP协议
  • AI

  • 编程范式

  • 安全

  • 中间件

  • 心得

  • 架构
  • 计算机网络
轩辕李
2023-08-26
目录

谈谈IP

# 一、网络协议的分层

咱们在谈 IP 之前,得先弄清楚计算机网络是怎么组织的。就像盖房子一样,网络协议也是分层搭建的。

TCP/IP 模型从下到上分为五层:

  1. 物理层(Physical Layer):最底层,负责传输电信号、光信号等。比如网线、光纤传输的就是这一层的数据。

  2. 数据链路层(Data Link Layer):把物理层的信号组织成数据帧,还要检查有没有传错。你的网卡工作在这一层。

  3. 网络层(Network Layer):这就是我们今天要讲的 IP 所在的层次,负责在不同网络间找路径,把数据包送到目的地。

  4. 传输层(Transport Layer):确保数据能可靠地从一端传到另一端。TCP 和 UDP 就工作在这一层。

  5. 应用层(Application Layer):最顶层,我们平常用的网页浏览、邮件收发等应用都在这一层。

简单来说,IP 就是网络世界的"快递员",负责把数据包从发送方送到接收方。

# 二、什么是 IP 地址

IP地址就像现实世界中的门牌号码,每台连接到网络的设备都需要有一个独一无二的"地址",这样其他设备才知道往哪里发送数据。

目前我们常见的是 IPv4 地址,比如 10.100.122.2。这个地址由四个数字组成,每个数字的范围是 0 到 255。为什么是 255 呢?因为每个数字实际上是 8 个二进制位(也就是 8 个 0 或 1),8 位二进制最大能表示的数字就是 255。

所以 IPv4 地址总共是 32 位(4×8=32),理论上能提供大约 43 亿个地址。听起来很多,但随着全球设备数量暴增,这些地址已经不够用了。这就是为什么后来出现了 IPv6 的原因。

# 1、查看 IP

想知道自己设备的 IP地址 很简单:

  • Windows 系统:打开命令提示符,输入 ipconfig
  • Linux 系统:使用 ifconfig 或者 ip addr 命令(可能需要先安装 net-tools 工具包)

顺便说一下,IPv6 使用 128 位地址,能提供的地址数量是个天文数字(大约 3.4 × 10^38 个),基本上可以给地球上每粒沙子都分配一个地址了。

# 三、IP 地址是怎么来的

你可能好奇,这些 IP地址 到底是谁在管理分配的?其实有一套完整的体系。

全球的 IP地址 资源由 IANA(互联网数字分配机构)统一管理,就像是 IP地址 的"总库房"。但 IANA 不会直接分配给个人用户,而是先分给各个地区的管理机构。

全世界被划分为五大区域,各有一个管理机构:

  • ARIN:管理北美洲
  • RIPE NCC:管理欧洲、中东和中亚
  • APNIC:管理亚洲和太平洋地区(包括中国)
  • LACNIC:管理拉丁美洲和加勒比地区
  • AfriNIC:管理非洲

拿咱们中国来说,IP地址 的分配路径是这样的: IANA → APNIC → 国内运营商(移动、联通、电信等)→ 最终用户

所以你家宽带的 IP地址,实际上是经过了这么多层级才到你手里的。

# 四、CIDR

早期的时候,IP地址 被简单粗暴地分为了 A、B、C、D、E 五类:

image

但这种分类方法有个大问题:太死板了!比如一个公司需要 300 个 IP地址,C 类网络只能提供 254 个,不够用;而 B 类网络能提供 6 万多个,又太浪费了。

于是就有了 CIDR(无分类域间路由)。

CIDR 的核心思想很简单:不再用固定的分类,而是用"IP地址/前缀长度"的格式来表示网络。比如 192.168.0.0/24,这里的 /24 表示前 24 位是网络部分,后面 8 位是主机部分。

这样做有什么好处呢?

  1. 按需分配:需要多少 IP 就分配多少,不浪费
  2. 灵活划分:可以把大网络分成小网络,也可以把小网络合并成大网络
  3. 减少路由表:路由器不用记住那么多条路由信息

现在互联网基本上都用 CIDR 了,它让 IP地址 的管理变得更加智能化。

# 1、网络号与主机号

每个 IP地址 其实都可以分成两部分:网络号和主机号。

你可以这样理解:网络号就像小区名,主机号就像门牌号。同一个小区(网络)里的住户(设备)可以直接互相访问,不同小区的住户要通过大门(网关)才能相互访问。

以 192.168.0.0/24 为例:

  • 前 24 位(192.168.0)是网络号,表示这是同一个网络
  • 后 8 位(最后一个数字)是主机号,从 1 到 254 都可以分配给不同的设备

前缀长度越小,网络越大,能容纳的设备就越多。比如 /16 能容纳 6 万多台设备,而 /28 只能容纳 14 台设备。

# 2、子网掩码(前缀长度)

子网掩码其实就是用来区分网络号和主机号的"分界线"。

比如 /24 对应的子网掩码是 255.255.255.0。为什么这么对应呢?

你可以这样理解:

  • 255.255.255.0 转换成二进制就是前 24 位都是 1,后 8 位都是 0
  • 1 的部分表示网络号,0 的部分表示主机号
  • 所以 /24 就是前 24 位是网络号的意思

常见的子网掩码对应关系:

  • /24 = 255.255.255.0 (可分配 254 个 IP)
  • /16 = 255.255.0.0 (可分配 65534 个 IP)
  • /8 = 255.0.0.0 (可分配 1670 万个 IP)

当你的设备要判断另一台设备是否在同一网络时,就是用自己的 IP地址 和子网掩码进行"按位与"运算,得到网络号,然后和目标设备的网络号比较。

# 3、一个特殊的 CIDR 计算

前面提到 CIDR 的前缀长度可以是任意值,不一定是 8、16、24 这些整数。咱们来看一个稍微复杂点的例子。

假设有个网络 16.158.165.91/22,我们来算算这个网络的一些关键信息。

/22 意味着前 22 位是网络号,后 10 位是主机号。重点是第三个字节(165)需要拆分:

  • 165 转换为二进制是 10100101
  • 按照 /22 的要求,前面 6 位(101001)属于网络号,后面 2 位(01)属于主机号

所以这个网络的信息是:

  • 网络地址:16.158.164.0(主机位全为0)
  • 网关地址:16.158.164.1(通常是网络中第一个可用IP)
  • 子网掩码:255.255.252.0(前22位为1)
  • 广播地址:16.158.167.255(主机位全为1)
  • 可用IP范围:16.158.164.1 到 16.158.167.254

这种不按字节对齐的划分方式在实际网络规划中很常见,能够更精确地控制网络规模。

# 4、默认网关

默认网关就像小区的大门,当你要去别的小区时,必须通过这个大门出去。

在网络中也是这样:

  • 如果两台设备在同一个网络(比如都是 192.168.0.x),它们可以直接"串门"聊天
  • 如果不在同一个网络(比如一个是 192.168.0.1,另一个是 192.168.1.2),就必须通过默认网关来转发

默认网关通常就是你的路由器。当你在家里上网时:

  1. 你的电脑想访问百度(180.101.49.11)
  2. 电脑发现这个 IP 不在自己的网络里
  3. 电脑把数据包发给默认网关(路由器)
  4. 路由器再帮你转发到互联网上

这就是为什么家里断网的时候,你连不上外网,但还能访问路由器管理页面的原因。

# 五、局域网中 IP 地址的分配

# 1、静态 IP 地址分配

静态 IP 就是手动给设备分配一个固定的 IP地址,这个地址不会变。这种方式适合服务器或者需要固定 IP 的设备。

在 Linux 系统中配置静态 IP 的基本步骤:

  1. 查看网络接口

    ip addr  # 或者用 ifconfig
    

    找到你要配置的网卡名称,比如 eth0 或 ens33

  2. 编辑网络配置文件

    sudo vi /etc/network/interfaces
    
  3. 添加静态 IP 配置

    auto eth0
    iface eth0 inet static
    address 192.168.0.100      # 你想要的静态IP
    netmask 255.255.255.0     # 子网掩码
    gateway 192.168.0.1       # 网关地址
    dns-nameservers 8.8.8.8   # DNS服务器
    
  4. 重启网络服务

    sudo systemctl restart networking
    

配置时需要注意:

  • 确保你选择的 IP 在正确的网段内
  • 不要和其他设备的 IP 冲突
  • 网关和 DNS 地址要正确

# 2、动态 IP 地址分配(DHCP)

想象一下,如果每次连接新的 WiFi 都要手动配置 IP,那得多麻烦?这时候就需要 DHCP(动态主机配置协议)来自动分配 IP 了。

DHCP 的工作过程就像是租房子:

第一步:DHCP Discover(我要租房) 新设备刚连接到网络,就像一个新来的人在小区里喊:"有房东吗?我需要租个房子!"

  • 设备发送广播包到 255.255.255.255,表示询问整个网络
  • 内容大概是:"我是新来的,MAC 地址是 XX:XX:XX:XX,谁能给我分配个 IP?"

第二步:DHCP Offer(我有房子) DHCP 服务器(通常就是你的路由器)收到请求后回应:"我这里有房子可以租给你"

  • 服务器提供一个可用的 IP 地址
  • 同时还会告诉你子网掩码、网关、DNS 等网络配置信息

第三步:DHCP Request(我要这套房) 设备说:"好的,我要租你提供的这个 IP"

第四步:DHCP ACK(租约生效) 服务器确认:"好的,这个 IP 租给你了,租期是 24 小时"

整个过程就几秒钟,你的设备就自动获得了上网所需的所有配置。这就是为什么你连 WiFi 时不需要手动配置 IP 的原因。

# 六、IPv6

前面提到 IPv4 地址不够用了,那 IPv6 就是来解决这个问题的。

IPv6 最直观的变化就是地址变长了:

  • IPv4:192.168.0.1(32位,4段数字)
  • IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334(128位,8段十六进制)

这个地址空间有多大呢?如果 IPv4 能分配给全球每个人一个地址的话,IPv6 能给地球上每个原子都分配几万个地址!

除了地址多,IPv6 还有这些改进:

自动配置更智能 设备接入网络后,可以自动生成全球唯一的地址,不需要 DHCP 服务器。就像每个设备都有了一个"身份证号"。

安全性更强 IPv6 内置了 IPSec 加密,数据传输更安全。以前需要额外配置的安全功能,现在成了标配。

路由更高效 IPv6 的包头设计更简洁,路由器处理起来更快,网络性能更好。

适合物联网 随着智能家居、车联网的发展,需要给大量设备分配 IP。IPv6 的巨大地址空间正好满足这个需求。

虽然 IPv6 推广得比较慢(主要是兼容性问题),但随着 IPv4 地址枯竭,越来越多的网站和服务开始支持 IPv6。现在很多家用路由器都已经支持 IPv6 了。

# 七、总结

通过这篇文章,我们从网络分层开始,一步步了解了 IP地址 的方方面面:

  • 网络分层:IP 位于网络层,负责在不同网络间传递数据包
  • IP地址本质:就像网络世界的门牌号,让设备能够找到彼此
  • 地址管理:全球有一套完整的分配体系,从 IANA 到各地区管理机构再到运营商
  • CIDR技术:让 IP 地址分配更加灵活高效,告别了僵化的分类方式
  • 地址获取:静态配置适合服务器,DHCP 自动分配适合普通用户
  • IPv6演进:解决地址不够用的问题,同时带来更多技术改进

说到底,IP 地址就是互联网的基础设施,就像现实中的地址系统一样。理解了这些基本概念,你就能更好地理解网络是如何工作的了。

随着物联网和云计算的发展,网络技术还在不断演进,但这些基础知识会是你理解新技术的基石。

祝你变得更强!

编辑 (opens new window)
#IP
上次更新: 2025/08/16
Bash脚本教程
DNS与HTTP协议

← Bash脚本教程 DNS与HTTP协议→

最近更新
01
AI时代的编程心得
09-11
02
Claude Code与Codex的协同工作
09-01
03
Claude Code实战之供应商切换工具
08-18
更多文章>
Theme by Vdoing | Copyright © 2018-2025 京ICP备2021021832号-2 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式