久久国产精品一区二区三区四区,久色婷婷小香蕉久久,国产日韩欧美在线播放不卡,另类av一区二区

一分鐘看懂TCP粘包拆包
來源:愛笑的架構師    時間:2022-04-29 14:49:51

平時大家在網絡編程過程中可能會遇到這樣一種現象:客戶端發送了一長串消息,服務端接受的消息揉在一起或者被拆分了,這樣就會造成消息難以被正確理解。

比如說有一天你特別想喝奶茶,看了一下外賣,「一點點」的奶茶看著不錯,(一點點趕緊給我打錢 doge),于是你在群里發了一條消息,想找幾個人拼奶茶:

一點點奶茶有人喝嗎?

結果群里同事回了一句:

現在不是已經三點了嗎?

你覺得莫名其妙,看了一眼同事的手機,他收到的消息是這樣的兩行:

一點

點奶茶有人喝嗎?

哈哈,講了一個冷笑話。用專業的術語來說這種現象就是「拆包」了,我們接著往下講。

TCP 粘包拆包的現象

粘包拆包問題一般是處于應用層下的問題,在數據鏈路層、網絡層以及傳輸層都有可能發生。我們日常的網絡應用開發大多都在傳輸層進行,因此本文著重講解傳輸層粘包拆包問題。

傳輸層有兩個協議我們都很熟悉:UDP 和 TCP,UDP有消息保護邊界,不會發生粘包拆包問題,因此粘包拆包問題只發生在TCP協議中。

下面用一個簡單的例子來講解什么是粘包和拆包。

假設客戶端向服務端連續發送了兩個數據包,用 packet1 和 packet2 來表示,那么服務端收到的數據可能有四種:

(1)第一種情況,服務端按順序正常收到兩個包,即未出現粘包和拆包的現象。

(2)第二種情況,服務端只收到一個數據包,由于 TCP 保證送達的特性,所以這一個數據包包含了客戶端發送的兩個數據包的信息,這種現象就是粘包。除非客戶端發送的數據包有明確的規則,否則服務端不知道兩個包的界限,難以處理數據。

(3)第三種情況,服務端收到了三個數據包,Package1數據包被拆分為兩個數據包:Package1.1和Package1.2,這種現象就是拆包,至于拆包的原因下面會講,服務端收到拆開的數據包也很難處理。

(4)第四種情況,一些大的數據包被拆分為小的數據包,小的數據包與其他數據包粘在一起,這種現象是將上面的粘包和拆包綜合在一塊。

TCP 粘包拆包的原因

TCP 是一個面向「流」的協議,所謂流就是沒有界限的一長串二進制數據。TCP 作為傳輸層協議并不了解上層業務數據的具體含義,它會根據TCP緩沖區的實際情況進行數據包的劃分,所以在業務上認為是一個完整的包,可能會被 TCP 拆分成多個包進行發送,也有可能把多個小的包封裝成一個大的數據包發送,這就會出現粘包拆包的問題。

例如,TCP緩沖區是1024個字節大小,如果應用一次請求發送的數據量比較小,沒達到緩沖區大小,TCP則會將多個請求合并為同一個請求進行發送,站在業務上來看這就是「粘包」;

如果應用一次請求發送的數據量比較大,超過了緩沖區大小,TCP就會將其拆分為多次發送,這就是「拆包」,也就是將一個大的包拆分為多個小包進行發送。

TCP 粘包拆包的解決方法

TCP 是面向流的,會發生粘包和拆包,那作為應用程序,如何從這源源不斷涌來的數據流中拆分出或者合并出有意義的信息呢?通常會有以下一些常用的方法:

(1)發送端給每個數據包添加包首部,首部中應該至少包含數據包的長度,這樣接收端在接收到數據后,通過讀取包首部的長度字段,便知道每一個數據包的實際長度了。

如下圖,在每個包前面加上包的實際長度。

(2)發送端將每個數據包封裝為固定長度(不夠的可以通過補0填充),這樣接收端每次從接收緩沖區中讀取固定長度的數據就自然而然的把每個數據包拆分開來。

下圖每個包的固定長度為 4,接收端很容易進行區分。

(3)可以在數據包之間設置邊界,如添加特殊符號,這樣,接收端通過這個邊界就可以將不同的數據包拆分開。

如下圖,在每個包的后面加上特殊字符:/

Netty 框架如何解決粘包拆包問題

Netty 作為一款高性能的 Java 網絡編程框架,不僅是基于 Java NIO 進行了深度封裝,還在客戶端與服務端之間的數據傳輸上做了有效處理。

前面講過 TCP 傳輸會出現粘包和拆包的現象,Netty 針對這一點內置了多款數據流編解碼器,客戶端服務端按照約定好的規則進行數據傳輸即可解決這個問題。

Netty 提供了多款開箱即用的編解碼器:

(1)FixedLengthFrameDecoder 固定長度解碼器

(2)DelimiterBasedFrameDecoder 指定分隔符解碼器

(3)LengthFieldBasedFrameDecoder 基于數據包長度解碼器

(4)等等……這里不再列舉

小結

TCP 是一個面向「流」的協議,所謂流就是沒有界限的一長串二進制數據。在實際的傳輸過程中,TCP 會根據網絡情況將數據包進行拆分或者拼裝,如果業務沒有定義一個明確的界限規則,在應用層的業務上就會出現粘包拆包的現象。

針對 TCP 粘包拆包的現象,常見的解決思路如下:

(1)發送端給每個數據包添加包首部。

(2)發送端將每個數據包封裝為固定長度。

(3)可以在數據包之間設置邊界。

為了解決粘包拆包,Netty 框架也提供了很多開箱即用的編解碼器,極大簡化網絡編程解決此類問題的難度。

關鍵詞: 編解碼器 數據傳輸 設置邊界 就是沒有 二進制數

上一篇:

下一篇:

X 關閉

X 關閉

久久国产精品一区二区三区四区,久色婷婷小香蕉久久,国产日韩欧美在线播放不卡,另类av一区二区
国产精品久久福利| 国产欧美一区二区三区国产幕精品| 欧美小视频在线观看| 亚洲自拍偷拍色片视频| 欧美性感一类影片在线播放| 欧美日韩国产一区| 久久午夜精品一区二区| 亚洲经典一区| 欧美精品久久久久久久免费观看| 在线观看av一区| 亚洲一区二区在| 一区免费观看| 国产精品一区久久久久| 在线电影一区| 在线观看亚洲专区| 亚洲国产精品激情在线观看| 欧美专区在线播放| 国产午夜精品久久| 久久九九有精品国产23| 国产视频丨精品|在线观看| 欧美精品性视频| 久久久久88色偷偷免费| 欧美第一黄网免费网站| 在线欧美不卡| 91久久国产精品91久久性色| 国产亚洲视频在线观看| 欧美大尺度在线| av成人免费在线观看| 久久久久国产成人精品亚洲午夜| 久久久在线视频| 91久久久久久久久久久久久| 亚洲高清不卡一区| 在线观看免费视频综合| 欧美日本中文字幕| 欧美日韩理论| 亚洲精选国产| 欧美日韩人人澡狠狠躁视频| 中文一区二区在线观看| 亚洲欧洲三级电影| 亚洲风情在线资源站| 国产美女精品| 欧美专区中文字幕| 亚洲欧美日韩精品一区二区| 国产日韩综合一区二区性色av| 亚洲在线不卡| 欧美精品久久99| 欧美成人激情视频| 久久一二三四| 亚洲电影在线| 久久久久欧美精品| 免费成人在线视频网站| 国产三区二区一区久久| 久久亚洲影院| 最新精品在线| 久久精品一区蜜桃臀影院| 欧美日韩三级一区二区| 久久乐国产精品| 国产亚洲成av人片在线观看桃| 欧美在线播放视频| 久久狠狠亚洲综合| 国产精品日韩一区| 欧美多人爱爱视频网站| 一本色道久久88精品综合| 在线精品国精品国产尤物884a| 久久精品国产久精国产爱| 在线一区观看| 欧美风情在线观看| 欧美日韩成人精品| 国内精品免费午夜毛片| 在线视频日韩精品| 亚洲伊人一本大道中文字幕| 久久国产精品久久久久久电车| 曰韩精品一区二区| 欧美午夜久久久| 欧美一区二区三区精品电影| 亚洲欧美一区二区三区极速播放| 国产精品成人观看视频免费| 樱桃视频在线观看一区| 久久久视频精品| 亚洲精品一区二区三区不| 欧美专区在线观看一区| 欧美日韩国产综合网| 亚洲精品一二三| 午夜精品一区二区三区在线播放| 亚洲社区在线观看| 黄色成人精品网站| 亚洲国产合集| 亚洲激情中文1区| 欧美风情在线观看| 国产亚洲精品久久久久动| 好看的亚洲午夜视频在线| 久久精品72免费观看| 久久国产精品网站| 欧美日韩综合不卡| 国产精品护士白丝一区av| 国产九九精品| 欧美大胆成人| 欧美国产国产综合| 美女免费视频一区| 欧美一区二区在线免费观看| 亚洲一区二区三区四区中文| 欧美日韩在线综合| 亚洲自拍都市欧美小说| 欧美日韩中文| 狠狠88综合久久久久综合网| 欧美日韩99| 国产精品久久久久久久久果冻传媒| 久久综合色播五月| 亚洲黄色免费| 亚洲成色最大综合在线| 亚洲欧美综合v| 伊人久久大香线| 欧美亚洲免费高清在线观看| 国产精品视频第一区| 麻豆国产va免费精品高清在线| 国产农村妇女精品一区二区| 久久久久久久精| 久久―日本道色综合久久| 日韩视频不卡中文| 亚洲欧美国产精品专区久久| 亚洲女优在线| 欧美va天堂va视频va在线| 狠狠做深爱婷婷久久综合一区| 欧美片第一页| 欧美日韩中国免费专区在线看| 在线观看日韩精品| 开元免费观看欧美电视剧网站| 日韩一级免费观看| 开元免费观看欧美电视剧网站| 99视频国产精品免费观看| 美女啪啪无遮挡免费久久网站| 久久久久久久网| 亚洲一区二区在线观看视频| 久久婷婷国产综合国色天香| 久久综合伊人77777| 亚洲欧美另类在线| 欧美日韩一区二区免费视频| 一区二区三区四区国产| 欧美性猛交一区二区三区精品| 欧美午夜视频网站| 国产精品电影在线观看| 欧美精品色一区二区三区| 欧美少妇一区| 国产综合一区二区| 99精品99| 欧美视频日韩视频| 免费看av成人| 欧美夫妇交换俱乐部在线观看| 激情综合色综合久久| 亚洲高清网站| 亚洲午夜女主播在线直播| 亚洲尤物在线视频观看| 最新亚洲激情| 欧美日韩精品系列| 国产精品久久国产精麻豆99网站| 亚洲一级电影| 久久久噜久噜久久综合| 久久久蜜桃一区二区人| 欧美a级片网| 久久九九99视频| 久久久久9999亚洲精品| 欧美视频中文字幕在线| 亚洲欧美一区二区原创| 久久av一区二区三区漫画| 亚洲欧美中文另类| 欧美在线免费一级片| 精品白丝av| 欧美激情一区二区三区在线视频观看| 久久精品99无色码中文字幕| 国产日韩亚洲欧美综合| 精品成人乱色一区二区| 亚洲精品在线免费| 亚洲图色在线| 亚洲精品乱码久久久久久按摩观| 国产精品第2页| 在线观看日韩| 宅男噜噜噜66一区二区| 国产亚洲欧美一级| 欧美精品在线看| 国产精品嫩草影院av蜜臀| 亚洲欧美在线网| 狠狠色噜噜狠狠狠狠色吗综合| 欧美在线看片| 国产精品久久久久久久久免费| 久久久精品视频成人| 在线日韩视频| 亚洲一二区在线| 99国产精品久久久久久久| 国产视频一区在线观看| 久久久久国产精品www| 国产精品高潮在线| 亚洲人成在线播放网站岛国| 国产婷婷色综合av蜜臀av| 亚洲在线1234| 欧美久久精品午夜青青大伊人| 在线一区免费观看| 亚洲大胆人体在线| 国产日韩在线一区| 久久久久久久综合狠狠综合| 国产精品黄色在线观看|