如何在一條丟包率 30% 的鏈路上建立低延遲連接?


@pig pig 的回答已經很好了。冗餘糾錯編碼就是干這個的。

這裡推薦個開源解決方案 catid/shorthair · GitHub
基於著名的 Read-Solomon 糾錯編碼,能夠根據鏈路的丟包率自適應地調整冗餘率,以達到較低的目標丟包率。

冗餘糾錯編碼是很常見的。比如我們日常用的二維碼(QRCode),就是冗餘糾錯編碼,因此中間蓋上個小 logo 也仍然能讀出來。


韋易笑的答案很全面, 下面這點想補充一下:
"用頻域交錯存儲及其他一些方法,比如把一幅質量為 70% 大小為 32KB 的 I 幀圖像,存儲成兩張質量為 40% 大小為 16KB - 18KB 的 I 幀圖像,兩個拆分後的圖像單獨看,都是一副質量更低的圖片,但是他們組合起來,卻能變成一張質量很好的圖片"

這個方法其實沒想像中容易做. 這種方法很可能損失質量, 或者在同等視頻質量下增加總體所需的帶寬, 如果是後者, 所增加的部分如果用來做信道糾錯, 加上誤差掩蓋, 可能效果更好.


使用混合糾錯編碼和請求重發的方案harq,它在3g開始已經廣泛應用,晚點補充細節。


鏈路真的是低延遲嗎? 數據本身是 msg 還是 chunk, UDT 和 RBUDP 適用於不同的場景,具體那個適用要根據業務數據去測試了。


推薦閱讀:

何時IPV6 才能普及?
如何形象生動的解釋ip地址、子網掩碼、網關等概念?
Python 爬蟲學到什麼樣就可以找工作了?
有關ospf協議的一個問題?
TCP 為什麼沒有基於 UDP 實現?

TAG:通信 | 計算機網路 | TCPIP |