TCP粘包拆包問題

LiDaQian發表於2018-11-25

由於工作要求,需要完成一個TCP伺服器。果斷採用了Netty作為TCP伺服器,完成後覺得選Netty真實非常正確的選擇。

問題發現

在開發的過程中遇到了TCP粘包的問題:由於TCP是一個連續的流,流先進入至緩衝區,然後再從緩衝區被取走,當一個包很大或者連續的資料包總長比緩衝區大的時候,應用無法知道一個資料包的長度是多少,就無法獲取到正確的資料包。

解決辦法

在資料包的前4位規定了資料包的長度。

幸運的是Netty提供了非常簡便的解決方法。

解決拆包的問題

向資料包的前X位填充資料包的長度

Netty原始碼註釋寫的非常清晰,直白明瞭,這裡就不做過多的闡述。

小問題

如果服務端傳送了一條資料包給客戶端,客戶端需要響應(返回一條資料包給服務端),那服務端如何辨認接收到的響應對應是哪一個資料包呢?

HTTP請求又是如何做到一應一答的呢?

相關文章