在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【推薦】TCP為何粘包?粘包問題如何解決?

億佰特物聯網應用專家 ? 2022-09-23 10:00 ? 次閱讀

我們在涉及TCP協議的應用中,經常會出現粘包的問題。所謂粘包,簡單地講,就是我有兩條消息,明明發送端的代碼是分兩次發送的,但是在接收端卻一次性就接收到了兩條消息。這個情況不管是在嵌入式行業還是在互聯網行業,都非常的普遍。

TCP協議為什么粘包?

那就需要先了解 TCP 的定義。TCP(Transmission Control Protocol)傳輸控制協議,是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。其中跟粘包關系最大的就是基于字節流這個特點。字節流可以理解為一個雙向的通道里流淌的數據,這個數據其實就是我們常說的二進制數據,簡單來說就是一大堆 01 串。這些 01 串之間沒有任何邊界。7dda0d04-3ab3-11ed-b180-dac502259ad0.png應用層傳到 TCP 協議的數據,不是以消息報為單位向目的主機發送,而是以字節流的方式發送到下游,這些數據可能被切割和組裝成各種數據包,接收端接收到這些數據包后沒有正確還原之前的消息,因此出現粘包現象。那為什么會出現不能正確還原的情況呢?主要有兩個方面的原因:

1. 發送端的原因發送端在組裝消息的時候,就把幾個小包合成一包了,這樣接收端自然無法解析出小包。這對應的就是Nagle 算法。因為TCP和Nagle 算法都是上個世紀的產物了,在早期的網絡中這樣做,可以顯著地減小網絡的壓力。否則頻繁地發送僅有幾個字節的小包,會嚴重浪費網絡IO性能。但是在現代互聯網中,網絡性能已經有了大幅提升,似乎Nagle 算法提升的那么一點IO性能就不是那么重要了,反而由于等待數據來合并的操作,會導致傳輸延遲變大,在網絡游戲應用時,就會非常影響體驗。所以現在一般都會關掉它。2. 接收端的原因接收端接收到消息以后,應用層總是不能立即取走數據,總是會有接收緩沖區的存在。如果兩條獨立的消息進入緩沖區的間隔太小,應用層不能在兩次消息中間取走上一條消息,那么下次讀取的時候,就勢必會把兩包消息同時讀出來,這也會導致粘包。7df3fdea-3ab3-11ed-b180-dac502259ad0.png

而且這個情況并不能通過讓發送端在時間上均勻發包來避免,因為網絡不穩定情況的存在,即使是時間上均勻發送的數據包,在接收端看來也可能是隨機出現的。

如何規避粘包的負面影響?

根據以上分析,我們不難發現,想要杜絕粘包的問題出現,基本上是不可能的。即使發送端和接收端都能自己控制,但是網絡傳輸的過程也是很難控制的。
但是即使粘包的問題存在,也不影響我們大規模的使用TCP協議。因為這個問題在應用層非常好處理。大致有兩種思路:1. 在信息中加入特殊的標志作為分隔符7e1858c0-3ab3-11ed-b180-dac502259ad0.png

這樣,當應用層檢測到特殊的分隔符后,便知道這是一包得到開始和結束,就可以進行分片等操作,問題便迎刃而解。不過這樣存在一些弊端。比如定義分隔符為“12345678”,那如果消息內容里面出現“12345678”的字符串呢?這樣就會導致消息被異常的切片,導致接收到的消息錯誤。但假如自己能夠控制消息的內容,保證里面不會出現“12345678”的內容,則此方法較為靈活。2. 加入信息的長度7e2ec5e2-3ab3-11ed-b180-dac502259ad0.png根據約定好的長度的字段,讀取消息長度的信息,再根據消息長度信息讀取消息內容。這也是一種非常常用的方法,在很多協議中都有體現。
3. 添加包首部發送端給每個數據包添加包首部,首部中應該至少包含數據包的長度,這樣接收端在接收到數據后,就可以通過讀取包首部的長度字段,知道每一個數據包的實際長度。以上就是本期關于解決TCP粘包問題的內容,小編碼字不易,求個點贊、分享、在看三連支持!我們下期見~~

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79312
收藏 人收藏

    評論

    相關推薦

    華納云如何解讀WinMTR的丟率數據?

    是如何解讀WinMTR的丟率數據: 1. 丟率的定義 丟率 :在一定時間內,未能成功到達目的地的數據占發送數據
    的頭像 發表于 12-30 16:51 ?165次閱讀

    Linux網卡收流程

    Linux 網卡收流程如下 網卡收到數據 將數據從網卡硬件緩存移動到服務器內存中(DMA方式,不經過CPU) 通過硬中斷通知CPU處理 CPU通過軟中斷通知內核處理 經過TCP/
    的頭像 發表于 12-05 16:21 ?282次閱讀
    Linux網卡收<b class='flag-5'>包</b>流程

    集成電路微組裝用環氧接膠樹脂析出及控制研究

    環氧接膠常用作集成電路接材料。在其固化過程中,經常觀察到樹脂析出現象。樹脂析出物會沾污鍵合區,帶來鍵合可靠性問題。本文利用接觸角的方法研究了樹脂析出的機理,討論了基板粗糙度和樹脂析出的關系,初步得出真空烘培對于樹脂析出有較大影響,而基板粗糙度和樹脂析出的嚴重程度無必然
    的頭像 發表于 11-05 10:16 ?313次閱讀

    CentOS中使用tcpdump抓

    CentOS中使用tcpdump抓
    的頭像 發表于 10-28 14:48 ?324次閱讀

    原來UV膠水在LED燈具接中有這么多用膠點

    燈具中的重要耗材,在燈具制造中膠粘劑在LED照明產品中,主要起到接、 密封、導熱、阻燃防護等功效。Chenlink作為國產UV膠水廠家,針對LED燈具也生產了一系列UV膠水,可用于玻璃接,塑料接以及金屬
    的頭像 發表于 07-26 09:23 ?777次閱讀

    esp8266讀取模擬數據并記錄到eeprom,發送tcp時無法讀取模擬如何解決?

    嗨,esp8266 讀取模擬數據并記錄到 eeprom,我正在將存儲在 eeprom 中的數據作為 tcp 發送,但在發送 tcp 時無法讀取模擬,如
    發表于 07-11 07:22

    為什么ESP8266 TCP透傳過程會丟?

    為什么ESP8266 TCP透傳過程會丟?
    發表于 07-09 07:55

    tcp_client例程為何去掉發送后,一直接收就會容易出現數據呢?

    / portTICK_PERIOD_MS);} 代碼如下,當我使用tcp_client例程,并且把發送數據注釋掉,再接收數據就很容易出現TCP數據,求助 [22:43:18.32
    發表于 06-17 07:47

    lwip tcp的原因?

    使用lwip協議棧,作為客戶端應答2幀數據時,會有問題,在tcp write 后調用tcp output沒有效果,設置 #define TF_NODELAY((u8_t)0x40U
    發表于 05-10 06:51

    電池和硬電池的區別有哪些呢?

    電池和硬電池是兩種不同類型的鋰離子電池封裝方式,它們在材料、結構、性能以及應用領域上都存在顯著的區別。
    的頭像 發表于 05-07 10:25 ?1.1w次閱讀

    儲能電池ccs結構介紹 儲能電池的結構原理是什么?

    儲能電池CCS結構介紹 儲能電池(Energy Storage Battery Pack,簡稱ESBP)是一種用于存儲電能的設備,廣泛應用于電動汽車、可再生能源、電網調節等領域。儲能電池的結構
    的頭像 發表于 04-29 14:32 ?2515次閱讀

    鋰電池軟和硬哪個好

    鋰電池作為現代電子設備和電動汽車的主要電源,其封裝形式主要分為軟和硬兩種。
    的頭像 發表于 04-28 17:22 ?8061次閱讀

    電池擠壓針刺試驗機的測試結果如何解讀?

    電池擠壓針刺試驗機是一種重要的測試設備,用于評估電池包在極端條件下的安全性能。這種設備通過模擬電池包在受到擠壓或針刺等意外情況下的表現,從而判斷其安全性能是否達標。 電池擠壓針刺試驗機的測試結果
    的頭像 發表于 04-23 10:33 ?488次閱讀
    電池<b class='flag-5'>包</b>擠壓針刺試驗機的測試結果如<b class='flag-5'>何解</b>讀?

    技術分享 | 芯片接空洞的超聲檢測

    隨著電子封裝技術向小型化發展,芯片散熱問題逐漸成為阻礙其具有高可靠性的瓶頸,特別是功率器件,芯片接空洞是造成器件散熱不良而失效的主要原因。因此,在對元器件的篩選檢測工作中,往往需要通過超聲檢測手段
    的頭像 發表于 04-11 11:48 ?1496次閱讀
    技術分享 | 芯片<b class='flag-5'>粘</b>接空洞的超聲檢測

    新能源汽車電池為何缺乏通用性?

    電池電壓又分為額定電壓、端電壓、開路電壓、負載電壓、最高充電電壓、最低放電電壓,這些都對電池的通用型造成很大影響。
    發表于 04-10 11:17 ?566次閱讀
    主站蜘蛛池模板: 奇米影色777四色在线首页 | 夜夜做日日做夜夜爽 | 亚洲欧洲国产精品你懂的 | ww欧美| 在线 | 一区二区三区 | 色综合网址 | 一本大道加勒比久久 | 日本欧美一区二区三区不卡视频 | 女人张开腿 让男人桶个爽 免费观看 | 亚洲三级免费观看 | 亚洲天堂999 | 看黄网站在线观看 | 色天天色综合 | 久久午夜精品 | 男人j进人女人j 的视频 | xxxxxx日本老师hd68| 欧美色欧 | www日本高清 | 午夜视频网站在线观看 | 久久精品免费 | 欧美人成在线观看 | 国模私拍大尺度视频在线播放 | 午夜免费伦费影视在线观看 | 欧美.亚洲.日本一区二区三区 | 国产精品毛片一区二区三区 | 校园 春色 欧美 另类 小说 | 亚洲加勒比在线 | 国产农村乱色xxxx | 2021天天操 | 五月天丁香婷婷网 | 国内精品久久久久影院免费 | 天天狠天天透天干天天怕处 | 日韩免费毛片全部不收费 | 亚洲资源最新版在线观看 | 人人添人人澡人人澡人人人爽 | 久久综合欧美成人 | 欧美成人免费 | 中国一级特黄高清免费的大片 | 国产伦精品一区二区三区四区 | 免费无毒片在线观看 | 色婷婷六月丁香七月婷婷 |