我正在努力学习网络协议栈。传输、IP、数据链路层库代码实现)以及linux。我不知道从哪里开始。
注意:我渴望编写自己的操作系统和协议栈,因此试图理解现有的系统。
提前感谢!
发布于 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来获取信息。
你也许可以从这里开始:包括/净额/
发布于 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内核网络栈变得越来越好。
https://stackoverflow.com/questions/70303908
复制相似问题