计算机网络体系结构
首先,我们来看一下我们最常用的计算机网络的体系结构:OSI原理参考原型将计算机网络分成了五层,自下而上分别是物理层,数据链路层,网络层,运输层以及应用层。我记得刚开始学习的时候就很好奇,为什么要将计算机网络进行分层呢?为什么要分为这五个层呢?经过我后来对计算机网络的学习之后再回头看才发现对计网体系分层是多么的重要,对于学习者进行学习的时候是多么的方便。在这里,我将对计算机网络体系结构的五层进行逐一讲解,方便大家理清楚原因。
一:物理层的必要性
首先我们来从最简单的问题出发:
就是刚开始的两个计算机通过一条链路相连,这时我们需要考虑的主要问题:
1.采用什么传输媒体(介质)进行传输:
例如同轴电缆,双控线电缆,光纤,光缆等。
2.用户主机,交换机以及路由器等网络设备需要采用什么物理接口来传输媒体:
例如最常见的RJ45以太网接口;
3.采用什么信号表示比特0或1:
例如,使用数字基带信号,高电平表示比特1,低电平表示比特0。
我们可以把以上问题规划到物理层,严格来说,传输媒体并不属于物理层范畴。
然而实用的计算机网络,往往由多台计算机互连而成,例如,主机A,B,C通过总线互连成了一个总线型网络,假设我们已经解决了物理层的问题,那这个总线上我们还需要解决的问题:
假设主机A要给主机B发送数据,表示数据的信号会通过总线传播到总线上的每一个主机。那么问题来了,主机B如何知道这是A发送给它的数据,进而接收该数据?主机C又如何知道,这不是发送给它的,从而丢弃该数据呢?这就引出了以下问题:
二:数据链路层的必要性
1.如何标识网络中各主机(主机编址,例如MAC地址)?
主机在发送数据时,应该给数据附加上源地址和目的地址,当其他主机收到后,根据目的地址和自身地址是否匹配来决定是否接收该地址,还可以通过源地址知道是那个主机发来的数据,这就又引出了一个问题,目的主机如何从信号所表示的一连串比特流中,区分出地址和数据,也就是需要解决数据包的封装格式问题。
2.从比特流中区分出地址和数据(封装数据格式)。
3.协调各主机争用总线(媒体接入控制)。
需要说明的是,上述这种总线型网络早已淘汰,现在常用的是使用以太网交换机将多台主机互连而成的交换式以太网。在交换式以太网中,多对主机之间可以同时进行通信,而不会产生碰撞,那么以太网交换机又是如何实现的呢?
4.以太网交换机的实现(自学习和转发帧)。
而且交换式以太网有线网络很少出现误码的情况,但是无线网络很容易误码,因此下一个需要考虑的问题,就是数据在传输过程中是否出现了误码的问题。
5.检测数据是否误码(差错检测)。
当检测到数据包有误码时,是直接丢弃,然后什么也不做,又或者是想办法让发送方重传有误码的数据包,这就引出了出现传输差错如何处理的问题,根据应用需求,可分为可靠传输和不可靠传输服务。
6.出现传输差错如何处理(可靠传输和不可靠传输)。
再来看这种情况,主机A给主机B连续发送数据,然而,主机B正在处理很多其他任务,来不及取走缓存中的数据,于是,主机B给主机A发送通知,通知主机A停止发送数据,这就引出了接收方控制发送方注入网络的数据量问题,即流量控制。
7.接收方控制发送方注入网络的数据量(流量控制)。
我们可以将上述问题划归到数据链路层,到这里,我们会发现,主要解决了物理层和数据链路层的问题,就可以实现数据包在一个网络上的传输了。然而,我们的网络应用往往不仅限于在一个单独的网络上,例如,而我们使用的因特网是由非常多的网络和路由器互连起来的,仅解决物理层和数据链路层的问题还是不能正常工作,我们可以将下面的小型互联网看成是因特网中很小的一部分,我们来看看在这个小型互联网中,应该考虑的问题:
三:网络层的必要性
如图所示,由于互联网是由多个网络通过多个路由器互连起来的,因此,我们还需要对互联网中的各网络进行标识,这就引出了网络和主机共同编址的问题。
1.标识网络和网络中的各个主机(网络和主机共同编址,例如IP地址)
相信同学们一定听说过IP地址,例如这是分配给网络N1中各设备接口的IP地址,由于网络N1中的主机H1, 主机H2以及路由器R1连接网络N1的接口,它们都处于同一个网络,因此,它们的IP地址的网络号相同,在本例中都是192.168.0 ,而它们的主机号分别为1、2以及254,各不相同,用于在网络N1中唯一标识它们自己。同理,我们给网络N2中的主机H3、主机H4、以及路由器R2连接网络N2的接口,也分配了相应的IP地址,请同学们注意,给网络N2分配的网络号为192.168.1,这与给网络N1分配到192.168.0是不同的,因为它们是不同的网络。
我们再来看另一个问题,在互联网中,源主机到目的主机的传输路径往往不止一条,数据包从源主机到目的主机可走不同的路径,这就引出了路由器如何转发数据包以及如何选择的问题。
2.路由器转发分组(路由选择协议、路由表和转发表)
我们可以将这些问题划归到网络层,至此,如果我们解决了物理层,数据链路层以及网络层各自的问题,就可以实现数据包在多个网络之间的传送了。然而,对于计算机网络应用而言,仍有一些重要问题需要考虑。
四:运输层的必要性
例如,假设主机H3中,运行着两个与网络通信相关的应用进程,一个是浏览器进程,一个是QQ进程,H2这台web服务器中运行着于网络通信相关的Web服务器进程,例如Nginx,当主机H3收到web服务器中Nginx进程发来的数据包后,应将数据包交付给浏览器进程还是QQ进程。很显然,如果数据包中含有与进程相关的标志信息,主机H3就可以根据标志信息,将数据包交付给相应的应用进程,这就引出了如何标识与网络通信相关的应用进程进而解决进程之间基于网络通信的问题,例如,使用端口号来区分不同的应用进程。
1.进程之间基于网络的通信(进程的标识,例如端口号)
在之前,我们曾介绍过数据包由于误码被路由器或者用户主机丢弃,又或是由于路由器繁忙,而主动丢弃正常数据包,这些都属于传输差错,那么,当出现传输差错时应该如何处理,这也是需要解决的问题。
2.出现传输差错如何处理(可靠传输和不可靠传输)
我们可以将上述这些问题划归到运输层。至此,我们解决了物理层,数据链据层,网络层以及运输层各自的问题,则可以实现进程之间基于网络的通信。
五:应用层的必要性
在此基础上,可以制定各种应用协议,并按协议标准编写相应的应用程序,通过应用进程之间的交互来实现特定的网络应用。例如,支持万维网的HTTP协议,支持电子邮件的SMTP协议,以及支持文件传送的FSP协议等。另外,在制定协议时,还需要考虑应用进程基于网络通信时的会话管理问题和数据表示问题。
1.通过应用进程之间的交互来实现特定的网络应用
2.进行会话管理和数据表示
我们可以将上述这些问题划归到应用层,至此,我们将计算机网络需要实现的各种问题分别划归到了物理层,数据链路层,网络层,运输层以及应用层。这就构成了五层原理体系结构。
总结一下:将计算机网络分为这五层,它们分别有什么用,解决了什么问题?
物理层解决使用何种信号来表示比特0和1的问题;
数据链路层解决数据包在一个网路或一段链路上传输的问题;
网络层解决数据包在多个网络之间传输和路由的问题;
运输层解决进程之间基于网络的通信问题;
应用层解决通过应用进程的交互来实现特定网络应用的问题。
以上就是我对计算机网络体系结构划归为这五层的理解,希望大家可以从这篇文章中有所收获。共勉~
标签:问题,主机,网络,计网,传输,分层,进程,数据包,体系结构 From: https://blog.csdn.net/2301_79346828/article/details/140967105