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

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

前言 本文主要记录 Linux 内核网络协议的运行原理 数据报文的封装与分用 image.png 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议中,然后逐一通过 TCP/IP...image.png Linux 内核网络协议 协议的全景图 image.png 协议的分层结构 image.png image.png 逻辑抽象层级: 物理层:主要提供各种连接的物理设备,如各种网卡...此函数协议主要的注册函数: rc = proto_register(&udp_prot, 1);:注册 INET 层 UDP 协议,为其分配快速缓存。...协议发包流程概述 1、应用层可以通过系统调用接口层或文件操作来调用内核函数,BSD socket 层的 sock_write() 会调用 INET socket 层的 inet_wirte()。...4、在链路层中,函数调用会调用具体设备提供的发送函数来发送数据包,e.g. dev->hard_start_xmit(skb, dev);。具体设备的发送函数协议初始化的时候已经设置了。

3.2K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    大家好,又见面了,我是你们的朋友全君。 继前篇介绍完sendto 数据发送函数 后,这里介绍数据接收函数 recvfrom。...服务器端中调用recvfrom函数,并未指定发送端(客户端)的地址,换句话说这个函数是一个被动函数,有点类似于tcp协议中服务器listen 之后阻塞,等待客户端connect。...(本版本协议就是这么干的) copied = min(len, truesize); /* * FIXME : should use udp header size info value...文件下)或没有明确指明只与udp协议相关的函数则都是通用的 //在tcp和udp协议下都可被调用 struct sk_buff *skb_recv_datagram(struct sock *sk,...restore_flags(flags);//恢复现场 } 对比数据包的发送与接收,发送过程就是把数据从缓冲区拷贝到数据包的数据部分,由于需要经过协议,所以对于数据部分区域还需要进行数据封装,添加各层的协议

    2.1K20

    Linux 内核的网络协议

    前言 本文主要记录 Linux 内核网络协议的运行原理 数据报文的封装与分用 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议中,然后逐一通过 TCP/IP 协议族的每层直到被当作一串比特流送入网络...Linux 内核网络协议 协议的全景图 协议的分层结构 逻辑抽象层级: 物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等。...start_kernel() 函数中初始化硬件相关的代码,完成 Linux Kernel 环境的建立。...协议发包流程概述 1、应用层可以通过系统调用接口层或文件操作来调用内核函数,BSD socket 层的 sock_write() 会调用 INET socket 层的 inet_wirte()。...4、在链路层中,函数调用会调用具体设备提供的发送函数来发送数据包,e.g. dev->hard_start_xmit(skb, dev);。具体设备的发送函数协议初始化的时候已经设置了。

    3K61

    网络数据包的接收过程

    Linux 网络架构 Linux 网络初始化 网络设备子系统初始化 网卡驱动初始化 协议初始化 数据包的接收过程 硬中断处理 ksoftirqd 软中断处理 协议处理 应用层处理 总结 这里深度理解一下在...Linux 网络架构 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...网络协议是通过函数 inet_init() 注册的,通过inet_init,将这些函数注册到了inet_protos和ptype_base数据结构中了。...() 进入内核协议。...总结 首先在开始收包之前,Linux要做许多的准备工作: 创建ksoftirqd线程,为它设置好它自己的线程函数,后面指望着它来处理软中断呢 协议注册,linux要实现许多协议,比如arp,icmp,

    39411

    不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux篇)

    对于Linux来说,它实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议来实现网络层和传输层。...4、网络数据到来前操作系统的准备 Linux驱动、内核协议等等模块在具备接收网卡数据包之前,要做很多的准备工作才行。...5.3 网络协议处理 netif_receive_skb函数会根据包的协议,假如是udp包,会将包依次送到ip_rcv(),udp_rcv()协议处理函数中进行处理。...7、本文小结 网络模块是操作系统内核中最复杂的模块了,看起来一个简简单单的收包过程就涉及到许多内核组件之间的交互,如网卡驱动、协议、内核ksoftirqd线程等,看起来很复杂。...首先在开始收包之前,操作系统要做许多的准备工作(以Linux为例): 1)创建ksoftirqd线程,为它设置好它自己的线程函数,后面指望着它来处理软中断呢; 2)协议注册,linux要实现许多协议

    2.2K31

    图解Linux网络包接收过程

    Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...图1 Linux视角的网络协议Linux的源代码中,网络设备驱动对应的逻辑位于driver/net/ethernet, 其中intel系列网卡的驱动在driver/net/ethernet/intel...二 Linux启动 Linux驱动,内核协议等等模块在具备接收网卡数据包之前,要做很多的准备工作才行。...3.3 网络协议处理 netif_receive_skb函数会根据包的协议,假如是udp包,会将包依次送到ip_rcv(),udp_rcv()协议处理函数中进行处理。...协议注册,linux要实现许多协议,比如arp,icmp,ip,udp,tcp,每一个协议都会将自己的处理函数注册一下,方便包来了迅速找到对应的处理函数 3.

    4.8K73

    Linux内核UDP收包为什么效率低?性能怎么优化(超详细讲解)

    现在很多人都在诟病Linux内核协议收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议,他们的武器貌似只有DPDK。...但是,即便Linux内核协议收包效率真的很低,这是为什么?有没有办法去尝试着优化?而不是动不动就DPDK。 我们从最开始说起。...Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知道怎么回事将网络协议的实现塞进了内核态,从此它就一直在内核态了。...内核学习网站: Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议-学习视频教程-腾讯课堂​ke.qq.com/course/4032547?...这两点其实也就是 “为什么内核协议性能干不过用户态协议” 的要点。当然,Linux内核协议无法摆脱这两点问题,也就回答了本文的题目中的第一个问题, “Linux内核UDP收包为什么效率低?”

    1.8K20

    网络数据包的接收过程

    Linux 网络架构 Linux 网络初始化 网络设备子系统初始化 网卡驱动初始化 协议初始化 数据包的接收过程 硬中断处理 ksoftirqd 软中断处理 协议处理 应用层处理 总结 这里深度理解一下在...Linux 网络架构 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...网络协议是通过函数 inet_init() 注册的,通过inet_init,将这些函数注册到了inet_protos和ptype_base数据结构中了。...() 进入内核协议。...总结 首先在开始收包之前,Linux要做许多的准备工作: 创建ksoftirqd线程,为它设置好它自己的线程函数,后面指望着它来处理软中断呢 协议注册,linux要实现许多协议,比如arp,icmp,

    37411

    Linux内核UDP收包为什么效率低?能做什么优化?

    现在很多人都在诟病Linux内核协议收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议,他们的武器貌似只有DPDK。...但是,即便Linux内核协议收包效率真的很低,这是为什么?有没有办法去尝试着优化?而不是动不动就DPDK。 我们从最开始说起。...Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知道怎么回事将网络协议的实现塞进了内核态,从此它就一直在内核态了。...这两点其实也就是 “为什么内核协议性能干不过用户态协议” 的要点。当然,Linux内核协议无法摆脱这两点问题,也就回答了本文的题目中的第一个问题, “Linux内核UDP收包为什么效率低?”...落实到代码上,那就是在进程上下文的recvmsg函数中直接调用napi的收包函数,从ring buffer里拿数据,自己调用netif_receive_skb

    3.2K61

    虚拟网络设备与Linux网络协议

    Linux网络协议则是操作系统处理网络通信的核心,它支持广泛的协议和网络服务,确保数据正确地在网络中传输。...Linux网络协议概述 Linux网络协议操作系统的一部分,负责实现各种网络协议,如IP、TCP、UDP等,以及网络数据的发送和接收。...网络协议从物理层一直延伸到应用层,处理网络数据包的每一个步骤️。协议使得Linux系统能够在不同的网络环境中通信,支持广泛的网络应用。3....虚拟网络设备与Linux网络协议的关联 虚拟网络设备与Linux网络协议之间的关联,是实现高效网络通信的关键。...性能优化:虚拟网络设备的性能优化密切依赖于Linux网络协议的优化⚡。

    12410

    (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?

    Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能...Netfilter使用NF_HOOK(include/linux/netfilter.h)宏在协议内部切入到Netfilter框架中。...在include/linux/socket.h中IP协议AF_INET(PF_INET)的序号为2,因此我们就可以得到TCP/IP协议族的钩子函数挂载点为: PRE_ROUTING: nf_hooks...,从协议正常的流程切入到Netfilter框架中,然后顺序、依次去调用每个HOOK点所有的钩子函数的相关操作有如下几处: net/ipv4/ip_input.c里的ip_rcv函数。...小节:整个Linux内核中Netfilter框架的HOOK机制可以概括如下: 在数据包流经内核协议的整个过程中,在一些已预定义的关键点上PRE_ROUTING、LOCAL_IN、FORWARD、LOCAL_OUT

    2.1K21

    Linux 网络子系统

    今天分享一篇经典Linux协议文章,主要讲解Linux网络子系统,看完相信大家对协议又会加深不少,不光可以了解协议处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异...Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...Linux 网络协议 基于TCP/IP协议的send/recv在应用层,传输层,网络层和链路层中具体函数调用过程已经有很多人研究,本文引用一张比较完善的图如下: 以上说明基本大致说明了TCP/IP...2.协议注册,linux要实现许多协议,比如arp,icmp,ip,udp,tcp,每一个协议都会将自己的处理函数注册一下,方便包来了迅速找到对应的处理函数 3.网卡驱动初始化,每个驱动都有一个初始化函数...() 8、网卡驱动通过netif_receive_skb()将sk_buff上送协议 Linux网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX

    3.6K21
    领券