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

知識大綱

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

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

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

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

2.1 多路復(fù)用分用


比起無連接的分用有連接的分用有四個標識的字段,可以更加精準的建立連接導(dǎo)向到指定的socket,無連接只可以通過端口號來導(dǎo)向(意味著端口號必須不同),有連接的分用則可以使用相同的端口號,因為還有其他字段的存在。

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

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


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


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


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

2.3 滑動窗口協(xié)議

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

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

2.4 擁塞避免


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

2.5 流量控制

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

3. UDP 盡力而為

只完成傳輸層的基本任務(wù),實現(xià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的值來控制是否重發(fā)

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

4.2 TCP流量控制


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

4.3 TCP連接管理

TCP建立的三次握手

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


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

4.4 TCP的擁塞控制

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

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

4.5 TCP探討

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

TCP和UDP的公平性問題。
對于采用UDP的端就不受擁塞控制限制速率 不公平。

對于請求打開多個TCP連接請求獲得更多的速率 不公平。

5 報文格式匯總

HTTP報文message格式
TCP報文segment格式
UDP報文segment格式
IP報文datagram格式
鏈路層報文frame格式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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