UDP丢包(Linux)并测试

一、UDP丢包现象

UDP丢包是正常现象,因为它是不安全的。

UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序。

要实现文件的可靠传输,就必须在上层对数据丢包和乱序作特殊处理,必须要有要有丢包重发机制和超时机制。

常见的可靠传输算法有模拟TCP协议,重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议等等。

1、我感觉原因可能有两个:

(1)、客户端发送过快,网络状况不好或者超过服务器接收速度,就会丢包。

(2)、原因是服务器收到包后,还要进行一些处理,而这段时间客户端发送的包没有去收,造成丢包。

2、解决方法:

(1)、客户端降低发送速度,可以等待回包,或者加一些延迟。

(2)、服务器部分单独开一个线程,去接收UDP数据,存放在一个缓冲区中,又另外的线程去处理收到的数据,尽量减少因为处理数据延时造成的丢包。

3、总结:

如果必须使用UDP,而且丢包又是不能接受的,只好自己实现确认和重传,说白了,就是自己实现TCP(当然是部分和有限的简单实现)。

二、如何制造UDP丢包?

如果只是小规模程序,也可以自己实现丢包处理,原理基本上就是给文件分块,每个数据包的头部添加一个唯一标识序号的ID值,当接收的包头部ID不是期望中的ID号,则判定丢包,将丢包ID发回服务端,服务器端接到丢包响应则重发丢失的数据包。

UDP是面向无连接的,用户在实施UDP编程时,必须制定上层的协议,包括流控制,简单的超时和重传机制,如果不要求是实时数据,我想TCP可能会更适合你!

三、怎样测试UDP并发性能?

1、连续把程序跑24个小时。

2、一般就是在同一个时间段内采用大量的客户端或者一个客户端采用多线程的方式向服务器发送数据,因此也就是多线程或者多进程的的方式来模拟发送数据的形式

你可能感兴趣的:(软件测试)