Skip to content
字数
541 字
阅读时间
3 分钟

一、UDP协议报文结构

udp协议报文结构

UDP的首部有共8字节(而TCP\IP的首部有20字节)

UDP封装如图:

伪头部 : 只是为了提取 IP 数据报中的源IP,目的IP信息并加上协议等字段构造的数据。在实际传输中并不会发送,仅起到校验和计算使用,因此称之为伪首部。

源端口号 : 一般是客户端程序请求时,由系统自动指定,端口号范围是 0 ~ 65535,0~ 1023为知名端口号。

目的端口 : 一般是服务器的端口,一般是由编写程序的程序员自己指定,这样客户端才能根据ip地址和 port 成功访问服务器

UDP 长度 : 是指整个UDP数据报的长度 , 包括 报头 + 载荷,

UDP校验和 : 用于检查数据在传输中是否出错,是否出现bit反转的问题,当进行校验时,需要在UDP数据报之前增加临时的伪首部。

代码中结构体定义

二、UDP数据递交流程

首先申请一个pbuf,其中有个54字节空间。用于保存各层的首部

pbuf的层头大小为PBUF_TRANSPORT(54字节)

偏移payload指针添加UDP首部(8字节)

再一次偏移payload指针添加IP首部(20字节)

三、UDP控制块结构

IP_PBC:通用IP控制块

struct udp_pcb *next:指向下一个节点的指针。lwip可以实现多个udp的连接,每一个连接必须申请一个udp的控制块,控制块以单向链表链接起来。

flags:控制块状态,例如连接状态或非连接状态

本地端口号、目的端口号

udp_recv_fn recv:处理网络接收数据的回调

void *recv_arg:用户自定义参数,接收回调入参

四、UDP控制块原理

贡献者

The avatar of contributor named as dz13718198068 dz13718198068

文件历史

撰写