雙向解耦TCP協議開發(一)

2021-07-24 22:42:51 字數 911 閱讀 1791

最近實驗室安排了乙個新的任務,是要做雙向解耦的tcp協議開發。這個任務我是花了乙個月時間,到現在基本做完了。接下來寫一下部落格來總結一下這個工作。

大家都知道tcp協議是乙個雙向傳輸的協議,需要三步握手來建立連線、需要四次揮手來斷開連線等等。現在的bsd tcp/ip協議棧實際上都是在兩個ip位址(或者說兩個網絡卡)之間建立tcp連線。不同節點的兩個網絡卡構成一條路徑,也就是說,tcp兩個方向的資料報是通過同一路徑(path)傳輸。但是在一些特殊的環境下,特定path上兩個傳輸方向經常具有明顯的非對稱性。對於網路中的兩個節點a和b,a到b可能通過path1傳輸快,但是b到a方向則通過path2快。我們期望能將tcp兩個方向的資料流通過兩個不同的path傳輸,從而最大程度提高網路中鏈路資源的利用率。我們稱這種特殊的tcp協議棧為雙向解耦tcp。

所謂技術路線,指的是實現目標的具體步驟和可能方法。雙向解耦tcp這項工作是linux核心開發,而我以前做過的工作都是應用層面的開發,並沒怎麼做過核心層的開發。甚至連如何除錯核心**都不知道。所以前期花了不少時間調研,思考如何部署測試環境、如何除錯tcp/ip協議棧。經過多方調研,最後定下來的技術路線是這樣的:

1. 利用虛擬化技術搭建雙機器雙網絡卡的測試環境。

利用vmware可以在一台電腦裡面裝兩個ubuntu虛擬機器,而在每個ubuntu裡面又可以借助qemu虛擬出乙個雙網絡卡、linux、i386的環境。我們在ubuntu的環境編譯linux核心和製作檔案系統,然後在qemu虛擬出的環境跑起來核心+檔案系統,這樣就可以搭建雙機器雙網絡卡的測試環境了。

2. 閱讀tcp/ip協議棧原始碼

這塊沒啥好說的,就是直接看**。尤其是理清楚socket介面、tcp與ip層的介面這些問題,然後才能有針對性的按照自己的需要去改**。

3. 部署測試

修改核心原始碼,部署在測試環境下。因為是測試網路協議棧,所以可以借助wireshark來分析抓包結果。

Egret開發筆記 七 解耦方式之,掛接解耦

需求 首先,需求是這樣的。戰鬥結算介面 就是戰鬥結束後會有乙個介面顯示這場戰鬥的得失 要顯示一些東西。這些東西並不是固定的,比如,今天有可能要顯示 國慶快樂 明天又是要顯示一幅圖。此處將會舉例顯示乙個元件,因為元件上可以放任何你需要顯示的東西。難點如果需要顯示什麼,就手動在這個介面上,加什麼。那麼後...

軟體開發中的解耦

專案進入關鍵期了,最近乙個禮拜不斷加班寫 回顧一年以來經歷過的專案,突然發現其實我們一直在追求的就是解耦,目的就是使自己的軟體系統能夠以更低的代價接受變化,比如增加新業務時,希望不用修改 或者少修改。級別的解耦是最常見的,把ooa ood做的更好一些,每個類的職責明確,介面功能盡量細分,多使用經典的...

解耦神器 統跳協議和Rewrite引擎

統跳協議的前身是一套叫做internal的協議,internal要重點解決的問題是在webview和推送通知中如何跳轉到指定的介面,進一步在任何動態場景下如何跳轉到指定介面。在這樣的思路下,internal中定義了多種協議格式,如 tmall tmallclient internal url lin...