
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ù)用分用



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效率低分析:由于只發(fā)送一個(gè)分組就陷入等待接收確認(rèn),這樣一個(gè)分組發(fā)送等待確認(rèn)再發(fā)送的機(jī)制(只需要一個(gè)bit的序列號(hào)就可以滿足不接受重復(fù)的分組)效率低。
2.3 滑動(dòng)窗口協(xié)議








發(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ù)。


4. TCP 可靠服務(wù)
4.1 TCP可靠數(shù)據(jù)傳輸





關(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連接管理


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


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ì)。

對(duì)于請(qǐng)求打開(kāi)多個(gè)TCP連接請(qǐng)求獲得更多的速率 不公平。
5 報(bào)文格式匯總




