当前位置: 首页 > article >正文

【计算机网络】窥探计网全貌:说说计算机网络体系结构?

标签难度考察频率
综合题⭐⭐⭐60%

这个问题在计算机网络知识体系中是一个比较重要的问题,只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。

在回答这个问题时,笔者认为有几个比较重要的点:

  • 首先一定要分清楚前置条件,明确面试官问的是 OSI 模型还是 TCP/IP 模型。
  • 注意各层的顺序一定要是对的。
  • 比较清晰地回答出各层级的功能以及之间的协作关系。
  • 最好回答出各层级中常见的协议或者特点。

系统性学习过计算机网络的同学应该都能找到这个问题的一个非常明显的“坑”在哪,那就是在讨论计算机网络体系结构时,我们往往会根据模型不同给出不同的分类情况,比如 OSI 七层模型、TCP/IP 四层模型等。

笔者就曾经在这个地方吃过亏,当时并不是很清楚这几种分类,在被问到网络分层问题时一律回答的都是五层,在后面学习了之后才发现这个重要的问题。

该问题其实还可以表示成以下几种情况:

  1. OSI 七层模型是什么?都有哪七层?各层的功能是什么?
  2. TCP/IP 五层模型是什么?都有哪七层?各层的功能是什么?
  3. 五层体系结构是什么?都有哪七层?各层的功能是什么?
  4. OSI 模型有几层?TCP/IP 模型有几层?
  5. 了解每一层对应的协议吗?
  6. ……

这个问题的变式还有很多,但是只要掌握了整个问题的核心内容,无论怎么变化回答的逻辑是不会变的。

下面笔者将从 TCP/IP 五层模型 出发,详细讲解各层级的功能、不同模型中各层级的区别以及在面试时应该如何回答这个问题。

为什么要分层?

在正式学习各层级之间的功能之前,我们先来搞明白这样一个问题,那就是为什么要分层?为什么不能把所有的功能集中到一起,这样不是更简单省事吗。

其实不是这样的,把所有的功能集中到一起在初期开发的过程中会给我们一种简单省事的错觉,但是在后期工程变大以及维护时就会发现其中的弊端,内容过多导致在出现问题时不好修改,出现牵一发而动全身的情况。

简化系统设计

由于计算机网络是一个极为复杂的系统,设计到众多的硬件、软件和通信协议。将其划分为若干个层次,每个层次专注于特定的功能,使得网络系统的设计、实现和维护变得更加简单和清晰。例如,在互联网中,我们不需要在设计应用程序时考虑底层的物理传输细节,只需要关注应用层的功能实现,底层的工作由其他层次负责。这样,不同层次可以独立进行设计和改进,降低了整个系统的复杂度。

实现模块化和分工协作

分层结构使得网络系统可以按照功能模块进行划分,不同的层次由不同的专业团队或人员负责开发和维护。每个层次都有明确的接口和功能定义,层与层之间通过标准的接口进行通信。这就好比汽车制造,不同的工厂分别负责生产发动机、底盘、车身等部件,然后通过标准的接口进行组装。例如,网络设备制造商可以专注于开发物理层和数据链路层的设备,如网卡、交换机等;软件开发商则可以专注于应用层和传输层的软件开发,如浏览器、电子邮件客户端等。这种分工协作提高了开发效率和系统的可维护性。

提高系统的可拓展性

在计算机行业中,我们常常会提到这样一句话:“计算机科学领域的任何问题,都是可以通过增加一个间接的中间层来解决的。

随着技术的发展和用户需求的增加,网络系统需要不断进行扩展和升级。分层结构使得系统的扩展变得更加容易,只需要在相应的层次上进行修改或添加新的功能,而不会影响到其他层次的正常运行。例如,当出现新的网络应用需求时,只需要在应用层开发新的应用程序,而不需要对底层的网络结构进行大规模的改动。同样,当网络传输技术发生变化时,只需要更新物理层和数据链路层的设备和协议,上层的应用程序可以继续正常运行。

促进标准化

分层结构为网络协议的标准化提供了良好的基础。每个层次都有明确的功能和接口定义,不同的厂商可以根据这些标准来开发自己的产品,从而保证了不同厂商的产品之间的兼容性和互操作性。例如,国际标准化组织(ISO)制定的开放系统互连(OSI)参考模型,为计算机网络的标准化提供了一个通用的框架。不同的厂商按照这个标准来开发网络设备和软件,使得不同的网络系统可以相互连接和通信。

几种分类方式

计算机网络体系结构通过复杂的网络通信分解成不同的层次,来标准化交互的过程。常见的模型包括 OSI 七层模型TCP/IP 四层模型五层体系结构

  • OSI 是理论上的网络通信模型,这模型很牛逼。但是现在基本是存在教科书的啦,学习网络的同学都是知道有这个模型,实际情况使用很少的。
  • TCP/IP 是实际应用层面上的网络通信模型,在日常工作中接触最多的是上两层,偶尔会去触碰网络层。网络接口层不是软件开发工程师的工作范围。当然如果是一些专门的网络安全部门,网管等岗位,下面几层就是非常熟悉的。
  • 五层结构是为了方便理解和记忆。

应用层

最上层的,也是我们能直接接触到的就是应用层(Application Layer)

应用层时计算机网络与用户交互的接口或界面,直接向用户提供服务。

我们的电脑或手机使用的应用软件都是在应用层实现的。那么,当两个不同的设备的应用需要通信的时候,应用九八应用数据传输给下一层,也就是传输层。

应用层只需要专注于为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等。

所以很明了,应用层解决的问题就是如何为用户提供服务,以及提供高效、可靠、满意的服务。应用层是不用去关心数据是如何传输的,就类似于我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关心快递是如何被运输的。

而且应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。

总结下应用层是为用户提供服务接口或者界面,同时要解决服务的高效、可靠、满意。

在 OSI 七层模型中,应用层和传输层之间还会有下面两个层级,即表示层和会话层。

表示层

表示层要解决的问题就是确保一个系统发送的信息可以被另一个系统的应用层读取。它负责的是数据的转换、压缩和加密

例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。

会话层

管理用户的会话,控制网络上两节点间的会话和数据交换的管理。它负责建立、维护和终止会话

通过传输层(端口号:传输端口接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是 IP 也可以是 MAC 或者是主机名)。

传输层(段)

应用层的数据包会传给传输层(Transport Layer)是为了给应用层提供网络支持的。

负责端到端的通信,是面向网络通信的第三层和面向信息处理的高三层之间的中间一层,起到桥梁作用。很明显了,传输层要解决的问题就是端到端的传输问题

在传输层会有两个传输协议,分别是 TCP 和 UDP。

TCP 的全称为传输控制协议(Transmission Control Protocol),大部分应用使用的正是 TCP 传输层协议,比如 HTTP 应用层协议。TCP 比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。

UDP 相对来说就很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高。当然,UDP 也可以实现可靠传输,把TCP的特性在应用层上实现就可以,不过要实现一个商用的可靠 UDP 传输协议,也不是一件简单的事情。

应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据包大小超过 MSS(TCP最大报文段长度),就要将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在 TCP 协议中,我们把每个分块称为一个 TCP 段(TCP Segment)。

当设备作为接收方时,传输层则要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口。

比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号

由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

思考一个问题:网络层不是已经把数据转发到对应的主机了吗,为什么还要需要传输层?

位于两台网络主机间的真正数据通信主体不是这两台主机,而是两台主机中的各种网络应用进程,也就是应用程序。一台主机上有很多应用程序,很多应用程序都在进行网络通信,这时候就必须使用到传输层的知识去解决了。

怎样完成端到端的传输呢?分为两个步骤:

  • 一是虚拟传输连接的建立(此处仍仅针对面向连接的传输层协议);
  • 二是源端用户数据沿着传输连接传送到目的端;

在整个数据传输过程中,传输层服务需要完成以下8个方面的基本功能:传输层寻址、传输连接建立、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复

总结下,传输层主要是为了解决端到端(这里的端到端指的是进程到进程)的通信,起到网络通信桥梁作用。

网络层(包)

网络层也被称为中转层,是网络体系结构中非常重要的一层,在技术上又是非常复杂的一层,因为它既要解决不同网络的节点间通信的路由和协议识别问题,又要通过路由选择策略解决网络拥塞问题,尽可能提高网络通信的可靠性。

网络层解决的主要问题是,从A主机把数据运送到B主机是走高速呢、飞机呢、还是火车呢或者是多种混合的方案呢。一句话就是,网络层关注的是如何将分组从源端沿着网络路径传送到目的端(这个端指的是主机不是应用程序)。

为了实现这个目标,网络层必须知道通信子网的拓扑结构,并且在拓扑结构中选择适当的路径。同时网络层还必须谨慎地选择路由路径,以避免发生某些通信线路和路由器负载过重,而其他线路和路由器空闲的情形。

总结下网络层主要是为了解决不同网络之间数据传输和转发问题。

数据链路层(帧)

物理层中也有许多规程或协议,但它们是用来构建物理传输线路、建立物理意义的网络通信,不是用来控制数据传输的。

设计数据链路层的主要解决的问题就是在原始的、有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以便向它的上一层(网络层)提供高质量的服务。一句话总结就是控制数据传输

总结下,数据链路层是为了解决数据传输的控制作用

物理层 (比特流)

物理层位于各计算机网络体系结构的最底层,主要负责在物理介质上为数据链路层提供原始比特流传输的物理链接

物理层解决的问题就是数据传输。上面的所有层都是封装数据和管理,物理层是传输数据的唯一出口,所有数据到达物理层都会变成二进制的载波信号。

总结下,物理层就是真正传输数据。

如何回答?

OSI 七层模型

OSI(Open System Interconnection)七层参考模型是一个网络架构模型,有网络标准化组织(ISO)提出,用于描述和标准化计算机网络的功能和过程。这七层从低到高分别是:

  1. 应用层:最靠近用户的层,负责处理待定的应用程序细节。这一层提供了网络服务与用户应用软件之间的接口。例如:Web 浏览器、FTP 客户端和服务器、电子邮件客户端等。
  2. 表示层:确保一个系统发送的信息可以被另一个系统的应用层读取,它负责数据的转换、压缩和加密。例如:确保数据从一种编码格式转换为另一种,如 ASCII 到 EBCDIC。
  3. 会话层:管理用户的会话,控制网络上两节点间的会话和数据交换的管理。它负责建立、维护和终止会话。例如:建立一个会话令牌,以便在网络上的两个节点之间传递。
  4. 传输层:提供端到端的通信服务,保证数据的完整性正确顺序。这一层包括 TCP 和 UDP。
  5. 网络层:负责在多个网络之间进行数据传输,确保数据能够在复杂的网络结构中找到从源到目的地的最佳路径,这层使用的是 IP(Internet Protocol)协议。
  6. 数据链路层:在物理连接中提供可靠的传输,负责建立和维护两个相邻节点的链路。包括帧同步、MAC(媒体访问控制)。
  7. 物理层:负责在物理媒介上实现原始的数据传输,比如电缆、管线和无线信号传输。设计的内容包括电压、接口、针脚、电缆的规格和传输速率。

TCP/IP 四层模型

TCP/IP 四层模型是互联网的核心,定义了一系列协议和标准,确保设备可以可靠地进行数据传输。

  1. 应用层:直接面向用户和应用程序,提供各种网络服务。它包含了用于特定应用的协议和服务,如 HTTP、FTP、SMTP 等。
  2. 传输层:提供端到端的通信服务,确保数据的可靠传输。它负责分段数据、流量控制、错误检测和纠正。常见的传输层协议有 TCP 和 UDP。
  3. 网际层:或者叫网络层,负责在不同网络之间路由数据包,提供逻辑地址(IP 地址)和网络寻址功能,用于处理数据包的分组、转发和路由选择,确保数据可以从源端传输到目的端。
  4. 网络接口层:或者叫链路层,负责奖数字信号在物理通道中准确传输,定义了如何在单一网络链路上传输数据,如何处理数据帧的发送和接受,包括物理地址(MAC 地址)的解析。

五层体系结构

  1. 应用层:作为网络服务和最终用户之间的接口。它提供了一系列供应用程序使用的协议,如 HTTP(网页)、FTP(文件传输)、SMTP(邮件传输)等。使用户的应用程序可以访问网络服务。
  2. 传输层:提供进程到进程的通信管理,这一层确保数据按顺序、无错误地传输。主要协议包括 TCP 和 UDP。
  3. 网络层:负责数据包从源到目的地的传输和路由选择,包括跨越多个网络(即互联网)。它使用逻辑地址(如 IP 地址)来唯一标识设备。路由器是网络层设备。
  4. 数据链路层:确保从一个节点到另一个节点的可靠、有效的数据传输。交换机、网桥是数据链路层设备。
  5. 物理层:电缆、光纤、无线电频谱、网络适配器等。

http://www.kler.cn/a/501925.html

相关文章:

  • 用python编写一个放烟花的小程序
  • Unity自带的真车模拟系统,速度不够大r时如何以匀速上桥
  • Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化
  • OpenCV基础:视频的采集、读取与录制
  • springboot使用Easy Excel导出列表数据为Excel
  • Spring配置文件中:密码明文改为密文处理方式(通用方法)
  • AI语音机器人大模型是什么?
  • 如何高效格式化输出 JSON 字符串
  • 浅谈对进程的认识
  • Vue前端设置Cookie和鉴权问题
  • 为什么在二维卷积操作中,将宽度(W)维度放在高度(H)之前会破坏空间局部性原则,并影响缓存性能
  • 点赞系统设计(微服务)
  • HarmonyOS中实现TabBar(相当于Android中的TabLayout+ViewPager)
  • USA-Entrepreneur-20240708-Business/Unusual
  • Kotlin 循环语句详解
  • 数字证书管理服务
  • 浅谈云计算01 | 云计算服务的特点
  • 【MySQL基础篇】十三、用户与权限管理
  • Jmeter随机参数各种搭配
  • WebScoket-服务器客户端双向通信
  • C# MS SQL Server、Oracle和MySQL
  • C# OpenCV机器视觉:二维码识别
  • 云原生安全风险分析
  • docker的学习
  • 单元测试流程
  • 传统数据湖和数据仓库的“中心化瓶颈”