我想向您介紹我的想法以及它是如何在 NodeJS 中為“ROHC”提供綁定的。
我想實作一個透過 Web-Socket 運行的 VPN。優點是服務將透過 HTTPS 隱藏。如果使用 HTTP3,這將會更加最佳化。所以我開始嘗試 NodeJS 的 TunTap2 模組,我必須先修補它。
一直對無線技術著迷,在某個時候我遇到了「LoRa」以及隨之而來的專案「IP2Lora」。
圖片來源
在「IP2Lora」這個專案中,IP資料包被縮短以節省40字節,這對於傳輸非常重要;無線電頻段為 434 MHz 或 868 MHz,無法傳輸那麼多。
圖片來源
在圖中,您可以清楚地看到 IP 封包大小如何減少。
不幸的是,Python 只有一個 lib 綁定。
那為什麼不自己寫一個節點庫綁定呢! ?
現在可以看到結果了
https://www.npmjs.com/package/node-rohc
您可以在項目鏈接中找到有關 ROHC 如何工作的更多信息,或者直接搜索它。這裡就不解釋了,免得貼文太長
我安裝在Linux Debian/Mint下。我想這應該和其他Linux版本類似。
(順便說一句,我還必須將 ROHC-lib 修補到新核心。)
現在我們可以進入我們的專案並安裝模組了。
現在我們必須建立 NodeJS 綁定(必須為每個 CPU 架構本身編譯)。
安裝現已完成。
現在假設我們得到一個 IP 封包,我們希望將其壓縮為以下封包以節省位元組。
模組現已導入,其中 IP 封包的 Unit8Array 被賦予 Rhoc 物件進行壓縮。
在 Rohc 物件的建構子中,我們指定應用於數組中壓縮的設定檔。
然後是壓縮。在輸出中我們看到新的包。但為什麼不小一點呢?
第一個封包仍然包含連接埠/IP位址等資訊。只有後面的資料包變得明顯更小。
為了將 Rohc 封包轉換回正常的 IP 封包,我們使用解壓縮。
重要的是開始,第一個資料包被壓縮並傳輸到目的地並且目的地已經解壓縮資料包,實例必須被維護。以便連線 ID 保持已知。這意味著程式必須保持物件實例運行。如果兩個頁面(壓縮的來源頁面或解壓縮的目標頁面)之一停止,則必須重新啟動兩個頁面。
帶有有用資訊的附加功能:
壓縮或解壓過程中,狀態被記住;之後可以立即再次查詢以獲取有關發生的情況的更多詳細資訊。
有關上次壓縮或解壓的資訊。
有關壓縮和解壓縮的一般資訊。
我希望你喜歡我的小貼文。我總是樂於接受改進。
以上是NodeJS + ROHC的詳細內容。更多資訊請關注PHP中文網其他相關文章!