一种网络架构是一种特定网络的设计,具有分配不同职责的节点(例如,主机、网桥、路由器,后两者有很多变化,尤其是当您包含 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 更擅长分离层,所以考虑花一些时间来了解它的规范。