我是靠谱客的博主 曾经戒指,最近开发中收集的这篇文章主要介绍1.8 计算机网络体系结构(2)—分层的必要性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 计算机网络体系结构分层的必要性。

  • 首先来看最简单的情况,两台计算机通过一条网线连接起来对于这种最简单的情况。
  • 我们需要考虑以下问题:
    • 一个是采用怎样的传输媒体。
      • 如图所示,这是我们常见的双绞线网线。
    • 另一个是在计算机上采用怎样的物理接口来连接传输媒体。
      • 如图所示,这是 RJ45 以太网接口。
    • 还有一个需要考虑的问题是使用怎样的信号来表示比特0和1。
      • 如图所示,使用这样的方波信号,低电平表示0,高电平表示1。
    • 解决了这些问题,两台计算机就可以通过信号来传输比特0或1了。
    • 我们可以将这些问题划归到物理层。
  • 这里,我们需要说明两点:
    • 第一,严格来说,传输媒体并不属于物理层,他并不包含在体系结构之中。
    • 第二,计算机网络中传输的信号,并不是我们举例的方波信号。我们之所以举例成方波信号,是为了让初学者容易理解。在学习本身就不容易理解的、概念抽象的计算机网络体系结构时,不让其他技术细节再给大家造成学习障碍。

 

  • 实用的计算机网络,一般都由多台主机构成。
  • 例如,主机 A、B、C、D、E 通过总线互连,构成了一个总线型网络。
  • 假设,我们已经解决了物理层的问题,也就是说主机间可以发送信号来传输比特0或者是1了。我们来看看,在这样一个总线性的网络上,还面临什么需要解决的问题。
    • 如图所示,主机 A 要给主机 C 发送数据,但是,表示数据的信号会通过总线传播到总线上的每一个主机。
    • 那么问题来了,主机 C 如何知道该数据是发给自己的,自己要接受?而主机 B、D、E 又如何知道该数据并不是发送给自己的,自己应该拒绝呢?
    • 这就很自然的引出了如何标识网络中各主机的问题,也就是主机编址问题
    • 大家可能听说过网卡上的 MAC(Media Access Control Address) 地址,其实它就是主机在网络中的地址。
    • 主机在发送数据时,应该给数据附加上目的地址,当其他主机收到后,根据目的地址和自身地址,来决定是否接受数据。
  • 这就又引出了一个问题,目的主机如何从信号所表示的一连串比特流中区分出地址和数据?也就是需要解决分组的封装格式问题。

  • 另外,对于总线型的网络,还会出现下面这种典型的问题:
    • 例如,某个时刻总线是空闲的,也就是没有主机使用总线来发送数据。片刻之后,主机 B 和 D 同时向总线发送数据,这必然会造成信号碰撞。因此,如何协调各主机征用总线,也是必须要解决的问题。
  • 需要说明的是,这种总线型的网络早已淘汰,现在常用的是使用以太网交换机将多台主机互连形成的交换式以太网。那么,以太网交换机又是如何实现的呢?我们将这些问题,全部划归到数据链路层。
  • 到这里,大家可能会发现:
    • 只要解决了物理层和数据链路层各自所面临的问题,我们就可以实现分组在一个网络上传输了。没错,确实是这样,但是我们每天都会使用的因特网是由非常多的网络和路由器互连起来的,仅解决物理层和数据链路层的问题,还是不能正常工作。

     

     

  • 我们来看这个例子,这是一个由3个路由器,4个网络互连起来的小型互连网。我们可以把它看作是因特网中很小的一部分。
  • 在之前的例子中,仅有一个网络,我们不需要对网络进行标识。而在本例中,有多个网络。很显然我们面临着如何标识各网络以及各网络中各主机的问题。换句话说,也就是网络和主机共同编址的问题

 

  • 相信同学们一定听过 IP地址。如图所示,这是网络 N1 中各设备的 IP 地址。
    • 该类 IP 地址的前3个十进制数用来标识网络,第4个十进制数用来标识主机。在本例中,网络N1的网络号为192、168、1,该网络上的笔记本电脑、服务器以及路由器接口的 IP 地址的前三个数应该都是192、168 、1,因为它们都在网络 N1上。而第 4 个十进制数分别为1、2、254各不相同,用来标识他们自己。同理,这是网络 N2上各设备的 IP地址。

  • 我们再来看另一个问题,源主机与目的主机之间的传输路径往往不止一条。
    • 分组从源主机到目的主机可走不同的路径,这样就引出了路由器如何转发分组的问题,以及如何进行路由选择的问题。
    • 我们将这些问题全部划归到网络层。
  • 至此,我们解决了物理层、数据链路层以及网络层各自的问题,则可以实现分组在网络间传输的问题。但是,对于计算机网络应用而言,这仍然不够。

 

  • 例如,假设这台主机中运行着两个与网络通信相关的应用进程,一个是浏览器进程,另一个是 QQ 进程。
    • 图中服务器中运行着与网络通信相关的服务器进程。
    • 某个时刻,主机收到了来自服务器的分组,那么,这些分组应该交给浏览器进程处理呢,还是应该交给 QQ 进程处理呢?
    • 这就引出了我们如何标识与网络通信相关的应用进程,进而解决进程之间基于网络通信的问题。
    • 另外,如果某个分组在传输过程中出现了误码或者由于路由器繁忙导致路由器丢弃分组。
    • 换句话说,若出现传输错,误应该如何处理。这也是需要解决的问题。
    • 我们将这些问题全部划归到运输层。
  • 至此,我们解决了物理层、数据链路层、网络层以及运输层各自的问题,则可以实现进程之间基于网络的通信。

 

  • 在此基础上,只需制定各种应用层协议,并按协议标准编写相应的应用程序,通过应用进程间的交互来完成特定的网络应用。
    • 例如,支持万维网应用的 http 协议,支持电子邮件的 smtp 协议,支持文件传送的 ftp 协议等。
    • 我们将这些问题全部划归到应用层。
  • 至此,我们将实现计算机网络所需要解决的各种主要问题,分别划归到了物理层、数据链路层、网络层运输层和应用层,进而构成了五层协议体系的原理体系结构。

 

  • 请大家思考一下这样一个问题,假设你是一名程序员,要编程解决实现计算机网络所面临的所有软件问题。
  • 那么,你是愿意将这些问题全部放在一个模块中编程实现呢,还是愿意将他们划分到不同的模块中,逐模块编程实现?相信你一定会选择后者。

 

最后

以上就是曾经戒指为你收集整理的1.8 计算机网络体系结构(2)—分层的必要性的全部内容,希望文章能够帮你解决1.8 计算机网络体系结构(2)—分层的必要性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部