2017-02-03 123 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界面。關閉卸載,然後重試。第一個可能是無關的。這可能是一個應用程序問題。

相關問題