🔌 第一章 浏览器生成消息
📄 一句话概括

IP 地址是 32 比特、8 位一组点分成 4 段的编号;实际使用时切成网络号+主机号两截——从哪切由子网掩码决定,分配时可以按需取任意长度。

📝 本节和前面几节的关系

1.1 节把消息写好了,但消息要寄给谁还没定;本篇开始认识收件地址——IP。

一、32 比特怎么写

二进制写起来太长,8 位一组换算成 0~255 的十进制, 点分四段——172.20.1.1 这样的写法。

二、网络号 + 主机号

地址前半截(网络号)标明在哪个网段, 后半截(主机号)标明网段里的哪台机器。 切分点不固定,由子网掩码说了算。

三、掩码的两种写法

255.255.255.0(四段写法)与 /24(位数写法)等价: 前 24 位是网络号。

四、动手 Demo:IP 地址的算术

把点分十进制和二进制对上号,再用掩码切一刀:

ip = [172, 20, 1, 1]
bits = ' '.join(format(x, '08b') for x in ip)
print('二进制:', bits)
mask = [255, 255, 255, 0]
net  = [a & b for a, b in zip(ip, mask)]
print('网络号:', '.'.join(map(str, net)))
print('主机号:', ip[3])

实跑输出:

--------------------------------------------------------------------
IP 地址的算术
--------------------------------------------------------------------
  32 比特、8 位一组点分成 4 段,先看两种写法等价性:

  二进制                                  点分十进制
  ----------------------------------------------------
  10101100 00010100 00000001 00000001     172.20.1.1
  11000000 10101000 00000000 00000001     192.168.0.1
  ----------------------------------------------------

  网络号 + 主机号怎么切,掩码说了算。掩码 255.255.255.0:

    地址 172.20.1.1  AND 掩码 255.255.255.0
    => 网络号 172.20.1.0,主机号 .1

  掩码也能写成位数:255.255.255.0 等价于 /24——
  前 24 位是网络号,剩下 8 位归主机。

AND 运算就是按位取公共部分——掩码为 255 的段原样保留, 为 0 的段清零;这就是【切分点】的物理含义。

30 秒实验

  1. 用 Python 算 192.168.0.1/24 的网络号。
  2. 把掩码改成 /16,看网络号和主机号怎么变。
  3. 查一下自家路由器分配的地址和掩码,套一遍本节算式。

常见误区

  1. 以为 IP 地址总是按 8 的倍数切——掩码可以是任意位数(如 /27)。
  2. 以为点分十进制是一台机器的【名字】——它是编号,重装系统后可能换。
自测三问(点开对答案) 1. IPv4 地址有多少比特? —— 32 比特。 2. 255.255.255.0 等价于位数写法的什么? —— /24。 3. 网络号和主机号的切分点由什么决定? —— 子网掩码。

相关笔记