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

Linux 内核的网络协议

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

2.7K50

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

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

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

如何学习 Linux 内核网络协议

协议的细节 下面将介绍一些内核网络协议中常常涉及到的概念。...如下图所示,每个网卡都有两端,一端是协议 (IP、TCP、UDP),另一端则有所区别,对物理网卡来说,这一端是网卡生产厂商提供的设备驱动程序,而对虚拟网卡来说差别就大了,正是由于虚拟网卡的存在,内核才能支持各种隧道封装...L3->L4 我们知道网络协议是分层的,但实际上,具体到实现,内核协议的分层只是逻辑上的,本质还是函数调用。...在内核网络子系统初始化时,L4 层协议 (如下面的 TCP 和 UDP) 会被注册: static struct net_protocol tcp_protocol = { .........Netfilter Netfilter 是报文在内核协议必然会通过的路径,我们从下面这张图就可以看到,Netfilter 在内核的 5 个地方设置了 HOOK 点,用户可以通过配置 iptables

1.3K20

如何学习 Linux 内核网络协议

1 协议的细节 下面将介绍一些内核网络协议中常常涉及到的概念。...如下图所示,每个网卡都有两端,一端是协议(IP、TCP、UDP),另一端则有所区别,对物理网卡来说,这一端是网卡生产厂商提供的设备驱动程序,而对虚拟网卡来说差别就大了,正是由于虚拟网卡的存在,内核才能支持各种隧道封装...L3->L4 我们知道网络协议是分层的,但实际上,具体到实现,内核协议的分层只是逻辑上的,本质还是函数调用。...在内核网络子系统初始化时,L4 层协议(如下面的 TCP 和 UDP)会被注册: static struct net_protocol tcp_protocol = { .........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 函数剖析

服务器端中调用recvfrom函数,并未指定发送端(客户端)的地址,换句话说这个函数是一个被动函数,有点类似于tcp协议中服务器listen 之后阻塞,等待客户端connect。...数据报)长度 truesize = skb->len; //读取长度检查设置,udp是面向报文的,其接收到的每个数据包都是独立的 //如果用户要求读取的小于可读取的,那么剩下的将被丢弃(本版本协议就是这么干的...//在tcp和udp协议下都可被调用 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,...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

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

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

1.1K10

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

/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP.../IP协议内,这些协议有什么关系呢,大家应该都知道是一种先进后出的数据结构,那这和TCP/IP协议有什么关系呢?...我们先将HTTP报文压入一个中(就好像是在分装报文),然后是IP,不对,我们貌似漏了一个传输层啊,别急别介,HTTP报文在传输层用的是TCP协议,好,我们把TCP压入中,再讲IP层也压入中,至于链路层的话...,就用最常见的以太网就OK了,好了,现在我们的里面从头至尾依次是以太帧头-IP协议-TCP协议-HTTP协议,然后我们先忽略最底层的物理层,假设这个封装好的一样的报文漂洋过海,来到了它的目的地(至于怎么过来的...因为这个报文是我们构造的一个,所以说它的顺序肯定也是,因此拿取的顺序就是以太帧头-IP协议-TCP协议-HTTP协议,发现没,最先被封装入的HTTP报文是最后才被拿出来的,这中间的细节如果能全部掌握

61620

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

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

1.8K21

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.3K10

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

48830

编译 Linux 内核启用 TCP BBR3

随着时间的推移 TCP BBR 已经来到了 v3 版本,但因为尚处于测试阶段所以目前相关代码并没有汇入主线内核中。现阶段如果需要提前体验 BBR v3 的话手动编译内核是免不了的。...从 Google 拉取完整的包含 TCP BBR v3 的内核源码,视网络情况这一步可能需要较长时间。...3.拷贝配置 我们的最终目的是编译开启 TCP BBR v3,并不是内核参数调优,所以直接拷贝 Debian 的内核参数即可。下载 Debian 6.5 内核到本机并使用 7z 打开。...make -j4 deb-pkg #可按照编译机 CPU 线程数设置编译线程 编译完成后在上层文件夹中会生成我们所需要的包含 BBRv3 模块的内核文件:linux-image-6.4.0-xxxx.deb...在任意机器上安装此内核即可启用 BBRv3 : dpkg -i linux-image-6.4.0-xxxx.deb # 文件名以实际为准 如何确认当前已启用的 BBR 版本: modinfo tcp_bbr

1.3K20

Linux】传输层协议:UDP和TCP

在网络通信中,通信的本质实际就是两台主机上的进程在网络环境中进行通信,也就是数据的传输,而我们总说TCP/IP协议,这两个协议分别解决了两个重要的问题,即一台主机如何在网络环境中标定自己的唯一性,一台主机中的某个进程如何在主机内部标定自己的唯一性...传输层和网络层都是在linux内核中实现的,而linux内核是用C语言实现的,那UDP报头实际就是一个结构体,结构体成员变量实际就是UDP报头中的各个字段值,所以在分用时,只需要让指针指向数据包的前8个字节...例如你在调用send sendto write时,实际上是把数据从你在应用层定义的缓冲区中拷贝到内核中的接收缓冲区,当数据继续向下贯穿协议时,传输层自己会将内核中的缓冲区的数据提取出来,然后添加上报头...1.2 网络协议linux系统的联系(以port为键值的开散列哈希表,哈希桶存储port对应的PCB的地址) 1....Linux内核协议其实为管理一个TCP连接,使用了两个队列,一个是半连接队列,一个是全连接队列,当全连接队列满了的时候,服务器无法再继续受理新到来的连接,只会维持一小段时间的半连接。

37030

用户态内核态、用户内核

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

1.7K20

uIP协议分析_协议

转载地址:http://blog.sina.com.cn/s/blog_abd39cc70101fj1f.html uIP特性 uIP协议往掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保存了网络通讯必须使用的协议...,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。...uIP协议与系统底层和高层应用之间的关系如图2-1所示。 从上图可以看出,uIP协议主要提供了三个函数供系统底层调用。...4.由于uIP协议需要使用时钟,为TCP和ARP的定时器服务。因此使用单片机的定时器0用作时钟,每20ms让计数TIck_cnt加1,这样,25次计数(0.5S)满了后可以调用TCP的定时处理程序。...uIP协议为C语言编写,编译过程中的题目比较少,并且轻易解决。 uIP的主控制循环 通过实际的代码说明uIP协议的主控制循环。

80620
领券