IoT开发实战:CoAP卷【1.4】

3.3.2 UDP首部

通过运行示例代码可以发现:两个设备若需要通过UDP传输数据,UDP客户端需要知晓服务器的IP地址和服务端口号,IP首部中已经定义了源IP地址和目标IP地址,那么UDP就需要定义源端口号和目标端口号。UDP首部如图3-10所示。

IoT开发实战:CoAP卷【1.4】_第1张图片

图3-10 UDP首部结构

相比于TCP首部,UDP首部显得异常简单,UDP首部仅包括源端口号、目标端口号、长度和校验和。

·源端口号(2字节):表示发送进程的16位端口号。

·目标端口号(2字节):表示接收进程的16位端口号。

·长度(2字节):整个UDP数据包的长度,包含UDP首部和应用数据。

·校验和(2字节):可选项,包括IP首部中的源地址与目标IP地址、UDP首部。

·应用数据:UDP负载数据,整个CoAP数据分包可作为UDP的应用数据。

3.3.3 UDP示例分析

1.IP为UPD提供服务

现代网络采用分层设计,一般下层协议为上层协议提供服务,对于UDP来说,IP是它的下层协议,IP为UDP提供源IP地址和目标IP地址等信息,并把整个UDP数据分包作为IP数据分包的负载。当然UDP也可以为其他协议提供服务,如CoAP。IP与UDP的关系如图3-11所示。

2.UDP Echo示例分析

在UDP Echo示例代码中,客户端和服务器相互配合采用“一问一答”的方式交换数据,这种工作模式称为“请求/响应”。客户端总是向服务器发起请求,若服务器接收到该请求便根据请求的内容返回相应的响应。UDP Echo示例正体现了这种工作模式,只是负载内的“Hello World!”字符串并没有实际含义。让我们再来分析交换“Hello World”的具体流程,该交换流程如图3-12所示。

IoT开发实战:CoAP卷【1.4】_第2张图片

IoT开发实战:CoAP卷【1.4】_第3张图片

(1)UDP客户端发送请求

UDP客户端发送请求时,在IP首部中把本机地址作为源IP地址填入IP首部的源IP地址区域中,把远程主机的IP地址填入到IP首部的目标IP地址区域中。UDP客户端将随机生成一个未使用的端口号,作为源端口号填入到UDP首部中的源端口号区域,而把远程主机的端口号填入到UDP首部中的目标端口号区域。

(2)UDP服务器端返回响应

UDP服务器填充IP首部和UDP首部的方式与UDP客户端非常类似,只是IP首部中的“源”和“目标”完全交换了位置。

3.UDP效率分析

在UDP Echo示例中,UDP有效负载为“Hello World!”共12字节,加上以太网首部14字节、IPv4首部20字节,UDP首部8字节,整个数据包的长度为54字节,请求和响应的情况几乎相同,那么此时的传输效率约为22%。在广泛使用低功耗受限制设备的物联网领域,传感器检测结果一般都较短,可能只占用10字节到20字节,而用于数据传输的整个数据包的长度关系到系统的电量消耗。为了尽可能地提高效率,我们总是希望有效负载占整个数据分包的比例越大越好。此处22%的结果可能并不是一个好成绩,但是对于同样的场景应用TCP可能低得多。

3.4 TCP

TCP是一种功能完备的面向连接的传输层协议,具有流控制、传输确认和重传机制。TCP给应用提供一种可靠的、以字节流形式发送数据的方法,TC

你可能感兴趣的:(嵌入式实战开发【1】,物联网,UDP首部,UDP示例分析,UDP与TCP对比,TCP示例分析,信息与通信,网络协议)