每个应用程序都实现自己的网络堆栈吗?

时间:2013-02-02 17:13:28

标签: linux networking network-programming tcp-ip

我想知道每个应用程序是否都有自己的完整ip堆栈,或者系统中有堆栈,所有应用程序都使用它。或者,可能一些层是分开的,例如,应用层,每个应用程序和其他应用程序是常见的吗?

2 个答案:

答案 0 :(得分:2)

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

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

  • 需要对传递的HTTP进行更多控制的应用程序(如Django Web应用程序)将实现额外的HTTP处理。它们在Level 7 Application层运行,并将其他所有内容留给公共库和操作系统。

  • 数据库等应用程序,如果HTTP太笨拙或不够快,将在TCP之上实现自己的高级协议。例如,MySQL网络协议。这些应用程序在Level 6 Presentation层运行。

  • 通信应用程序(如Skype和某些VPN)具有TCP无法支持的专用网络要求,如延迟。因此,这些应用程序必须实现自己的第5层会话或甚至第4层传输协议。操作系统处理其他所有事情。

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

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

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

答案 1 :(得分:1)

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

其余的不是。

相关问题