SCTP - 流式传输时的数据突发

时间:2016-11-12 12:02:51

标签: linux ubuntu networking network-programming sctp

我目前正在研究SCTP服务器,该服务器将用于通过网络控制机器人。在一种使用场景中,机器人的期望位置流被发送到服务器。

然而,当发送此流时,我遇到的问题是数据没有连续到达(它以100Hz的频率发送到服务器),但是突然发生。这意味着数据不会在服务器上以10毫秒的步长到达,但是有一个200毫秒的大延迟,之后接着19个消息,基本没有时间延迟。因此,这意味着在消息之间再次延迟10毫秒。

我已经发现它可能与某些内部缓冲区有关。这是因为当不仅客户端发送到服务器而且服务器发送到客户端时(在我的测试中也是100 Hz),所有数据都会连续到达。但是,当客户端没有收集服务器发送给他的数据时,数据流只在开始时是平滑的,并在一段时间后改变为所描述的突发。当服务器的发送缓冲区已满并因此SCTP发送方法阻塞时,似乎会发生此更改。

我可以在Ubuntu 16.04和Ubuntu 12.04上重现这个问题(我没有检查任何其他发行版)。

我已经将此问题的测试平台(一个CMake项目)上传到DropCanvas - 链接是:http://dropcanvas.com/0ztrt

构建项目后,您可以运行

test_server

可执行文件。此可执行文件启动SCTP服务器并在服务器和客户端之间交换一些消息。它测量消息到达服务器之间的时间并将测量值存储在文件中

time_log.txt

如果没有传递参数,那么只有客户端发送到服务器,如果用

调用程序
./test_server 1 0

然后服务器也将流式传输到客户端,但客户端将不会读取数据。如果你用

打电话
./test_server 1 1

服务器将发送到客户端,客户端也将读取数据。

如果有人能在这里帮助我,那就太好了。 问候, 帕斯卡

0 个答案:

没有答案