linux 内核网络数据包接收流程】的更多相关文章

转:https://segmentfault.com/a/1190000008836467 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例. 本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别) 网卡到内存 网卡需…
Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO.DMA等组成,其中网线通过变压器接PHY芯片.PHY芯片通过MII接MAC芯片.MAC芯片接PCI总线 PHY/MAC芯片 PHY芯片主要负责:CSMA/CD.模数转换.编解码.串并转换 MAC芯片主要负责: 比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFD CRC校验 P…
本文主要讲解了Linux内核二层数据包接收流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了二层数据包接收的流程,希望可以对大家有所帮助.阅读本文章假设大家对C语言有了一定的了解 整体流程如下: 数据报文接收流程伪代码分析如下 /*在基于中断收发报文的网卡设备驱动中, * 当有数据报文进来的时候,使用net_interrupt()进行中断触发 *如 isa-skeleton设备驱动中*/ static int __init netcar…
  各层主要函数以及位置功能说明:       1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base.      net/socket.c       2)sock_recvmsg: 调用函数指针sock->ops->recvmsg()完成在INET Socket层的数据接收过程.其中sock->ops被初始化为inet_stream_ops,其成员recvmsg对应的函数实现为inet_r…
https://mp.weixin.qq.com/s/boRWlx1R7TX0NLuI2sZBfQ 作为业务 SRE,我们所运维的业务,常常以 Linux+TCP/UDP daemon 的形式对外提供服务.SRE 需要对服务器数据包的接收和发送路径有全面的了解,以方便在服务异常时能快速定位问题.以 tcp 协议为例,本文将对 Linux 内核网络数据包接收的路径进行整理和说明,希望对大家所有帮助. Linux 数据包接收路径的整体说明 接收数据包是一个复杂的过程,涉及很多底层的技术细节 , 这里…
Preface   Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计. Linux内核采用分层结构处理网络数据包.分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护. 内核网络结构 在Linux内核中,对网络部分按照网络协议层.网络设备层.设备驱动功能层和网络媒介层的分层体系设计. 网络驱动功能层主要通过网络驱动程序实现. 在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作.    net_device结构表示…
Preface   Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计. Linux内核采用分层结构处理网络数据包.分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护. 内核网络结构 在Linux内核中,对网络部分按照网络协议层.网络设备层.设备驱动功能层和网络媒介层的分层体系设计. 网络驱动功能层主要通过网络驱动程序实现. 在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作.    net_device结构表示…
Preface Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计. Linux内核采用分层结构处理网络数据包.分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护. 一.内核网络结构 在Linux内核中,对网络部分按照网络协议层.网络设备层.设备驱动功能层和网络媒介层的分层体系设计. 网络驱动功能层主要通过网络驱动程序实现. 在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作. net_device结构表示网络设…
本文主要内容:简单分析NAPI的原理和实现. 内核版本:2.6.37 Author:zhangskd @ csdn 概述 NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入. 简单来说,NAPI是综合中断方式与轮询方式的技术. 中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件:缺点是数据量大时,会产生过多中断, 而每个中断都要消耗不少的CPU时间,从而导致效率反而不如轮询高.轮询方式与中断方式相反,它更适合…
C++版的网络数据包解析策略(升级版) 一.数据包格式形如下图 二.代码 int ReceiveFromRemoteEndPoint() { int nPackageDataLength = ; char *szPackageCleaner = NULL; char *szPackageIterator = NULL; do { char *szReceiveArray = new char[RECEIVED_BUFFER_LENGTH](); int nReceiveLength = RECE…