网络为什么分层
在自然世界中,分层无处不在。大到社会阶层,小到细胞层次结构。
为什么会这样?因为复杂的事物组成复杂,完成的功能复杂,把所有的步骤都放到一个层次处理,那么这一层就会变得越来越复杂,耦合度非常高,不容易理解和对事物的解剖,就不能分析出事物的规律。
分层需要分得对。层次间的分界线虽然无须有非常清晰的界限,但一定要有内在的层次划分根据。
对于软件世界来说,某大牛(太大大牛,记不住是谁了)说过,在计算机领域,任何问题到了某个复杂的阶段,如果当前方法不能解决问题,必定可以通过加多一层来解决,如果加多一层都解决不了问题,那肯定是这个问题模型的层次已经到极限了。
通过这句话可以理解到,在计算机领域,任何问题都可以通过中间层来解决问题,现在的中间件如此就行,就是为了适应当前的快速开发和微服务架构吧。
在网络协议中的分层。不仅仅是根据负责的功能来简单的划分层次,而且层与层之间会有不可缺少的的封装与传递。对于网络模型各层的封装是根据整个网络模型从上到下的工作流程来划分的。但是,每层之间会有一定的联系,不是独立工作的。
在这里以熟悉的协议 tcp协议 分析。对于网络从上到下的流程为 应用层的网络请求经过传输层加上TCP头,经过网络层加上端口号和IP源地址和目的地址等信息,经过数据链路层加上mac头。
通过层层的封装,得到一个完整的网络包。注意:在网络中,网络包都是完整的,可以没有上层只有下层,但一定不能有下层而没有上层。这样会破坏了网络协议层从上到下的完整性。
到这里,应该可以知道,网络为什么要分层了。这是从功能需求划分,协议维护与方便升级,降低网络通信复杂性出发考虑,可以毫不客气的下定义,只有把网络分层,才会有如今的互联网繁荣世界。
上面是说了网络为什么分层,在这里我提出一个问题,为什么需要mac地址,只有ip地址可以吗?
这个问题可以得到网络层次间的联系。举个栗子,在现实世界中,在虚拟定义中,身份证号码是一个人的唯一标识(正常来说,一个人只有唯一的身份证号码吧)。如果我要邮寄一封信给另外一个人,但我只填写他的身份证号码在信封上。这样要怎么把信送到那个人手上?
假设一,各个邮局之间是有联系,并且存储下当地所有身份证对应的人的身份证地址。
那么可以这样做,在邮局的qq群吼一声,帮我查下这个身份证前几位是哪里的,然后各个邮局就开始查找,然后查到这个身份证是符合自己这个地方的。就回一声,是我这里,然后就把信根据身份证号码送过去,在整个地区吼一声,这个身份证是谁的?只能这样做啊,因为身份证号码前几位只能确定到一个地区。这样做效率就很低,或者根本找不到这个人,因为身份证上的信息只是出生当时记录下的地址而已。
在这里,引出了一个概念,相对性,身份证虽然具有唯一性,但是记录的地址是不变的,然后人是可移动的,所在地址是会变的,所以根据身份证找一个人的具体地址是不正确的。
所以在网络协议中,单单有mac地址,没有ip地址信息是不科学的。
解决上面问题的办法是,在寄信时应该加多一个信息,这个人现在的具体地址。类比网络协议,就是在mac之余增加ip。
ip地址是这个网络包的来源和去向的具体地址,当然真实用到的有公有ip和私有ip,网络包在局域网出去时经过路由转换为公有ip,然后就可以在网络世界中畅游,找到对应的目的地公有ip,然后才根据mac地址来确定唯一的目的地机器。
至此,网络的分层和联系告一段落。。。