学习linux内核协议栈交流,linux内核协议栈数据结构图

kodinid 14 0

大家好,今天小编关注到一个比较意思的话题,就是关于学习linux内核协议栈交流的问题,于是小编就整理了4个相关介绍学习Linux内核协议栈交流的解答,让我们一起看看吧。

  1. linux内核面试必背知识点?
  2. dpdk框架详解?
  3. 为什么内核态转发性能低?
  4. zmq是什么意思?

linux内核面试必背知识点


1 必须掌握知识包括进程线程文件系统内存管理网络协议栈等方面的知识。
2 因为Linux内核是负责管理和控制硬件***的核心部分,所以在面试过程中,面试官通常会重点考察面试者对于内核的理解和掌握程度。
3 此外,在面试过程中,还可能会涉及到一些实际应用场景和具体问题,因此需要对一些常见的问题和解决方案有所了解和掌握。
例如,如何调试内核崩溃、如何对内核进行优化等问题。

dpdk框架详解?

dpdk (数据平面转发工具),为 Intel 处理架构用户空间高效的数据包处理提供了库函数驱动支持,数据包的控制层和数据层分开,dpdk绕过linux内核协议栈将数据包的接受处理放到应用层。

学习linux内核协议栈交流,linux内核协议栈数据结构图-第1张图片-安济编程网
图片来源网络,侵删)

DPDK拦截中断,不触发后续中断流程,并绕过协议栈,通过UIO技术将网卡收到的报文拷贝到应用层处理,报文不再经过内核协议栈,减少了中断。

什么内核态转发性能低?

现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。

但是,即便Linux内核协议栈收包效率真的很低,这是为什么?有没有办法去尝试着优化?而不是动不动就DPDK。

学习linux内核协议栈交流,linux内核协议栈数据结构图-第2张图片-安济编程网
(图片来源网络,侵删)

我们从最开始说起。

Linux内核作为一个通用操作系统内核,脱胎于UNIX那一***代操作系统理论。

但一开始不知道怎么回事将网络协议栈的实现塞进了内核态,从此它就一直在内核态了。既然网络协议栈的处理在内核态进行,那么网络数据包必然是在内核态被处理的。无论如何,数据包要先进入内核态,这就涉及到了进入内核态的方式:

学习linux内核协议栈交流,linux内核协议栈数据结构图-第3张图片-安济编程网
(图片来源网络,侵删)

外部可以两个方向进入内核-从用户态系统调用进入或者从硬件中断进入。

也就是说,系统在任意时刻,必然处在两个上下文中的一个:

进程上下文

中断上下文 (在非中断线程化的系统,也就是任意进程上下文)

收包逻辑的协议栈处理显然是自网卡而上的,它显然是在中断上下文中,而数据包往用户进程的数据接收处理,显然是在应用程序的进程上下文中, 数据包通过socket在两个上下文中被转接。

zmq是什么意思?

是一个专门应用程序的意思。

ZMQ没有提供类似zmq_accept()的函数,因为当套接字绑定至端点时它就自动开始接受连接了。应用程序无法直接和这些连接打交道,因为它们是被封装在ZMQ底层的。

是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。”

zmq是一个基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至的底层细节进行抽象,提供跨越多种传输协议的套接字。

zmq是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。

zmq不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过[_a***_]库文件,调用API函数来实现高性能网络通信。

到此,以上就是小编对于学习linux内核协议栈交流的问题就介绍到这了,希望介绍关于学习linux内核协议栈交流的4点解答对大家有用。

标签: 内核 协议 linux