十九、网络层篇-好基友:IP地址和子网掩码

伟大的IP协议使用到的是IP地址,这个地址是网络层中的一个最重要、也是我们平时接触最频繁的一个地址,这个地址如此常见,如果我们不能理解它的话,确实是人生一大憾事!

本篇文章旨在一文说清楚IP地址和子网掩码两大概念、他们之间的关系,知其然更要知其所以然,我们要理解为什么要用到这两大神兵!

请注意,我们这里主要学习IPV4协议,即32位的IP地址,来,让我们继续出发,一文搞定IP地址和子网掩码!本文全是文字,但全是干货,知识点不难,希望读者朋友们耐心看下去,本篇思维导图为:

十九、网络层篇-好基友:IP地址和子网掩码

十九、网络层篇-好基友:IP地址和子网掩码

一、网络和机器的地址:IP地址

我们知道我们平时看起来访问各种网站好像很简单,只需要输入一个地址即可,现在才知道实际上我们经过了跋山涉水才到达对方的网络,找到对方的主机。

面就会有疑问,在学习数据链路层的以太网协议的时候,我们了解了区别局域网内的主机用的是MAC地址,那么跨网络的网络层中也有相应的问题:

在互联网上,我们的网络和其他网络是如何被标识以便区分的呢???


和第 2 层有一个地址(MAC 地址)一样,在第 3 层中也有一个地址,那就是IP地址,这是OSI 第 3 层最重要的地址。

IP 地址实际上是网络和机器的地址

更确切地说,IP 地址的一部分代表网络的地址,另一部分代表机器的地址。

其实我们在上面的示例中看到,每个主机或路由器都有一个IP地址,比如我的小米路由器的IP地址为192.168.31.1

在迷惑中,我们先来看看为什么要有IP地址,MAC地址不够吗?了解了这个再回过头来看IP地址,就会理解其奥妙所在。

十九、网络层篇-好基友:IP地址和子网掩码

二、为什么有了MAC地址还要IP地址?

这个问题我觉得有必要拎清楚点,尤其对于我们这种初学者而言,很容易被搞懵。首先,我们换个思路来思考这个问题:我们都只用MAC地址,不要给我整乱七八糟的IP地址,我不要了,这样做为什么不行?

因为如果我们只用MAC地址的话,我们会发现路由器需要记住每个MAC地址所在的子网是哪一个(如果连子网也不划分的话,那么每一次收到数据包的路由器都要重新满世界去找这个MAC地址的位置),而世界上最多有2^48个MAC地址(MAC地址之前学习过,是48位),这就意味着即使我们给每个MAC地址只留1字节的存储空间,每个路由器都需要256T的内存,这显然是不现实的。

好了,我们从反面证实了,只有MAC地址确实是不够的,其实也说明了IP地址出现的原因。

当年设计IP地址这个东西,就是因为随着网络中的设备逐渐增多,人们发现路由变得越来越困难。

于是人们想了一个办法,就是把网络划分为很多个子网。当我们需要往某个主机发送消息的时候,就可以先发往它所在的子网,剩下具体是到哪台主机的就是子网内部的事情了,范围大大缩小了,减少了路由器的计算量。

如何快速判断某台主机在哪个子网呢?就是可以根据目标主机的IP地址结合子网掩码来判断,下面我们学习到子网掩码就可以理解了。其实这个问题可以结束了,因为已经完全回答了为什么有MAC地址,而还需要IP地址了。

那反过来,我有了IP地址,那能不能不要MAC地址啊?

十九、网络层篇-好基友:IP地址和子网掩码

三、为什么有了IP地址还要MAC地址?

这个问题就比较简单了,因为IP地址往往是接入网络后才会分配,而不是跟MAC地址一样出厂就有。

这里就能看出两者的区别:MAC地址就像人的指纹一样出生就有且独一无二,或者说像是身份证一样,并且一辈子都不会改变。而IP地址就像是居住地址,如果这台主机是个租客,那么可能要经常变动IP地址了。

我们来回答这个问题,在设备联网还没有IP地址的时候,还需要用MAC地址来区分不同的设备。所以啊,MAC地址也不能缺少!

十九、网络层篇-好基友:IP地址和子网掩码

四、IP地址的表示方式

好了,学习了上面,那么我们又来一个问题了:你说IP地址是网络和机器的地址,是一个合二为一的地址?如何来实现的呢?

我们先来看下IP地址的基本介绍。

IP 地址编码为 32 位。可能先驱们觉得是够了,万万没想到连2020年都没撑到就over了。

摘自 腾讯新闻 :2019 年 11 月 26 日,是人类互联网时代值得纪念的一天,全球近 43 亿个 IPv4 地址正式耗尽,我们即将向 IPv6 时代迈进。

为了简化 IP 地址的读写,计算机科学家们选择使用点分十进制表示法来编写 IP 地址。用以点分隔的 4 个字节来表示 IP 地址,每个字节的数字是用十进制来表示的,范围从 0 到 255(因为一个字节是 8 个二进制位,2 的 8 次方是 256,而 256 – 1 = 255)。

比如我们的小米路由器IP地址为:192.168.101.1。

由此可以推断出最小的 IP 地址是 0.0.0.0(当地址的所有二进制位均为 0 时),而最大的 IP 地址是 255.255.255.255(当所有二进制位均为 1 时)。

什么?你不知道上面两段话的意思?小伙子,二进制与十进制的转换是计算机的基础哦~这里不会赘述。

好了,我知道IP地址是必须要有的,也知道IPV4协议的IP地址是32位的了,上面的问题还未解答啊:我们说 IP 地址的一部分代表网络的地址,另一部分代表机器的地址,那么,我们怎么知道 IP 地址的哪个部分代表什么呢?这就涉及大名鼎鼎的子网掩码了。

十九、网络层篇-好基友:IP地址和子网掩码

五、子网掩码

上面说了,IP 地址实际上包含两个部分,一部分是网络地址,另一部分是机器地址。

  • 网络地址:英语是 Network Addressnetwork 是网络的意思,address 是地址的意思。这个网络就是机器所在的网络。

  • 机器地址:英语是 Host Addresshost 是主机的意思,因此机器地址也被称为主机地址。在计算机领域,一般把与互联网相连的任何一台机器都称为主机(host)。因此我们接下去会用主机地址这个术语来替代机器地址。

正如我们上面做的比喻,主机地址就是居住地址。那么我们在互联网上定位一个主机,就类似去一个小区找人:首先通过网络地址找到这个人是哪个小区的;然后,再用主机地址从这个小区中找到这个人所在的房子即房门号。

小区就是子网地址,房门号就是主机地址。IP地址是这两个地址的合体,不过需要子网掩码来帮助做界定,即哪部分标识小区地址,哪部分标识房门号。

子网掩码的英语是 subnet masksubnet 是“子网”的意思,mask 是“面具,掩盖,遮盖,遮罩”的意思。

初学者会觉得这个名字好像没啥意义,还特别难记,实际上我们明白了它的作用之后,就会知道这个名字确实已经是很生动形象了,即会明白这里掩盖的意思。

子网掩码实际上就是类似于一个面具,可以掩盖一部分信息,显露一部分信息,从而划分不同的信息。

IP 地址和子网掩码这两个信息是密不可分的,子网掩码指明了 IP 地址的哪一部分是网络地址,哪一部分是主机地址。(不过子网掩码只在IPV4中有用, IPv6中不用),我们可以找台机器看下:

[root@VM_0_13_centos ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.13 netmask 255.255.240.0 broadcast 172.17.15.255
inet6 fe80::5054:ff:fea3:7d31 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:a3:7d:31 txqueuelen 1000 (Ethernet)
RX packets 90807820 bytes 9186826659 (8.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 96255008 bytes 15414513594 (14.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

我们看eth0,这个标识网卡,下面个lo是本地回环,不用关心。我们可以看到

inet 172.17.0.13  netmask 255.255.240.0  broadcast 172.17.15.255

里面的inet就是代码IP地址,后面个netmask就是子网掩码,我们上面说了,因为子网掩码只是用于和 IPv4 格式的 IP 地址配合,IPv6 格式的地址不需要子网掩码,所以子网掩码和 IPv4 的 IP 地址的格式是一样的,也是 4 个 字节

那么我们来看看子网掩码是如何来区分子网地址和主机地址的。

定义:子网掩码中为 1 的二进制位代表 IP 地址的网络部分(网络地址)。子网掩码中为 0 的二进制位代表 IP 地址的主机部分(主机地址)

小例子:把 IP 地址 192.168.0.1 与子网掩码 255.255.0.0 相关联。

将十进制表示法转换为二进制就是:

255.255.0.0 -> 11111111.11111111.00000000.00000000
192.168.0.1 -> 11000000.10101000.00000000.00000001

可以看到,这里的子网掩码的前面16bit都是1,后面16bit都是0,那么说明,前面16位是网络地址范围,即192.168.0.0,后面都是主机地址范围。我们知道,一个小区里面不可能就一个住户,那么类比这里,同一个网络地址下,不可能就一台主机,对于我们这里示例,这个网络地址下主机可用的IP地址范围是多少呢?

在这个网络里面的主机地址范围为:192.168.0.0192.168.255.255,即主机地址全是0到主机地址全是1的范围。

这就是子网掩码的作用,用前面1的个数来确定网络地址(即子网地址),后面0的个数来确定主机地址范围。

定义:网络中可用的 IP 地址数 = 2 的 “子网掩码中 0 的个数” 次方

不过这里面有两个地址比较特殊:

  • 地址范围中的第一个 IP 地址是这个网络的地址本身,此地址不能为某个主机所用。

  • 地址范围中的最后一个 IP 地址是一个特殊地址,即广播地址。该地址也不能为某个主机所用。实际上,它用于标识该网络中的所有主机。

网络地址本身是如何计算出来的呢?直接跟子网掩码进行&操作即可,比如这里的192.168.0.1255.255.0.0进行&操作的结果就是192.168.0.0,即网络地址本身(没错,就是通过这个方式我们可以来确定属于哪个子网)。

广播地址就很简单了,主机部分全是1即可,即192.168.255.255

因此,假设一个网络有 16 个可用的 IP 地址,网络中的主机却只能使用 14 个地址,因为第一个和最后一个将保留给该网络的地址和广播地址。这条规则对于任何网络都是如此,总是有 2 个不能为主机所用的地址。

如果这里看明白了,实际上就已经掌握了子网掩码,但是好像有点不对劲。

我们看到上面示例里面的子网掩码好特殊啊,前面全是1,后面全是0,万一有个人告诉我一个子网掩码长这样咋整:11111111.11100011.00000000.00000000

太棒了,你只要告诉他:你给的是错误的。就可以啦。

到这我们知道了,子网掩码就是这么特殊,前面全是1,后面全是0,不可能1010不断交叉出现。

十九、网络层篇-好基友:IP地址和子网掩码

六、特殊的地址

有部分 IP 地址范围被保留为供私人使用。这意味着,如果你在自己家中或在一个公司内部建立网络,则必须使用这些地址。

正如我们的小米路由器给分配的地址为192.168.31.1,华为路由器分配的是192.168.101.1

好像都是192打头的地址,这个是有讲究的。

RFC 1918 规定了的私有 IP 地址范围是:

  • 10.0.0.0 / 255.0.0.0 :对应的地址范围是 10.0.0.0 ~ 10.255.255.255。被称为 A 类私有地址。

  • 172.16.0.0 / 255.240.0.0 :对应的地址范围是 172.16.0.0 ~ 172.31.255.255。被称为 B 类私有地址。

  • 192.168.0.0 / 255.255.0.0 :对应的地址范围是 192.168.0.0 ~ 192.168.255.255。被称为 C 类私有地址。

可以看到,我们家里路由器用的C类私有地址,因为A类和B类范围比较广,C类的范围够用了。

这些地址不属于互联网上的任何人,因此我的主机将能够访问互联网上的任何站点。

为什么要有私有地址呢?

假设我正在建立一个家庭网络,而我并不知道 RFC 1918。因此,我随机选择了一个网络,例如,网络 104.31.78.0 / 255.255.255.0(对应的网络范围是 104.31.78.0 ~ 104.31.78.255)。

但不幸的是,该网络地址范围属于互联网上的某个人或机构。你也许会认为这并不要紧,因为无论如何,我的网络是私有的,不会打扰到互联网上的任何人。但实际上,我将遇到问题…

例如,我尝试去一个我喜欢的站点,却不能访问了!

因为,我要去的网站的 IP 地址是 104.31.78.104,该地址属于我选择的网络范围(104.31.78.0 ~ 104.31.78.255)。

因此,当我的主机尝试访问此地址时,它会认为该 IP 地址代表的主机位于和自己相同的网络中,因此无法访问该地址,我就无法连接到这个网站。

十九、网络层篇-好基友:IP地址和子网掩码

七、总结

好了,学习了这么多,有必要来做下总结:

  • IP 地址实际上包含两个部分,一部分是网络的地址,另一部分是机器的地址。

  • MAC地址就像是人的指纹,IP地址就像人住的房子,前者不会变化且唯一,后者是变化的。各有各自的作用,缺一不可。

  • IPV4 地址和子网掩码是密不可分的,正是子网掩码指明了 IP 地址的哪一部分是网络地址,哪一部分是主机地址。

  • 子网掩码中为 1 的二进制位代表 IP 地址的网络部分(网络地址), 为 0 的二进制位代表 IP 地址的主机部分(主机地址)。

  • 在以二进制形式呈现的子网掩码中,为 1 的位必须在左边,为 0 的位必须在右边,不能混合使用 0 和 1。

  • 属于同一网络的所有主机都有一个共同点:它们的网络地址的所有位都是相同的。

  • 网络中可用的 IP 地址数 = 2 的 “子网掩码中 0 的个数” 次方 个。

  • 网络的第一个 IP 地址是主机地址的所有位都为 0 的地址,这个地址也是网络的地址本身,不能为网络中的主机所用。网络的最后一个 IP 地址是主机地址的所有位都为 1 的地址,这个地址被称为广播地址,用于标识该网络中的所有主机,也不能为网络中的主机所用。

  • 私人或公司内部使用的 IP 地址范围是有约束的,由 RFC 1918 定义,这是为了不和互联网上的 IP 地址起冲突。

  • 私有 IP 地址范围是 10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255 和 192.168.0.0 ~ 192.168.255.255 。

原文始发于微信公众号(幕后哈土奇):十九、网络层篇-好基友:IP地址和子网掩码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114043.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!