艾巴生活网

您现在的位置是:主页>科技 >内容

科技

udp报文段结构_UDP报文格式和数据结构体系

2024-02-21 20:32:01科技帅气的蚂蚁
之前我在做一个数据传输的时候,用的是WiFi传输数据,数据传输用的协议是LwIP协议栈中的udp协议。现在我们来回顾总结一下。要描述LwIP协议

udp报文段结构_UDP报文格式和数据结构体系

之前我在做一个数据传输的时候,用的是WiFi传输数据,数据传输用的协议是LwIP协议栈中的udp协议。现在我们来回顾总结一下。要描述LwIP协议栈,自然要理解LwIP协议栈是什么。一般来说,LwIP是TCP/IP协议的一个独立而简单的实现。其设计目的是保证嵌入式产品具有完整的TCP/IP功能,同时能够保证协议栈对处理器资源的有效消耗。一般它的运算只需要几十KB的RAM和40KB的ROM。

LwIP的分层机制

在描述udp协议的概念之前,我们应该对LwIP协议的框架有一个简单的了解。在实现LwIP时,我们参考了TCP/IP协议的分层思想,每一层都在单独的模块中实现,并为其他层的模块提供一些输入/输出接口功能。以下是层次结构示意图:

如前所述,LwIP协议仅指TCP/IP的层次结构,但并不严格遵循上图所示的层次机制。为了节省时间和空间消耗,不同层之间存在交叉访问的现象。

通过上面的框图我们可以知道UDP属于传输层协议。要了解为什么会有传输层协议,我们需要了解传输层的下一层,也就是网络互联层有一个IP协议。IP协议是用来在各种主机中传输数据报的,但是在实际的应用过程中,我们需要的是应用之间数据报的传输,也就是进程之间的通信,而传输层的存在就是为了实现进程之间的通信。

为了完成进程间通信,传输层需要完成几项重要任务:

首先,它为两个通信进程提供了一个连接机制,也就是说,在接收到IP层传输的数据后,传输层应该将数据传输给哪个应用。这是通过端口号完成的。

第二,传输层需要提供数据传输服务。在数据发送端,传输层对数据进行组装和编号,将数据分成可传输的单元,然后依次提交给IP层发送。接收端的传输层需要等待属于同一个应用程序的数据到达,检查它们的错误,最后将整个数据交付给应用程序。

第三,为了提供更可靠的传输服务,传输层还应该提供流量控制机制。

UDP协议

在简要描述LwIP框架后,详细阐述了UDP的相关概念。UDP称为用户数据报协议,是一种无连接、不可靠的传输协议。它仅在低级实现上述传输层功能。为什么说它只在底层实现了上述功能?因为它只是完成数据从一个进程到另一个进程的传递,所以它不提供任何流控制机制,并且接收到的消息不被确认。在误差控制中,它只提供检查和计算。当校验和计算不成功时,它将丢弃该消息。

当用户的进程使用UDP传输数据时,会经历三个进程。

(1)UDP协议会在数据前添加一个报头,形成UDP报文,发送给IP协议。

(2)IP层将消息封装在IP数据报中,并发送给底层。

(3)在底层,IP数据报封装在物理数据帧中。

在UDP的接收端,物理网络首先接收数据帧,然后将数据逐层提交给上层协议,每一层从上层去掉一个头。

UDP消息格式

UDP报文成为用户数据报,在结构上可以分为两部分:UDP头和UDP数据区。以下是报文结构示意图:

UDP校验和的计算超出了UDP消息本身。为了计算校验和,UDP引入了伪头的概念,添加伪头后的UDP报文格式如下图所示:

需要指出的是,伪报头是完全虚拟的,它不会和用户数据报一起发送出去,但是会用在校验和的计算中。伪报头主要来自携带UDP消息的IP数据报的报头。将源IP地址和目的地IP地址添加到校验和的计算中可以验证用户数据报是否已经到达正确的目的地。

UDP数据结构分析

消息头结构

让我们来看看UDP数据报的报头。代码如下:

这种结构很简单,由宏定义的每个字段都由该结构封装。还应该注意,存储在四个字段中的值应该与网络字段一致。

Udp控制块

控制块是整个UDP的核心。用户使用UDP来编程和处理UDP消息,本质上是对UDP控制块的操作。UDP控制块包含UDP连接所需的所有信息,主要包括:

通道数

目标端口号

源IP地址

目标IP地址

一般来说,系统会给每个连接分配一个UDP控制块,然后把它们组织在一个全局链表上。当UDP收到IP层提交的报文时,会遍历链表,找出与报文中的头信息相匹配的控制块,调用控制块中注册的函数,最终完成报文处理。

当定义UDP控制块时,将使用IP控制块。

如上所述,IP控制块的定义是由一个宏实现的,它包括本地IP地址、远程IP地址、套接字选项、服务类型和生存时间。有了UP控制块,我们再来看看UDP控制块。以下是UDP控制块的代码:

UDP协议实现的本质是操作链表上的每个UDP控制块。在上面显示的结构中,next是一个UDP控制块类型的指针,用于形成链表。最后,需要注意的是,上述控制块中的最后两个字段用于用户与协议栈核心之间的通信,反映在udp协议中,用于执行用户定义的消息数据处理功能。下面是由三个控制块组成的链表的示意图:

从上图中,我们可以看到第一个控制块和第二个控制块包含本地和远程IP地址和端口,因此它们是相连的。第三个控制块只包含本地IP地址和端口,因此处于未连接状态。UDP的工作流程是怎样的?简单来说,如果当前UDP控制块接收到一个目的端口号为1234的数据报,那么内核将从链表的开头开始遍历整个链表,直到找到本地端口号为1234的控制块。当找到控制块时,将调用控制块的recv字段所指向的函数proc1来处理报文数据。

摘要

以上是对LwIP中udp的分析,简单解释了UDP的一个基本原理,涉及的控制块以及UDP收到数据报时如何处理。当然,除了这些,还有很多关于UDP的内容,如何使用UDP收发数据就不涉及了。关于LwIP内核的内容也需要仔细研究。责任编辑:抄送