国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

粘包/拆包問題一直都存在,只是到TCP就拆不動了。

這篇具有很好參考價(jià)值的文章主要介紹了粘包/拆包問題一直都存在,只是到TCP就拆不動了。。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  • OSI open-system-Interconnection
  • TCP/IP 5層協(xié)議棧
    • 應(yīng)用層和操作系統(tǒng)的邊界是 系統(tǒng)調(diào)用 ,對應(yīng)到網(wǎng)絡(luò)編程是socket api
  • TCP/UDP 概況
  • TCP粘包問題
  • TCP/IP報(bào)頭深思

OSI開放系統(tǒng)互聯(lián)

定義了網(wǎng)絡(luò)框架,以層為單位實(shí)現(xiàn)協(xié)議,同時(shí)控制權(quán)逐層傳遞。
粘包/拆包問題一直都存在,只是到TCP就拆不動了。

OSI實(shí)際并沒有落地,TCP/IP 5層協(xié)議棧是目前主流的落地實(shí)現(xiàn)

TCP/IP 5層協(xié)議棧

TCP/IP協(xié)議棧不止是傳輸層tcp/網(wǎng)絡(luò)層ip, 還包括應(yīng)用層等,這是一個(gè)協(xié)議簇,只是因?yàn)門CP/IP很具代表性。

不管是OSI還是TCP/IP5層協(xié)議棧,均會出現(xiàn)應(yīng)用程序和操作系統(tǒng)邊界(代碼執(zhí)行在用戶態(tài)/內(nèi)核態(tài))。

粘包/拆包問題一直都存在,只是到TCP就拆不動了。

邊界調(diào)用被稱為系統(tǒng)調(diào)用system call, socket api便是TCP/IP協(xié)議棧中應(yīng)用層的網(wǎng)絡(luò)編程接口。

TCP/UDP概覽

  • TCP: Transmission Control Protocol面向連接的,可靠的,基于字節(jié)的、雙向流式傳輸層協(xié)議。

  • UDP: USer Datagram Protocol面向消息的傳輸服務(wù),傳輸?shù)臄?shù)據(jù)是有邊界的。
    區(qū)別:

TCP可靠性是tcp三次握手的基礎(chǔ),在此之上,增加了seq、ack數(shù)據(jù)確認(rèn)機(jī)制、 擁塞控制, 其中ack= seq+len(data)。

UDP: 想法就發(fā),不用三次握手建立連接。

我們目前常見的應(yīng)用場景底層都是tcp,比如http請求、sql數(shù)據(jù)庫請求。

建立TCP連接之后,才能做http請求、sql請求,tcp連接很耗時(shí),故服務(wù)器都存在連接池化機(jī)制。

這里我要給自己強(qiáng)調(diào)的是:開發(fā)者對于tcp一定不要帶入http請求-響應(yīng)模型,tcp是雙向通信流。

TCP粘包/拆包

TCP粘包并不是TCP協(xié)議造成的問題,因?yàn)閠cp協(xié)議本就規(guī)定字節(jié)流式傳輸

  • 正常的理想情況,應(yīng)用層下發(fā)的兩個(gè)原始包恰好滿足TCP緩沖區(qū)的大小或達(dá)到TCP等待時(shí)長,分別發(fā)送兩個(gè)包;
  • 粘包:兩個(gè)包較小,間隔時(shí)間短,發(fā)生粘包,合并成一個(gè)包發(fā)送;
  • 拆包:一個(gè)包過大,超過緩存區(qū)大小,拆分成兩個(gè)或多個(gè)包發(fā)送;
  • 拆包和粘包:Packet1過大,進(jìn)行了拆包處理,而拆出去的一部分又與Packet2進(jìn)行粘包處理。

粘包/拆包問題一直都存在,只是到TCP就拆不動了。

粘包拆包問題在數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層以及傳輸層都有可能發(fā)生。
數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層的粘包和拆包問題都由協(xié)議自行處理了,我們?nèi)粘5木W(wǎng)絡(luò)應(yīng)用開發(fā)都在對接傳輸層,故面臨的粘包問題指的是TCP粘包。

粘包/拆包問題一直都存在,只是到TCP就拆不動了。


當(dāng)粘包、拆到TCP層的時(shí)候我們就沒辦法識別應(yīng)用層的請求/調(diào)用了, 所以解決方法是:一開始就需要在字節(jié)流中加入[特殊分隔符]或者[長度+偏移量]含義。

HTTP 超文本傳輸協(xié)議的規(guī)定如下:

粘包/拆包問題一直都存在,只是到TCP就拆不動了。

旁白

梳理了整個(gè)TCP/IP協(xié)議棧各層封包邏輯, 我們就知道粘包、拆包一直都存在,只是拆到TCP層的時(shí)候,我們沒有辦法區(qū)分應(yīng)用層斷續(xù)發(fā)送的請求/調(diào)用, 這就是我們口口相傳的TCP粘包/拆包問題, 需要應(yīng)用層用特殊分隔符或者長度解析。文章來源地址http://www.zghlxwxcb.cn/news/detail-437441.html

到了這里,關(guān)于粘包/拆包問題一直都存在,只是到TCP就拆不動了。的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 網(wǎng)絡(luò)編程:TCP粘包問題——各層粘包/拆包、Nagle 算法、Go實(shí)現(xiàn)長度字段協(xié)議解決TCP粘包、使用TCP的應(yīng)用層協(xié)議設(shè)計(jì)

    網(wǎng)絡(luò)編程:TCP粘包問題——各層粘包/拆包、Nagle 算法、Go實(shí)現(xiàn)長度字段協(xié)議解決TCP粘包、使用TCP的應(yīng)用層協(xié)議設(shè)計(jì)

    1.1 TCP介紹 如上圖,TCP具有面向連接、可靠、基于字節(jié)流三大特點(diǎn)。 字節(jié)流可以理解為一個(gè)雙向的通道里流淌的數(shù)據(jù),這個(gè)數(shù)據(jù)其實(shí)就是我們常說的二進(jìn)制數(shù)據(jù),簡單來說就是一大堆 01 串。純裸TCP收發(fā)的這些 01 串之間是沒有任何邊界的,你根本不知道到哪個(gè)地方才算一條完

    2024年02月04日
    瀏覽(24)
  • C++ Qt TCP協(xié)議,處理粘包、拆包問題,加上數(shù)據(jù)頭來處理

    目錄 前言: 場景: 原因: 解決: 方案2具體細(xì)節(jié): 純C++服務(wù)端處理如下: Qt客戶端處理如下: ? ? ? ? tcp協(xié)議里面,除了心跳檢測是關(guān)于長連接操作的處理,這個(gè)在前一篇已經(jīng)提到過了,這一篇將會對tcp本身的一個(gè)問題,進(jìn)行處理:那就是做網(wǎng)絡(luò)通信大概率會遇到的問題

    2024年02月04日
    瀏覽(22)
  • 說說 TCP的粘包、拆包

    說說 TCP的粘包、拆包

    拆包和粘包是在socket編程中經(jīng)常出現(xiàn)的情況, 在socket通訊過程中,如果通訊的一端一次性連續(xù)發(fā)送多條數(shù)據(jù)包,tcp協(xié)議會將 多個(gè)數(shù)據(jù)包打包 成一個(gè)tcp報(bào)文發(fā)送出去,這就是所謂的 粘包 。 如果通訊的一端發(fā)送的數(shù)據(jù)包超過一次tcp報(bào)文所能傳輸?shù)淖畲笾禃r(shí),就會將 一個(gè)數(shù)據(jù)包

    2024年02月09日
    瀏覽(25)
  • TCP的粘包、拆包、解決方案以及Go語言實(shí)現(xiàn)

    TCP的粘包、拆包、解決方案以及Go語言實(shí)現(xiàn)

    TCP的粘包和拆包問題往往出現(xiàn)在基于TCP協(xié)議的通訊中,比如RPC框架 在使用TCP進(jìn)行數(shù)據(jù)傳輸時(shí),由于TCP是基于字節(jié)流的協(xié)議,而不是基于消息的協(xié)議,可能會出現(xiàn)粘包(多個(gè)消息粘在一起)和拆包(一個(gè)消息被拆分成多個(gè)部分)的問題。這些問題可能會導(dǎo)致數(shù)據(jù)解析錯(cuò)誤或數(shù)據(jù)

    2024年02月15日
    瀏覽(27)
  • 聊聊TCP協(xié)議的粘包、拆包以及http是如何解決的?

    聊聊TCP協(xié)議的粘包、拆包以及http是如何解決的?

    目錄 一、粘包與拆包是什么? 二、粘包與拆包為什么發(fā)生? 三、遇到粘包、拆包怎么辦? 解決方案1:固定數(shù)據(jù)大小 解決方案2:自定義請求協(xié)議 解決方案3:特殊字符結(jié)尾 ?四、HTTP如何解決粘包問題的? 4.1、讀取請求行/請求頭、響應(yīng)行/響應(yīng)頭 4.2、 怎么讀取body數(shù)據(jù)呢?

    2024年02月11日
    瀏覽(49)
  • Unity-TCP-網(wǎng)絡(luò)聊天功能(一):?API、客戶端服務(wù)器、數(shù)據(jù)格式、粘包拆包

    Unity-TCP-網(wǎng)絡(luò)聊天功能(一):?API、客戶端服務(wù)器、數(shù)據(jù)格式、粘包拆包

    TCP是面向連接的。因此需要?jiǎng)?chuàng)建監(jiān)聽器,監(jiān)聽客戶端的連接。當(dāng)連接成功后,會返回一個(gè)TcpClient對象。通過TcpClient可以接收和發(fā)送數(shù)據(jù)。 VS創(chuàng)建C# .net控制臺應(yīng)用 項(xiàng)目中創(chuàng)建文件夾Net,Net 下添加TCPServer.cs類,用來創(chuàng)建TCPListener和Accept客戶端連接,實(shí)例化一個(gè)TCPServcer放在Main函數(shù)

    2024年02月07日
    瀏覽(129)
  • Netty-LengthFieldBasedFrameDecoder-解決拆包粘包問題的解碼器

    Netty-LengthFieldBasedFrameDecoder-解決拆包粘包問題的解碼器

    maxFrameLength:指定解碼器所能處理的數(shù)據(jù)包的最大長度,超過該長度則拋出 TooLongFrameException 異常; lengthFieldOffset:指定 長度字段 的起始位置; lengthFieldLength:指定 長度字段 的長度:目前支持1(byte)、2(short)、3(3個(gè)byte)、4(int)、8(Long) lengthAdjustment:指定 長度字段 所表示的消息

    2024年02月12日
    瀏覽(21)
  • Netty編解碼器,Netty自定義編解碼器解決粘包拆包問題,Netty編解碼器的執(zhí)行過程詳解

    Netty編解碼器,Netty自定義編解碼器解決粘包拆包問題,Netty編解碼器的執(zhí)行過程詳解

    當(dāng)Netty發(fā)送或者接收一個(gè)消息的時(shí)候,就會發(fā)生一次數(shù)據(jù)轉(zhuǎn)換。入站消息會被解碼(從字節(jié)轉(zhuǎn)換為另一種格式,比如java對象);出站消息會被編碼成字節(jié)。 Netty 提供一系列實(shí)用的編解碼器,他們都實(shí)現(xiàn)了 ChannelInboundHadnler 或者 ChannelOutboundHandler 接口。在這些類中,channelRead 方

    2023年04月23日
    瀏覽(32)
  • Netty粘包與拆包

    文章首發(fā)地址 TCP是一個(gè)“流”協(xié)議。所謂流,就是沒有界限的一長串二進(jìn)制數(shù)據(jù)。 拆包和粘包 :TCP作為傳輸層協(xié)議,并不了解上層業(yè)務(wù)數(shù)據(jù)的具體含義,它會根據(jù)TCP緩沖區(qū)的實(shí)際情況進(jìn)行數(shù)據(jù)包的劃分,所以在業(yè)務(wù)上認(rèn)為是一個(gè)完整包的,可能會被TCP拆分成多個(gè)包進(jìn)行發(fā)送

    2024年02月16日
    瀏覽(38)
  • workerman 自定義的協(xié)議如何解決粘包拆包

    workerman 自定義的協(xié)議如何解決粘包拆包

    前言: ? ? ? ? 由于最近在使用 workerman 實(shí)現(xiàn) Unity3D 聯(lián)機(jī)游戲的服務(wù)端,雖然也可以通過 TCP 協(xié)議直接通信,但是在實(shí)際測試的過程中發(fā)現(xiàn)了一些小問題。 ? ? ? ? 比如雙方的數(shù)據(jù)包都是字符串的方式嗎,還有就因?yàn)槭亲址托枰懈?,而有時(shí)候在客戶端或服務(wù)端接收時(shí)都

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包