基於Nagle算法的嵌入式TCP協議

2021-01-07 電子產品世界

隨著嵌入式系統的發展,在嵌入式系統中實現網絡連接已成為研究熱點,廣泛使用的廉價8/ 16 位嵌入式處理器的性能不足與網絡協議的複雜構成了尖銳的矛盾。 嵌入式Internet 技術的核心是在嵌入式系統中實現TCP/ IP 協議簇, TCP 協議的機制比較複雜,對8/ 16 位嵌入式處理器的存儲能力和運算能力要求較高,必須進行簡化。

本文提出了一種適用於8/ 16 位低速處理器的簡化TCP 協議。對其性能進行分析發現,在嵌入式網絡大量使用小數據包,造成網絡帶寬利用率低下並且容易造成網絡阻塞。 因此在簡化的TCP 協議中引入Nagle 算法,大幅度減少了嵌入式網絡中發送的小數據包個數,提高了吞吐率,並減少了所需的帶寬。

簡化TCP 協議的提出

TCP 協議的數據傳輸分為3 個階段: 建立連接、傳輸數據和斷開連接,可以用狀態機 來實現。8/ 16 位嵌入式微控制器要完整實現這樣複雜的狀態機是十分困難的。在嵌入式系統中簡化TCP 的實現已有相關的研究,本文進一步引入了Nagle 算法並且進行了網絡模擬,給出了實驗結果。

連接建立和斷開機制

TCP 建立連接有兩種方式:主動打開和被動打開。如果實現伺服器端應用,可以將TCP 狀態機的主動打開連接部分簡化掉。同理客戶端應用,可以將狀態機的被動打開連接部分簡化掉。斷開連接也有兩種方式:主動斷開和被動斷開。其中被動斷開連接的處理較為簡單。但為了保證安全性,希望主動斷開連接。主動斷開連接簡化實現的方法是:發送一個Fin 數據報,在接收到對Fin 數據報的確認後,再發送一個Reset 數據報,就可完成主動斷開連接。

以伺服器端的TCP 連接為例,簡化後的TCP狀態機如圖1。

單TCP 連接

在8/ 16 位微控制器上實現簡化TCP 協議,無需實現多個TCP 連接,只需實現單個TCP 連接即可。

簡單確認機制

嵌入式系統發送數據包不大,可以將TCP 協議的滑動窗口機制去掉,成為簡單確認機制,只對單個數據報而不是批量數據發送確認。實現方法是設置TCP 頭部windows 欄位的大小為1 ,即可保證TCP協議雙方都使用簡單確認。

僅計算發送TCP 報文的校驗和

由於TCP 協議校驗和的計算對系統存儲和計算資源的佔用都比較多,可以省去對接收數據報校驗和的計算,保留髮送數據報TCP 校驗和的計算。

簡化TCP 方案小結

在上述4 個方面的基礎上,在嵌入式處理器中實現了簡化的TCP 協議,程序流程如圖2。其中「不同狀態的相應處理」指根據接收到的TCP 報文準備待發送數據報並將其發送到乙太網上。


相關焦點

  • tcp——Nagle算法介紹
    Nagle算法Nagle算法規定,一個tcp連結上最多只能有一個未被確認的小分組。如果ack響應到達前,tcp暫時收集待發數據,等到響應ack到達後使用一個分組將待發數據發送出去。Nagle算法啟動的條件,當一個ack會來之前,就有待發送數據。
  • Windows10怎麼關閉nagle算法 如何解決網遊卡頓問題
    我們在使用Windows10系統玩網路遊戲的時候,有時會出現網路遊戲卡頓的情況,有時由於卡頓會導致我們的遊戲失敗,在排除了寬帶,電腦的問題外,有時候通過註冊表關閉Windows10系統的TCP協議中的nagle算法,會幫助我們解決網遊卡頓的問題。
  • Linux TCP/IP協議棧,數據發送接收流程,TCP協議特點
    Linux TCP/IP協議棧,數據發送接收流程,TCP協議特點 可以毫不誇張的說現如今的網際網路是基於TCP/IP構建起來的網絡。弄懂協議棧的原理,無論對調試網絡IO性能還是解決網絡問題都是有很大幫助的。本片文章就帶領大家來看看內核是如何控制網絡數據流的。
  • 淺談TCP/IP傳輸層TCP BBR算法
    0x00.前言這是TCP/IP協議棧系列的第三篇文章,之前的一篇面試熱點|理解TCP/IP傳輸層擁塞控制算法講述了傳統的擁塞控制算法基本原理,今天一起來學習下最新Linux內核中增加的擁塞控制算法:TCP BBR算法。
  • python筆記28(TCP,UDP,socket協議)
    1、TCP協議協議的特點:三次握手,四次揮手;2、UDP協議3、OSI七層模型:每層的物理設備,每一層協議。4、代碼部分:①介紹socket;②使用socket完成tcp協議的web通信;③使用socket完成udp協議的web通信。
  • 《圖解TCP/IP(第5版)》
    2.2.3  tcp/ip規範--rfc2.2.4  tcp/ip的標準化流程2.2.5  rfc的獲取方法2.3  網際網路基礎知識2.3.1  網際網路定義2.3.2  網際網路與tcp/ip的關係2.3.3  網際網路的結構2.3.4  isp和區域網2.4  tcp/ip協議分層模型2.4.1  tcp/ip與osi參考模型
  • 基於模型的嵌入式C代碼的實現與驗證
    摘要:以51晶片為例,講述了模型的建立、調試與驗證,以及基於模型的嵌入式C代碼的自動生成及軟硬體在環測試 ②控制算法的翻譯和驗證困難。最初的控制策略和算法必須手工翻譯成MCU上的程序代碼,控制策略的修改將伴隨大量原始代碼的修改,致使代碼的人工維護成本較高。 ③硬體平臺依賴。軟體開發過程與硬體平臺緊密相連,可移植能力往往較差。硬體平臺一旦更換,代碼移植成本很高。
  • 基於VxWorks的嵌入式系統複合通信模式
    摘要:在嵌入式系統與VxWorks實時作業系統應用愈加廣泛的背景下,結合嵌入式系統對於各類實時通信方式的不同需要,提出基於控制應用的複合通信模式;以Radstone公司的PPCx系列單板機為例,給出實現方法,並對數據通信的產時性與安全性作了研究。片對於各類嵌入式作業系統的數據測驗具有很大的參考價值。
  • 嵌入式快訊:M1808 AI 核心板和基於Transformer的車道線檢測網絡
    張先軼老師的演講主題為《利用AI開發板實現面向無人機的嵌入式視覺應用開發》。 在本次演講中,張先軼老師首先介紹了AI開發板硬體選型,之後對嵌入式AI軟體性能和相關算法的優化展開詳細分析。 本文為此次演講的圖文整理。
  • 為什麼 TCP 會被 UDP 取代?
    來源:Draveness@真沒什麼邏輯TCP 協議可以說是今天網際網路的基石,作為可靠的傳輸協議,在今天幾乎所有的數據都會通過 TCP 協議傳輸,然而 TCP 在設計之初沒有考慮到現今複雜的網絡環境,當你在地鐵上或者火車上被斷斷續續的網絡折磨時,你可能都不知道這一切可能都是 TCP 協議造成的。
  • 為什麼 TCP 會被 UDP 取代
    TCP 協議可以說是今天網際網路的基石,作為可靠的傳輸協議,在今天幾乎所有的數據都會通過 TCP 協議傳輸,然而 TCP 在設計之初沒有考慮到現今複雜的網絡環境,當你在地鐵上或者火車上被斷斷續續的網絡折磨時,你可能都不知道這一切可能都是 TCP 協議造成的。本文會分析 TCP 協議為什麼在弱網環境下有嚴重的性能問題[^1]。
  • 總結的23 個 TCP高頻面試問題
    或者調整 tcp_synack_retries 減少重試的次數,設置 tcp_max_syn_backlog 增加 SYN 隊列數,設置 tcp_abort_on_overflow SYN 隊列滿了直接拒絕連接。 為什麼要四次揮手?
  • 從源碼看tcp三次握手(上)
    閱讀本文需要對level-ip的整體架構有所了解,如果讀者尚未接觸過level-ip,請先閱讀下面文章:分享一款Linux平臺下的tcp協議棧!Linux系統中間件的巧妙實現--以用戶空間的tcp協議棧為例請根據上述文章中的指引獲取leve-ip的全部源碼,並且嘗試在任意Linux發行版本上編譯運行。
  • 嵌入式硬體通信接口協議-UART(四)設計起止式的應用層協議
    是的,沒錯,這就是本節要講的在串口通信中發揮重要作用的起止式協議!  UART的時序本身就是起止式協議,具體可參考《嵌入式硬體通信接口協議-UART(一)協議基礎》這一篇內容的介紹。  事實上串口實現了數據通信過程中的傳輸層,而應用層就系統功能的業務邏輯,應用層控制需要收發的各種數據內容。
  • 基於嵌入式Linux的MapInfo格式地圖顯示
    該版本可在飛漫軟體的網站上免費下載,並需要遵守 GPL協議。2.1 PC機上交叉編譯環境的建立主要是安裝交叉編譯器,並交叉編譯MiniGUI庫的原始碼,生成應用程式需要的連結的動態和靜態的庫文件。最後,還要保證嵌入式平臺LINUX支持MiniGUI。在基於Linux的系統上,MiniGUI在LinuxFrameBuffer驅動程序的基礎上建立圖形引擎[6]。
  • 基於嵌入式的自動售貨機設計與實現
    基於嵌入式的自動售貨機設計與實現 秩名 發表於 2012-07-18 14:18:32   我們知道,智能設備的根本在於嵌入式系統的開發應用(嵌入式系統開發流程),
  • Tcptraceroute:基於TCP數據包的路由跟蹤器
    通過發送TCP SYN數據包來代替UDP或者ICMP應答數據包,tcptraceroute可以穿透大多數防火牆。[root@soft tcptraceroute-1.5beta7]# ./configure --prefix=/usr/local/tcptraceroute \  > --with-libpcap=/usr/local/libpcap \
  • 嵌入式課程學習大綱分享,零基礎入門嵌入式技術
    嵌入式課程學習都要學哪些呢?現在培訓機構很多,想要知道嵌入式的課程內容,今天就分享一份千鋒嵌入式的學習大綱給大家,希望想對於想進入嵌入式的同學有一定的認知和了解。3、指針及字符串操作 4、結構體、共用體、宏、枚舉 5、文件I/O操作 數據結構及算法 1、數據結構之單向鍊表、雙向鍊表 2、數據結構之隊列、棧 3、數據結構之樹、圖 4、算法之各種排序(選擇法、冒泡法、插入法等) 5、遞歸 6、算法之二分查找 階段練習項目:《
  • 學習門檻很高的「嵌入式」,如何選擇對口的職業方向?
    嵌入式系統中涉及算法的由專業算法的人來處理,不必歸結到嵌入式系統範疇內。但如果涉及嵌入式系統下面的嵌入式資料庫、基於嵌入式系統的網絡編程和基於某些應用層面的協議應用開發(比如基於SIP、H.323、Astrisk)方面,又較為複雜,並且有度了。 學習嵌入式,我們一貫提倡先有目標,再去定位。
  • 基於微型TCP/IP協議與AJAX的動態Web伺服器設計
    LDPC碼解碼器的實現方法主要有2種:一種是基於超大規模集成電路(VLSI)的設計;另外一種是基於數位訊號處理器(digital signalprocessor,DSP)等指令串行執行系統的實現。LDPC碼解碼多採用和積(sum-product,SP)解碼算法,影響其複雜度的因素有迭代次數和每次迭代的運算複雜度。