OSI 模型的各层在操作系统中运行在哪里?

网络工程 ipv4 通讯协议 arp 奥西
2021-07-24 07:11:56

OSI 模型将它们描述为层。但是这些层在操作系统中实际运行在哪里呢?例如,TCP 究竟在什么地方和什么作用?所有这些层都被描述为使用协议或“规则”,但规则是如何实现的?这一切都发生在 NIC 上吗?是否有在后台运行的特定服务来处理每个协议?

当我打开任务管理器时,可以看到 DHCP 和 DNS 是由 Windows 操作系统后台的服务运行的。这很好,也很容易理解。TCP 是否有自己的后台服务,或者它实际上是在使用网络库的应用程序代码中实现的?ARP、IP 和以太网也是如此。网卡是否有一个程序运行来处理 ARP、IP 和以太网?具体在哪里?

3个回答

首先,OSI 模型是一个理论模型,它与现实并不完全吻合。此外,通常层模型仅显示实际从数据包中添加或删除某些内容的层。

以下答案省略了一些小细节。另外一些细节可能因操作系统而异,我对 linux 的经验最多,有些东西在其他操作系统上可能会有所不同。

该答案还侧重于基本设置,许多现代网络控制器具有“卸载”功能,其中传统上由操作系统内核负责的功能由网络控制器接管。


网络控制器在逻辑上分为两部分,“MAC”和“PHY”。在某些情况下,MAC 和 PHY 可能会集成到同一芯片中。

PHY 执行以下操作。

  • 在线级编码和二进制数据单元流之间的转换。
  • 检测线路何时忙(对于半双工物理层)。
  • 检测传入帧的开始和开始。
  • 为帧的开始和结束生成特殊的线级编码。

MAC 执行以下操作。

  • 在线速数据流和操作系统可以读/写的缓冲区中的帧之间进行转换。
  • 生成/检查/剥离前导码和 FCS。
  • 当传入的帧已传送到缓冲区时,通过中断通知操作系统。
  • 如果需要,实施媒体访问控制。
  • 按目标 MAC 地址过滤传入帧。

内核实现以下功能。

  • 与 MAC 对话(使用驱动程序模块)。
  • 构建和解释以太网帧(减去前导码和 FCS)。
  • 实现 ARP(或 IPv6 的 ND)以在 IP 和 MAC 地址之间进行转换。
  • 实现 IP 数据包的构建和解释。
  • 根据路由表将数据包转发到正确的接口。
  • 包过滤、NAT等
  • 主要的传输协议,如 TCP 和 UDP。
  • ICMP 的某些部分。

在内核之外运行但被认为是操作系统实现的一部分的守护进程和工具。

  • DHCP
  • DNS 缓存(如果使用)。
  • 诊断,如 ping 和 traceroute。
  • 内核功能的配置。

应用程序加载的库通常用于实现在 TCP/UDP 之上运行的东西,包括:

  • SSL/TLS
  • 域名系统
  • HTTP

OSI 模型是一种理论表示或指南。现实世界往往大不相同。

您不会得到不随情况而改变的答案。很大程度上取决于操作系统本身,因为不同的操作系统以不同的方式做事。

很容易将某些层与计算机的不同部分相关联(例如,作为 NIC 的物理层,但即使如此也不包括整个第 1 层)。Layer-7 看起来像实际的应用程序一样简单,但往往比这更复杂;有时操作系统本身或某些附加组件是最终的第 7 层源/目标。

很多时候,OSI 层之间的界限是模糊的,或者多个层合二为一。有时,事物在另一层中运行时有一个脚在一层中。

“NIC”硬件只是将以太网帧发送到线路上并接收它们。操作系统有一个“驱动程序”来对 NIC 进行编程,因为这是一项特定于硬件的任务。

然后是操作系统中的软件(内核中的模块)处理常见的“以太网”任务。它向“客户”发送已知类型的以太网帧,“客户”拥有它的 abonnement。辅助协议 ARP 是其中之一,IP 是流行使用的一种。

TCP 和 UDP 模块是 IP 的客户。ICMP 也是 IP 的客户(但 IP 也将其用作 icmp 的“客户”,这有点令人困惑)。

它们都有从内核到用户应用程序级(通常是“套接字库”)的编程接口。

像“网络服务器”这样的程序作为后台应用程序运行并连接到 tcp 模块,要求每个目标 TCP 端口为 80 的 ip-paket。

像 Internet 浏览器这样的程序使用 tcp 模块通过 TCP 端口 80 连接到远程服务器,本地端口在这里无关紧要。

当 TCP/IP 被创建时,OSI-Model 并不存在,所以 OSI 层之间的关系不像在较新的网络协议(appletalk,例如 :-)中那样清晰