2017-02-03 120 views
1

我有一个应用程序通过UDP视频流,它完全成功。我将套接字更改为TCP。当传输几个数据包后它运行时,接收器发送RST并停止工作。 (具有大的长度的分组也从发送器传送奇怪到接收器而MTU是1400 - 什么是这个分组?)RST通过TCP套接字进行视频流传输?

enter image description here

我检查接收器和发送日志。接收器收到的最后一个数据包有一个很大而奇怪的序列号(转储数据包)。它会产生错误,然后应用程序停止。发件人没有发送这样的数据包。这个包来自哪里?它是传输层吗?

enter image description here

当我添加了一个休眠时间(0.1秒)到发送方的每个分组发送之后。该程序在Wireshark或奇怪的序列号中没有任何奇怪的大长度数据包,但这不是视频的合理解决方案。 你现在的建议是什么?可能是什么问题呢?如何分析这个网络?如何解决它?

+0

将套接字类型从TCP更改为UDP的原理是什么?从UDP到TCP的 – szulak

+0

。我将研究这种差异,之后我将尝试实施基于TCP的新协议。 –

+0

通常,环回接口(地址127.0.0.1)的MTU在Linux上为64K(MAC上为16K - 不确定Windows)。而且您的应用程序缓冲区大小不会直接确定每个TCP数据包中发送的数据量。操作系统可以自由地将尽可能多的数据放入TCP有效载荷中,因为它可以在它决定发送的时间(根据MTU,接收器的窗口等)进行发送。你可能想看看'TCP_NODELAY'选项(参见'tcp(7)'手册页)。 –

回答

0

这不是一个奇怪的长度。这可能是tcp卸载。请参阅 ethtool -k界面。关闭卸载,然后重试。第一个可能是无关的。这可能是一个应用程序问题。

相关问题