计算机网络 网络体系结构概述一

赶紧复习一下。

分层结构,OSI七层参考模型。

 

首先补一张神图:

v2-d27ac4cb45f4069ee043059a8c7028c3_hd

一、分层结构

分层是为了细化问题,细化问题之后,就可以根据不同问题给出不同的解决方案。

举一个软件公司的例子:

1.为什么要分层(分层的优点)

如果公司规模非常小,那么可能只需要老板,产品经理,程序员三层,老板负责决策和人事,产品经理负责需求和设计,程序源负责编程测试和运维。这样下来这个公司的每个人负责的面就会比较广,对人的要求会比较高,不然就会出问题。

如果公司规模大了,那么上面三个人肯定都忙不过来了,当然要分解业务,加入更多的工作岗位。比如运维,测试,架构师之类的。把公司里的各种事务进行细化,每一种事务都会有专门的人负责解决,就能优化整个公司的运营和管理。

计算机网络就是这样一个大问题。所以才需要分这么多层,每个层次都有相对应的规范和实现。现在的网络体系结构,就是把计算机网络这个大问题分层之后的解决方案。

2.分层之后会出现的问题(分层的缺点,分层原则)

如果公司规模大了,那么沟通的成本就大了。

如果一个运维发现了问题,就要向测试落实,测试要向程序员反馈,程序员要向产品经理反映,产品经理要向老板汇报…如果一个问题需要层层上报,那么沟通的成本就变高了,导致执行效率会变低。

怎么解决这个问题呢?分层的时候要尽量精简,不要分得太过复杂,太过细化。

ATM异步传输模式就是一个好例子,因为太过复杂,很难搞清楚各层之间的联系,所以逐渐没有人使用了。而现在的常见的协议,比如OSI/RM(没有真正的实现),TCP/IP,IEEE 802都有比较好的分层结构,所以被广泛采用。

二、OSI七层参考模型

QQ截图20170211143522

上面提到,分层很重要。现在的这个七层模型就是目前计算机网络常见的解决方案。如果一个学过计算机网络的人能够准确地解释这张图中的层次是什么,为什么,怎么样,那么学得就算是到家了。

1.每个层次大概要解决什么问题

我们谈网络问题,也是在层次上谈,是哪一个层次出现了问题。比如我现在丢包了,那是在哪个层次上出问题了呢?要怎么解决?我现在路由器不通,是哪个层次上出了问题呢?要怎么解决?等等等等,都需要我们去一一分析解决。

举个路由器的例子:

我丢包了,假设是我们路由器的问题。网络分为两个大块,通信子网和资源子网。通信子网可能独立于主机之外,而路由器就属于通信子网。占据了网络层,数据链路层和物理层,其他层,路由器不一定会用到。我们从下往上看:

第一层是物理层:

物理层有很多电信号,是硬件基础,需要传输二进制信息。比如说,1代表了多少电压,0代表了多少电压。1可能是+5伏,0是-5伏。但是一般来说都是使用曼彻斯特码。从低到高跳变表示1,从高到低跳变表示0(还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示0或1,有跳变为0,无跳变为1),因为曼彻斯特码有波形性,所以能提高抗干扰能力。

第二层是数据链路层:

数据链路层最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。最主要的概念是帧。我们需要把数据通过规范进行打包,变成帧,才能更好地进行传输。

第三层是网络层:

网络层主要提供路由功能,怎么去到达对方的目的地。如果我的一个包要从广州到深圳,要怎么通过网络层进行传递呢?网络层可以进行寻路功能。

再往上看,第四层是传输层:

传输层是寻路的保证。我从广州到深圳,有无数条路。我可以从广州直接跑到深圳,也可以绕路到非洲,再跑到深圳。怎么选择一个最优路径呢?怎么保证我的包一路上没有被更改呢?怎么保证我的包一定会到达深圳?如果传输层发现这个包没有传到,或者传输过程中出现了错误,那么传输层会负责重新再传一遍。这些都是网络层做不到的。传输过程中的保证,就是由传输层的工作。

第五第六层分别是会话层和表示层:

顺带一提,这两层都在TCP/IP协议中被忽略掉了,直接上到了会话层。但是这两层还是很有用的。比如说现在的SSL安全套接字,就是通过会话层来实现的。一些远程控制,也需要会话层来实现。表示层则负责解决一些网络复杂性引起的问题。比如说高低字节序,主机是高低字节序,但是网络是低位在前,高位在后,那么就需要表示层进行协议的转化,主机和网络才能进行通信。

第七是应用层:

应用层有很多种应用,比如email、telnet、http,主要负责资源的应用,提供网络任意端上应用程序之间的接口。

如果确实是路由器出问题了,那么问题就出在物理层/数据链路层/网络层上。寻找问题即可。

从上七层可以看到,每一层都是为了解决一个专门的问题而存在的。每一层都涵盖了对应问题的所有可能性,给出了每一种解决方案。

2.简单的案例

举一个发邮件的例子:

我想从主机A发送一个Email到主机B,要怎么实现?

从表面上看,我们只需要点开邮箱,然后选择收信人,写好Email之后发送就可以了。

从原理上说:

发送邮件,需要从上至下在我的主机A中经过一到七层中的步骤,拆分打包成数据包,把所有数据包通过网卡发送给路由器,然后路由器再去寻址,在发送到主机B中,主机B进行拆包和组合,得到邮件信息。

从上往下说:

在应用层,可能需要进行规范Emai的语法,字体,语法,编码等属性。因为协议是对等的,主机B上也要通过主机A指定的规范来解析Eamil。不然就需要人工进行解码了。

在表现层,可能需要根据不同的硬件把他们的字节序转换成统一的网络所认可的字节序。

在会话层,可能会对传输的信息进行加密。

在传输层保证把信息可靠地传输出去。如果在传输过程中,包丢失或者损坏,一旦监测到有问题,传输层会要求进行重传。

在网络层中,如果从广州发送Eamil到深圳,路由器之间需要不停的沟通,不停地用最短路径算法来构造视图,从而减少传输过程中的跳数,保证最短路径内到达。

在数据链路层中,负责把数据打包成帧,然后在链路层中传输。

在物理层中,负责信息具体经过哪个物理接口进行传输。

从物理层出去后,就要经过网关。

网关出去之后,可能要经过各种交换机,可能根据协议前往下一跳的路由器。协议保证数据传输破环(不在环路中)、有效(物理限制、路径、价格、政治等因素)。

经过整个传输过程,到达主机B后,就会根据每层的打包信息一层层拆包,进行重组。最后得到信息。

3.低效的设计结构

以上整个流程中经过了拆封包和传输,如同下图:

1

这个封包的过程中,每一层都需要带上相应的协议头。如果我们发送的数据少,比如50个字节,那么层层加上的协议头可能也要占50个字节,那么传输的效率就只有50%。

封包多,那么拆包也要相应的增多。也是比较耗费时间的。

所以说网络中有轻型协议和重型协议之分。TCP/IP算是比较重型的协议(头长度相对比较大,传输效率比较低)。

4.会遇到的一些问题

数据传输到路由器时,万一路由器坏了,怎么办?万一存储转发中拥塞了,怎么办?我怎么去判断最短路径?

除此之外,当出现各种各样的问题时,我们怎么检测他,怎么解决他,怎么绕过他,怎么保证包能够到达,怎么让整个传输效率变高。这都是需要解决的。这些问题都存在复杂性,这就是计算机网络之所以是一门学科的原因。

三、总结

计算机网络,其实是通讯原理和计算机软件的结合。如果要从事一些网络方面的变成编程工作,就要对协议有所掌握,更要对计算机网络有了解。

还是需要认真恶补一系列的知识。

发表评论

电子邮件地址不会被公开。 必填项已用*标注