我想知道是否每个应用程序都有自己的完整IP堆栈或系统中有堆栈,并且所有应用程序都使用它。或者,也许某些层是分离的,例如应用程序层,为每个应用程序和其余的常见?每个应用程序是否都实现了自己的网络堆栈?
回答
这完全取决于应用程序。简单的答案是,已经有通用的全堆栈网络实现,并且每个应用程序都可以重新实现,只要它可以放弃即可。特别是:
在许多现代应用对网络的限制为调用该采取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层应用程序。所以大多数程序共享他们的整个网络堆栈,或几乎所有的程序,但具有特殊需求的应用程序可能会自定义实现任何或所有层。
应用程序层及以上位于应用程序中。
其余的不是。
- 1. 每个线程都有自己的堆栈吗?
- 2. 每个进程都有自己的内核堆栈,对吧?
- 3. 我是否在swift中实现了自己的堆栈? swift是否像Java一样在库中有堆栈?
- 4. 项目中的每个django应用程序是否都有自己的urls.py?
- 5. 我是否必须在WP8 Direct3D应用程序中实现自己的矩阵堆栈?
- 6. Firebase - 每个人都使用相同的应用程序,还是他们自己的应用程序实例?
- 7. 每个云实例是否都有自己的IP
- 8. 每个托管线程是否都有自己对应的本地线程?
- 9. 每个网络的单个应用程序实例
- 10. 程序中的堆栈实现
- 11. Android网络堆栈
- 12. 每个操作系统是否都有自己的汇编程序?
- 13. 我的电脑上的网络堆栈是否使用DMA?
- 14. 堆栈实现
- 15. 每个程序在内存中都有其自己的分段段(代码,堆栈,数据)吗?
- 16. Linux是否为其运行的每个进程都提供了用户模式和系统模式堆栈?
- 17. 任何人都可以推荐一个开源的实时网络堆栈吗?
- 18. 将网络应用程序结果重定向到自己的应用程序
- 19. 地图的每个区域是否都有自己的班级?
- 20. 在Rails应用程序中实现链接列表堆栈
- 21. 验证网络连接是否来自我的应用程序
- 22. 操作系统调用的每个例程是否创建它自己的“堆栈”?
- 23. 应该每个应用程序都有自己的主机实例/主机实例吗?
- 24. 每个ASP.NET应用程序实例是否都有一个持久存储?
- 25. 每个JSpinner对象是否都有自己的Model对象?
- 26. 每个产品是否都需要自己的域名?
- 27. 群集上的每个SQL Server实例是否都需要自己的LUN?
- 28. 每个网站应该是自己的`node.js`进程
- 29. 是否可以实现自己的IASKSettingsReader?
- 30. 码头集装箱是否有自己的TCP/IP堆栈?
让我们考虑最简单的情况。假设我们有两个简单的网络应用程序,它们向远程服务器打开一个tcp套接字并发送一条消息,如“event = 50 param = 40”。我们可以说这个消息传递给了内核,而内核添加了传输层头部,网络层头部等,并将它提供给网卡,即内核中只有一个ipv4堆栈实例? –
是的,这是正确的。顺便说一句,我重写了答案,我希望更清楚。让我知道它是否需要改进。 – andrewdotn