運輸層解決的問題
? ? ? ? 運輸層解決的問題是仔戈,數(shù)據(jù)傳輸?shù)膯栴}。數(shù)據(jù)傳輸分為不可靠傳輸和可靠數(shù)據(jù)傳輸兆龙,分別對應(yīng)的是UDP協(xié)議和TCP協(xié)議壁熄。??
每個層次的職責(zé)
????????看應(yīng)用層的章節(jié)的時候,免不了要看到運輸層诚欠;現(xiàn)在到了運輸層這一章節(jié)顽染,免不了要看到網(wǎng)絡(luò)層。既然是分層架構(gòu)了轰绵,應(yīng)用層就講解應(yīng)用層粉寞,運輸層就講解運輸層,干嘛總是要牽扯到下一層左腔?分層之后唧垦,是需要把每個層粘合起來,構(gòu)成一個完整的服務(wù)液样。網(wǎng)絡(luò)的傳輸協(xié)議不是全局粘合业崖,而是每一層負責(zé)粘合下一層野芒。所以,每一層的協(xié)議除了指定的服務(wù)和操作界面之外双炕,還要粘合下一層的服務(wù)狞悲。
多路復(fù)用,多路分解
? ? ? ? 在pc機器上妇斤,天然就會有運行多個應(yīng)用程序摇锋,但是應(yīng)用程序是使用的是同一個網(wǎng)絡(luò)通道。應(yīng)用程序發(fā)送信息的時候站超,對應(yīng)的socket會按照報文段的大小拆分傳輸?shù)男畔⑤┧。瑥?fù)用網(wǎng)絡(luò)通道。一個數(shù)據(jù)報文是怎么路由到指定的應(yīng)用程序的死相?當數(shù)據(jù)報文到達網(wǎng)卡融求,操作系統(tǒng)會根據(jù)數(shù)據(jù)報文攜帶的目標進程的端口,轉(zhuǎn)發(fā)到端口對應(yīng)的進程算撮,實現(xiàn)了多路分解生宛。
無鏈接運輸UDP
? ? ? ? UDP協(xié)議處理的數(shù)據(jù)結(jié)構(gòu)可以抽象為(s_port, t_port, size, checksum, data)。s_port為源端口肮柜,t_port為目標端口陷舅,size為報文總長度, checksum為校驗和审洞,data為應(yīng)用數(shù)據(jù)莱睁。對于應(yīng)用數(shù)據(jù)來說,checksum為冗余數(shù)據(jù)芒澜,目的是對接收的報文做校驗仰剿,如果校驗和不通過,則丟棄報文痴晦。
可靠傳輸協(xié)議原理
? ? ? ? 運輸層的是建立在網(wǎng)絡(luò)層之上酥馍,網(wǎng)絡(luò)層做的是盡力交付報文,網(wǎng)絡(luò)層本身是不可靠的傳輸協(xié)議阅酪。運輸層某種程度上旨袒,是異步發(fā)送數(shù)據(jù)包組。為了讓發(fā)送數(shù)據(jù)包能夠確認是否發(fā)送到達接收方术辐,需要接收方發(fā)送確認信號ack到發(fā)送方確認砚尽。
? ? ? ? 正常流程是發(fā)送一個數(shù)據(jù)包,然后收到一個ack確認數(shù)據(jù)包辉词。如果發(fā)送方ack確認報文丟失了必孤,正常流程是走不下去的。所以需要做一個補償機制,確認狀態(tài)變更可以正常往下走敷搪。補償機制是多了一個定時任務(wù)兴想。定時任務(wù)定時處理正常流程出現(xiàn)異常的數(shù)據(jù)包。
? ? ? ? 數(shù)據(jù)包組中赡勘,每個數(shù)據(jù)包的狀態(tài)已發(fā)送已確認嫂便,已發(fā)送未確認,未發(fā)送未確認闸与。為了限制已發(fā)送未確認的數(shù)量毙替,引入了滑動窗口的概念。其實就是設(shè)置一個閾值践樱,讓已發(fā)送未確認數(shù)量限制在閾值之內(nèi)厂画。設(shè)置一個閾值的好處是,可以節(jié)省帶寬資源拷邢,讓每個發(fā)送數(shù)據(jù)操作盡量有效袱院。
TCP傳輸協(xié)議
? ? ? ? tcp傳輸協(xié)議在可靠傳輸協(xié)議中已經(jīng)解釋得差不多了。特別的地方在于瞭稼,建立tcp連接忽洛,是通過三次握手;斷開tcp連接是四次揮手弛姜。tcp連接是邏輯意義上的脐瑰,連接的狀態(tài)信息是維護是由客戶端和服務(wù)端各自維護妖枚,在ip層之下廷臼,是沒有tcp連接這個概念。
額外的一些想法
? ? ? ? 雖然說計算機網(wǎng)絡(luò)原理是基礎(chǔ)課程绝页,但是某種程度上就是一個產(chǎn)品說明書荠商。這個和數(shù)據(jù)結(jié)構(gòu)與算法等課程是完全不一樣的。通過閱讀產(chǎn)品說明書续誉,是很難理解到產(chǎn)品的細節(jié)和精髓莱没,因為我們都搞不清楚前輩們當初為什么這個設(shè)計。我們的應(yīng)用系統(tǒng)都是架構(gòu)在網(wǎng)絡(luò)之上的酷鸦,不理解計算機網(wǎng)絡(luò)是完全不可以的饰躲。我們學(xué)計算機網(wǎng)絡(luò)只能猜測當初架構(gòu)網(wǎng)絡(luò)的時候的需求,通過需求臼隔,自己構(gòu)建出整個計算機網(wǎng)絡(luò)的體系嘹裂。有了大局觀之后,再去學(xué)習(xí)一些細節(jié)摔握,會好很多寄狼。