网络理论:层、服务和接口

网络工程 网络 协议理论 奥西 建筑学
2021-07-19 09:30:27

我想自下而上地学习计算机网络。我不太了解网络层的细微差别,书中提到层为它们之上的层提供服务,但层之间的接口不是网络架构的一部分(网络架构被定义为层 + 协议)。服务和接口有什么区别?到底什么是网络层?我在任何地方都找不到对这些问题的明确解释。(我一直在阅读 AS Tanenbaum 的《计算机网络》)

由于我正在尝试自下而上地学习网络,因此我正在尝试忘却和重新学习,即,我正在向前迈进,认为我对这个主题的所有了解可能都是不正确的。这是我到目前为止所了解的:

  • 通信网络中的每个节点都必须进行活动(我在这里不使用术语“软件”,因为在每个节点上执行的活动可以通过硬件中的数字逻辑实现)
  • 这些活动通常被组织成层,其中 N+1 层中的活动只能使用 N 层中活动提供的服务。这种组织有助于保持我们的理智,一切都可以管理
  • 网络模型是网络中这些层的明确定义的规范 - 它们执行的活动以及层需要提供的服务。
  • 协议是不同节点上的活动,但在同一层进行通信的一种方式。第 N 层不需要知道第 N-1 层使用什么协议进行通信。

我的理解正确吗?

  • 我读过网络架构指定了使用的层和协议,但没有指定层之间的接口我认为“层规范”将包含需要在层提供的服务。这不是和两层之间的接口一样吗?网络体系结构包含层规范,其中包含服务规范,但不包含接口规范。如何?

  • 我可以获得每层提供的服务规范的副本吗?这是具体的东西还是波浪形的东西(例如“这取决于情况”类型)

  • 我看过三层的IP协议需要二层的ARP、ICMP等协议。我以为N层不关心N-1层的实际协议,而只关心提供的服务。

我的理解有什么缺陷?

2个回答

你的理解大体上是正确的。您面临的问题主要是由于您假设事物的定义比实际情况更好。例如:

到底什么是网络层?

像许多很多网络术语一样,没有确切的定义。只有两种模型试图定义它们(OSI 和 IP 协议套件),其中只有一种得到了广泛使用。所以实际上,只有一个用例。TCP/IP 套件在其模型中定义了网络层。您可以在RFC 1122 中阅读它

网络模型是网络中这些层的明确定义的规范

模型是现实中不存在的理想化表示。在实践中,规范并不总是明确定义的。有时事情是模糊的,或者特性或功能的实际实现可能会有所不同。

我看过三层的IP协议需要二层的ARP、ICMP等协议。我以为N层不关心N-1层的实际协议,而只关心提供的服务。

这就是理论和实践的分歧之处。你是对的,这就是理论。但在实践中,实现细节在层之间“泄漏”。ARP 并不真正“适合”TCP/IP 模型。另一个例子是隧道(VPN 或 MPLS)。它也不适合模型。

一种网络架构是一种特定网络的设计,具有分配不同职责的节点(例如,主机、网桥、路由器,后两者有很多变化,尤其是当您包含 MPLS 时。)虽然它使用模型概念来定义角色,但它不是一部分层的定义或 OSI 模型。虽然架构通常不指定特定的节点,但它确实指定了节点的类型、它们服务的角色以及它们如何适应更大的图景。因此,虽然我在上面提到了“特定网络”,但它可能有多个实例,并且省略了许多细节。例如,提供“三网合一”(语音、视频、数据)的公司可能有一个针对都市地区的网络架构,针对小城市的不同架构,以及针对农村地区的网络架构。每一个都有很多例子,

OSI模型仅仅是一个参考模型分配不同的责任,每一个来帮助我们理清如何通信的工作。OSI 模型非常适合第 4 层及以下的层。事实证明,有更好的方法来解决 OSI 上层的问题,所以我们不会过多讨论它们。模型作为一个整体最好用来给每一层透视,并理解每一层。但是现实世界中有很多案例会扭曲模型。稍后再谈。

除了模型之外,OSI 规范还定义了各个层中的特定服务。每项服务都有以下规范:

  • 提供给上层的服务接口(根据“服务原语”来执行诸如发送和接收“服务数据单元”之类的事情,并仔细说明了许多参数)
  • 一个或多个实现服务的协议(使用下层服务的服务原语)

阅读这些文件是一种严重的打盹。(而且它们是昂贵的 ITU 文件,所以你不能只是在网上阅读它们。而且它们描述的大多数服务实际上已经不存在了。)相比之下,IP 协议的早期 RFC 只是指定了协议和让您猜测上层的服务接口,以及协议如何使用下面的服务的许多细节。几十年来,IETF 在澄清这些事情方面做得更好,幸运的是没有采用 OSI 文件(毕竟是在作为联合国一部分的 ITU 开发的)的过度正式方法。

因此,服务越老,服务接口的规范或如何使用较低层服务就越不明确。IP和TCP是最早的,所以没有正式定义。但是,有很多提供这些服务的标准 API 可以用作指南(例如 TCP/UDP 的套接字。)传输和网络之间的接口通常更难获得,因为它经常被掩埋,但我敢打赌我们可以找到用于网络和链路层接口的 Linux 内核 API(例如。)

关于这一点:

N+1层的活动只能使用活动在N层提供的服务。

对,在模型中。在现实中,忘记“只”。通常,一层中的服务可以使用同一层或更高层的另一服务的服务。例如,对于隧道,我们使用一层来制作网络层可以使用的“链接”。使用 PPTP,我们使用 TCP 创建一个供 IP 使用的串行链接。因此,我们通过使用传输层服务来创建链路层服务。我们在哪一层?这不是正确的问题。正确的问题是“我们扮演什么角色”,这就是我已经说过的:使用传输层服务提供链路层服务。制作一些有趣的图画。有关更多示例,请参阅为什么 PPTP、L2TP、PPPOE 在 OSI 第 2 层中?.

因此,在高级视图中使用术语“层”,但当事情不像分层蛋糕一样堆叠时,使用术语“服务用户”和“服务提供者”。

三层IP协议需要ARP、ICMP等二层协议

ICMP 与 IP 一起存在于网络层。ARP 有点违反规则,但它主要位于第 3 层,并且与 IP 实现紧密耦合。最好将其视为第 3 层,并了解它在哪里打破模型。我们大多数人都不会碰到反例,我也无法立即想到它们。

IIRC,IPV6 更擅长分离层,所以考虑花一些时间来了解它的规范。