linux内核中数据包的传输过程(代码片段)

白-胖-子 白-胖-子     2022-10-23     404

关键词:

三种报文流向

流入本机:

PREROUTING --> INPUT-->用户空间进程

  • 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  • 如果数据包是进入本机的(目的IP为本机IP),数据包就会到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。

流出本机:

用户空间进程 -->OUTPUT--> POSTROUTING

  • 本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出

转发:

PREROUTING --> FORWARD --> POSTROUTING

  • 如果数据包是要转发出去的,且内核允许转发,数据包就经过FORWARD链,然后到达POSTROUTING链输出。

丢包

PREROUTING->DROP

  • 如果数据包的目的IP不是自己,则丢弃

linux内核中sk_buff结构详解(代码片段)

目录1.sk_buff结构体1.1sk_buff在内核中的结构1.2重要的长度len的解析2.sk_buff数据区2.1线性数据区2.2非线性数据区----------------------------------------------------------------------------------------------------------------------------1.sk_buff结构体sk_buff是Linux... 查看详情

数据包从网卡到应用进程(代码片段)

 从空间来看,从网卡到内核空间,再到用户空间,整个过程就是内核将网卡中的数据包拷贝到应用程序。1.网卡网卡收到的是数据包的电信号,收到该电信号之后,会将该电信号转化为数字信息,然后进... 查看详情

linux内核网络发送技术栈(代码片段)

...层 邻居子系统数据包发送过程  系统调用send发送数据内核中内存拷贝协议处理送入驱动RingBuffer中断通知发送完成清理RingBuffer应用层send函数调用SYSCALL_DEFINE6(sendto,int,fd,void__user*,buff,size_t,len, unsignedint,flags,structsockaddr__user*,addr, ... 查看详情

linux网络数据包的揭秘以及常见的调优方式总结

...务异常时能快速定位问题。以tcp协议为例,本文将对Linux内核网络数据包接收的路径进行整理和说明,希望对大家所有帮助。Linux数据包接收路径的整体说明接收数据包是一个复杂的过程,涉及很多底层的技术细节,这里先做一下... 查看详情

3万字|34图|netty|内核角度看io模型(代码片段)

网络包收发过程.png当网络数据帧通过网络传输到达网卡时,网卡会将网络数据帧通过DMA的方式放到环形缓冲区RingBuffer中。RingBuffer是网卡在启动的时候分配和初始化的环形缓冲队列。当RingBuffer满的时候,新来的数据包就会被丢... 查看详情

linux内核网络udp数据包发送(代码片段)

本系列文章1-4,来源于陈莉君老师公众号“Linux内核之旅”1.前言本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过socket发送网络数据的过程。2.数据包发送... 查看详情

linux内核网络udp数据包发送(代码片段)

本系列文章1-4,来源于陈莉君老师公众号“Linux内核之旅”1.前言本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过socket发送网络数据的过程。2.数据包发送... 查看详情

linux之iptables(代码片段)

...包(datapackets)iptables使用: 用户--->调用iptables--->iptables内核模块--->Netfilter(系统安全框架)--->过滤请求4.什么是包过滤防火墙1.什么是包 在数据传输过程中,并不是一次性传输完成的,而是将数据分成若干... 查看详情

如何设计一个安全的对外接口?(转)(代码片段)

...安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。1.数据加密  我们知道数... 查看详情

用户态tcpdump如何实现抓到内核网络包的?(代码片段)

用户态tcpdump如何实现抓到内核网络包的?运行在用户态的程序tcpdump是如何实现抓到内核态的包的呢?https://mp.weixin.qq.com/s/ZX8Jluh-RgJXcVh3OvycRQ目录一、网络包接收过程找到tcpdump抓包点再找netfilter过滤点二、网络包发送过程找到ne... 查看详情

linux内核发包工具pktgen(代码片段)

pktgen使用说明内核路径net/core/pktgen.c作者对于pktgen的介绍:原作者编写的pdf介绍pktgen.c原理介绍pktgen运用了proc文件系统特征来实现用户和内核的交互,用户通过向proc中传输数据,内核接收到数据后进行解析按照预定义... 查看详情

linux内核创建一个进程的过程分析(代码片段)

...操作系统的原理是非常重要的,本文是我在学习linux内核中所做的笔记,如有错误还请大家批评指正。注:我所阅读的内核版本是0.11。一、关于PCB对于一个进程来说,PCB就好像是他的记账先生,当一个进程被... 查看详情

零拷贝摘录(代码片段)

...ationbuffer存在是没有意义的.而且这几个过程需要经历两次内核态切换数据不需要从内核态出来到用户态,只需要在内核态传输即可.这几次内核态的切换也没有存在的意义.2、0拷贝技术对上述场景做了优化这样的话,数据只需要在内... 查看详情

零拷贝原理详解(代码片段)

...于数据拷贝操作的,即I/O操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘I/O的操作,因为如果所请求的数据已经存放在操作系统的高... 查看详情

深入理解netfilter和iptables(代码片段)

...ter(配合iptables)使得用户空间应用程序可以注册内核网络栈在处理数据包时应用的处理规则,实现高效的网络转发和过滤。很多常见的主机防火墙程序以及Kubernetes的Service转发都是通过iptables来实现的。关于netfilter的... 查看详情

深入理解netfilter和iptables(代码片段)

...ter(配合iptables)使得用户空间应用程序可以注册内核网络栈在处理数据包时应用的处理规则,实现高效的网络转发和过滤。很多常见的主机防火墙程序以及Kubernetes的Service转发都是通过iptables来实现的。关于netfilter的... 查看详情

nginx中配置sendfile及详细说明

...dfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。在传统的文件传输方式(read、write/send方式),具体流程细节如下... 查看详情

linux内核中kcsan数据竞争检测(代码片段)

目录一、KCSAN:TheKernelConcurrencySanitizer 二、内核配置以及说明1、配置选项2、内核提供的测试用例3、检测输出4、检测解析三、锁的注意事项1、通过debugfs查看2、加锁注意事项3、LocalLocks四、锁的错误使用1、不正确的自旋锁用... 查看详情