1.1 通信協(xié)議分析 tcp/udp

TCP/IP

1、TCP/IP(Transmission Control Protocol/Internet Protocol)是一種可靠的網(wǎng)絡(luò)數(shù)據(jù)傳輸控制協(xié)議。定義了主機(jī)如何連入因特網(wǎng)以及數(shù)據(jù)如何在他們之間傳輸?shù)臉?biāo)準(zhǔn)。


TCP/IP

2、3次握手協(xié)議/4次揮手協(xié)議


3次握手協(xié)議

4次揮手協(xié)議

TCP通信原理

  • 首先,對(duì)于TCP通信來(lái)說(shuō),每個(gè)TCP Socket的內(nèi)核中都有一個(gè)發(fā)送緩沖區(qū)和一個(gè)接收緩沖區(qū),TCP的全雙工的工作模式及TCP的滑動(dòng)窗口就是依賴于這兩個(gè)獨(dú)立的Buffer和該Buffer的填充狀態(tài)。
  • 接收緩沖區(qū)把數(shù)據(jù)緩存到內(nèi)核,若應(yīng)用進(jìn)程一直沒(méi)有調(diào)用Socket的read方法進(jìn)行讀取,那么該數(shù)據(jù)會(huì)一直被緩存在接收緩沖區(qū)內(nèi)。不管進(jìn)程是否讀取Socket,對(duì)端發(fā)來(lái)的數(shù)據(jù)都會(huì)經(jīng)過(guò)內(nèi)核接收并緩存到Socket的內(nèi)核接收緩沖區(qū)。
    read索要做的工作,就是把內(nèi)核接收緩沖區(qū)中的數(shù)據(jù)復(fù)制到應(yīng)用層用戶的Buffer里。
  • 進(jìn)程調(diào)用Socket的send發(fā)送數(shù)據(jù)的時(shí)候,一般情況下是講數(shù)據(jù)從應(yīng)用層用戶的Buffer里復(fù)制到Socket的內(nèi)核發(fā)送緩沖區(qū),然后send就會(huì)在上層返回。換句話說(shuō),send返回時(shí),數(shù)據(jù)不一定會(huì)被發(fā)送到對(duì)端。


    image.png

什么是滑動(dòng)窗口協(xié)議

發(fā)送方和接收方都會(huì)維護(hù)一個(gè)數(shù)據(jù)幀的序列,這個(gè)序列被稱作窗口。發(fā)送方的窗口大小由接收方確認(rèn),目的是控制發(fā)送速度,以免接收方的緩存不夠大導(dǎo)致溢出,同時(shí)控制流量也可以避免網(wǎng)絡(luò)擁塞。

下面圖中的4,5,6號(hào)數(shù)據(jù)幀已經(jīng)被發(fā)送出去,但是未收到關(guān)聯(lián)的ACK,7,8,9幀則是等待發(fā)送??梢钥闯霭l(fā)送端的窗口大小為6,這是由接受端告知的(事實(shí)上必須考慮擁塞窗口cwnd,這里暫且考慮cwnd>rwnd)。此時(shí)如果發(fā)送端收到4號(hào)ACK,則窗口的左邊緣向右收縮,窗口的右邊緣則向右擴(kuò)展,此時(shí)窗口就向前“滑動(dòng)了”,即數(shù)據(jù)幀10也可以被發(fā)送

image.png

明白了Socket讀寫數(shù)據(jù)的底層原理,我們就很容易理解“阻塞模式”:對(duì)于讀取Socket數(shù)據(jù)的過(guò)程而言,如果接收緩沖區(qū)為空,則調(diào)用Socket的read方法的線程會(huì)阻塞,知道有數(shù)據(jù)進(jìn)入接收緩沖區(qū);而對(duì)于寫數(shù)據(jù)到Socket中的線程來(lái)說(shuō),如果待發(fā)送的數(shù)據(jù)長(zhǎng)度大于發(fā)送緩沖區(qū)空余長(zhǎng)度,則會(huì)阻塞在write方法上,等待發(fā)送緩沖區(qū)的報(bào)文被發(fā)送到網(wǎng)絡(luò)上,然后繼續(xù)發(fā)送下一段數(shù)據(jù),循環(huán)上述過(guò)程直到數(shù)據(jù)都被寫入到發(fā)送緩沖區(qū)為止

從前面分析的過(guò)程來(lái)看,傳統(tǒng)的Socket阻塞模式直接導(dǎo)致每個(gè)Socket都必須綁定一個(gè)線程來(lái)操作數(shù)據(jù),參與通信的任意一方如果處理數(shù)據(jù)的速度較慢,會(huì)直接拖累到另一方,導(dǎo)致另一方的線程不得不浪費(fèi)大量的時(shí)間在I/O等待上,所以這就是Socket阻塞模式的“缺陷”。但是這種模式在少量的TCP連接通信的情況下,雙方都可以快速的傳輸數(shù)據(jù),這個(gè)時(shí)候的性能是最高的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容