本文是对《图解TCP/IP》中第 4 章相关内容的学习总结。
我们的办公电脑,手机,时刻都在使用 IP 进行数据通信,但它具体的定义和构成是怎样的呢,可能大多数人都不太清楚。在这篇学习笔记中,笔者将对这些基本内容进行一个梳理。需要说明的是,IP 有两个版本 v4 和 v6,则这里我们暂时只讨论日常使用最多的 IPv4。
地址
IP 地址首先是一个地址,而 地址 一词在维基百科中的定义是:
地址,是一串的字符,内含国家、省份、城市或乡村、街道、门牌号码、屋邨、大厦等建筑物名称,或者再加楼层数目、房间编号等。一个有效的地址应该是独一无二,有助邮差等物流从业员派送邮件,或者上门收件。
除了物流业,其它例如朋友聚会、登门拜访、求职招聘、公司注册登记等,也必须有一个地址。
由于文化差异,世界各地的地址字符顺序有所不同。例如中式地址顺序是从大行政区名称(视情况为国家名、一级行政区划名、二级行政区划名等)往个人最终住所(具体到大楼内房号)位置,而英式的顺序刚好是倒转,即是先写房号、门牌号数,最后是写出国家名称。
地址从狭义上来说,可以理解成一个具体的地理位置,比如黄河路 98 号,或使用经纬度进行标记。但从广义上来说,通信双方可能只是一个终端,比如打电话的双方,电话号码可以认为是一个“地址”,微信聊天中的微信号也可以认为是一个“地址”。
从维基百科的定义上,我们可以看出地址一般有两个特点:唯一性和层次性。
地址的唯一性:在通信网络中,必须确定通信地址,而且唯一,否则发送方就无法知道到底要发给谁,这个与现实世界也是符合的。但这里的唯一在不同的场景下有不同的理解,例如:
- 如果一个教室里有两个名字相同的同学,那肯定需要通过其他昵称来区分开,只喊名字的话,两个人都会以为是在找他。所以这里使用名字作为地址就不合适,需要有其他的标识。
- “302 班的同学请起立”,这里的 302 班就是当前沟通过程中的目标地址,可以类比为通信分类中的多播。
- “301 班哪位同学过来取一下作业本”,这里的“ 301 班哪位同学”就是该场景中的目标地址,可以类比为通信分类中的任播。
地址的层次性:这里的层次性也很好理解,比如网上购物时填写的发货地址,一般都是按“省-市-区-某小区-某单元-某人”的层次结构填写的。收货地址填写完之后,还要加一个手机号码[1]。这里的具体收货地址和手机号都具有唯一性,那能不能只填写其中之一呢?
- 只填手机号:无法发货,手机号虽有唯一性,就像身份证一样,但还是不知道你现在在哪里。
- 只填收货地址:可以发货,但是没有手机号,可能到达指定位置后,找不到这个人。
地址的层次性,最主要的作用是为了进行路由寻址,快速定位到某个目标。在较小的范围内,我们可以通过发送广播包来找到目标,但对全网进行广播,那是不现实的。当你写的收货地址是以“江苏省南京市玄武区”开头后,物流会发往江苏省,而不会发往浙江省,否则将是巨大的资源浪费。
前面提到的手机号可以类比为网络中的 MAC 地址,而收货地址可以类比为 IP 地址。
IP 地址的定义
IP 地址由 4 字节(即 32 bit)的整数来表示,比如:
11000000 10101000 00000000 00001000
但计算机中的二进制形式,在现实中沟通中不友好,所以人们将这 4 字节分成了 4 组,每组中间使用 .
来分割,同时将其转换成十进制,方便记忆,如下所示:
11000000. 10101000. 00000000. 00001000
192. 168. 0. 8
192.168.0.8 这种形式,便是我们日常工作中使用的标记 IP 地址的方式。32 bit 的二进制,最多可以表示的数为:2^32 = 4,294,967,296,即约等于 43 亿。如果一台主机只配置一个 IP,那么最多可以让约 43 亿设备进行联网。
IP 地址是依据网卡来配置的,一块网卡一般只配置一个 IP 地址,但也可以配置多个 IP 地址,而一台路由器上通常会有多个网卡,配置的 IP 地址就更多了。上面的 43 亿个 IP 地址随着移动互联网的到来,很快就捉襟见肘了,这就催生出了 IPv6。
IP 地址的构成与基本分类
IP 地址由 网络号(网络地址) 和 主机号(主机地址) 两部分组成。其中网络号保证相连的两个网络段的地址不会出现重复,即同一网络段内的主机拥有相同的网络地址。而主机号则保证同一个网络段内不会出现重复地址。因此通过设置网络号和主机号,就能保证相互连接的网络中每台主机的 IP 地址唯一。
同一个网段的网络号都相同,所以当一个 IP 数据包经过路由器时,只要判断网络号就能知道当前这个包要发往哪里,这就是路由。那一个 IP 地址中的网络地址和主机地址是如何划分的呢?即 32 bit 的地址中从第几位到第几位是网络号,从第几位到第几位又是主机号。
IP 地址分为 5 类,分别是 A 类,B 类,C 类,D 类 和 E 类。它们依据 IP 地址的第 1~4 位的比特列对网络号和主机号进行划分。
- A 类地址:第 1 位固定为 0 ,第 1~8 位为网络号,后面 24 位为主机号,对应的地址范围是(十进制表示):0.0.0.0 ~ 127.255.255.255。
- B 类地址:前两位固定为 10,第 1~16 位为网络号,后面 16 位为主机号,对应的地址范围是(十进制表示):128.0.0.0 ~ 191.255.255.255。
- C 类地址:前三位固定为 110,第 1~24 位为网络号,后面 8 位为主机号,对应的地址范围是(十进制表示):192.0.0.0 ~ 223.255.255.255。
- D 类地址:前四位固定为 1110,第 1~32 位为网络号,无主机号,对应的地址范围是(十进制表示):224.0.0.0 ~ 239.255.255.255,D类地址主要用于多播。
- E 类地址:前四位固定为 1111,其他位还未定义,留待后用,比如研究等。
将相关内容整理成表格,如下所示:
分类 | 固定前缀 | 网络号长度 | 网段可用个数 | 主机号长度 | 开始地址 | 结束地址 | IP 个数 | 可容纳的主机个数 |
---|---|---|---|---|---|---|---|---|
A | 0 | 8 | (2^7)-2=126 | 24 | 0.0.0.0 | 127.255.255.255 | 2^24=16,777,216 | 16,777,214 |
B | 10 | 16 | (2^14)-2=16382 | 16 | 128.0.0.0 | 191.255.255.255 | 2^16=65536 | 65534 |
C | 110 | 24 | (2^21)-2=2,097,150 | 8 | 192.0.0.0 | 223.255.255.255 | 2^8=256 | 254 |
需要指出的是:
(1)这里的 “IP 个数”和“可容纳的主机个数”指的其中一个网段下的 IP 和 主机个数;
(2)“可容纳的主机个数” 为何比 “IP 个数”少两个,这是因为主机号全为 0 表示网络地址或 IP 地址不可知,主机号全为 1 则表示广播地址。
(3)D 类地址用于组播,比较复杂,这里简单带过,后续有机会再梳理。
(4)网段可用个数为何要减去 2,因为网络号全 0 或 全 1(前缀不算)都被保留使用,所以需要减去。A 类网络地址中,0 和 127 被保留,B 类中,128.0 和 191.255 被保留,C 类中,192.0.0 和 223.255.255 被保留。
到这里,我们发现 A ,B 类地址一个网段可容纳的主机数都比较大,一个普通组织往往没有那么多人,而 C 类地址一个网段可容纳的主机数又太少了,如何配置 IP 才比较合理呢?另外一个组织给一个网段的话,那么 IP 很快就分配完了,可现实生活中好像又不是如此,这又是怎么回事呢?
欲知其中缘由,且听下回分解。
小结
1、地址具有唯一性和层次性,而 IP 地址的层次性就体现在网络号上。网络号相同的主机在组织机构、网络提供商和地域上都比较集中,方便寻址。
2、IP 地址由网络号和主机号构成,根据这个构成可以分成 A~E 五类,平时我们比较关注 A,B,C 三类。
参考资料
- 图解TCP/IP(第5版),by [日]竹下隆史 / [日]村山公保 / [日]荒井透 / [日]苅田幸雄
- 趣谈网络协议,by 刘超
-
手机号从世界的角度来看,也是有层次性的。这里的层次性就体现在区号上,尤其是固定电话。 ↩︎