TCP/IP

1.OSI&TCP/IP參考模型

2.TCP粘包/拆包

? ? ? ?TCP是一個(gè)面向連接的字節(jié)流數(shù)據(jù)傳輸控制協(xié)議此蜈,沒有自動(dòng)插入記錄標(biāo)志或消息邊界试和,TCP并不解讀字節(jié)流里的字節(jié)內(nèi)容,而是將數(shù)據(jù)放入接收緩沖區(qū);
1)粘包/拆包現(xiàn)象
? ? ? ?假設(shè)發(fā)送端向接收端連續(xù)發(fā)送了2個(gè)數(shù)據(jù)報(bào):

  • 無粘包/拆包:接收端分兩次讀取松忍,正常獲得兩個(gè)獨(dú)立的數(shù)據(jù)包跋理;

  • 粘包:接收端只接受到一個(gè)數(shù)據(jù)包择克,由于TCP不會(huì)出現(xiàn)丟包,所以該數(shù)據(jù)包包含了發(fā)送端發(fā)送的2個(gè)數(shù)據(jù)包信息前普;

  • 拆包:接收端接受到了2個(gè)數(shù)據(jù)包肚邢,但是這兩個(gè)數(shù)據(jù)包要么不完整,要么多出了另一個(gè)數(shù)據(jù)包的部分信息拭卿;



    (上述圖片來源于https://blog.csdn.net/scythe666/article/details/51996268)
    2)為什么會(huì)出現(xiàn)粘包/拆包道偷?

  • 待發(fā)送的數(shù)據(jù)大于TCP發(fā)送緩沖區(qū)可用空間大小,將會(huì)發(fā)生拆包记劈;

  • 待發(fā)送數(shù)據(jù)大于MSS(最大報(bào)文長度)勺鸦,即TCP報(bào)文長度-TCP頭部長度>MSS,TCP將在傳輸前進(jìn)行拆包目木;

  • 待發(fā)送數(shù)據(jù)小于SMSS换途,且存在在傳數(shù)據(jù)(已發(fā)送未確認(rèn)),由于Nagle算法刽射,這些小的報(bào)文段不能被發(fā)送军拟,直到所有在傳數(shù)據(jù)都收到ACK后,TCP將收集這些小的報(bào)文段誓禁,將其整合到一個(gè)報(bào)文段中發(fā)送懈息,從而發(fā)送粘包;

  • 接收端的應(yīng)用層沒有及時(shí)讀取接收緩沖區(qū)中的數(shù)據(jù)摹恰,發(fā)生粘包辫继;

3)怎么解決粘包/拆包?

  • 使用TCP_NODELAY關(guān)閉Nagle算法俗慈,解決由于發(fā)送端Nagke算法導(dǎo)致的粘包姑宽;
  • 消息定長,空格補(bǔ)位闺阱;
  • 設(shè)置邊界炮车,添加特殊符號(hào),如包尾添加回車換行符(FTP);
  • 將消息分為消息頭和消息體瘦穆,消息頭中包含消息長度纪隙;

Netty提供了不同方法來處理粘包和拆包:

  • DelimiterBasedFrameDecoder 基于設(shè)置消息邊界方式進(jìn)行粘包/拆包處理;
  • FixedLengthFrameDecoder 基于固體長度消息進(jìn)行粘包/拆包處理扛或;
  • LengthFieldBasedFrameDecoder 基于消息頭指定消息長度進(jìn)行粘包/拆包處理绵咱;
  • LineBasedFrameDecoder 基于換行符進(jìn)行粘包/拆包處理。
    工作原理是:依次遍歷ByteBuf中的可讀字節(jié)告喊,判斷是否有"/n"或者"/r/n"麸拄,如果有,就以此位置為結(jié)束位置黔姜,從可讀索引到結(jié)束位置區(qū)間的字節(jié)就組成了一行拢切。是以換行符為結(jié)束標(biāo)志的解碼器,支持?jǐn)y帶結(jié)束符或者不攜帶結(jié)束符兩種解碼方式秆吵,同時(shí)支持配置單行最大長度淮椰,若連續(xù)讀取到最大長度仍然沒有發(fā)現(xiàn)換行符,則拋出異常纳寂;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末主穗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子毙芜,更是在濱河造成了極大的恐慌忽媒,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腋粥,死亡現(xiàn)場離奇詭異晦雨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隘冲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門闹瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人展辞,你說我怎么就攤上這事奥邮。” “怎么了罗珍?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵洽腺,是天一觀的道長。 經(jīng)常有香客問我靡砌,道長已脓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任通殃,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘画舌。我一直安慰自己堕担,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布曲聂。 她就那樣靜靜地躺著霹购,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朋腋。 梳的紋絲不亂的頭發(fā)上齐疙,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音旭咽,去河邊找鬼贞奋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穷绵,可吹牛的內(nèi)容都是我干的轿塔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼仲墨,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼勾缭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起目养,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤俩由,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后癌蚁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻梯,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年匈勋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了礼旅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洽洁,死狀恐怖痘系,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饿自,我是刑警寧澤汰翠,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站昭雌,受9級(jí)特大地震影響复唤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烛卧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一佛纫、第九天 我趴在偏房一處隱蔽的房頂上張望妓局。 院中可真熱鬧,春花似錦呈宇、人聲如沸好爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽存炮。三九已至,卻和暖如春蜈漓,著一層夾襖步出監(jiān)牢的瞬間穆桂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工融虽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留享完,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓衣形,卻偏偏與公主長得像驼侠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谆吴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 我的青春倒源,還在。 我的時(shí)代句狼,還沒被時(shí)間帶走笋熬。 在一個(gè)什么都沒有的高中,沒有銀行卡沒有化妝品沒有男朋友的高中腻菇,所幸...
    會(huì)吃的米閱讀 292評(píng)論 0 0
  • 「日賺1000元筹吐,第45天」 最近糖耸,寫文章還是蠻有激情的,無論是閱讀量丘薛、轉(zhuǎn)載量嘉竟、分享量都創(chuàng)造了新的記錄,看來只要用...
    魏巍日記閱讀 615評(píng)論 1 1
  • 那一夜洋侨,雨舍扰,那一夜,風(fēng) 你說希坚,好痛边苹,像刀子劃開了石頭 火光四濺的夜晚 電鉆長驅(qū)直進(jìn) 像一顆明知要陷落的釘子 木板接...
    隔著玻璃親嘴閱讀 170評(píng)論 0 0
  • 女兒 親愛的楷瑞媽媽知道你喜歡運(yùn)動(dòng),你也選上了運(yùn)動(dòng)員裁僧,扔壘球扔實(shí)芯球還有跑步个束,今天下午放學(xué)媽媽去學(xué)校操場等你慕购,不過...
    愛睿瑞寶貝閱讀 201評(píng)論 0 3
  • 跑步已經(jīng)堅(jiān)持了六天!昨天冒雨繞操場跑了二十圈播急;今天雨太大了脓钾,再加上操場多處水洼售睹,就沒有到操場上去跑桩警,而是在辦公室的...
    紅梅贊_af47閱讀 122評(píng)論 0 0