首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统内核和网络协议栈在哪里重叠?

操作系统内核和网络协议栈在哪里重叠?
EN

Stack Overflow用户
提问于 2021-12-10 11:34:21
回答 2查看 144关注 0票数 2

我正在努力学习网络协议栈。传输、IP、数据链路层库代码实现)以及linux。我不知道从哪里开始。

  1. 第一个问题是这些代码是否是linux内核/库层的内置特性。
  2. 如果是这样的话,为什么我可以在一些应用程序中看到第三方协议栈(由blunk微系统-协议栈的开发人员)
  3. 如果Linux没有将它作为核心特性,那么linux是否只为网络部分提供占位符(就像只提供宏以启用第三方堆栈)。但是有一篇文章说它有Net4网络代码库。
  4. 如果linux有内置的网络特性,那么我需要通过哪些linux模块,或者从哪里开始呢?不仅仅是在网络方面,如果我被引导在linux中探索“代码级别”中的所有方面(进程、内存、驱动程序),这将是有帮助的。

注意:我渴望编写自己的操作系统和协议栈,因此试图理解现有的系统。

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2021-12-10 14:16:29

第一个问题是这些代码是否是linux内核/库层的内置特性。

Linux内核的网络堆栈包括第4层,即TCP和UDP (嗯,内核+配置它所需的一组实用程序)。我认为DNS也在内核中,但我不太确定。TLS曾经被作为一个库来实现(我认为OpenSSL和GnuTLS是最常见的),但是现在似乎也有内核部分(链接 )。

请注意,一些TCP功能已卸载到网卡(硬件)。在高速(1Gb+)中,如果没有这些特性,您将无法获得完整的性能。

我并不熟悉所有与VoIP相关的协议,但我认为它们是库,而不是内核。

如果是这样的话,为什么我可以在一些应用程序中看到第三方协议栈(由blunk微系统-协议栈的开发人员)

我相信原因是表现。如果您实现了一个带有特性子集的自定义堆栈,那么它可能会更适合您的应用程序。此外,还有一些高级特性和协议可能在内核本身中不可用。

如果Linux没有将它作为核心特性,那么linux是否只为网络部分提供占位符(就像只提供宏以启用第三方堆栈)。但是有一篇文章说它有Net4网络代码库。

有一个很大的代码基

如果linux有内置的网络特性,那么我需要通过哪些linux模块,或者从哪里开始呢?不仅仅是在网络方面,如果我被引导在linux中探索“代码级别”中的所有方面(进程、内存、驱动程序),这将是有帮助的。

嗯,这是一个很好的问题,我不认为有一个简单的答案。根据我的经验,阅读代码是解决这个问题的唯一方法。然而,有些人试图利用LWN.net来获取信息。

你也许可以从这里开始:包括/净额/

票数 0
EN

Stack Overflow用户

发布于 2021-12-10 15:18:41

第一个问题是这些代码是否是linux内核/库层的内置特性。如果linux有内置的网络特性,那么我需要通过哪些linux模块,或者从哪里开始呢?

您可以将协议栈视为库。Linux内核有一个在内核地址空间内运行,并使用用户空间中不可用的内核APIs:https://github.com/torvalds/linux/tree/master/net/ipv4

有许多关于Linux内核网络的深度书籍。读一本书是很好的理解。

如果是这样的话,为什么我可以在一些应用程序中看到第三方协议栈(由blunk微系统-协议栈的开发人员)

零拷贝、低延迟和流(在CPU-L1高速缓存线大小的块中处理以太网数据包,而它还没有被完全读取)网络在Linux内核网络栈中一直存在问题。出于这些原因,网络硬件制造商提供了自己的用户空间网络栈,又名https://blog.cloudflare.com/kernel-bypass/

随着MSG_ZEROCOPY外行的出现,Linux内核网络栈变得越来越好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70303908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档