首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核的网络协议

前言 本文主要记录 Linux 内核网络协议的运行原理 数据报文的封装与分用 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议中,然后逐一通过 TCP/IP 协议族的每层直到被当作一串比特流送入网络...分用:当目的主机收到一个以太网数据帧时,数据就开始从内核网络协议中由底向上升,同时去掉各层协议加上的报文首部。每层协议都会检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用。...Linux 内核网络协议 协议的全景图 协议的分层结构 逻辑抽象层级: 物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等。...网络协议层(Network protocols):对应 IP layer 和 Transport layer。毫无疑问,这是整个内核网络协议的核心。...网络协议初始化流程 这需要从内核启动流程说起。

2.7K50

Linux 内核网络协议源码剖析】recvfrom 函数剖析

一、应用层——recvfrom 函数 对于这个函数有必要分析一下,先看看这个dup例子。...数据报)长度 truesize = skb->len; //读取长度检查设置,udp是面向报文的,其接收到的每个数据包都是独立的 //如果用户要求读取的小于可读取的,那么剩下的将被丢弃(本版本协议就是这么干的...shouldn't happen but .. */ *err=-EAGAIN; } return skb;//返回该数据包 } skb_copy_datagram() //将内核缓冲区中数据复制到用户缓冲区...FREE_READ);//否则释放该数据包所占用的内存空间 restore_flags(flags);//恢复现场 } 对比数据包的发送与接收,发送过程就是把数据从缓冲区拷贝到数据包的数据部分,由于需要经过协议...发布者:全程序员长,转载请注明出处:https://javaforall.cn/163441.html原文链接:https://javaforall.cn

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

如何学习 Linux 内核网络协议

协议的细节 下面将介绍一些内核网络协议中常常涉及到的概念。...sk_buff 结构自身并不存储报文内容,它通过多个指针指向真正的报文内存空间: sk_buff 是一个贯穿整个协议层次的结构,在各层间传递时,内核只需要调整 sk_buff 中的指针位置就行。...而这里提到的 socket 和 sock 是内核中的两个数据结构,其中 socket 向上面向用户,而 sock 向下面向协议。 如下图所示,这两个结构实际上是一一对应的。...L3->L4 我们知道网络协议是分层的,但实际上,具体到实现,内核协议的分层只是逻辑上的,本质还是函数调用。...Netfilter Netfilter 是报文在内核协议必然会通过的路径,我们从下面这张图就可以看到,Netfilter 在内核的 5 个地方设置了 HOOK 点,用户可以通过配置 iptables

1.4K20

如何学习 Linux 内核网络协议

1 协议的细节 下面将介绍一些内核网络协议中常常涉及到的概念。...sk_buff 结构自身并不存储报文内容,它通过多个指针指向真正的报文内存空间: sk_buff 是一个贯穿整个协议层次的结构,在各层间传递时,内核只需要调整 sk_buff 中的指针位置就行。...而这里提到的 socket 和 sock 是内核中的两个数据结构,其中 socket 向上面向用户,而 sock 向下面向协议。 如下图所示,这两个结构实际上是一一对应的。...L3->L4 我们知道网络协议是分层的,但实际上,具体到实现,内核协议的分层只是逻辑上的,本质还是函数调用。...Netfilter Netfilter 是报文在内核协议必然会通过的路径,我们从下面这张图就可以看到,Netfilter 在内核的 5 个地方设置了 HOOK 点,用户可以通过配置 iptables

1.4K20

Linux内核源码分析方法

Linux内核源码分析方法 一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。...我也是通过一个项目接触了Linux内核源码分析,从源码分析工作中,我受益颇多。除了获取相关的内核知识外,也改变了我对内核代码的过往认知: 1.内核源码分析并非“高不可攀”。...内核源码分析的难度不在于源码本身,而在于如何使用更合适的分析代码的方式和手段。...目前的Linux源码会把模块相关的文档说明保存在源码目录的documention的文件夹下,如果待分析的模块没有文档说明,这多少会增加定位关键源码文件的难度,但是不会导致我们找不到我们要分析源码。...通过这种方式,不断的对内核的其他模块分析,最后综合得到自己对Linux内核的理解,也就达到了我们学习Linux内核的目的。 最后向大家推荐两本学习内核的参考书。

5.2K70

uIP协议分析_协议

由于uIP协议专门为嵌进式系统而设计,因此还具有如下优越功能: (1) 代码非常少,其协议代码不到6K,很方便阅读和移植。 (2) 占用的内存数非常少,RAM占用仅几百字节。...由于uIP对资源的需求少和移植轻易,大部分的8位微控制器都使用过uIP协议, 而且很多的著名的嵌进式产品和项目(如卫星,Cisco路由器,无线传感器网络)中都在使用uIP协议。...uIP协议与系统底层和高层应用之间的关系如图2-1所示。 从上图可以看出,uIP协议主要提供了三个函数供系统底层调用。...具体驱动分析可参考《第三章 网络芯片的驱动》。 4.由于uIP协议需要使用时钟,为TCP和ARP的定时器服务。...uIP协议为C语言编写,编译过程中的题目比较少,并且轻易解决。 uIP的主控制循环 通过实际的代码说明uIP协议的主控制循环。

80820

Linux操作系统原理—内核网络协议

前言 本文主要记录 Linux 内核网络协议的运行原理 数据报文的封装与分用 image.png 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议中,然后逐一通过 TCP/IP...image.png 分用:当目的主机收到一个以太网数据帧时,数据就开始从内核网络协议中由底向上升,同时去掉各层协议加上的报文首部。每层协议都会检查报文首部中的协议标识,以确定接收数据的上层协议。...image.png Linux 内核网络协议 协议的全景图 image.png 协议的分层结构 image.png image.png 逻辑抽象层级: 物理层:主要提供各种连接的物理设备,如各种网卡...网络协议层(Network protocols):对应 IP layer 和 Transport layer。毫无疑问,这是整个内核网络协议的核心。...image.png sock_init() 包含了内核协议的初始化工作: sock_init:Initialize sk_buff SLAB cache,注册 SOCKET 文件系统。

3K00

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

大家好,又见面了,我是你们的朋友全君。...文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...Code ) 博客 , 安装 VSCode 软件 ; 打开 VSCode , 选择 ” 菜单栏 / 文件 / 打开文件夹 ” 选项 , 选择 Linux 内核源码目录 , 点击 ” 选择文件夹 ”...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ; 发布者:全程序员长,转载请注明出处:https://javaforall.cn/163620.html原文链接:https

23.2K32

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...VSCode 阅读 Linux 内核源码 ---- 参考 【开发环境】安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio...Code ) 博客 , 安装 VSCode 软件 ; 打开 VSCode , 选择 " 菜单栏 / 文件 / 打开文件夹 " 选项 , 选择 Linux 内核源码目录 , 点击 " 选择文件夹 "...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

Linux源码解析-内核与thread_info结构详解

1.什么是进程的内核?...在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的),而是使用内核空间中的,这个就是进程的内核 2.进程的内核在计算机中是如何描述的?...void *stack; // 指向内核的指针 // ... }; task_struct数据结构中的stack成员指向thread_union结构(Linux内核通过thread_union...信息, linux内核是支持不同体系的的, 但是不同的体系结构可能进程需要存储的信息不尽相同, 这就需要我们实现一种通用的方式, 我们将体系结构相关的部分和无关的部门进行分离,用一种通用的方式来描述进程...进程通过alloc_thread_info函数分配它的内核,通过free_thread_info函数释放所分配的内核,查看源码 alloc_thread_info函数通过调用__get_free_pages

2.4K10

Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后的...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统的 Linux 内核版本号 , 执行过程如下 : root@ubuntu...x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前的内核版本号是 4.13.0 ; 三...、进入并查看 linux 内核源码目录 ---- 进入之前解压的 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14 linux-5.6.14

86.8K60

Linux网络数据转发平面的变迁-从内核协议到DPDKXDP

网络协议,管理网络IO。 磁盘驱动,... ......以网络协议为例: 各类链表在多CPU环境下的同步开销。 不可睡眠的软中断路径过长。 sk_buff的分配和释放。 内存拷贝的开销。 上下文切换造成的cache miss。 ......如此一来,内核协议就不再参与数据平面的事了,留下来专门处理诸如路由协议,远程登录等控制平面和管理平面的数据流,妥妥的。...自2012年开始我就一直在关注Linux网络协议转发平面的性能优化,那个时代所谓的网络优化几乎都是基于Linux内核协议的优化,在还没有智能网卡,DPDK也不火爆的时代,能做的只是优化协议,当时除了华为等大厂也很少有做这块工作的...,像BAT这种互联网公司开始迭代的第一代云网络也都是从内核协议起步的,即便如此也很少有人专门做这块。

1.8K21

Linux Tcp 内核协议学习三种武器 之 Packet Drill

Linux阅码场原创文章 Linux TCP 内核协议是一个非常复杂的实现, 不但沉淀了过去20多年的设计与实现,同时还在不停的更新。相关的RFC与优化工作一直还在进行中。...如何研究和学习Linux TCP内核协议这样一块硬骨头就成了一大难题。 当然最重要也是最基本的还是要阅读相关的RFC和内核中的代码实现。这个是最最基本的要求。...想要驯服TCP 内核协议这样的monster 仅仅浏览和静态分析代码是完全不够的。...Google 在2013 年发布了TCP 内核协议 测试工具 Packet Drill。这个工具是名副其实,大大的简化了学习和测试TCP 内核协议的难度。..., 并对接收到的来自目标系统TCP 内核协议 的报文进行校验,来确定是否通过测试。

1.8K30
领券