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

說(shuō)說(shuō) TCP的粘包、拆包

這篇具有很好參考價(jià)值的文章主要介紹了說(shuō)說(shuō) TCP的粘包、拆包。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

分析&回答

拆包和粘包是在socket編程中經(jīng)常出現(xiàn)的情況,

  • 在socket通訊過(guò)程中,如果通訊的一端一次性連續(xù)發(fā)送多條數(shù)據(jù)包,tcp協(xié)議會(huì)將多個(gè)數(shù)據(jù)包打包成一個(gè)tcp報(bào)文發(fā)送出去,這就是所謂的粘包。
  • 如果通訊的一端發(fā)送的數(shù)據(jù)包超過(guò)一次tcp報(bào)文所能傳輸?shù)淖畲笾禃r(shí),就會(huì)將一個(gè)數(shù)據(jù)包拆成多個(gè)最大tcp長(zhǎng)度的tcp報(bào)文分開(kāi)傳輸,這就叫做拆包。

MTU

泛指通訊協(xié)議中的最大傳輸單元。一般用來(lái)說(shuō)明TCP/IP四層協(xié)議中數(shù)據(jù)鏈路層的最大傳輸單元,不同類型的網(wǎng)絡(luò)MTU也會(huì)不同,我們普遍使用的以太網(wǎng)的MTU是1500,即最大只能傳輸1500字節(jié)的數(shù)據(jù)幀。可以通過(guò)ifconfig命令查看電腦各個(gè)網(wǎng)卡的MTU。

MSS

指TCP建立連接后雙方約定的可傳輸?shù)淖畲骉CP報(bào)文長(zhǎng)度,是TCP用來(lái)限制應(yīng)用層可發(fā)送的最大字節(jié)數(shù)。如果底層的MTU是1500byte,則 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte。

TCP粘包/拆包發(fā)生的原因

問(wèn)題產(chǎn)生的原因有三個(gè),分別如下。

  • 應(yīng)用程序write寫入的字節(jié)大小大于套接口發(fā)送緩沖區(qū)大小;
  • 進(jìn)行MSS大小的TCP分段;
  • 以太網(wǎng)幀的payload大于MTU進(jìn)行IP分片。

說(shuō)說(shuō) TCP的粘包、拆包,網(wǎng)絡(luò)原理與編程,tcp/ip,網(wǎng)絡(luò),網(wǎng)絡(luò)協(xié)議

粘包問(wèn)題的解決策略

由于底層的TCP無(wú)法理解上層的業(yè)務(wù)數(shù)據(jù),所以在底層是無(wú)法保證數(shù)據(jù)包不被拆分和重組的,這個(gè)問(wèn)題只能通過(guò)上層的應(yīng)用協(xié)議棧設(shè)計(jì)來(lái)解決,根據(jù)業(yè)界的主流協(xié)議的解決方案,可以歸納如下。

  1. 消息定長(zhǎng),例如每個(gè)報(bào)文的大小為固定長(zhǎng)度200字節(jié),如果不夠,空位補(bǔ)空格;
  2. 在包尾增加回車換行符進(jìn)行分割,例如FTP協(xié)議;
  3. 將消息分為消息頭和消息體,消息頭中包含表示消息總長(zhǎng)度(或者消息體長(zhǎng)度)的字段,通常設(shè)計(jì)思路為消息頭的第一個(gè)字段使用int32來(lái)表示消息的總長(zhǎng)度;
  4. 更復(fù)雜的應(yīng)用層協(xié)議。

喵嗚面試助手:一站式解決面試問(wèn)題,你可以搜索微信小程序 [喵嗚面試助手]?或關(guān)注 [喵嗚刷題] -> 面試助手?免費(fèi)刷題。如有好的面試知識(shí)或技巧期待您的共享!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-699209.html

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

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

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

相關(guān)文章

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

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

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

    2024年02月04日
    瀏覽(24)
  • 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)聽(tīng)器,監(jiān)聽(tīng)客戶端的連接。當(dāng)連接成功后,會(huì)返回一個(gè)TcpClient對(duì)象。通過(guò)TcpClient可以接收和發(fā)送數(shù)據(jù)。 VS創(chuàng)建C# .net控制臺(tái)應(yīng)用 項(xiàng)目中創(chuàng)建文件夾Net,Net 下添加TCPServer.cs類,用來(lái)創(chuàng)建TCPListener和Accept客戶端連接,實(shí)例化一個(gè)TCPServcer放在Main函數(shù)

    2024年02月07日
    瀏覽(129)
  • Tcp的粘包和半包問(wèn)題及解決方案

    Tcp的粘包和半包問(wèn)題及解決方案

    目錄 粘包: 半包: 應(yīng)用進(jìn)程如何解讀字節(jié)流?如何解決粘包和半包問(wèn)題? ①:固定長(zhǎng)度 ②:分隔符 ③:固定長(zhǎng)度字段存儲(chǔ)內(nèi)容的長(zhǎng)度信息 一次接收到多個(gè)消息,粘包 應(yīng)用進(jìn)程無(wú)法從一個(gè)粘包中解析出數(shù)據(jù) 出現(xiàn)粘包的原因: ①:發(fā)送方每次寫入數(shù)據(jù)內(nèi)核緩沖區(qū)大小;導(dǎo)致

    2024年02月11日
    瀏覽(17)
  • 解決TCP粘包/拆包問(wèn)題的方法及示例

    TCP粘包和拆包是網(wǎng)絡(luò)編程中常見(jiàn)的問(wèn)題,特別是在數(shù)據(jù)傳輸?shù)倪^(guò)程中,可能會(huì)發(fā)生將多個(gè)數(shù)據(jù)包粘在一起或?qū)⒁粋€(gè)數(shù)據(jù)包拆成多個(gè)數(shù)據(jù)包的情況,這可能會(huì)導(dǎo)致應(yīng)用程序無(wú)法正確解析數(shù)據(jù),從而造成數(shù)據(jù)錯(cuò)誤或系統(tǒng)故障。本文將介紹TCP粘包和拆包的原因、解決方案以及兩個(gè)示

    2024年02月10日
    瀏覽(17)
  • TCP粘包和拆包問(wèn)題及其解決方法

    TCP粘包和拆包問(wèn)題及其解決方法

    含義: TCP 傳輸協(xié)議是面向流的,沒(méi)有數(shù)據(jù)包界限,也就是說(shuō)消息無(wú)邊界??蛻舳讼蚍?wù)端發(fā)送數(shù)據(jù)時(shí),可能將一個(gè)完整的報(bào)文拆分成多個(gè)小報(bào)文進(jìn)行發(fā)送,也可能將多個(gè)報(bào)文合并成一個(gè)大的報(bào)文進(jìn)行發(fā)送。(TCP協(xié)議的底層,并不了解上層業(yè)務(wù)的具體定義,它會(huì)根據(jù)TCP緩沖區(qū)

    2023年04月21日
    瀏覽(19)
  • Socket TCP/IP協(xié)議數(shù)據(jù)傳輸過(guò)程中的粘包和分包問(wèn)題

    Socket TCP/IP協(xié)議數(shù)據(jù)傳輸過(guò)程中的粘包和分包問(wèn)題

    一:通過(guò)圖解法來(lái)描述一下分包和粘包,這樣客戶更清晰直觀的了解: 下面對(duì)上面的圖進(jìn)行解釋: 1.正常情況:如果Socket Client 發(fā)送的數(shù)據(jù)包,在Socket Server端也是一個(gè)一個(gè)完整接收的,那個(gè)就不會(huì)出現(xiàn)粘包和分包情況,數(shù)據(jù)正常讀取。 2.粘包情況:Socket Client發(fā)送的數(shù)據(jù)包,

    2024年02月12日
    瀏覽(22)
  • 粘包/拆包問(wèn)題一直都存在,只是到TCP就拆不動(dòng)了。

    粘包/拆包問(wèn)題一直都存在,只是到TCP就拆不動(dòng)了。

    OSI open-system-Interconnection TCP/IP 5層協(xié)議棧 應(yīng)用層和操作系統(tǒng)的邊界是 系統(tǒng)調(diào)用 ,對(duì)應(yīng)到網(wǎng)絡(luò)編程是socket api TCP/UDP 概況 TCP粘包問(wèn)題 TCP/IP報(bào)頭深思 定義了網(wǎng)絡(luò)框架,以層為單位實(shí)現(xiàn)協(xié)議,同時(shí)控制權(quán)逐層傳遞。 OSI實(shí)際并沒(méi)有落地,TCP/IP 5層協(xié)議棧是目前主流的落地實(shí)現(xiàn) 。 TC

    2024年02月03日
    瀏覽(95)
  • Netty自定義應(yīng)用層協(xié)議逃不開(kāi)的粘包和拆包處理

    Netty自定義應(yīng)用層協(xié)議逃不開(kāi)的粘包和拆包處理

    導(dǎo)致一次發(fā)送的數(shù)據(jù)被分成多個(gè)數(shù)據(jù)包進(jìn)行傳輸,或者多次發(fā)送的數(shù)據(jù)被粘成一個(gè)數(shù)據(jù)包進(jìn)行傳輸 使用TCP進(jìn)行數(shù)據(jù)傳輸時(shí),TCP是一種有序的字節(jié)流,其中是一個(gè)一個(gè)的數(shù)據(jù)報(bào)文發(fā)送到系統(tǒng)的緩沖區(qū)中。因此在發(fā)送端和接收端之間無(wú)法保證數(shù)據(jù)的分割和邊界。這就可能導(dǎo)致數(shù)據(jù)

    2023年04月23日
    瀏覽(31)
  • C++ Qt TCP協(xié)議,處理粘包、拆包問(wèn)題,加上數(shù)據(jù)頭來(lái)處理

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

    2024年02月04日
    瀏覽(22)
  • Go語(yǔ)言網(wǎng)絡(luò)編程(socket編程)TCP粘包

    服務(wù)端代碼如下: 客戶端代碼如下: 將上面的代碼保存后,分別編譯。先啟動(dòng)服務(wù)端再啟動(dòng)客戶端,可以看到服務(wù)端輸出結(jié)果如下: 收到client發(fā)來(lái)的數(shù)據(jù): Hello, Hello. How are you?Hello, Hello. How are you?Hello, Hello. How are you?Hello, Hello. How are you?Hello, Hello. How are you? 收到client發(fā)來(lái)的數(shù)

    2024年02月09日
    瀏覽(96)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包