一、UDP的报文结构
1.源端口号:一般是客户端程序程序请求时,由系统自动指定,端口号范围是0~65535, 0 ~ 1023为知名端口号;
2.目的端口:一般是服务器的端口,一般通过程序员自己指定,这样客户端才能根据ip地址和port成功访问服务器;
3.UDP长度:是指整个UDP数据报的长度,包括抱头+载荷;
4.UDP校验和:用于检查数据在传输过程中是否出错,是否出现bit反转的问题,当进行校验时,需要在UDP数据报之前增加临时的伪首部;
校验和:
在网络传输过程中,本质上是以0,1表示的,都是通过光信号或者电信号传输的,受环境、辐射等干扰,是会出现一些问题的,如果在传输过程中,收到一些干扰,就容易出现bit反转的情况,校验和就是为了验证,数据传输的前后,数据是否发生了改变。
【注】:以上就是UDP报文结构的大致情况,UDP报文相较于TCP报文结构更加简单.需要注意的是,由于UDP报文的长度有所限制,所以传输的时候需要注意,总的报文长度不要超过64KB,否则溢出的部分就会丢失.而TCP报文就没长度限制了。
二、UDP的注意事项:
1、客户端在第一次 sendto 时内核会选择一个临时端口,他不会变,但出口 IP可能每次都不同。
2、服务器是多宿 IP 主机,接收到 UDP 报文时,服务器在响应时源 IP 不一定是客户端报文的目的 IP。
3、服务端未运行,客户端如何感知到错误, 事实上 IP层可以感知到,但不会上报给客户端进程,除非客户端的 UDP套接字是连接的。
4、connect 函数可以调用多次,且使用 connect 会提高 UDP报文的发送性能(需要多次发送数据到同一目的IP时)
5、udp 缺乏流量控制,因此若服务端没做流量控制,其接收缓冲区很容易被客户端报文淹没。
6、connect 为未绑定端口号的 UDP 套接字指派一个临时端口。