Something about IPv4

前言

虽然IP v6是未来的主流,但目前学校以及大量我国单位还在用旧的v4

什么是IP

Internet Protocol

其用十进制表示,看起来像这样:192.168.1.1 (就是4段0~255的数)

用2进制表示,是这样:11111111.11111111.111111111.00000000 = 255.255.255.0

平时写代码的时候,只是操作单个主机、单个IP。

一旦把管理范围扩大,我们就需要管理整个网络了,所以真实世界的IP不是孤立存在的,而是成群结队的出现。

比如一个范围由192.168.0.0192.168.255.255的网络

  1. 这个网络的第一个IP地址, 192.168.0.0,被当成这个网络的标识

  2. 该网络的最后一个地址,192.168.255.255,会被当成广播地址,向它发信息,那条信息会被广播到该网络的每一个地址

由此一来,IP必须由两部分组成:网络号+主机号

举个例子:在网络202.93.0.0里,某个IP202.93.44.55的主机号是44.55,网络号是202.93

地址要分类

人们最开始把所有IP v4地址像这样分(假设网络号=c主机号=x):

Class      Theoretical Address Range
A      0.0.0.0 to 127.255.255.255      c.x.x.x
B      128.0.0.0 to 191.255.255.255      c.c.x.x
C      192.0.0.0 to 223.255.255.255      c.c.c.x
D      224.0.0.0 to 239.255.255.255      I don't know

IPv4总数是2的32次方=4,294,967,296,不够用

所以聪明的人类又开始动歪脑筋折磨后人了(但事实上只需要写一个程序自动帮我们计算,只是不知道为什么学校要求学生手动计算这个东西,真麻烦)

具体的原理可以参照 Data Communications and Networking - Behrouz A. Forouzan 这本书

我这里只讲一讲应试教育的解题方法(其实我压根就不该写这么多,直接写题目才是正确的套路)

题目:将一个 B类 的网络172.17.0.0划分为14个子网,求每个子网的子网掩码 and 每个子网的IP范围

(1)

因为 是B类网,所以 122.17固定不变,0.0可变; 0.0变为 2进制 为00000000.00000000

因为要划分为 14 个子网,我们需要思考2的多少次方刚好 > 14

23=82^3=824=162^4=16

因为 24=162^4=16 刚好大于 14,所以我们要占用主机位2进制前4位来划分子网

因为子网掩码本质上是用 1 代表 网络位,0代表主机位

所以该题的子网掩码的2进制形式变为了 11111111.11111111.11110000.00000000

把它变成10进制: 8个1为255,8个0为0

11110000的转换方法:

0×20+0×21+0×22+0×23+1×24+1×25+1×26+1×27=0+0+0+0+16+32+64+128=0+48+64+128=112+128=240\begin{align*} &0 \times 2^0 + 0 \times 2^1 + 0 \times 2^2 + 0 \times 2^3 + 1 \times 2^4 + 1 \times 2^5 + 1 \times 2^6 + 1 \times 2^7 \\ \\ &= 0 + 0 + 0 + 0 + 16 + 32 + 64 + 128 \\ \\ &= 0 + 48 + 64 + 128 \\ \\ &= 112 + 128 \\ \\ &= 240 \end{align*}

所以最终该题子网掩码变为了 255.255.240.0

(2)

不知道原因,但我从我课本的描述中总结出了地址划分的规律

假设主机位被占用的个数为 xxB=8xB = 8 - x2B12^B - 1 为每个子网的范围

在这道题,主机位被占用的个数为 4,B=84=4B=8-4=4

241=161=152^4 - 1 = 16 - 1 = 15 ,得到了每个子网的范围后,就可以开始写表了

初始地址为 172.17.0.1

172.17.0.1 ~ 172.17.15.254
172.17.16.1 ~ 172.17.31.254
172.17.32.1 ~ 172.17.47.254
... ...
172.17.224.1 ~ 172.17.239.254
172.17.240.1 ~ 172.17.255.254

不要问我 首和尾 哪儿去了,一个用于标识网络,一个用于广播

后续

至于更多的题,我暂时不想写了

Last updated