- 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)逐層傳遞。
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))。
邊界調(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)行粘包處理。
粘包拆包問題在數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層以及傳輸層都有可能發(fā)生。
數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層的粘包和拆包問題都由協(xié)議自行處理了,我們?nèi)粘5木W(wǎng)絡(luò)應(yīng)用開發(fā)都在對接傳輸層,故面臨的粘包問題指的是TCP粘包。
當(dāng)粘包、拆到TCP層的時(shí)候我們就沒辦法識別應(yīng)用層的請求/調(diào)用了, 所以解決方法是:一開始就需要在字節(jié)流中加入[特殊分隔符]或者[長度+偏移量]含義。
HTTP 超文本傳輸協(xié)議的規(guī)定如下:
文章來源:http://www.zghlxwxcb.cn/news/detail-437441.html
旁白
梳理了整個(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)!