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

教你动手写网络协议栈-UDP报文解析

大家可以买本书,或者下面链接获取:https://gitee.com/RiceChen0/e-book [9_.png] UDP理论讲解 UDP报文的交付 用户使用UDP来传输数据是,UDP协议会在数据前加上首部组成...UDP报文,并交给IP协议来发送,而IP层将报文封装在IP数据包中并交给底层发送,在底层中,IP数据报会被封装在数据的数据帧中,可看出一个用户数据要通过UDP报文发送,需要经历三次封装过程,如下图: [...1_.png] 接下来我们我们一一讲解每一层的格式: UDP报文格式 UDP报文成为用户数据报,用户数据报的结构分为两部分:UDP首部+UDP数据区,如下图为UDP报文的结构。...[2_.png] UDP伪首部 UDP校验和的计算超出UDP报文本身,为了计算校验和,UDP引入了伪首部的概念。伪首部的组成如下图。...(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)。 源IP地址、目标IP地址字段:各占32bit。标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。

1.9K30

教你动手写UDP协议栈-DNS报文解析

教你动手写UDP协议栈系列文章 序号内容1《教你动手写UDP协议栈-UDP协议栈格式》2《教你动手写UDP协议栈-DHCP报文解析》3《教你动手写UDP协议栈-OTA上位机》4《教你动手写UDP协议栈-...可以看到两包DNS报文,一个是DNS发送报文,一个是DNS接收报文 发送报文 接收报文 发送报文和接收报文格式是不一样的,从上面截图可以看到,接收报文多一个Answers字段。...DNS可以使用UDP与TCP两种协议。这里我们主要以UDP进行分析。...DNS报文字段解析 DNS报文格式: DNS字段格式: 发送报文 接收报文 DNS报文头部 字段说明 字段说明Transaction ID辨别DNS应答报文是哪个请求报文的响应QRFlags字段...报文发送 mini_udp_output(&dest_info, dns_packet, (DNS_HDR_SIZE + dns_name_len + DNS_QUERY_SIZE));

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

教你动手写UDP协议栈-CoAP报文解析5

教你动手写UDP协议栈系列文章 序号内容1《教你动手写UDP协议栈-UDP协议栈格式》2《教你动手写UDP协议栈-DHCP报文解析》3《教你动手写UDP协议栈-OTA上位机》4《教你动手写UDP协议栈-...DNS报文解析》4《教你动手写UDP协议栈-CoAP报文解析 背景 CoAP(Constrained Application Protocol),它属于网络协议栈中应用层协议,它使那些被称为“节点”的受限设备能够使用类似的协议与更广泛的互联网进行通信...c.dd结构Message ID2byte报文编号,每个报文都有一个ID ,重发的消息ID不变Token0~8byte可选,用于将响应与请求匹配。...这种方式有点类似UDP,用以不可靠消息传输。...CoAP请求报文采用CON报文,Server接收到CON报文必须返回一个ACK报文。 CoAP请求采用0.01 GET方法,若操作成功CoAP Server返回2.05 Content。

1K10

TCP报文头部(sip协议端口号是tcp还是udp)

今天说一说TCP报文头部(sip协议端口号是tcp还是udp),希望能够帮助大家进步!!!...: eg: ①使用xshell连接VMware中的Linux时,当xshell连接时选择ssh复制生成的终端属于会话。...PORT 1)传输层通过port号,确定应用层协议 2)Port number: 3)tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路    0-65535 4)udp...49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer), 1521/tcp(oracle),3306/tcp(mysql)11211/tcp/udp...此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿 进程类似) Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核参数: /proc/sys/net/ipv4/tcp_max_orphans

2.1K10

Linux数据报文的来龙去脉

作者:gfree.wind@gmail.com 作为网络领域的开发人员,我们经常要与Linux的数据报文打交道,一定要搞清楚数据报文是从何而来,又是如何离去。...而四层协议icmp、udp、tcp也是在inet初始化阶段,调用inet_add_protocol注册。 那么,报文接收的流程如下: 1....通过检查后,将报文发给本机的raw socket。 7. 根据四层协议类型,调用匹配的四层协议处理函数。对于UDP报文来说,就是udp_rcv。 8. 根据源端口和目的端口,确定socket套接字。...调用ip_make_skb,申请一个skb用于发送报文,并填充了IP头。 6. 调用udp_send、ip_send_skb,填充UDP报文头,计算IP头的checksum等。 7....通过以上四个分解的流程图,相信大家对于Linux数据报文的来龙去脉,有了一定的了解。如在文章开头所云,这些流程图都做了必要的简化。在很多步骤都可以进行展开,也涉及了更多细节。

3.7K91

Linux数据报文的来龙去脉

作者:gfree.wind@gmail.com 作为网络领域的开发人员,我们经常要与Linux的数据报文打交道,一定要搞清楚数据报文是从何而来,又是如何离去。...而四层协议icmp、udp、tcp也是在inet初始化阶段,调用inet_add_protocol注册。 那么,报文接收的流程如下: 1....通过检查后,将报文发给本机的raw socket。 7. 根据四层协议类型,调用匹配的四层协议处理函数。对于UDP报文来说,就是udp_rcv。 8. 根据源端口和目的端口,确定socket套接字。...调用ip_make_skb,申请一个skb用于发送报文,并填充了IP头。 6. 调用udp_send、ip_send_skb,填充UDP报文头,计算IP头的checksum等。 7....通过以上四个分解的流程图,相信大家对于Linux数据报文的来龙去脉,有了一定的了解。如在文章开头所云,这些流程图都做了必要的简化。在很多步骤都可以进行展开,也涉及了更多细节。

1.7K30

linux udp编程_linux中socket编程

在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。...一、UDP通信中服务端和客户端的基本编程框架 与TCP相比较,UDP是面向无连接的通信方式,不需要connect、listen、accept等函数操作,不用维护TCP的连接、断开等状态。...3、关于服务端的bind操作,在存在组播,多播等多种通信方式的情况下,也还有一些需要注意的点,这个我们在下面的章节中描述 二、UDP通信的基本函数说明 在UDP中,完成一个基本的通信涉及到的几个函数如下...三、UDP中组播的使用 单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。...中广播的使用 UDP广播与普通的UDP通信区别不是很大,如果需要发送广播消息时,只需要在创建完socket后,配置一下套接字,允许进行发送广播消息,上代码 int set_broadcast = 1;

11K10

Linux| |对于UDP的学习

端口 https服务器,使用443端口 操作系统动态分配的端口号 客户端服务器的端口号,这个范围的端口号操作系统可以对其进行分配 查看端口号 less /etc/services //就可以查看Linux...协议 UDP协议端格式 插图:UDP协议端格式 16为UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度(64KB) 检验和:如果校验和出错,就会直接丢弃(检验的是把首部和数据部分一起都检验...,数据传输效率高 面向数据报 应用层交给UDP多长的报文UDP原样发送,既不会拆分也不会合并 例:用UDP传输100个字节的数据 如果发送端调用一次sendto,发送100个字节。...但是这个接收缓存区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓存区满了,在到达的UDP数据就会被丢弃 UDP的Socket既能读,也能写,全双工 UDP的使用注意事项 UDP协议首部中有一个...传输协议的连线状况 -v,显示指令执行过程 -V,显示版本信息 -x,显示UNIX传输协议的连线状况 -s,显示网络工作信息统计表 -h,在线帮助 5.2 pidof 查看服务器进程id是非常方面 语法

3.1K30

Linux| |对于UDP的学习

端口 https服务器,使用443端口 操作系统动态分配的端口号 客户端服务器的端口号,这个范围的端口号操作系统可以对其进行分配 查看端口号 less /etc/services //就可以查看Linux...协议 UDP协议端格式 插图:UDP协议端格式 ?...,数据传输效率高 面向数据报 应用层交给UDP多长的报文UDP原样发送,既不会拆分也不会合并 例:用UDP传输100个字节的数据 如果发送端调用一次sendto,发送100个字节。...但是这个接收缓存区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓存区满了,在到达的UDP数据就会被丢弃 UDP的Socket既能读,也能写,全双工 UDP的使用注意事项 UDP协议首部中有一个...传输协议的连线状况 -v,显示指令执行过程 -V,显示版本信息 -x,显示UNIX传输协议的连线状况 -s,显示网络工作信息统计表 -h,在线帮助 5.2 pidof 查看服务器进程id是非常方面 语法

2.8K20

linux socket udp编程_linux网络编程socket

文章目录 前言 一、UDP是什么 二、UDP 数据报服务特点 二、UDP 编程流程 1.服务器 2.客户端 3.输出结果 总结 前言 浅谈UDP。...提示:以下是本篇文章正文内容,下面案例可供参考 一、UDP是什么 UDP是一种不可靠的、无连接的、数据报服务。...二、UDP 数据报服务特点 发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报发送。接收端必须及时针对每一个 UDP 数据报执行读操作,否则就会丢包。...并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。 因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。...二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd

9.8K20

Linux如何进行UDP Ping

什么情况下需要 UDP Ping UDP Ping被用来确定指定主机的UDP通信是否畅通,通常用于网络故障排除和网络性能测试。...在一些服务器应用程序中,例如DNS服务器,UDP被用来传输DNS请求和响应。使用UDP Ping可以测试DNS服务器是否可以正确处理UDP数据包并返回响应。...总之,当您需要测试UDP通信时,就可以使用UDP Ping。通过测试UDP协议的延迟和开销,可以帮助发现网络延迟和包数据损坏等问题。...那么Linux如何进行UDP Ping呢 在Linux上进行UDP Ping,您可以使用命令行工具nping或hping3。...这个命令可以从目标IP地址处接收到UDP回应,则表示UDP Ping成功。 以下是使用hping3进行UDP Ping的步骤: 在终端中打开一个新的窗口。

7.9K40

Linux下调试1588单步时间戳报文

用到的软件包括, Linux:这是我板子的OS,包含我要验证的驱动。 tcpdump:抓包工具,位于板子的文件系统。 linuxptp:开源PTP软件,位于板子的文件系统。...调试方法 两个板子网口直连,启动Linux。 配置IP地址,确保两个网口能ping通。 一个板子做接收,运行tcpdump抓包,可直接查看,也可以保存成pcap文件在Wireshark中打开查看。...local clock 00e00c.fffe.001600 as best master ptp4l[619.802]: port 1: assuming the grand master role 使用UDP...# tcpdump -i eth0 -xx 可以看到对L2 Ethernet报文UDP/IPv4报文,PTP消息的correctionField和originTimestamp字段的数值,直接就解析出来了...UDP/IPv4: ? 结束语 Sync报文发送的硬件时间戳应该是originTimestamp和correctionField相加。

3.2K20

Linux】传输层协议:UDP和TCP

还有一个字段16位UDP长度,用于表示报文的整体大小。...传输层和网络层都是在linux内核中实现的,而linux内核是用C语言实现的,那UDP报头实际就是一个结构体,结构体成员变量实际就是UDP报头中的各个字段值,所以在分用时,只需要让指针指向数据包的前8个字节...UDP的报头中有一个16位UDP长度的字段值,所以UDP报文的最大长度就是2^16次方大小,也就是65536字节,如果应用层的报文长度超过65536-20的长度,则应用层需要自己手动的分包,分为多个报文进行网络数据传输...1.2 网络协议栈和linux系统的联系(以port为键值的开散列哈希表,哈希桶存储port对应的PCB的地址) 1....理解TCP的报头和UDP报头一样,他们其实都是linux内核里面的结构体,当向网络层交付报文时,TCP会把发送缓冲区中的数据和TCP报头粘连在一起,然后统一向下交付。

80130

Linux网络编程——UDP组播编程

一,基础概念 数据报文在网络中的点对点传输方式通常有以下三种: 单播(Unicast): 数据报文从一个发送端到一个接收端的通信方式。...组播(Multicast): 数据报文从一个发送端到多个接收端的通信方式。 广播(broadcast): 数据报文从一个发送端到所有接收端的通信方式。...step.05:调用sendto()接口往组播中发送数据报文。 接收端: step.01:新建一个socket套接字2用于从组播接收数据报文。...step.05:调用read()接口从组播中接收数据报文。 三,组播属性设置 使用类型为SOCK_DGRAM的套接字,基于UDP协议来实现组播传输过程。...designs-examples-using-multicasting-af-inet https://os.mbed.com/handbook/Socket https://subingwen.cn/linux

2.6K40

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

前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调优。...Linux 内核会使用一个数组将 TOS 转换为优先级,后者会影响数据包如何以及何时从 qdisc 中发送出去。...接下来看看如何在 Linux 内核中监视和调优 UDP 协议层。 4....监控:UDP统计 两个非常有用的获取 UDP 协议统计文件: /proc/net/snmp /proc/net/udp 4.1 /proc/net/snmp 监控 UDP 协议层统计: cat /proc...UDP 协议层发现的某些错误会出现在其他协议层的统计信息中。一个例子:路由错误 。 udp_sendmsg 发现的路由错误将导致 IP 协议层的 OutNoRoutes 统计增加。

5.7K51
领券