Linux网络编程 | 计算机网络体系结构概述

文章目录

    • 计算机网络体系结构
      • 分层思想的引入
      • 分层思想的优点
      • 计算机网络体系结构的概念
      • 计算机网络体系结构的标准
      • 计算机网络体系结构的分层原理
      • 通信协议与端口
    • OSI七层模型
      • OSI的来源
      • OSI七层模型的划分
      • 各层功能定义
      • 通信特点
    • TCP/IP参考模型
      • TCP/IP四层模型的划分
      • 各层功能定义
      • 与OSI模型的比较
    • 客户端/服务器模式

在进行Linux网络编程的学习之前,我们先来介绍一下网络编程相关的基础知识。

计算机网络体系结构

分层思想的引入

众所周知,计算机网络是个非常复杂的系统。比如,连接在网络上的两台计算机需要进行通信时,由于计算机网络的 复杂性异质性,需要考虑很多复杂的因素,比如:

  • 这两台计算机之间必须有一条传送数据的通路;
  • 告诉网络如何识别接收数据的计算机;
  • 发起通信的计算机必须保证要传送的数据能在这条通路上正确发送和接收;
  • 对出现的各种差错和意外事故,如数据传送错误、网络中某个节点交换机出现故障等问题,应该有可靠完善的措施保证对方计算机最终能正确收到数据。

计算机网络体系结构标准的制定正是为了解决这些问题从而让两台计算机(网络设备)能够像两个知心朋友那样能够互相准确理解对方的意思并做出优雅的回应。也就是说,要想完成这种网络通信就必须保证相互通信的这两个计算机系统达成 高度默契

事实上,在网络通信领域,两台计算机(网络设备)之间的通信并不像人与人之间的交流那样自然天然,这种 计算机间高度默契的交流(通信) 背后需要十分复杂、完备的网络体系结构作为支撑。那么,用什么方法才能合理地组织网络的结构,以保证其具有结构清晰、设计与实现简化、便于更新和维护、较强的独立性和适应性,从而使网络设备之间具有这种 “高度默契” 呢?

答案是分而治之,更进一步地说就是分层思想

分层思想的优点

分而治之的思想 正好可以解决上面提到的这个复杂的问题。也就是说,我们可以将这个庞大而复杂的问题转化为若干较小的、容易处理的、单一的局部问题然后在不同层次上予以解决,这也就是我们所熟悉的 分层思想 。在计算机网络体系结构中,分层思想的内涵就是: 每层在依赖自己下层所提供的服务的基础上,通过自身内部功能实现一种特定的服务


分层思想的优点如下:

1、耦合度低(独立性强)

上层只需通过下层为上层提供的接口来使用下层所实现的服务,而不需要关心下层的具体实现。也就是说,下层对上层而言就是具有一定功能的黑箱

2、适应性强

只要每层为上层提供的服务和接口不变,每层的实现细节可以任意改变

3、易于实现和维护

把复杂的系统分解成若干个涉及范围小且功能简单的子单元,从而使得系统结构清晰,实现、调试和维护都变得简单和容易。也就是说,对于设计/开发人员而言,这种方法使设计/开发人员能够专心设计和开发他们所关心的功能模块;对于调试/维护人员而言,这种方法也方便调试/维护人员去处理他们所负责的功能模块。


计算机网络体系结构的概念

计算机网络体系结构采用了分层的思想。那么,既然计算机网络体系结构的设计采用的是分层思想,那么它就必须得解决以下几个问题:

1、网络体系结构应该具有哪些层次,每个层次又负责哪些功能呢? 分层与功能

2、各个层次之间的关系是怎样的,它们又是如何进行交互的呢?服务与接口

3、要想确保通信的双方能够达成高度默契,它们又需要遵循哪些规则呢? 协议

计算机网络体系结构必须包括三个内容,即分层结构与每层的功能服务与层间接口协议。所以,计算机网络体系结构的定义为:

在计算机网络中,层、层间接口及协议的集合被称为计算机网络体系结构


计算机网络体系结构的标准

目前,由国际化标准组织ISO制定的网络体系结构国际标准是 OSI七层模型,但实际中应用最广泛的是 TCP/IP体系结构换句话说,OSI七层模型只是理论上的、官方制定的国际标准,而TCP/IP体系结构才是事实上的国际标准。这看起来是不可理喻的,但这却是实际存在的,是一些历史原因造成的,无疑这些原因又是复杂的。

OSI标准的制定者以专家、学者为主,他们缺乏实际经验和商业驱动力,并且OSI标准自身运行效率也不怎么好。与此同时,由于Inernet在全世界覆盖了相当大的范围,并且占领市场的标准是TCP/IP体系结构,因此导致OSI标准没有市场背景,也就只是理论上的成果,并没有过多地应用于实践。

计算机网络体系结构的分层原理

1、基本概念

在介绍网络体系结构的分层原理前,我们有必要先了解以下几个基本概念,其对应关系如下图所示:
Linux网络编程 | 计算机网络体系结构概述_第1张图片

  • 实体: 任何可以发送和接收信息的软硬件进程;
  • 对等层: 两个不同系统的同一层次;
  • 对等实体: 分别位于不同系统对等层的两个实体;
  • 接口: 上层使用下层所提供的功能的方式;
  • 服务: 某一层及其以下各层的所完成的功能,通过接口提供给相邻的上层;
  • 协议: 通信双方在通信过程中必须遵循的规则。

2、网络体系结构模型
Linux网络编程 | 计算机网络体系结构概述_第2张图片

我们在网络中的任何一个系统都是按照上图中的层次结构模型来组织的,该模型具有以下特点:

  • 同一网络中,任意两个端系统必须具有相同的层次;
  • 每层使用其下层提供的服务,并向其上层提供服务;
  • 通信只在对等层间进行,当然这里所指的通信是间接的、逻辑的、虚拟的,非对等层之间不能互相“通信”;
  • 实际的物理通信只在最底层完成;
  • Pn代表第n层的协议,即第n层对等实体间通信时必须遵循的规则或约定

3、对等层通信的实质

在逻辑上,网络分层体系结构原理允许不同主机的对等实体进行通信,但禁止不同主机非对等实体间进行直接通信;在物理上,每一层必须依靠下层提供的服务来与另一台主机的对等层通信,这是 对等层通信的实质 。也就是说,模型中的上层(第n+1层)使用下层(第n层)所提供的服务,是下层(第n层)服务消费者;而模型中的下层(第n层)向上层(第n+1层)提供服务,是上层(第n+1层)的服务生产者(提供者)。

进一步地,源进程传送消息到目标进程的过程是这样子的: 首先,消息送到源系统的最高层,紧接着消息从最高层开始 自上而下 逐层封装 ,最后该消息经物理线路传输到目标系统。而当目标系统收到信息后,其会将该信息 自下而上 逐层处理并拆封,最后由最高层将消息提交给目标进程。

如下图所示:
Linux网络编程 | 计算机网络体系结构概述_第3张图片
Linux网络编程 | 计算机网络体系结构概述_第4张图片

通信协议与端口

1、协议的概念

网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序

为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议(protocol),它最终体现为在网络上传输的数据包的格式

协议往往分成几个层次进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。


2、协议数据单元(PDU)

计算机网络体系结构中,对等层之间交换的信息报文统称为 协议数据单元(Protocol Data Unit,PDU)。PDU由 协议控制信息(协议头)数据(SDU) 组成,如下图所示。
Linux网络编程 | 计算机网络体系结构概述_第5张图片

其中,协议头部中含有完成数据传输所需的控制信息,比如地址、序号、长度、分段标志、差错控制信息等。传输层及以下各层的PDU均有各自特定的名称

  • 传输层 —— 段(Segment)
  • 网络层 —— 分组/包(Packet)
  • 数据链路层 —— 帧(Frame)
  • 物理层 —— 比特(Bit)

① PDU的封装

在计算机网络体系结构中,下层把上层的PDU作为本层的数据加以封装,然后加入本层的协议头部(和尾部)形成本层的PDU,如下图所示。在这里,封装就是在数据前面加上特定的协议头部。因此,数据在源站自上而下递交的过程实际上就是不断封装的过程,而到达目的地后自下而上递交的过程就是不断拆封的过程,如下图所示。
Linux网络编程 | 计算机网络体系结构概述_第6张图片
这个过程类似发送信件的过程,数据在传输时,其外面实际上要被包封多层“信封”。在目的站,某一层只能识别由源站对等层封装的“信封”,而对于被封装在“信封”内部的“数据”仅仅是拆封后将其提交给上层,本层不作任何处理。

特别需要注意的是,每一层只处理本层的协议头部

② PDU封装实例

下图演示了PDU在TCP/IP协议簇的封装过程:

Linux网络编程 | 计算机网络体系结构概述_第7张图片

OSI七层模型

OSI的来源

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。

ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。


OSI七层模型的划分

OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。

每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。
Linux网络编程 | 计算机网络体系结构概述_第8张图片

各层功能定义

这里我们只对OSI各层进行功能上的大概阐述,不详细深究。这里我们就大概了解一下。
Linux网络编程 | 计算机网络体系结构概述_第9张图片

通信特点

对等通信,为了使数据分组从源传送到目的地,源端OSI模型的每一层都必须与目的端的对等层进行通信,这种通信方式称为对等层通信在每一层通信过程中,使用本层自己协议进行通信
Linux网络编程 | 计算机网络体系结构概述_第10张图片


TCP/IP参考模型

TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:

  • 数据链路层(也称网络接口层、网络接入层)
  • 网际互联层
  • 传输层(主机到主机)
  • 应用层

TCP/IP四层模型的划分

Linux网络编程 | 计算机网络体系结构概述_第11张图片

各层功能定义

1、应用层

应用层对应于OSI参考模型的高层(会话层、表示层、应用层),为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等。


2、传输层

传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)用户数据报协议(UDP)

TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据流式传输服务;而UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据报式传输服务.


3、网际互联层

网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。

IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。


4、网络接入层(即主机-网络层)

网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。


与OSI模型的比较

共同点

  • OSI参考模型和TCP/IP参考模型都采用了层次结构的概念。
  • 都能够提供面向连接无连接两种通信服务机制。

不同点

  • OSI采用的七层模型,而TCP/IP是四层结构
  • TCP/IP参考模型的网络接口层实际上并没有真正的定义,只是一些概念性的描述。而OSI参考模型不仅分了两层,而且每一层的功能都很详尽,甚至在数据链路层又分出一个介质访问子层,专门解决局域网的共享介质问题。
  • OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络。
  • OSI参考模型与TCP/IP参考模型的传输层功能基本相似,都是负责为用户提供真正的端对端的通信服务,也对高层屏蔽了底层网络的实现细节。所不同的是TCP/IP参考模型的传输层是建立在网络互联层基础之上的,而网络互联层只提供无连接的网络服务,所以面向连接的功能完全在TCP协议中实现,当然TCP/IP的传输层还提供无连接的服务,如UDP;相反OSI参考模型的传输层是建立在网络层基础之上的,网络层既提供面向连接的服务,又提供无连接的服务但传输层只提供面向连接的服务。
  • OSI参考模型的抽象能力高,适合与描述各种网络;而TCP/IP是先有了协议,才制定TCP/IP模型的。
  • OSI参考模型的概念划分清晰,但过于复杂;而TCP/IP参考模型在服务、接口和协议的 区别上不清楚,功能描述和实现细节混在一起。

客户端/服务器模式

客户端/服务器(Client/Server)模式,即C/S模式,要求每个应用程序由两个部分组成:一个部分负责启动通信,另一个部分负责对它进行应答。它们通常在不同的主机上,分别称为客户端服务器

服务器是指那些在网络上提供服务的应用程序,客户端是指用户为了得到某种服务所需要运行的应用程序,即申请服务的程序。

服务器接收网络中任何一个客户端的服务请求,完成服务后将结果返回给客户端,它们之间的关系如下图所示:
Linux网络编程 | 计算机网络体系结构概述_第12张图片
一个服务器可以同时接收多个客户机请求,当网络中的某一个客户机发送服务请求时,服务器使其在提供服务的端口排队,然后从队列中提取请求,为每个请求创建一个子进程,由子进程来处理具体的服务细节。

所以,通常情况下,服务器也包含主程序和子程序两个部分。主程序负责接收来自客户端的请求,子程序一般有几个,它们负责处理各个客户请求。

你可能感兴趣的:(Linux,计算机网络,Linux程序设计)