上一篇文章给大家介绍了 OSI 参考模型的第二层,主要包括交换机的 MAC 数据库建立过程、二层寻址等,还记得前面提到的 IP 地址吗?

上期回顾

电脑、手机、智能家居等一切可以入网的设备都有网卡,网卡会被烧录一个独一无二的 MAC 地址,MAC 地址用于二层通信,但想要在更加复杂庞大的互联网上通信还不够。我们前面说过,MAC 地址具有局限性,想要在庞大的网络上通过 MAC 地址找到另一张网卡会有重重困难,因此还需要有另外一个地址来帮助数据传输,这个地址就是 IP 地址。而 ARP(地址解析协议)可以将 IP 地址解析为 MAC 地址,这样我们就可以获得整个子网内的所有 MAC 地址,向子网上所有主机发送数据了。

IP 地址和子网掩码

我们知道,MAC 地址包含厂商编号和设备编号,只能区分厂商,不能表示所在的网络,那想要在更大规模的网络上通信怎么办?这时候促使了网络层的诞生,网络层使用了一套新的地址,地址包含所处的网络信息以及在网络内的编号,帮助我们区分计算机到底处于哪个网络,这个地址就叫做网络地址,可以简称为“网址”。这时候,一个计算机就同时具有 MAC 地址和网络地址了。有所区别的是,MAC 地址是烧录在网卡中的,不可随意更改且伴随网卡终身而网络地址是由别人分配,可以随意更改,不同网络中会分配到不一样的地址,是帮助区分计算机所处的网络的逻辑地址数据想要从一个主机到另一个主机最终还是要通过 MAC 地址。

TCP/IP 网络中,网络层使用的是 IP 地址,我们现在使用的 IP 地址有 IPv4 地址和 IPv6 地址,IPv4 是网际网协议第四版(Internet Protocol Version 4),地址大约有 43 亿个,IPv6 是网际网协议第六版(Internet Protocol Version 6),地址有 2^128-1 个。本文中以大家见得更多的 IPv4 地址为例。在电脑上查看到的 IP 地址一般是这个样子:

网络适配器

第一行:网卡的名字,可以看出这是一块无线网卡;

第二行:有 DNS 服务器的域的网络 DNS,可以不去管它。DNS 是域名系统,后文会解释;

第三行:IPv6 链路本地地址,当前无 IPv6 环境,此地址用于诸如自动地址配置、邻居发现或无路由器存在的单链路的寻址;

第四行:IPv4 地址,就是当前网卡被分配到的 IPv4 地址;

第五行:子网掩码,用来标识 IP 地址,稍后解释;

第六行:默认网关,帮助我们访问其他子网。

IP 地址也分为两段,一段表示网络位,一段表示主机位。

IPv4 地址由 32 位二进制数表示,但为了方便书写和记忆,我们通常分成四段,并转换为十进制数,中间用“.”隔开,写成点分十进制的形式

IP 地址

单看图上的 IP 地址,能区分哪里是网络位哪里是主机位吗?好像并不能,IP 地址并没有像 MAC 地址那样规定,这时候就需要子网掩码的配合了。子网掩码是用来描述 IP 地址中的主机部分和网络部分的,并规定,网络部分掩码全为 1,主机部分掩码全为 0,看下图:

IP 地址和子网掩码

IP 地址和子网掩码的实际形态都是二进制的形式,掩码也和 IP 地址一样,也都是 32 位的二进制数,这样就可以和 IP 地址一一对应。如图上所示,其中 192.168.1 对应的掩码为 1,因此该  IP 地址的网络位就是 192.168.1,通常写作 192.168.1.0/24,24 的意思就是掩码有 24 个 1,换算成十进制就对应着前三段。主机位就是最后那个 1 了,对应的掩码全为零。再看主机位转换成二进制后的样子,如果主机位的 IP 部分全为零,那么表示网络号,也就是我们前面说的 192.168.1.0/24 这个网络号。如果主机位 IP 部分全为 1,那么表示这是一个广播地址

网络部分通常都是固定的,不会随便修改,不同的网络号就是不同的网络了,但主机部分是可变的,这个可变的空间就表示可分配的 IP 地址数量。注意,这里说的所有变化都需要先转换成二进制。现在主机位有 8 位二进制数,每一位二进制数都有 0 和 1 两种可能,那就有 256 种可能,意味着有 256 个可用的 IP 地址,但在实际网络中主机位全为 0 和全为 1 不会分配给计算机,去掉这两个就是 254 个可用 IP。

十进制和二进制的互相转换大家可以用计算器算一下,或者直接找网上 IP 地址计算的工具。下图是一个在线的 IP 地址计算工具。

网络和 IP 地址计算器(图片来自于网络)

那要怎么比较两个 IP 地址是否在同一个网络呢?需要将两个 IP 地址与各自的子网掩码分别进行运算(运算规则:二进制下,若 IP 和掩码都为 1 ,运算结果为 1,否则为 0),比较各自得出的结果,完全一致才叫同一个网段。比如说 192.168.1.1/24 和 192.168. 2.1/24,很显然这不是同一个网络,虽然只有一个数字不同那也不是同一个网络。

IPv4 地址不够用了

最初互联网只是设计给美国军方用的,设计者也没有想到它会变成今天这个庞大的全球性网络。早在二十年前,IPv4 地址枯竭的严峻问题已经摆在了专家面前,但事实上,在 2019 年 11 月26 下午,欧洲网络信息中心(RIPE NCC)才宣布最后一个 IPv4 地址区块分配完毕,全球 43 亿 IPv4 地址全部耗尽。迄今为止,IPv4 地址使用已经超过 30 年。这中间发生了什么事情,使得 IPv4 地址枯竭延缓了近二十年呢?

通过前面的介绍我们知道,所有需要入网的设备都需要有 IP 地址,网络中的节点也都需要 IP 地址标识,而且这个标识必须是全球唯一的,这样才能保证消息准确送达。互联网就像是一个全球性的邮政系统,IP 地址就是一个完整的地址,包含了国家、省市、区、街道小区门牌号。全球大约有 43 亿 IPv4 地址,这个数字看上去还挺庞大,但早在 2018 年,全球网民数量就破 40 亿了,还没有算上互联网中的各种网络节点。更糟糕的是,IPv4 地址不是逐个分配的,而是逐段分配。目前 IPv4 地址被分为五类,其中 D 类是组播地址,E 类是保留地址,不分配给网络节点。例如,A 类地址有 127 段,每段大概有 1678 万个可用地址,一般会给超大型组织/机构分配 A 类地址,但一个组织很难用完这么多地址,造成地址的极大浪费。很快互联网的专家们就意识到这样下去地址就要消耗殆尽了,必须要采取措施延缓这个情况,同时找到 IPv4 的替代方案。

IP 地址分类
A 类0-127
B 类128-191
C 类192-223
D 类224-239,组播地址
E 类240-254,保留为研究测试使用

这里面也有一些特殊用途的 IP 地址:

特殊的 IP 地址
范围描述

10.0.0.0/8

172.16.0.0/12

192.168.0.0/16

私网 IPv4 地址,可用于家庭、办公室和企业的内部局域网。设计私网 IPv4 地址的初衷是缓解 IPv4 地址耗尽问题。
169.254.0.0/16Link-local,Link local 地址只在某网段有意义,路由器是不会转发地址为 Link-local 的 IP 包的。
127.0.0.0/8Loopback,相当于计算机本身,通常用来测试计算机的 TCP/IP 网络是否正常。
224.0.0.0/4IP 组播地址
240.0.0.0/4保留为研究测试使用
255.255.255.255广播地址

为了缓解 IPv4 地址匮乏的情况,提出了 NAT(Network Address Translation,网络地址转换) 协议。NAT 的出现可以说让 IPv4 重获新生,让它在如此严峻的情况下又支撑了近二十年,直到今天我们能够向 IPv6 过渡。IPv4 地址定义了公网地址和私网地址,NAT 的核心就是公网地址和私网地址的互相转换。公网地址就是用在公网上,具有唯一性,要获得公网地址,需要向运营商申请。私网地址就是我们用在局域网内部,可重复使用,任意配置的地址。这样就意味着一个结构只需要申请很少的几个 IP 地址就可以实现在公网上的通信了,虽然需要拿出一部分用作私网地址,但是私网地址是可以重复使用的,利用率大大提高。

那如何知道自己有没有用到 NAT 呢?其实很简单,首先打开任意浏览器搜索“IP”,可以查询到本机 IP,这一定是个公网地址,而且其中包含了位置信息。然后可以在自己的电脑或者手机上看一下 IP,百分之八十以上的用户一定会发现这两个地址不一样,然后再把自己手机或电脑的 IP 放到刚刚的查询栏中查询,提示来自本地局域网,这就意味着你经过了 NAT,甚至是多次 NAT。不少人会因为自己“被 NAT 了”而不开心,这对于我们来说也不完全是一件坏事,首先 NAT 让 IPv4 撑到 IPv6 协议逐渐成熟,并有足够的时间完成向 IPv6 的过渡; 其次,NAT 技术隐藏了内网情况,一定程度上保证了内网安全。当然 NAT 确实会导致某些应用出现通信问题,但现在也有很成熟的 NAT 穿越技术,实在不行也可以去申请公网地址。

不在同一个二层网络怎么办呢

回顾一下前面的内容,想要发送数据,首先要知道这两个信息——对方的 MAC 地址和 IP 地址,主机发送一个数据包,会先对比目的 IP 地址和自己是否在同一个网络,如果在同一个网络就通过 ARP 获取到相应的 MAC 地址,然后将数据发出去;如果不在同一个网段,那目的 MAC 地址就会变成网关的目的 MAC,目的 IP 不变,网关会帮我们把消息送出去。

网关现在也叫路由器。路由器里面也会存着一张表,这个表叫路由表,存的是网段和接口的对应关系,大概长这样:

路由表

路由器会根据这个表帮我们把数据送到目的地。如果说互联网是邮政系统的话,这个表就是路由器的地图,有了地图才能根据地址送消息。网络上有千千万万台路由器,都会有这样的地图,它们互相配合,才能实现互联网上的数据通信。


是不是发现我们平时访问的网址不长这样呢?比如说百度我们访问 baidu.com,或者是 

https://www.baidu.com/ 这样的网址,这二者是如何互相转换的呢?用户端要如何配置才能上网呢?下篇文章将继续为大家讲述。


扩展阅读

入网指南 01 | 一文读懂你身边的「网络」

入网指南 02 | 当你发消息的时候,发生了什么

入网指南 03 | 交换机在交换什么?