这篇文章是学习中科大自动化系郑烇老师《计算机网络》MOOC的笔记。课程录像可以在 这里 观看,教材是《计算机网络-自顶向下方法(第7版)》,课件可以在 这里 下载。

本篇内容对应课程录像的 P9 1.7 协议层次和服务模型,欢迎讨论交流。

如何组织复杂的网络系统,一直是一个十分严肃且重要的课题。人类在设计计算机网络时,主要采取了两种常见的设计思想:分层模块化。这首先有利于将大的问题分拆成小的问题逐一解决,形成清晰的结构,同时还便于系统维护和升级。当然,这也会带来一些问题,最大的劣势在于降低了功能实现的效率,但整体上还是利大于弊。于是,我们现在看到的计算机网络系统就是严格分层,“高内聚低耦合”的。

一些基本概念

功能、服务、接口、协议

  • 计算机网络中的每一层会实现一组功能,层与层之间通过接口来实现调用功能和提供服务。对等层实体间通过协议,借助下层提供的服务来交换信息。

  • 服务是底层实体向上层实体提供的它们之间通信的能力,是一种上层与下层之间垂直的关系。服务用户服务提供者分别代表使用服务和提供服务的层。服务访问点Service Access Point, SAP)是层间接口用于区分不同用户的程序,类比一下就相当于识别“快递”寄送目的地的设备。

  • 原语(Primitive)是提供服务和使用服务的形式。如Socket API中的一系列可供应用层调用的函数就可以被称为原语。

  • 服务的类型有面向连接的服务和无连接的服务,在前几节的笔记中已经介绍过了。

  • 协议是对等层实体间通信的规则和约定,一层协议实现需要调用下层提供的服务,而协议实现的目的在于为上层提供可靠的服务。

  • 上层提供的服务包含下层提供的服务,同时还通过同层实体的一些安排增加了一些新的功能特性。

  • 应用层是整个网络存在的意义,物理层是网络所有服务实现的基础。

  • 需要注意的是,同层传输是逻辑上的,实体运行中还是需要通过层间接口层层传输和转换进行不同深度的封装和解封装,真实系统处理数据实际上呈现一个“U”型的流程线。

数据的封装和解封装

数据单元

数据单元(Data Unit, DU)是网络数据传输的实质内容。计算机网络中与DU有关的概念较多,主要有以下三种。

  • SDUService DU):可以视为上层要求下层完成传输的数据;

  • IDUInterface DU):上层将SDU加上ICIInterface Control Information)即合适的控制信息作为IDU,通过层间接口传到下层;

  • PDUProtocol DU):下层将上层传来IDU中的SDU分离出来,加上自己的头部控制信息(Header)形成PDU,对等层协议实体使用PDU进行交换,实际逻辑中这又作为传递到下层的IDU;

  • SDU很大的时候,下层会将SDU分成若干小块,每块附加一个header形成n-PDU;SDU小的时候也会将多个SDU合并成一个PDU传输。

数据单元在不同层有着不同称呼。如,应用层称为报文message),传输层称为报文段(segment),网络层称为分组packet)、无连接的网络层也称为数据报datagraph),链路层称为frame)。

Internet协议栈

在互联网系统中,分层的设计思想是如何体现的?一般将互联网的分层模型分为五层。

物理层

上层传递下来的帧以bit为单位变为电磁波或光信号,在介质中发送到目标处,对方的物理层将物理信号解析为一个个bit,还原为帧。

链路层

链路层在相邻两点(P2P)以帧为单位传输数据,主要功能是将将bit中的帧头和帧尾以及帧内容识别出来。

链路层的协议有PPP, 802.11, Ethernet等。链路层和物理层的硬件实体一般封装在网卡上。

网络层

在下层提供的点对点传输服务基础上解决了源主机到目标主机端到端(E2E)传输的问题。

网络层的协议主要是IP协议(转发)和一系列路由协议(寻路)。

传输层

借助网络层主机到主机的传输服务,将其细化为进程到进程的服务,即区分分组属于哪个进程;此外如果网络层是无连接的服务,传输层会将其变为可靠的,避免乱序、错误、丢失的情况出现。

传输层的协议协议主要是TCP, UDP这两种。

应用层

借助传输层的服务实现特定网络应用功能。

应用层的协议主要有FTP, SMTP, HTTP, DNS等。

ISO/OSI参考模型

另一种常见的互联网分层模型是由国际标准化组织(ISO)指定的OSI(Open System Interconnect)参考模型。相比常见的协议模型,OSI将互联网分为七层,在传输层和应用层之间增加了表示层会话层

  • 表示层:应用解释传输的数据,如加密、压缩等

  • 会话层:数据交换的同步、检查点和恢复

在常见的五层模型中,这两层的功能实际上是在应用层中实现的。