今天这篇文章不打算用枯燥的公式和代码来轰炸你。相反,我想邀请你放下畏难情绪,随我一起推开那扇看似厚重的大门,以最直观的视角,去初次感受 Linux 网络这颗“心脏”的跳动规律。让我们从宏观出发,先看清这片波澜壮阔的连接图景。

一.计算机网络背景

在现实世界中,我们人之间是需要协作的,而我们同样也需要使用计算机来完成工作,我们人直接可以直接面对面来进行通信,交流,合作来完成一些工作。 但是计算机呢?计算机是人的工具,人之间既然需要协作,那么计算机之间也要协作,那么计算机之间又该如何进行协作呢? 答案当然就是我们今天的主题:网络。在计算机的发展历程中,从它的诞生,再到操作系统,最后到计算机网络技术,这些技术的诞生都是源于人们日益增长的需求而出现的,所以:这个世界产生计算机网络技术,是必然的结果!!!

那么下面我们来简单了解一下网络的发展过程:

那么最开始呢,每个计算机之间相互独立,每个计算机中都存储着不同的数据,在这个阶段我们想要实现计算机之间的协同工作,需要用到类似:软盘等硬件,将这种硬件插入到不同的电脑中,借此来完成数据的共享,但是这种方式显然太麻烦了。

后来就有了最初的网络,多个计算机中的数据可以通过网络上传到服务器中,不必再靠硬件来实现计算机之间数据的共享,方便了许多。

再到后来计算机的数量更多了,此时又出现了新的设备:交换机和路由器,这些计算机通过这些设备来完成协作,这种方式我们就叫做:局域网LAN。此时的技术就已经能支持不同地区的计算机之间的通信了。

最后将多个局域网合并在一起就形成我们今天的:广域网WAN,它所覆盖的范围就更广泛了,甚至可以跨越国家。

二.初识协议

"协议"简单理解就是一种约定,什么意思呢?

以上图为例子,我们知道计算机之间的传输介质是光信号和电信号,通过"频率"和"强弱"来标识0和1这样的信息,那么此时产生的问题就是:你的计算机将信息传给另一个计算机,它怎么知道你传的信息是什么意思呢?

所以这之间要有一个约定,比如我传1010是什么意思,1111是什么意思等等,我们之间要约定好,也就是需要约定好双方的数据格式,这个约定我们就叫做:协议。

但是此时又有一个问题:能够通信的两台计算机,只约定好协议就可以了吗?

就比如上面,我们只约定好我们传递的信息只能是0和1,但是你用频率表示01,我用强弱来表示01,就好比我用中国话,你用英语,虽然大家遵守的是一套通信规则,但是只是定好了基本的协议,也是无法正常通信的。

所以一份完善的协议,需要我们去制定更多更细致的规则,并让参与的人都要遵守,就比如:

1.计算机生产厂商有很多 2.计算机操作系统也有很多 3.计算机网络硬件设备同样有很多

所以为了让这些不同厂商生产的计算机能够互相通信,就需要约定一个共同的标准,大家都要遵守,这就是:网络协议。

但是网络协议也不是什么人都能够来制定的,一般是具有定制协议或者标准的资格的组织或者公司或者具有江湖规则的组织或者公司。

就比如在5G领域,华为就有资格来制定网络协议,它在这个领域是具有很大的话语权的,对应的就是上面的公司。

三.协议分层

3.1软件分层的好处

协议本质也是软件,在设计上为了更好地进行模块化,解耦合,也是被设计成为层状结构的。

这在我们日常写的代码中其实也能够体现分层的思想,就比如我们写的基类和子类,基类就是一层,而子类又是一层,我们要想让基类的某个函数实现不同的功能,只需要修改子类即可,不需要修改基类。

而对于软件分层的好处,下面我们通过一个简单的例子来去理解:

我们日常在打电话时,在语言层面我们都是用汉语在沟通,但是在通信设备层即电话机,它们可不是用汉语来进行沟通的,它们有自己的协议,通过遵守协议的内容,他们就能知道对面的电话机传来的信息是什么意思,进而对它进行解码,转化为我们能听懂的汉语。 在上面的例子中,我们的"协议"只有两层:语言层,通信设备层。可以很明显的看到,不同的层级,区别还是很大的。 而我们即便在通信设备层和语言层进行变更,只要遵守相应的协议,并不会影响我们的通信,这里我们就能很明确地感受到分层可以实现解耦合,让软件维护的成本更低

3.2OSI七层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型成为开放式系统互联参考模型,是一个逻辑上的定义和规范。

这就是OSI七层模型的各个层级的名称及功能简介,但是站在网络的角度,OSI定的协议七层模型其实非常完善,但是在实际操作中,会话层,表示层是不可能接入到操作系统的,所以在工程实践中,最终落地的是五层协议。

对于上面的各个层级,我们现在还理解不了,之后通过后面的学习,我们才能慢慢了解,目前我们简单了解一下即可。

3.3TCP/IP五层(或四层)模型

既然最终只能落地五层协议,那么就有了现在的TCP/IP五层模型,TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

上面就是TCP/IP分层模型的示意图,它将应用层,表示层和会话层合并为应用层,对于TCP/IP分层模型我们现在对于它的每个层级也不理解,所以这里我们同样了解一下即可。

四.再识协议

4.1为什么要有TCP/IP协议?

我们要知道,其实,在没有网络的时候,即便是在单机的情况下,计算机内部也会有自己的协议,就比如:即使没有网络,我们插上U盘,电脑也是能够识别我们的U盘的,这就与电脑中的USB协议有关。

但是这个时候的计算机网络的内部通信的距离也只是局限在计算机的内部走线,距离也就只有几米甚至更短,而我们现在的网络通信,距离可是以公里为单位,短则几公里,长则几千公里,那么距离变长就必然会引发新的问题,我们下面来看:

就比如上面的主机A要向主机C发发送信息,那么因为距离变长了,就需要考虑上面的几个问题:

1.我要发送数据给主机C,得先发送到路由器R,怎么发? 2.网上这么多主机,怎么定位并找到主机C呢? 3.如果我的数据发出去,中途丢失了怎么办? 4.我们发送数据并不是目的,目的是让接收数据的另一台主机知道怎么处理这部分数据,怎么去使用,所以该怎么办?

从上面的几个问题中我们就可以看发现,这几个问题本身就是具有层次性的,它们所涉及的知识点不止是一方面,所以有了新的问题就要有新的解决问题的方案。

TCP/IP协议就是一种解决网络通信的具体解决方案,而TCP/IP协议就是参考OSI七层模型而设计出来的,OSI七层模型就相当于一个模板,所以根据这个模板而设计出来的解决网络通信的具体解决方案并不只有TCP/IP协议这一种,还有其他的解决方案。

4.2TCP/IP协议与操作系统的关系

我们可以通过这张图来观察两者之间的关系。

TCP/IP协议的这五层模型我们通常将其称为:网络协议栈,既然我们要实现网络相关的技术,就要根据这五层模型在我们的计算机中进行实现,不同的模型对应着电脑中不同的部分。 就比如:网卡这种硬件肯定要在底层硬件这部分进行实现,应用层是面向用户的所以肯定要在最上层进行实现。 而这种对应关系是每一个操作系统都要遵守的标准,不仅仅是对应关系,里面每种协议栈都要根据标准来进行实现。所以此时我们就能理解为什么不同的操作系统之间是能够进行通信的了,正是因为上面的原因,而这也是互联网的基础!!!


 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐