2013-02-02 45 views

回答

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层物理实现通常是用硬件固定的。层2数据链接通过 第5层会话通常在操作系统内核中实现,但应用程序可以在需要的任何级别“插入”。还有很多用于第6层演示的标准库,例如OpenSSL和第7层应用程序。所以大多数程序共享他们的整个网络堆栈,或几乎所有的程序,但具有特殊需求的应用程序可能会自定义实现任何或所有层。

+0

让我们考虑最简单的情况。假设我们有两个简单的网络应用程序,它们向远程服务器打开一个tcp套接字并发送一条消息,如“event = 50 param = 40”。我们可以说这个消息传递给了内核,而内核添加了传输层头部,网络层头部等,并将它提供给网卡,即内核中只有一个ipv4堆栈实例? –

+0

是的,这是正确的。顺便说一句,我重写了答案,我希望更清楚。让我知道它是否需要改进。 – andrewdotn

1

应用程序层及以上位于应用程序中。

其余的不是。

相关问题