本文主要研究和解决同子网内不对等环境下传输大量UDP报文,如何减少UDP丢包的问题。
发送者
int main(int argc, char **argv){ return 0; }接收者
int main(int argc, char **argv){ return 0; }测试数据主要关注发送和接收者的CPU使用率、内存使用率、网卡对包率、应用层丢包率
机器CPU使用率内存使用率网卡丢包率应用对包率作用a数据发送者b数据接收者c数据接收者d数据接受者e交换机UDP 是 User Datagram Protocol(用户报文协议)的缩写,属于传输层的协议。RFC文档连接为:RFC768
与同属于传输层的TCP协议不同,UDP没有连接握手过程、没有流控、没有确认、没有重传。因此上层应用需要自己保证数据的稳完整性,UDP协议也一般用于可容错的语音、视频传输。
UDP协议包分为5个字段,包格式为:
内容长度源端口2字节目的端口2字节数据长度2字节checksum2字节payloadN字节1. 源端口:发送端的UDP端口 2. 目的端口:接收端的UDP端口 3. 数据长度:数据长度包含了UDP协议头,因此数据长度最小值是8。 4. checksum:
注意:
UDP协议包里没有IP地址,那目的IP地址和原IP地址是什么时候加的呢?
待补充
使用socket编程的时候,并没有指定源端口,源端口是怎么添加的呢?
使用UDP编程的时候,创建完UDP socket后,就可以调用sendto函数。当内容发现这个socket属于首次发送时,会自动给这个socket绑定一个UDP端口。 如果需要手动指定UDP socket的源端口,可以使用bind函数。这种情况主要用于:1)作为服务端监听UDP端口;2)防火墙只开放了指定范围的端口。
常用的