6. UDP协议的实现
在传输层我们抛弃了复杂的TCP协议而使用简单的UDP协议。虽然UDP是无连接的协议,它不保证数据包一定能够到达目的主机,但是在嵌入式开发中,开发板跟主机通常位于同一内部局域网内,网络环境良好,数据丢失的可能性很小,并且UDP容易实现,占用资源小,因此更适合于嵌入式环境。 UDP头部包含了可选的校验和字段,而校验要涉及到伪报头,为了简化设计和减小开销,我们不使用校验,直接把该字段设为零,表示不使用校验。UDP包填充代码如下:
struct udp_header *P = (struct udp_header*)(buf);
P->port_src = htons(0x8DA4); // 2 Byte
P->port_dest = htons(port); // 2 Byte
P->tlen = htons(len); // 2 Byte
P->crc = 0x00; // Do Not Checksum, 2 Byte
P->port_src = htons(0x8DA4); // 2 Byte
P->port_dest = htons(port); // 2 Byte
P->tlen = htons(len); // 2 Byte
P->crc = 0x00; // Do Not Checksum, 2 Byte
关于源端口号和目的端口号的设定,在TFTP实现时会详细说明。