0

我想知道是否每个应用程序都有自己的完整 ip 堆栈,或者系统中有一个堆栈并且所有应用程序都使用它。或者,对于每个应用程序,可能有些层是独立的,例如应用程序层,而其余的层是通用的?

4

2 回答 2

2

这完全取决于应用程序。简短的回答是,已经有常见的全栈网络实现,每个应用程序都尽可能少地重新实现。尤其:

  • 许多现代应用程序中的网络仅限于调用库函数,这些函数接受一个 URL 并返回一个文件,或者可能是一个解析的 JSON 对象,该 URL 的内容。这些应用程序基本上都在第 7 级应用程序层之上运行。整个网络堆栈是共享的。

  • 需要对传递的 HTTP 进行更多控制的应用程序(例如 Django Web 应用程序)将实现额外的 HTTP 处理。它们在第 7 级应用程序层运行,其他一切都留给公共库和操作系统。

  • 像数据库这样的应用程序,在 HTTP 太笨拙或不够快的情况下,将在 TCP 之上实现它们自己的更高级别的协议。例如,MySQL 网络协议。这些应用程序在第 6 层表示层上运行。

  • 诸如 Skype 和某些 VPN 之类的通信应用程序具有 TCP 无法支持的特殊网络要求,例如延迟。所以这些应用程序必须实现它们自己的第 5 层会话,甚至可能是第 4 层传输协议。操作系统处理其他所有事情。

  • 调试工具,如 Wireshark 数据包转储器,需要在第 3 层网络和第 2 层数据链路级别运行。其他需要在这个级别上工作的应用程序包括尝试编写新网络协议的人。但这对于大多数应用程序来说是不值得的大量工作。

  • 最后,还有一些非常专业的应用领域,比如高频股票交易,甚至以太网都被认为是不够的,整个网络堆栈一直被替换为 1 级物理,采用不同的实现方式,例如使用Infiniband光纤、自定义协议和自定义开关。

第 1 层物理实现通常固定在硬件中。通过第 5 层会话的第 2 层数据链路通常在操作系统内核中实现,但应用程序可以在它们需要的任何级别“插入”。并且有许多用于第 6 层表示的标准库,例如 OpenSSL,以及用于第 7 层应用程序的标准库。因此,大多数程序共享它们的整个网络堆栈,或几乎所有堆栈,但具有特殊要求的应用程序可以自定义实现任何层,甚至所有层。

于 2013-02-02T17:28:44.983 回答
1

应用层及以上是在应用程序中。

其余的不是。

于 2013-02-03T07:29:21.510 回答