本文为掘金社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!
长歌吟松风,曲尽河星稀。
前言
我发现绝大数人和我一样对网络原理充满困惑,不是因为不好理解,而是它往往都是直接告诉你它是什么,但它并不告诉你为什么要这样。
而我让离网络最近的一次距离是在一个偶然停电的深夜,周围没有了各种电器的轰鸣声,一下子整个世界格外安静下来。于是我合上电脑躺在床上,凝望伸手不见五指的天花板,就像凝望着深渊,深渊也回望我。
我在想,有一些技术,人们即便每天都在使用,也未必能意识到它的存在。
网络原理就是如此啊!
上一刻是跨越空间游荡的众狂欢,这一刻呢?
没有网的我,是一座孤岛。
所以我睡着了(当然没有啦)。
所以让我思考为什么网络,为什么是这样的时候;恰不是有网的时候,而是停电的时候。
所以如果是你去创造一个计算机网络,你会去怎么设计?
所以如果没有网络了呢?我们要思考的就不是网络是什么,而是网络为什么要这样?
当镜头拉回没有网络的时候,如果是你来创造整个计算机网络,你会去怎么设计?
从单机到互联:本质是通信问题
我想最先的一个问题,一定是两台相互独立的计算机,它们是怎么互联的?
我们都知道计算机里头就是电路板、晶体管等组装起来的电子设备,无论是图像的渲染,数据处理,还是远程共享,归根结底都是0
与1
的信号处理。信息存储和逻辑计算的元数据,只能是0
与1
的二进制。
所以如今再复杂的计算机,归根结底的数据载体的都由01
二进制所进化的;那么问题来了,你怎么样先让两台独立的计算机进行互联?
我想最简单粗暴的方式就是用一条电缆将两台机器连接起来,通过电的物理特性电平,高电平和低电平两种电平分别代表0
和1
二进制数字,那么计算机的数据载体0
和1
就可以通过电信号的形式在电缆中传送。
所以计算机的接收端只需关注采样电平值,能够区分出高电平和低电平那么自然就可以实现了;而通过电的高低电平表示的01
,在通信原理中实际上就是数字信号。
(你看这设计得,一颗剽悍的种子都觉得实在是妙啊)
所以两台独立计算机互联只不过是结果;真正的是两台独立的计算机之间是怎么建立通信的?才是问题的本质!
而通信的物理媒介可以是铜线、光纤、还是无线的Wifi,只要可以在物理层表示0
和1
二进制的传输载体,那么计算机就可以进行通信,而通信的目的就是传送数据(也就是文字、语音、图像、视频等)。
于是从每一台相互独立的计算机都被称为单机,到后来电脑之间可以相互联系,我们称之为互联。
传输方式&结点
数据传输方式:电路交换、报文交换、分组交换
电路交换
从上面我们知道,最简单的连接两台相隔遥远的计算机的办法是分配一条专用通信(也就是一条专用的物理通路),而这就是电路传输方式。不过不管是从早期的电路方式,还是逐渐演化到报文,还是分组的方式;实际上只是计算机相互数据传输方式的不同,而这种相互传输数据被称为交换,也就是彼此把的数据给对方。
在电路交换中如果多台计算机之间互联,两两之间互联都需要拉线,那需要的电线也太多了。(所以这种方式自然是不现实)
转发&标识思想
于是就来到了两个思想,一个是转发,另一个是标识;它们是网络设计的核心问题,因为它们是一个网络扩大的基础。
转发的思想
为什么要用到转发,而转发又是什么?
你想,在电路交换除了线多,且如果是相隔远距离的两台计算机之间想用一根线连接,那线也太长了(就像用一根网线想连接整个校园里的计算机是不可能的)。
转发的思想其实很简单,试想我们有A、B、C
三台计算机,A
和C
并没有相连,而是经过了B
。那么A计算机
可以不可以先发到B计算机
,再让B计算机
帮我们转发C计算机
呢,这个其实就是一个转发的思想。
标识的思想:MAC地址
而标识的思想是,如果只是两台计算机,那么我们很清楚通信双方就是A
在和B
之间的通信(也就是相当明确数据是谁发送,以及是谁接收)。
但如果同时有多台计算机互联通信,那么就不知道是谁发送的数据,以及是谁来接收了。
所以为了解决这个问题,就需要为每台计算机设定唯一的物理地址(就像每一个人都有唯一的身份证号一样),而计算机能联网是因为网卡,所以就在网络中唯一标识一个网卡的物理地址。也就是熟知的MAC地址(Media Access Control Address)。
所以为什么说转发和标识是网络扩大的基础,因为它们把计算机互联的距离拉长了。
集线器(Hub)
所以当奠定了转发和标识,那么我们可以继续往下设计,那么要让每一台计算机既能够方便和另一台计算机相隔远距离的通信,又要避免计算机之间两两相连的电线太多。那么如何做到呢?
黑暗中仿佛传来一个声音,计算机工程领域的任何问题都可以通过增加一个中间层来解决。
所以我们可以加多一个中间设备,也就是集线器(Hub);来将互联的计算机都连接到集线器,那么集线器就即可用来做转发,也可以不用电路交换式的两两相连,从而减少了计算机的线路连接数量,如下图所示。
集线器是一层设备,(对应OSI网络模型,集线器就是工作在物理层),集线器将每台计算机之间连接在一起,所以它的每个接口仅仅简单地转发比特,意味着收到即转发(也就是收到1
转会发1
,收到0
就转发0
)。
不过,虽然在每台计算机中间加了一层集线器解决了电路交换中通信线路过多,以及不能远距离通信的问题。但集线器在链路上同时只能有一台设备发送数据。例如,A计算机
发送数据给D计算机
的这一瞬间只能有一台计算机发送数据。
那么当计算机规模不断扩大,就会导致整个链路的使用率就很低,如下图所示。
而这要追溯到电路交换的数据方式,电路交换是经过 “建立连接(占用通信资源)→通话(一直占用通信资源)→释放连接(释放通信资源)” 三个步骤的交换方式,如下图所示。
你会发现和我们的电话通信很相似,那是因为电话系统其实就是通过电路交换方式运作的。
而电路交换虽然可以保证双方通话时所需的通信资源不会被其他用户占用。但电路交换在通话的两个用户端会始终占用端到端的通信资源。
所以设想一下这样的场景,你和你的女朋友在深夜通话,不久就传来你断断续续粗犷的呼噜声;这种正在输入和编辑一份待传输的数据时(通俗说是占线);如果只是你和你女朋友两人用,那么可以说是畅通无阻。
但是一旦有其他人,就会造成一直阻塞,你的这种“占线”可以说是占用通信资源,而该通信资源又不能被其他计算机利用,那么这条通信线路资源就白白被浪费。
于是网络又进一步演化出了新的数据传输方式。
不过,电路交换方式也是好处的,因为只有一条专属的通信线路,所以简单可靠,可以无需共享,而且最大限度地随意使用。例如一些政府、银行等机构依然会使用这种传输方式。
交换机
新的数据传输方式出现,总会以新的技术为突破。因为集线器太笨了,只是无脑的做数据发送,它将每一通信都发给所有主机,在各主机之间交流频繁时会造成网络的拥堵乃至瘫痪。所以我们进行升级,进一步使用的中间设备是交换机,交换机属于二层设备(对应OSI网络模型,也就是在数据链路层)。
交换机比起集线器,实现了数据的全双工的通信,例如:A计算机在发送的时候,同时也可以进行数据的接收,在这个链路上的数据也不再会产生冲突。
相比集线器,交换机是怎么实现转发的呢?
我们知道集线器收到即转发,意味着集线器其实是没有记录每台设备的标识的,那么就是将数据广播出去,让计算机设备自己判断消息是不是属于它自己的,所以集线器简单的同时,工作效率也很低。
而交换机内部维护着一张MAC
地址与网线端口的对应表。当接收到数据时,会将相应的端口号码和发送方MAC
地址写入表中,这样就可以根据地址判断出该设备连接在哪个端口上了。而交换机可以不用进行广播,而是根据这些信息判断应该把数据转发到哪里。
什么是单工、半双工、全双工的定义如下。(有没有被一颗剽悍的种子暖到了)
- 单工:只能有一个方向的通信而没有反方向的交互。
- 半双工:通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。
- 全双工:通信的双方可以同时发送和接收信息。
报文交换
那么为了解决电路交换的“占线”问题,报文交换将每个用户发送的数据拆分成多个更小的部分数据,这些更小的数据携带着标识,起始点和目的地。那么不管是多少用户是否占着线,就需要存储-转发,只要拼凑汇聚成一个完整的数据。也就是报文,包含了将要发送的完整的数据信息;那么也就达到传输的目的。
(通俗说,好比卧室那张硕大的床,如果可以进行拆卸,一个个小件的进行搬运,只要最终在卧室里能拼装完整,那么即避免了挡住行人通行道,也防止了一不小心卡在房门。)
所以报文交换相比于电路交换,不需要一条专用通信双方线路,而是可以随时发送报文,通信双方不固定占有一条通信线路,而是在不同的时间段的占有这条物理线路。
如果说电路交换是以电话系统的运作方式,有一条专有线路,从源点直达终点。那么报文交换就像邮政系统一样,采用了存储转发的方式,因为有记录站点的表格(物流信息),所以每个站点都知道下一站信件怎么传,即使因为极端恶劣天气,只要转发到其他可以抵达站点,那么通信也更加可靠和容错。(有没有发现其实跟快递一样,会将物流相近的快递集中存储,再转发到可以抵达的站点)
报文交换解决了电路交换的占线问题,但是报文交换没有限制大小会有延时问题,所以网络又继续演化出新的传输方式。
分组交换
分组交换的思想源于报文交换,也采用存储转发的原理,但不同的是分组交换的最小信息单位是分组,而报文交换则是一个个报文。分组加速了数据在网络中的传输,一个分组的存储与前一个分组转发可以并行,所以本质分组交换也是存储转发,可以说让报文更加有组织,转发也更加迅速。
路由器
路由器是三层设备(对应OSI网络模型在网络层),所以路由器所连接的范围更广,网络和网络之间的连接就是通过路由器;计算机所发出的网络数据,都是先经过集线器和交换机进行区域的汇总,然后才转发给路由器;这样一步步连接到互联网的。
所以路由器跟交换机不同的是,在路由器里维护的是路由表,在路由表中最重要的是目的网络地址(也就是IP)和下一跳地址。所以路由通过根据目的网络地址来确定下一跳路由器。最终找到目的主机所在目的网络上的路由器,只到最后一个路由器时,才试图向目的主机进行直接交付。
而路由器也是实现分组交换的关键构件,负责转发收到的分组,是网络核心部分最重要功能。
IP地址
我们知道MAC是每个计算机的标识,那么在每个网络中也要去标识,那么就是IP地址。IP地址(Internet Protocol Address) 指的是互联网协议地址。IP地址在整个互联网范围内是唯一的。MAC跟IP不同的是在物理和数据链路层,而IP是网络层。但IP地址既可以标识网络也可以标识设备。
所以 IP地址指出所在何处,路由则是如何到达该处。
但为什么有了 MAC地址 还需要 IP地址?
因为世界存在着各式各样的网络,它们使用着不同的硬件设备。而如果要是这些相互不同的网络要互相通信,那么就意味着要面对因为不同硬件设备而带来的硬件地址转换上的复杂工作。
所以由用户或设备主来完成这项工作几乎是不可能的事。但如果可以让所有用户或者设备主共同遵守一种统一的方式,那么就可以把这个复杂问题解决了。
结点&链路(node): 从计算机、集线器,交换机、路由器
而我们从一个计算机到另一个计算机的一段物理线路就是一条链路,而计算机就是网络中的一个结点;网络结点可以是计算机,集线器,交换机或路由器等。
所以从计算机之间的互联到集线器,再从集线器到交换机,而后到路由器。你会发现网络的一个规律,网络通过不同的结点,将覆盖到更大的范围。(网络像生物出于本能的演化一样,将触角伸向每个距离)
网络的边界:个人区域网、局域网、城域网、广域网、互联网
个人区域网(PAN)
个人区域网PAN(Personal Area Network)
,顾名思义可以是个人使用区域范围内的电脑等设备,用无线连接起来的网络。所以范围相对很小。
局域网(LAN)
局域网LAN(Local Area Network)
,在地理上局限的范围,如1km左右。但可以将多个互连的局域网,来覆盖校园或者企业中。所以局域网也被称为校园网或企业网。
城域网(MAN)
城域网MAN(Metropolitan Area Network)
,城域网的作用范围可跨越几个街区甚至整个城市,距离约也可以为5到50km,所以一般也是一个城市。
广域网(WAN)
广域网WAN(Wide Area Network)
范围通常为几十到几千公里,可以通过长距离运送主机所发送的数据,所以可以跨越不同国家,也是互联网的核心部分。
互联网
当你蓦然回首,把许多计算机连接在一起形成了计算机网络,而把许多网络连接在一起就构成了互联网;一个覆盖范围更大的计算机网络,覆盖范围可以是全球。
最后
而处于网络之中你是很难领略网络妙趣,但如果你仔细回味,此刻你在阅读我的这篇文章里面所包含的文字,图像时;即使我和你相距数万里之外,也能这么畅通的交换各种信息,也许这才能领略人通过计算机网络,打破人处于现实物理空间限制的魅力。
此篇《如果把网络原理倒过来看,从无到有,一切都清晰了(上)》上篇已经完成,但只是上篇,意味着未完待续。从想写下这篇是春天,写完已是秋天。
时间飞逝,春去秋来,花落花开。
我是一颗剽悍的种子,怕什么真理无穷,进一寸,有进一寸的欢喜。感谢各位朋友的:关注、点赞、收藏和评论 ,我们下回见!
创作不易,勿白嫖。
一颗剽悍的种子 | 文 【原创】
今天的文章如果把网络原理倒过来看,从无到有,一切都清晰了(上)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15118.html