計(jì)算機(jī)網(wǎng)絡(luò):傳輸層

知識(shí)大綱

1.傳輸層的服務(wù)和協(xié)議

上下文:上層應(yīng)用層,下層網(wǎng)絡(luò)層。傳輸層的作用是實(shí)現(xiàn)進(jìn)程間的邏輯通信。
收到來(lái)自應(yīng)用層的消息將它拆分為一個(gè)個(gè)segment向下通過(guò)socket傳遞給網(wǎng)絡(luò)層,收到網(wǎng)絡(luò)層提取的segment還原為組裝為消息通過(guò)socket上交給應(yīng)用層。

socket編程即是封裝了兩種傳輸層的協(xié)議UDP+TCP(也可以自定義寫(xiě)其他協(xié)議)給上層應(yīng)用層。很多時(shí)候應(yīng)用層編程會(huì)使用UrlConnection比直接使用Socket要簡(jiǎn)單的多,不用關(guān)心狀態(tài)和線程治理。 UrlConnection基于Http協(xié)議,只是進(jìn)行了封裝,添加了一些額外規(guī)則(如頭信息),本質(zhì)上也是建立TCP連接,利用Socket實(shí)現(xiàn)連接和傳輸數(shù)據(jù)的。

2.傳輸層技術(shù)層面

2.1 多路復(fù)用分用


比起無(wú)連接的分用有連接的分用有四個(gè)標(biāo)識(shí)的字段,可以更加精準(zhǔn)的建立連接導(dǎo)向到指定的socket,無(wú)連接只可以通過(guò)端口號(hào)來(lái)導(dǎo)向(意味著端口號(hào)必須不同),有連接的分用則可以使用相同的端口號(hào),因?yàn)檫€有其他字段的存在。

2.2 可靠數(shù)據(jù)傳輸

a圖介紹了可靠數(shù)據(jù)傳輸?shù)慕巧窃趹?yīng)用層之下提供一個(gè)可靠數(shù)據(jù)傳輸,b圖說(shuō)明可靠數(shù)據(jù)傳輸通過(guò)對(duì)傳輸層前后的數(shù)據(jù)做處理進(jìn)而為上層服務(wù)。


Rdt 1.0就是最原始的模型,可靠數(shù)據(jù)傳輸通過(guò)實(shí)現(xiàn)對(duì)data的make_pkt()方法使得傳輸?shù)膁ata不錯(cuò)不丟。這個(gè)FSM(狀態(tài)機(jī))比較好的闡述了可靠數(shù)據(jù)傳輸實(shí)現(xiàn)的機(jī)制。
因?yàn)榍懊鎟dt1.0假設(shè)不會(huì)發(fā)生位錯(cuò)誤,都是實(shí)際會(huì)在傳輸過(guò)程發(fā)生位錯(cuò)誤。增加校驗(yàn)和如果錯(cuò)誤就發(fā)送NAK讓發(fā)送方重新發(fā)送。誕生了rdt2.0 停等協(xié)議 一直在停和等待的狀態(tài)


也就相當(dāng)于對(duì)接收方不發(fā)送NAK,收到重復(fù)的ack就相當(dāng)于nak。發(fā)送帶有序號(hào)的ack,發(fā)送方如果不是想要的ack0就繼續(xù)重新發(fā)送數(shù)據(jù)包0,如果收到ack0就發(fā)送數(shù)據(jù)包1。
rdt3.0針對(duì)分組如果丟失分組產(chǎn)生無(wú)限等待的問(wèn)題增加計(jì)時(shí)器,超時(shí)重傳。


rdt3.0雖然可以正確的工作,但是由于還是停等協(xié)議,所以浪費(fèi)了資源帶寬。起碼rdt3.0完成了它的任務(wù)可靠數(shù)據(jù)傳輸。
rdt3.0效率低分析:由于只發(fā)送一個(gè)分組就陷入等待接收確認(rèn),這樣一個(gè)分組發(fā)送等待確認(rèn)再發(fā)送的機(jī)制(只需要一個(gè)bit的序列號(hào)就可以滿足不接受重復(fù)的分組)效率低。

2.3 滑動(dòng)窗口協(xié)議

滑動(dòng)窗口協(xié)議是一種流水線協(xié)議
問(wèn)題明顯:沒(méi)有緩存--丟棄分組效率低

發(fā)送方和接收方的窗口大小之和應(yīng)該小于序列號(hào)總數(shù)

2.4 擁塞避免


如果網(wǎng)絡(luò)擁塞情況嚴(yán)重,路由器或者交換機(jī)將data里特定的標(biāo)記網(wǎng)絡(luò)擁塞情況的bit置1,接收方將該信息返回給發(fā)送方從而控制發(fā)送速率實(shí)現(xiàn)擁塞控制。

2.5 流量控制

設(shè)置buffer來(lái)通過(guò)在返回的segment里面增加返回接收窗口大小來(lái)實(shí)現(xiàn)。具體研究TCP的流量控制實(shí)現(xiàn)。

3. UDP 盡力而為

只完成傳輸層的基本任務(wù),實(shí)現(xiàn)進(jìn)程之間的通信。
segment結(jié)構(gòu)如下:數(shù)據(jù)保存的就是封裝的應(yīng)用層的message數(shù)據(jù)。

UDP應(yīng)用于DNS

4. TCP 可靠服務(wù)

4.1 TCP可靠數(shù)據(jù)傳輸

設(shè)置timer的值來(lái)控制是否重發(fā)

關(guān)于GBN和SR與TCP
TCP的實(shí)現(xiàn)運(yùn)用了之前介紹的RDT系列算法里面的一些機(jī)制,也借鑒了滑動(dòng)窗口協(xié)議的機(jī)制。比如TCP采用了累積確認(rèn),和SR類似有緩沖區(qū),但是ack的含義不同于SR,ack為期待接受的下一個(gè)數(shù)據(jù)報(bào)文的序號(hào),它有快速重傳機(jī)制,可以提高效率,發(fā)送多個(gè)ack,發(fā)送方收到重復(fù)的ack(意味著可能發(fā)生了超時(shí)或丟包)時(shí)候就會(huì)重傳。

4.2 TCP流量控制


流控是針對(duì)接收方的接收速度和擁塞控制不同,擁塞控制是數(shù)據(jù)在網(wǎng)絡(luò)傳輸過(guò)程,也就是在路由器的緩存有限防止路由器丟包和崩潰導(dǎo)致數(shù)據(jù)丟失和傳輸過(guò)慢。

4.3 TCP連接管理

TCP建立的三次握手

第三次可能就攜帶數(shù)據(jù)比如html請(qǐng)求之類的信息,注意SYN的變化110


釋放過(guò)程4次揮手
TCP連接建立和關(guān)閉的生命周期

4.4 TCP的擁塞控制

上圖和教材版本不同僅作為參考
發(fā)生timeout時(shí)候congwin減少為1開(kāi)始慢啟動(dòng),threshold折半
收到三個(gè)ack時(shí)候congwin折半+3,threshold折半啟動(dòng)擁塞避免開(kāi)始線性增長(zhǎng)

控制機(jī)制:監(jiān)控segment接受的狀態(tài)(超時(shí)和3個(gè)ack)---->啟動(dòng)擁塞控制協(xié)議---->慢啟動(dòng)和擁塞避免----->congwin的值發(fā)生改變---->發(fā)送方根據(jù)rate = congwin/RTT的速率發(fā)送
其實(shí)是通過(guò)congwin(一個(gè)描述當(dāng)前擁塞程度的量)來(lái)控制發(fā)送速率

4.5 TCP探討

TCP在發(fā)送很多的數(shù)據(jù)時(shí)出現(xiàn)丟包率嚴(yán)重,未來(lái)的TCP需要重新改進(jìn)設(shè)計(jì)。

TCP和UDP的公平性問(wèn)題。
對(duì)于采用UDP的端就不受擁塞控制限制速率 不公平。

對(duì)于請(qǐng)求打開(kāi)多個(gè)TCP連接請(qǐng)求獲得更多的速率 不公平。

5 報(bào)文格式匯總

HTTP報(bào)文message格式
TCP報(bào)文segment格式
UDP報(bào)文segment格式
IP報(bào)文datagram格式
鏈路層報(bào)文frame格式
最后編輯于
?著作權(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)容