91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【推薦】TCP為何粘包?粘包問(wèn)題如何解決?

億佰特物聯(lián)網(wǎng)應(yīng)用專(zhuān)家 ? 2022-09-23 10:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們?cè)谏婕癟CP協(xié)議的應(yīng)用中,經(jīng)常會(huì)出現(xiàn)粘包的問(wèn)題。所謂粘包,簡(jiǎn)單地講,就是我有兩條消息,明明發(fā)送端的代碼是分兩次發(fā)送的,但是在接收端卻一次性就接收到了兩條消息。這個(gè)情況不管是在嵌入式行業(yè)還是在互聯(lián)網(wǎng)行業(yè),都非常的普遍。

TCP協(xié)議為什么粘包?

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

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

而且這個(gè)情況并不能通過(guò)讓發(fā)送端在時(shí)間上均勻發(fā)包來(lái)避免,因?yàn)榫W(wǎng)絡(luò)不穩(wěn)定情況的存在,即使是時(shí)間上均勻發(fā)送的數(shù)據(jù)包,在接收端看來(lái)也可能是隨機(jī)出現(xiàn)的。

如何規(guī)避粘包的負(fù)面影響?

根據(jù)以上分析,我們不難發(fā)現(xiàn),想要杜絕粘包的問(wèn)題出現(xiàn),基本上是不可能的。即使發(fā)送端和接收端都能自己控制,但是網(wǎng)絡(luò)傳輸?shù)倪^(guò)程也是很難控制的。
但是即使粘包的問(wèn)題存在,也不影響我們大規(guī)模的使用TCP協(xié)議。因?yàn)檫@個(gè)問(wèn)題在應(yīng)用層非常好處理。大致有兩種思路:1. 在信息中加入特殊的標(biāo)志作為分隔符7e1858c0-3ab3-11ed-b180-dac502259ad0.png

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1425

    瀏覽量

    83547
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鋁合金電化學(xué)處理的粗糙度表征與接性能優(yōu)化

    鋁合金廣泛應(yīng)用于航空航天、新能源汽車(chē)等領(lǐng)域,輕量化趨勢(shì)下其高效高質(zhì)量連接成為關(guān)鍵難題。接技術(shù)優(yōu)勢(shì)顯著,但鋁合金表面易形成致密氧化膜,需預(yù)處理提升接性能。傳統(tǒng)酸堿預(yù)處理存在污染、低效等問(wèn)題,中性鹽
    的頭像 發(fā)表于 02-10 18:03 ?136次閱讀
    鋁合金電化學(xué)處理的粗糙度表征與<b class='flag-5'>粘</b>接性能優(yōu)化

    CPU散熱器接用導(dǎo)熱膠怎么選?性能與應(yīng)用全解析 |鉻銳特實(shí)業(yè)

    鉻銳特實(shí)業(yè)|東莞導(dǎo)熱膠廠家|導(dǎo)熱膠怎么選才能讓CPU散熱器既得牢又散熱快?本文對(duì)比導(dǎo)熱系數(shù)、接強(qiáng)度、電氣絕緣等關(guān)鍵指標(biāo),結(jié)合實(shí)際場(chǎng)景給出筆記本、GPU、服務(wù)器等推薦選型,一文搞懂導(dǎo)熱膠性能與應(yīng)用。(128字)
    的頭像 發(fā)表于 02-06 01:08 ?222次閱讀
    CPU散熱器<b class='flag-5'>粘</b>接用導(dǎo)熱膠怎么選?性能與應(yīng)用全解析 |鉻銳特實(shí)業(yè)

    UV膠適用于哪些材料的

    UV膠,即紫外光固化膠,是一種通過(guò)紫外線照射引發(fā)聚合反應(yīng)而快速固化的高性能膠粘劑。其固化速度快、接強(qiáng)度高、透明性好、耐候性優(yōu)異,廣泛應(yīng)用于工業(yè)制造、電子裝配、醫(yī)療設(shè)備和工藝品等領(lǐng)域。然而,并非所有
    的頭像 發(fā)表于 02-02 15:46 ?173次閱讀
    UV膠適用于哪些材料的<b class='flag-5'>粘</b>接

    UV膠表面發(fā)的原因

    uv膠表面發(fā)究竟是什么原因造成的?我們又該如何解決和預(yù)防呢?本文將深入分析其背后其實(shí)涉及的化學(xué)反應(yīng)、光照條件、材料特性以及操作環(huán)境等多個(gè)科學(xué)因素。
    的頭像 發(fā)表于 01-22 16:17 ?1599次閱讀
    UV膠表面發(fā)<b class='flag-5'>粘</b>的原因

    如何使用wireshark進(jìn)行遠(yuǎn)程抓

    一、概述 通常我們使用wireshark進(jìn)行抓分析的時(shí)候,在遠(yuǎn)端設(shè)備抓取一部分?jǐn)?shù)據(jù)后,再回傳到本地,然后使用wireshark進(jìn)行分析。這種操作主要是抓取的數(shù)據(jù)不是實(shí)時(shí)的,不能做實(shí)時(shí)
    的頭像 發(fā)表于 01-16 16:05 ?1052次閱讀
    如何使用wireshark進(jìn)行遠(yuǎn)程抓<b class='flag-5'>包</b>

    真空片機(jī)廠家關(guān)鍵設(shè)備選型與高效生產(chǎn)策略深度解析

    片機(jī)
    北京中科同志科技股份有限公司
    發(fā)布于 :2026年01月04日 11:13:27

    TO功率器件晶片接強(qiáng)度檢測(cè):一套完整的推拉力測(cè)試機(jī)解決方案

    在功率半導(dǎo)體領(lǐng)域,TO(晶體管外形)封裝器件因其結(jié)構(gòu)堅(jiān)固、散熱良好而被廣泛應(yīng)用于工業(yè)控制、新能源汽車(chē)及能源管理等高可靠性場(chǎng)景。然而,其內(nèi)部晶片與基島之間的焊接或接質(zhì)量,直接決定了器件的長(zhǎng)期導(dǎo)通性
    的頭像 發(fā)表于 11-10 09:46 ?494次閱讀
    TO功率器件晶片<b class='flag-5'>粘</b>接強(qiáng)度檢測(cè):一套完整的推拉力測(cè)試機(jī)解決方案

    GD32F470+LWIP TCP偶爾丟怎么解決?

    硬件校驗(yàn)和的宏,不相符。 通過(guò)wireshark在上位機(jī)監(jiān)控?cái)?shù)據(jù),發(fā)現(xiàn)出現(xiàn)問(wèn)題的時(shí)候,上位機(jī)是發(fā)送了數(shù)據(jù)的,但是板子似乎沒(méi)有收到,而且過(guò)1.5秒后板子還會(huì)重發(fā)一次上一的數(shù)據(jù),符合tcp沒(méi)有收到ack
    發(fā)表于 09-29 06:43

    LED透鏡接UV膠用于固定和粘合LED透鏡

    LED透鏡接UV膠是一種特殊的UV固化膠,用于固定和粘合LED透鏡。它具有以下特點(diǎn):1.高透明度:LED透鏡接UV膠具有高透明度,可以確保光線的透過(guò)性,不影響LED的亮度和效果。2.快速固化
    的頭像 發(fā)表于 08-08 10:11 ?1264次閱讀
    LED透鏡<b class='flag-5'>粘</b>接UV膠用于固定和粘合LED透鏡

    光學(xué)輪廓儀揭示:表面特性對(duì) CFRP / 鋁合金接性能影響的研究

    在材料科學(xué)領(lǐng)域,表面特性對(duì)碳纖維增強(qiáng)復(fù)合材料(CFRP)與鋁合金接性能影響關(guān)鍵,二者接結(jié)構(gòu)廣泛應(yīng)用于汽車(chē)輕量化、航空航天等領(lǐng)域。精準(zhǔn)表征表面粗糙度與微觀形貌是探究接機(jī)理的核心,光學(xué)輪廓儀以
    的頭像 發(fā)表于 08-05 17:45 ?979次閱讀
    光學(xué)輪廓儀揭示:表面特性對(duì) CFRP / 鋁合金<b class='flag-5'>粘</b>接性能影響的研究

    快斷式覆成型保險(xiǎn)絲 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()快斷式覆成型保險(xiǎn)絲相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有快斷式覆成型保險(xiǎn)絲的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,快斷式覆成型保險(xiǎn)絲真值表,快斷式覆成型保
    發(fā)表于 07-24 18:34
    快斷式<b class='flag-5'>包</b>覆成型保險(xiǎn)絲 skyworksinc

    更改最大數(shù)據(jù)大小時(shí)無(wú)法識(shí)別USB設(shè)備如何解決?

    將生產(chǎn)者 EP 端點(diǎn)描述符中的最大數(shù)據(jù)大小從 1024 字節(jié)更改為 512 字節(jié)時(shí),無(wú)法識(shí)別 USB 設(shè)備。 請(qǐng)告知如何解決這個(gè)問(wèn)題。
    發(fā)表于 05-20 08:13

    接聚酰亞胺PI膜除了使用PI膜專(zhuān)用UV膠粘接,還可以使用熱固化環(huán)氧膠來(lái)解決!

    接聚酰亞胺PI膜可以使用PI膜專(zhuān)用UV膠粘接,但使用UV膠粘接時(shí),需要接材料至少有一方要透UV紫外光方可,如不能透UV光,那么接PI這種難于接的材料時(shí),還可以使用熱固化環(huán)氧膠來(lái)
    的頭像 發(fā)表于 05-07 09:11 ?1510次閱讀
    <b class='flag-5'>粘</b>接聚酰亞胺PI膜除了使用PI膜專(zhuān)用UV膠粘接,還可以使用熱固化環(huán)氧膠來(lái)解決!

    片工藝介紹及選型指南

    片作為芯片與管殼間實(shí)現(xiàn)連接和固定的關(guān)鍵工序,達(dá)成了封裝對(duì)于芯片的固定功能,以及芯片背面電連接功能。在行業(yè)里,這一工序常被叫做片。由于其核心作用是固定芯片,因而也被稱作固晶工藝或貼片工藝,英文表述為“Die Bonding”或“Die Attach”。
    的頭像 發(fā)表于 04-09 10:37 ?1885次閱讀
    <b class='flag-5'>粘</b>片工藝介紹及選型指南

    如何將Linux安裝快速轉(zhuǎn)成玲瓏

    本篇將以 motrix 為例為大家展示如何將 Linux 安裝快速轉(zhuǎn)成玲瓏。
    的頭像 發(fā)表于 03-12 16:01 ?1715次閱讀
    如何將Linux安裝<b class='flag-5'>包</b>快速轉(zhuǎn)成玲瓏<b class='flag-5'>包</b>