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

Linux内核网络udp数据包发送(一)

本系列文章1-4,来源于陈莉君老师公众号“Linux内核之旅” 1....前言 本文首先从宏观上概述了数据包发送流程,接着分析了协议层注册进内核以及被socket过程,最后介绍了通过 socket 发送网络数据过程。 2....数据包发送宏观视角 从宏观上看,一个数据包从用户程序到达硬件网卡整个过程如下: 使用系统调用(如 sendto,sendmsg 等)写数据 数据穿过socket 子系统,进入socket 协议族(protocol...sendmsg()函数作为分界点,处理逻辑从 AF_INET 协议族通用处理转移到具体 UDP 协议处理。 5. 总结 了解Linux内核网络数据包发送详细过程,有助于我们进行网络监控和调优。...本文只分析了协议层注册和通过 socket 发送数据过程,数据在传输层和网络层详细发送过程将在下一篇文章中分析。

4.2K51

Linux内核网络UDP数据包发送(四)——Linux netdevice 子系统

Linux 支持流量控制(traffic control)功能,此功能允许系统管理员控制数据包如何从机器发送出去。流量控制系统包含几组不同 queue system,每种有不同排队特征。...可以将 qdisc 视为调度程序, qdisc 决定数据包发送时间和方式。 Linux 上每个 device 都有一个与之关联默认 qdisc。...当 flow 所有 outstanding(需要确认数据包都已确认时,TCP 协议层将设置此标志。当发生这种情况时,内核可以为此数据包选择不同 TX 队列。...如果使用 setsockopt 带 IP_TOS 选项来设置在 socket 上发送 IP 包 TOS 标志( 或者作为辅助消息传递给 sendmsg,在数据包级别设置),内核会将其转换为 skb-...接下来,如果内核中已启用数据包分类 API,则代码会为 packet 分配 traffic class。接下来,检查 disc 是否有合适队列来存放 packet。

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

    Linux内核网络UDP数据包发送(三)——IP协议层分析

    前言 Linux内核网络 UDP 协议层通过调用 ip_send_skb 将 skb 交给 IP 协议层,本文通过分析内核 IP 协议层关键函数来分享内核数据包发送在 IP 协议层处理,并分享了监控...出于讨论目的,我们假设 nf_hook 返回 1,表示调用者(在这种情况下是 IP 协议层)应该自己发送数据包。 3.2 目的(路由)缓存 dst 代码在 Linux 内核中实现协议无关目标缓存。...此功能允许内核自动确定路由最大传输单元( MTU )。...总结 Linux内核网络数据包发送时,主要用到 ip_send_skb、 ip_local_out、ip_output、ip_finish_output、ip_finish_output2、 dst_neigh_output...等函数,本文通过分析这些函数来分享Linux内核数据包发送在 IP 层处理,并对 IP 层进行了数据监控。

    3.2K21

    Linux内核网络udp数据包发送(二)——UDP协议层分析

    前言 本文分享了Linux内核网络数据包发送在UDP协议层处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层数据统计和监控以及socket发送队列大小调优。...Linux 内核会使用一个数组将 TOS 转换为优先级,后者会影响数据包如何以及何时从 qdisc 中发送出去。...支持该特性网卡可以处理数据 被分散到多个 buffer 数据包;内核不需要花时间将多个缓冲区合并成一个缓冲区中。...接下来看看如何在 Linux 内核中监视和调优 UDP 协议层。 4....总结 本文重点分析了数据包传输层(UDP协议)发送过程,并进行了监控和调优,后面数据包将到达 IP 协议层,下次再分享,感谢阅读。

    5.8K51

    linux mail发送邮件_shell传输文件

    Linux发邮件之mail命令详解 发布于 2017-01-05 16:44:04 | 154 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一套免费使用和自由传播类Unix操作系统...它能运行主要UNIX工具软件、应用程序和网络协议。 这篇文章主要介绍了Linux发邮件之mail命令详解,详细讲解了mail命令用法等,非常具有实用价值,需要朋友可以参考下。...smtp: 指定第三方发送邮件smtp服务器地址 smtp-auth: SMTP认证方式。...linux命令详解之rpm命令参数使用方法 Linux命令详解之less命令 linux top命令详解 Linux进程管理命令详解 Linux chage命令详解 linux curl命令详解及实例分享...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    8.7K20

    Linux BSP实战课(网络篇):数据包发送过程

    本文将介绍在Linux系统中,以一个UDP包接收过程作为示例,介绍数据包是如何一步一步从应用程序到网卡并最终发送出去。 socket层 socket(...)...IP层 ip_send_skb:IP模块发送数据包入口,该函数只是简单调用一下后面的函数 __ip_local_out_sk:设置IP报文头长度和checksum,然后调用下面netfilter...通知网卡发送数据包 网卡发送完成后发送中断给CPU 收到中断后进行skb清理工作 在网卡驱动发送数据包过程中,会有一些地方需要和netdevice子系统打交道,比如网卡队列满了,需要告诉上层不要再发了...txqueuelen: 很多地方都说这个是控制qdisc里queue长度,但貌似只是部分类型qdisc用了该配置,如linux默认pfifo_fast。...满时候,会给上层调用返回NETDEV_TX_BUSY packet taps(AF_PACKET): 当第一次发送数据包和重试发送数据包时,都会经过这里。

    55520

    iptables是如何影响数据包传输?

    filter 表 用于对数据包进行过滤,控制到达某条链上数据包是继续放行、直接丢弃或拒绝(ACCEPT、DROP、REJECT),典型应用是防火墙。...ip段需要主机另一个网卡去发送OUTPUT 报文从应用程序发出时,但在路由前会被触发 POSTROUTIN发出报文经过路由后,会被触发 对每个链和表作用有了大致了解后,我们来细看下数据包流出流出过程中...数据包是如何穿越不同表和链数据包流入到应用程序,不需要经过转发首先来看下不需要经过转发场景,数据包是如何流动。...数据包流入与流出时需要经过转发接着我们再来看一下关于数据包转发场景,这里我用docker容器网桥和物理网卡举例,说明数据流入输出时是如何转发。...数据包从应用程序发往互联网接着最后来看下数据包从应用程序流出到互联网场景,注意一点,从应用程序发出去包虽然要路由判断,不过只有在经过natoutput链以后,路由才算真正被确认,因为dnat可以改变目的

    57730

    数据包远程传输抓包系统scratch

    数据包抓包过程可以通过工具使用完成。数据包data paragram通过计算机传输控制协议TCP 进行远程传输。数据传输控制协议对数据包分割,严格约束之后存放传输。...点对点传输称为TCP( Transform control protocal) 传输控制协议。传输控制协议在数据包开发传输端点到数据包目标传输端点。数据包是通过线路光纤或者是光缆进行有效传输。...现在移动基站蜂巢,通过移动数据波传输数据。端对端移动数据传输称之为TCP数据传输。TCP数据传输是数据单播操作。多播数据操作是一个数据节点发送数据包不同数据节点。...数据分包存放之后是会打包为不同数据包数据包可以想象为移动小车。数据通道通过网络带宽构建。网络私有网络互联公开会提供安全有效数据传输路径。数据与数据节点传输过程需要严格传输控制协议。...数据包有移动数据段fragment和数据驿站。数据传输有起点和终点,传输过程时间有长短。Java web中数据在服务器端是使用session进行存储。Session会话提供数据会话接口。

    15830

    内核“信号处理”——发送与响应

    硬件中断是硬件产生一个信号,经中断控制器APIC,发送到对应CPUINTR或NMI引脚,通知CPU有个中断发生了。...任何有权限用户或者进程都可以给另外一个进程发送信号,如使用kill命令。其内核实现也很简单。...至此,完成了信号发送。 那么,目的进程是如何“响应”信号呢?...从发送过程看到,信号只是简单加到当前线程task_struct结构中(struct sigpending属于task_struct)。...“信号”响应总结为一句话:应用态进程由于系统调用、中断或异常,而陷入内核态后,在返回应用态之前,内核会进行信号检查和处理。 PS: 本文中示例程序没有考虑代码健壮性。

    1.9K40

    Tcp是怎样进行可靠准确传输数据包

    概述 很多时候,我们都在说Tcp协议,Tcp协议解决了什么问题,在实际工作中有什么具体意义,想到了这些我想你技术会更有所提升,Tcp协议是程序员编程中最重要一块基石,Tcp是怎样进行可靠准确传输数据包呢...,最后序列号是用来追踪通信发起方发送数据包序号,接收方可以通过序列号向发送方确认某个数据包成功接收。...如果客户端在TIME-WAIT状态不等待一段时间,而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传FIN+ACK报文段,因而也不会再发送一次确认报文。...在确认时候,Ack每个数据包都要一一确认,效率太低了,客户端对发送每个数据包编一个号,编号由小到大单调递增,基于编号就能进行确认。...服务器会把数据包5,6,7暂时存放,直到数据包4到来,再给客户端回复Ack=7,如果数据包不来,服务器Ack进度会一直停在那(保持Ack=3),等客户端超时,会把数据包4,5,6,7,全部重新发送

    27063

    TFTP:简单文本传输协议数据包格式解析

    我们先看读请求和写请求数据包格式,首先是2字节表示操作码,它用来表示当前数据包类型,取值1表示该数据包是个读请求,2表示该数据包是;接下来是可变长字段,它用来表示要读取或上传文件名,它使用ASCII...码并以0表示结尾;第三个字段叫Mode,也是可变长字段,用来表示传输文件数据类型,如果传输是字符串文件,那么它填写字符串”netascii”,如果传输是二进制文件,那么它填写字符串”octet”,...我们看看对应wireshak抓包 接着我们看看传输数据块数据包,它头2字节也是操作码,取值3用于表示数据包用于数据块传输,接下来是2字节,用于表示数据块编号,最后是可变长字段Data,用于装载数据块...,该数据包格式如下: ?...,该数据包结构如下图: ?

    2.7K10

    查看linux版本内核 Linux内核版本变化

    linux内核 linux内核版本号格式  major.minor.patch-build.desc   1、major:表示主版本号,有结构性变化时才变更。   ...Linux内核版本变化 自从1991年9月17日,Linus Torvals正式宣布了 Linux第一个正式版本—0.02版本,到现在,Linux内核版本发生了一系列变化,新旧版本之间时间间隔是几个月甚至几个星期...从Linux诞生开始,Linux内核就从来没有停止过升级,从Linus第一次发布0.02版本到1999年具有里程碑意义2.2版本,一直到我们现在看到2.4版本,都凝聚了Linux内核开发人员大量辛苦劳动...现在Linux内核里已经开始了这方面的支持。...4.小内核 · 内核本来就很小:Linux整个内核源代码大概需要占用20多MB硬盘空间,但是编译出来二进制代码只占用600KB左右空间,完全可以放在一张软盘上,随时可以使用这张软盘将系统启动

    22.3K20

    linux 查询内核版本_linux内核版本号构成

    )简介  Linux内核版本命名在不同时期有着不同规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名规则以及如何查看Linux系统版本信息...Linux内核Linux kernel)简介 内核是操作系统核心 ,其主要功能有: 响应中断,执行中断服务程序 管理多个进程,调度和分享处理器时间 管理进程地址空间内存管理 网络和进程间通信等系统服务程序...内核活动范围: 运行于用户空间,执行用户进程 运行于内核空间,处于进程上下文,代表某个特定进程执行 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定中断 Linux内核版本号 第一种方式...: Linux 版本号分为两部分,即内核版本与发行版本。...Apr 13 09:27:15 UTC 2021:内核编译时间(build date)为 2021/04/13 09:27:15 3、在ARM Cortex-A7内核嵌入式Linux开发板下 Linux

    13.2K40

    Linux内核21-Linux内核中断处理过程

    中断处理 如前所述,我们知道异常处理还是比较简单,就是给相关进程发送信号,而且不存在进程调度问题,所以内核很快就处理完了异常。...Linux将中断要执行操作分为三类: 关键中断 比如响应PIC控制器发送中断,重新编程设置PIC或者设备控制器,更新设备和处理器访问数据结构等。...I/O中断处理基本步骤是: 保存IRQ值和内核态堆栈中寄存器值->恢复进程时候使用。 给PIC控制器发送应答,告知正在响应IRQ请求线,允许继续发送中断。 执行中断服务例程(ISR)。...为了统一处理这些硬件,Linux内核使用了面向对象编程思想,构建了一个PIC对象,包含PIC名称和7个PIC标准方法。...因此,Linux2.6内核使用一个特定内核线程叫kirqd进行纠正IRQ自动分配(如果有必要的话)。

    2.4K20

    C 语言实现 DNS 协议数据包发送和接收

    代码实现话说回来,如果想要真正实地发送 DNS 协议首先就是了解数据包结构。DNS 数据包中有报文头部和报文内容两部分,报文头部内容如下:其中前三行是报文头部,后边是报文内容。...因为网络协议我们一般使用大端字节序,而我们大多数电脑内存使用小端字节序,所以在自己传输数据时候需要进行转换。...,就是一个简单协议内容发送和接受。...图中是一个 dns 数据包情况,两个发送询问 s19.cnzz.com 另一个返回数据包。...我们先看发送数据包头部:数据包是应用层数据,所以在数据包内容最下方,上述图片是协议头部,跟我结构体一摸一样,其中 id 是 0x1209,flags 是 0x0100 , questions 是

    23710

    Linux内核20-Linux内核异常处理过程

    异常处理基本过程 当异常发生时,Linux内核给造成异常进程发送一个信号,告知其发生了异常。...比如,如果一个进程尝试除零操作,CPU会产生除法错误异常,相应异常处理程序发送SIGFPE信号给当前进程,然后由其采取必要步骤,恢复还是中止(如果该信号没有对应处理程序,则中止)。...但是,除了这些常规异常以外,Linux有时候会特意利用某些CPU异常管理硬件资源。...异常处理程序基本上都是下面这样代码:(所有的异常和中断处理函数都可以在linux\arch\x86\entry\entry_32.S文件中找到) handler_name: pushl $0...发送cld指令,清除eflags中DF方向标志,保证使用字符串指令时候,edi和esi寄存器自增加。 拷贝保存在堆栈esp+36处硬件错误码写入到edx寄存器中,并将该堆栈中值改写为-1。

    1.6K70
    领券