前言
在上一篇中,我们讲解了网络是靠跨洋的海底电缆以及各大互联网组织制定的规则、协议来进行连接运作的。
但是具体是怎么进行连接的? 没有说明得很清楚,今天就让我们一起来探索探索。
一个简单的网络
当两台计算机需要通信时,您必须物理的 (通常使用网线) 或无线的 (例如 Wifi 或蓝牙) 链接它们,所有现代计算机都可以维持这样的链接。
这样的网络不限于两台计算机之间,你可以接入任意数量的计算机,但很快也会变得复杂起来:
例如,如果要连接 6 台设备,则需要 15 根网线,每台计算机需要连接 5 根网线!
为了解决这样的问题,我们需要一个中间设备,让所有计算机接入它,由这个中间设备做转发,这样就能有效的减少网线的数量了:
这样一来,虽然减少了网线的数量,但同时也增加了要求。
最初我只需要把信息通过合适的网线传送出去就可以了,但现在,所有的信息都统一发到中间设备那里,谁发给谁的,还必须计算机设备自己说清楚。(就像写邮件一样的)
另一点要求是这个中间设备不能进行广播。
如果我们只是无脑的做转发,让所有其他计算机都接受到,把是否要接受信息的权利和判断交给接受的计算机,这既不安全也极大的浪费了网络资源。
(当然自主搭建较为安全的网络环境中,我们可以使用只是无脑转发的集线器来完成这一工作)
所以我们中间设备需要更加智能一些,只转发给需要信息的人就好了:
要做到这一点,首先我们每台设备都需要一个唯一的标识 (名字) 才行,这在每一个网络设备出厂之前,生产它的厂家就已经给它赋予一个全球唯一的 MAC 地址。
形象地说,这就像我们的身份证号码一样,具有唯一性。
另一点就是我们需要一个地方记录,哪一个 MAC 地址的设备对应着中间设备的物理连接的哪一个端口:
实际上,这就是交换机干的事情。(注意这是交换机不是路由器)
可是这张表是如何建立的呢?
最开始启动的时候,这张表是空白的。
当有数据交换发生时,交换机通过源 MAC 地址不断进行学习到 MAC 地址表中,并与端口进行关联:
交换机在 MAC 地址表中并未查询到目标 MAC 地址,因此该数据将从出了其入口接口之外所有的接口泛洪出去:
C、D 机器在收到数据后就将数据丢弃了——因为并不是发给自己的——相反 B 机器因为 MAC 地址符合,就收下了,并且需要回复数据给 A 机器。
好了,此时对于交换机来说,又是一个新的源 MAC 地址的数据发来了,记录学习的同时也查询到要去往 A 机器的目标 MAC 地址已经存在了,于是直接转发到 01
端口就好了:
就在这样不断的数据交换中,交换机不断更新维护着自己的 MAC 地址表。
好了,现在总算有了一个由交换机组建的简单网络了:
更大的网络
到目前为止,运行一切良好,可是如果是连接成千上万亿台计算机呢?
我们很容易想到,理论上,可以通过多个交换机互联来进行无限的扩展:
但是由于交换机本身没有 MAC 地址,所以数量超过一定时,每台交换机维护的 MAC 地址表将会变得无法维护——事实上也无法存储这么大数据的 MAC 地址表。
所以我们需要一种拥有独立 MAC 地址,帮助我们做转发的设备——路由器由此诞生。
路由器的每一个端口,都有一个独立的 MAC 地址。
这样就有效减少了每台设备需要维护的 MAC 地址表的数量,但同时随着网络的扩展,新的问题又出现了。
上面说到,MAC 地址就像我们的身份证一样,虽然具有唯一性,但就像人和身份证的关系一样,小范围内,我能轻易的找到你,一旦范围扩大 (或者说环境变复杂),身份证这样的信息似乎对于「快速找到你」这件事来说,帮助很小。
我们需要另外一种信息,来帮助定位——这就是 IP 地址,类似于你写在快递单上的地址一样,它能帮助我们在网络中定位到你的终端。
为了适应这一改变,我们发送的数据需要添加上更多的信息:
同样的,路由器也对应需要额外的记录 IP 地址与 MAC 地址的对应关系:
IP 地址的发明把纷繁复杂的网络世界 (主要是不同网络硬件设备) 统一规划到了一个整齐的网络中。
由于 IP 地址是跟地域挂钩的,所以在网络中找到你的设备就容易多了 (就像你买淘宝需要先填写自己的收货地址一样),我们也能够使用路由器搭建起更大的网络:
互联网
上面的网络非常接近我们所谓的 Internet,但是我们缺少一些东西。
我们不太可能在世界的每个地方之间都铺设上电缆,事实上,电话基础设施已经先于网络基础设施连接起了全世界,这是我们需要完美的电线。
为了将我们的网络连接到电话基础设施,我们需要一种称为调制解调器 (俗称"猫") 的特殊设备,这个设备可以将来自我们网络的信息转换为可由电话基础架构管理的信息,反之亦然。
(相信不少小伙伴都还记得需要「拨号上网」的日子,这就是把网络接入电话基础设施的过程,现在已经优化了)
到此,我们的网络已经连上了电话基础架构。
但我们的目的是把消息发送给我们要到达的其他网络——目前为止,这一整套网络都是基于自己的目的搭建的——为此,我们还需要把网络连接到 Internet 服务提供商(ISP)。
ISP 是管理一些特殊路由器的公司,这些路由器都链接在一起,并且还可以访问其他 ISP 的路由器。
(中国的 ISP 服务商耳熟能详:电信、网通、移动、联通、铁通等。)
因此,来自我们网络的消息将通过这么多 ISP 网络搭建的基础网络架构来传送到目标网络——互联网的基础结构也由这个网络组成。
现在经过一系列的发展,已经形成了三层 ISP 结构的因特网了:
由此,整个互联网基础架构就搭设好了。(实际更复杂)
寻找目标终端
如果要把消息发送到计算机,则必须要指定 IP 地址,它是由一系列由点分割的四个数字组成,例如:192.168.2.10
。
这对于计算机来说完全是可以的,但我们人类却很难记住这种地址。
于是我们给 IP 地址加上了一个易于理解的名字,即 域名 domain name。
例如 google.com
是作为 IP 地址 173.194.121.32
的域名使用,访问这两个地址是访问的同一服务器,这也是我们访问 Internet 的简便方法。
虽然我们通常使用域名来访问网站,但 Internet 和 Web 却并不等同,网络是基础设施,在互联网之上还有许多不同于 Web 的其他服务,例如电子邮件。
这两者的转换需要互联网的域名系统服务来支撑,我们会在后续详细说到。
另外我们可以给微信好友发送消息,也是因为我们通过微信 App 连入了腾讯的服务器,以此为桥梁互相知道了 IP 地址。
总之,我们通信必须指定 IP 地址。
后记
本篇文章,我们从最初两台互连的计算机一步一步发展到搭建起了整个互联网的基础通信架构:
- 通过交换机、路由器、调制解调器、ISP、跨洋电缆物理桥接;
- 通过 MAC 地址、IP 地址的发展让整个网络的网络设备逻辑互连;
至少对于这个复杂的 Internet 黑盒有了一定的了解和认识。
这其中涉及到很多复杂的协议 (例如保证可靠通信的 TCP/IP 协议) 和算法 (查找 IP 位置最佳路径的路由算法) 等都没有提及,本篇的重点还是网络世界中的设备是如何进行链接的。
也是使用了 PPT 制作了动图帮助大家理解,希望大家能够有所收获。
后续也会继续跟大家一起学习计算机网络的基础知识,也会尝试着跟着后端学习路线图的脚步跟着大家一起学习进阶。
(完)
参考资料
- 这就是网络吗?|闪客sun - https://mp.weixin.qq.com/s/9frk_VS8Vh0mY-rXnitKFw
- How does the Internet work? - https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_does_the_Internet_work
- 知乎 | 交换机 MAC 表的获取? - https://www.zhihu.com/question/58187639
- 百度百科|MAC地址 - https://baike.baidu.com/item/MAC地址
- 为什么有 MAC 地址还要有 IP 地址? - https://blog.csdn.net/qq_15760109/article/details/78210151
- 本文已收录至我的 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
- 个人公众号 :wmyskxz,个人独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!
非常感谢各位人才能 看到这里,如果觉得本篇文章写得不错,觉得 「我没有三颗心脏」有点东西 的话,求点赞,求关注,求分享,求留言!
创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!