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

Linux 内核的网络协议

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

2.7K50

如何学习 Linux 内核网络协议

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

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

如何学习 Linux 内核网络协议

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

1.4K20

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 内核网络协议源码剖析】recvfrom 函数剖析

大家好,又见面了,我是你们的朋友全君。 继前篇介绍完sendto 数据发送函数 后,这里介绍数据接收函数 recvfrom。...数据报)长度 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

浅谈TCP IP协议(四)IP协议解析

通过之前的网络层基础知识,IP地址以及路由器的简介,大家应该对于TCP/IP有一个大致的了解,在脑海里应该对于网络的几个基础概念有个大概的了解,简单点说整个协议就是在做一件事,规定网络报文(网络传输中的数据报...)的发送和接收,而整个协议内的协议,也是可以分为之前介绍过的链路层-》网络层-》传输层-》应用层,在这每一层中都有很多不同的协议,但是最常用的协议,每一层就是一到两种,所以想学协议,先从每一层最常见,...最常用的开始学起: 链路层——以太网、VLAN 网络层——IP协议 传输层——TCP/UDP协议 应用层——HTTP协议 上面的几种协议,如果都能熟练掌握,那基本上就是入门并且偏上的水平了,所以接下来我们就逐一介绍各个协议...协议 4位首部长度:单位是4字节,一般取值为5 8位ToS字段:这个字段比较特殊,它相当于是报文的优先级或者是报文的服务类型,用来区分报文的业务类型,对于设备做QoS有着重大的意义。...8位协议:代表着这份IP报文承载着何种上层传输协议或者网络协议,常见的取值与对应关系如下: ICMP协议 IGMP协议 TCP协议 UDP协议 IGRP协议 16位首部校验和:用于检验收到的报文是否有差错

1.4K40

浅谈 Linux 内核无线子系统

浅谈 Linux 内核无线子系统 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢?...通常我们把 Linux 内核无线子系统看成两大块: cfg80211 和 mac80211 ,它们连通内核其他模块和用户空间的应用程序。...在套接字创建时,我们需要指明将要使用的协议族,这将在内核中起作用。...如果收到的帧是数据,它将被转换成 802.3 数据帧(通过 __ieee80211_data_to8023 实现),然后该数据帧将通过 netif_receive_skb 交付到网络协议。...在协议中,各层网络协议将会对数据进行解析,识别协议首部。 如果接收到的是控制帧,数据将会由 ieee80211_sta_rx_queued_mgmt 处理。

3.2K31

浅谈TCP IP协议(二)IP地址

上一节大致了解TCP/IP协议是个啥东西,依旧是雾里看花的状态,有很多时候学一门新知识时,开头总是很急躁,无从下手,刚学会一点儿,却发现连点皮毛都不算,成就感太低,所以任何时候学习最重要的是要在合适的时间掌握应该掌握的知识...先简单回顾一下,TCP/IP协议: 数据链路层->网络层->传输层->应用层 如果为每一层加上一个ID,就像每个人都有身份证那样,那么可以这样标记: 数据链路层(MAC地址) 网络层(IPV4地址,...以下简称IP地址) 传输层、应用层(端口) 这样的标签并不能完全概括这一层所有特征,但是如果掌握这些标示,就相当于是一把钥匙,可以让你快速打开这一层协议的“大门”。

1.1K10

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

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

1.7K21

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

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

1.8K30

Linux内核IO技术详解

这是《Linux系统调用那些事》高级部分的第一章《聊聊Linux IO》。高级部分的文章均假设读者完整的学习过Linux系统基础以及Linux系统编程相关的内容,并已有一定的工程实践经验。...图中描述了Linux下文件操作函数的层级关系和内存缓存层的存在位置。中间的黑色实线是用户态和内核态的分界线。...Linux内核中的IO 这一小节来看Linux内核的IO的结构。...先上一张全貌图[4]: 由图可见,从系统调用的接口再往下,Linux下的IO致大致有三个层次: 文件系统层,以 write 为例,内核拷贝了write参数指定的用户态数据到文件系统Cache中,并适时向下层同步...设备层,通过DMA与内存直接交互,完成数据和具体设备之间的交互 结合这个图,想想Linux系统编程里用到的Buffered IO、mmap、Direct IO,这些机制怎么和Linux IO联系起来呢

2.2K10

Linux 中的各种:进程 线程 内核 中断

各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 内核将这 4G 字节的空间分为两部分,将最高的 1G 字节(0xC0000000-0xFFFFFFFF)供内核使用,称为 内核空间。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...三、进程内核 在每一个进程的生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的并不是原先进程用户空间中的,而是一个单独内核空间的,这个称作进程内核

3.3K20

Linux 中的各种:进程 线程 内核 中断

各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 内核将这 4G 字节的空间分为两部分,将最高的 1G 字节(0xC0000000-0xFFFFFFFF)供内核使用,称为 内核空间。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...三、进程内核 在每一个进程的生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的并不是原先进程用户空间中的,而是一个单独内核空间的,这个称作进程内核

2.8K50

浅谈TCP IP协议(一)入门知识

这是什么玩意,但事实上报文就是这么的不讲道理,如果你面对的是这样一个个十六进制的字符,恐怕会疯的,因为你根本无从下手,所以我们需要分层次清晰得划分一下报文的结构,划分的层次如下: 那为什么要叫TCP/IP协议内...,这些协议有什么关系呢,大家应该都知道是一种先进后出的数据结构,那这和TCP/IP协议有什么关系呢?...我们先将HTTP报文压入一个中(就好像是在分装报文),然后是IP,不对,我们貌似漏了一个传输层啊,别急别介,HTTP报文在传输层用的是TCP协议,好,我们把TCP压入中,再讲IP层也压入中,至于链路层的话...,就用最常见的以太网就OK了,好了,现在我们的里面从头至尾依次是以太帧头-IP协议-TCP协议-HTTP协议,然后我们先忽略最底层的物理层,假设这个封装好的一样的报文漂洋过海,来到了它的目的地(至于怎么过来的...因为这个报文是我们构造的一个,所以说它的顺序肯定也是,因此拿取的顺序就是以太帧头-IP协议-TCP协议-HTTP协议,发现没,最先被封装入的HTTP报文是最后才被拿出来的,这中间的细节如果能全部掌握

61420

浅谈TCP IP协议(三)路由器简介

读完这个系列的第一篇浅谈TCP/IP协议(一)入门知识和第二篇浅谈TCP/IP协议(二)IP地址,在第一篇中,可能我对协议中这个的解释有问题,在数据结构中是一种先进后出的常见结构,而在整个TCP.../IP协议中,在封装报文时就相当于是压操作,而在报文解析过程中,则是一个出的过程,在封装是最先被压进中的应用层协议,在解析报文时,也是最后从中读取出来并解析的。...好了,言归正传,我们先看一下路由器的主要功能是什么: 路由器的主要功能是路由选择和报文转发,这种功能的实现需用到路由协议。...路由协议是路由器之间维护路由表的规则,用于发现路由,并生成相应的路由表,同时知道报文的转发。路由协议决定路由表中存放那些路由信息。 简单点说,路由器的功能就是两点:路由,转发。

48630

用户态内核态、用户内核

二、用户内核 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每一个进程都有两个,一个用户,存在于用户空间;一个内核,存在于内核空间。...当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容都是用户地址,使用用户;当进程在内核空间时,CPU堆栈指针寄存器里面的内容是内核空间地址,使用内核。...进程陷入到内核态后,先把用户态堆栈的地址保存在内核之中,然后设置堆栈指针寄存器的内容为内核的地址,这样就完成了用户内核的转换;当进程从内核态恢复到用户态之后时,在内核态之后的最后将保存在内核里面的用户的地址恢复到堆栈指针寄存器即可...这样就实现了用户内核的互转。 那么,知道从内核转到用户态时,用户的地址是在陷入内核的时候保存在内核里面的,但是在陷入内核的时候,如何知道内核的地址?...所以在进程陷入内核的时候,直接把内核顶地址给堆栈指针寄存器就可以了。

1.7K20

uIP协议分析_协议

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

80020

一文搞懂 | Linux 中的各种(进程 线程 内核 中断

各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 内核将这 4G 字节的空间分为两部分,将最高的 1G 字节(0xC0000000-0xFFFFFFFF)供内核使用,称为 内核空间。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...三、进程内核 在每一个进程的生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的并不是原先进程用户空间中的,而是一个单独内核空间的,这个称作进程内核

4.5K20
领券