一脐湾、網(wǎng)絡(luò)概覽
1、OSI七層協(xié)議
圖片編輯地址:https://kdocs.cn/l/sb9rZCiLcWQA?f=130
2叙淌、TCP/IP四層結(jié)構(gòu):應(yīng)用層、運輸層、網(wǎng)際層和網(wǎng)絡(luò)接口層奔穿。從實質(zhì)上講磷瘤,只有上邊三層,網(wǎng)絡(luò)接口層沒有什么具體的內(nèi)容茂洒。
3孟岛、五層七層體系結(jié)構(gòu)概覽:應(yīng)用層、運輸層督勺、網(wǎng)絡(luò)層渠羞、數(shù)據(jù)鏈路層和物理層。五層協(xié)議只是OSI和TCP/IP的綜合智哀,實際應(yīng)用還是TCP/IP的四層結(jié)構(gòu)次询。為了方便可以把下兩層稱為網(wǎng)絡(luò)接口層。
模型結(jié)構(gòu):
二瓷叫、各層的作用
1屯吊、物理層:
??主要定義物理設(shè)備標準,如網(wǎng)線的接口類型赞辩、光纖的接口類型雌芽、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流(就是由1辨嗽、0轉(zhuǎn)化為電流強弱來進行傳輸,到達目的地后在轉(zhuǎn)化為1世落、0,也就是我們常說的數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換)。這一層的數(shù)據(jù)叫做比特屉佳。
2谷朝、數(shù)據(jù)鏈路層:
??定義了如何讓格式化數(shù)據(jù)以進行傳輸,以及如何讓控制對物理介質(zhì)的訪問武花。這一層通常還提供錯誤檢測和糾正圆凰,以確保數(shù)據(jù)的可靠傳輸。
3体箕、網(wǎng)絡(luò)層:
??在位于不同地理位置的網(wǎng)絡(luò)中的兩個主機系統(tǒng)之間提供連接和路徑選擇专钉。Internet的發(fā)展使得從世界各站點訪問信息的用戶數(shù)大大增加,而網(wǎng)絡(luò)層正是管理這種連接的層累铅。
4跃须、運輸層:
??定義了一些傳輸數(shù)據(jù)的協(xié)議和端口號(WWW端口80等),如:
??TCP(transmission control protocol – 傳輸控制協(xié)議娃兽,傳輸效率低菇民,可靠性強,用于傳輸可靠性要求高投储,數(shù)據(jù)量大的數(shù)據(jù))
??UDP(user datagram protocol–用戶數(shù)據(jù)報協(xié)議第练,與TCP特性恰恰相反,用于傳輸可靠性要求不高玛荞,數(shù)據(jù)量小的數(shù)據(jù)娇掏,如QQ聊天數(shù)據(jù)就是通過這種方式傳輸?shù)模?主要是將從下層接收的數(shù)據(jù)進行分段和傳輸,到達目的地址后再進行重組冲泥。常常把這一層數(shù)據(jù)叫做段驹碍。
5、會話層:
??通過運輸層(端口號:傳輸端口與接收端口)建立數(shù)據(jù)傳輸?shù)耐贩不小V饕谀愕南到y(tǒng)之間發(fā)起會話或者接受會話請求(設(shè)備之間需要互相認識可以是IP也可以是MAC或者是主機名)
6志秃、表示層:
??可確保一個系統(tǒng)的應(yīng)用層所發(fā)送的信息可以被另一個系統(tǒng)的應(yīng)用層讀取。例如嚼酝,PC程序與另一臺計算機進行通信浮还,其中一臺計算機使用擴展二一十進制交換碼(EBCDIC),而另一臺則使用美國信息交換標準碼(ASCII)來表示相同的字符闽巩。如有必要钧舌,表示層會通過使用一種通格式來實現(xiàn)多種數(shù)據(jù)格式之間的轉(zhuǎn)換。
7涎跨、應(yīng)用層:
??是最靠近用戶的OSI層洼冻。這一層為用戶的應(yīng)用程序(例如電子郵件、文件傳輸和終端仿真)提供網(wǎng)絡(luò)服務(wù)隅很。
三撞牢、UDP
??定義:UDP協(xié)議全稱是用戶數(shù)據(jù)報協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議屋彪。在OSI模型中所宰,在第四層——傳輸層,處于IP協(xié)議的上一層畜挥。UDP有不提供數(shù)據(jù)包分組仔粥、組裝和不能對數(shù)據(jù)包進行排序的缺點,也就是說蟹但,當報文發(fā)送之后躯泰,是無法得知其是否安全完整到達的。他有如下特點:
1矮湘、面向無連接
??首先 UDP 是不需要和 TCP一樣在發(fā)送數(shù)據(jù)前進行三次握手建立連接的斟冕,想發(fā)數(shù)據(jù)就可以開始發(fā)送了。并且也只是數(shù)據(jù)報文的搬運工缅阳,不會對數(shù)據(jù)報文進行任何拆分和拼接操作。
??具體來說就是:
?? * 在發(fā)送端景描,應(yīng)用層將數(shù)據(jù)傳遞給傳輸層的 UDP 協(xié)議十办,UDP 只會給數(shù)據(jù)增加一個 UDP 頭標識下是 UDP 協(xié)議,然后就傳遞給網(wǎng)絡(luò)層了
?? * 在接收端超棺,網(wǎng)絡(luò)層將數(shù)據(jù)傳遞給傳輸層向族,UDP 只去除 IP 報文頭就傳遞給應(yīng)用層,不會任何拼接操作
2棠绘、有單播件相,多播,廣播的功能
??UDP 不止支持一對一的傳輸方式氧苍,同樣支持一對多夜矗,多對多,多對一的方式让虐,也就是說 UDP 提供了單播紊撕,多播,廣播的功能赡突。
3对扶、UDP是面向報文的
??發(fā)送方的UDP對應(yīng)用程序交下來的報文,在添加首部后就向下交付IP層惭缰。UDP對應(yīng)用層交下來的報文浪南,既不合并,也不拆分漱受,而是保留這些報文的邊界络凿。因此,應(yīng)用程序必須選擇合適大小的報文
4、不可靠性
??首先不可靠性體現(xiàn)在無連接上喷众,通信都不需要建立連接各谚,想發(fā)就發(fā),這樣的情況肯定不可靠到千。
??并且收到什么數(shù)據(jù)就傳遞什么數(shù)據(jù)昌渤,并且也不會備份數(shù)據(jù),發(fā)送數(shù)據(jù)也不會關(guān)心對方是否已經(jīng)正確接收到數(shù)據(jù)了憔四。
??再者網(wǎng)絡(luò)環(huán)境時好時壞膀息,但是 UDP 因為沒有擁塞控制,一直會以恒定的速度發(fā)送數(shù)據(jù)了赵。即使網(wǎng)絡(luò)條件不好潜支,也不會對發(fā)送速率進行調(diào)整。這樣實現(xiàn)的弊端就是在網(wǎng)絡(luò)條件不好的情況下可能會導(dǎo)致丟包柿汛,但是優(yōu)點也很明顯冗酿,在某些實時性要求高的場景(比如電話會議)就需要使用 UDP 而不是 TCP。
??從上面的動態(tài)圖可以得知络断,UDP只會把想發(fā)的數(shù)據(jù)報文一股腦的丟給對方裁替,并不在意數(shù)據(jù)有無安全完整到達。
5貌笨、頭部開銷小弱判,傳輸數(shù)據(jù)報文時是很高效的。
UDP 頭部包含了以下幾個數(shù)據(jù):
- 兩個十六位的端口號锥惋,分別為源端口(可選字段)和目標端口
- 整個數(shù)據(jù)報文的長度
- 整個數(shù)據(jù)報文的檢驗和(IPv4 可選 字段)昌腰,該字段用于發(fā)現(xiàn)頭部信息和數(shù)據(jù)中的錯誤
??因此 UDP 的頭部開銷小,只有八字節(jié)膀跌,相比 TCP 的至少二十字節(jié)要少得多遭商,在傳輸數(shù)據(jù)報文時是很高效的
三、TCP
??定義:當一臺計算機想要與另一臺計算機通訊時淹父,兩臺計算機之間的通信需要暢通且可靠株婴,這樣才能保證正確收發(fā)數(shù)據(jù)。例如暑认,當你想查看網(wǎng)頁或查看電子郵件時困介,希望完整且按順序查看網(wǎng)頁,而不丟失任何內(nèi)容蘸际。當你下載文件時座哩,希望獲得的是完整的文件,而不僅僅是文件的一部分粮彤,因為如果數(shù)據(jù)丟失或亂序根穷,都不是你希望得到的結(jié)果姜骡,于是就用到了TCP。
??TCP協(xié)議全稱是傳輸控制協(xié)議是一種面向連接的屿良、可靠的圈澈、基于字節(jié)流的傳輸層通信協(xié)議,由 IETF 的RFC 793定義尘惧。TCP 是面向連接的康栈、可靠的流協(xié)議。流就是指不間斷的數(shù)據(jù)結(jié)構(gòu)喷橙,你可以把它想象成排水管中的水流啥么。
1、TCP連接過程
如下圖所示贰逾,可以看到建立一個TCP連接的過程為(三次握手的過程):
(1)第一次握手:客戶端向服務(wù)端發(fā)送連接請求報文段悬荣。該報文段中包含自身的數(shù)據(jù)通訊初始序號。請求發(fā)送后疙剑,客戶端便進入 SYN-SENT 狀態(tài)氯迂。
(2)第二次握手:服務(wù)端收到連接請求報文段后,如果同意連接言缤,則會發(fā)送一個應(yīng)答囚戚,該應(yīng)答中也會包含自身的數(shù)據(jù)通訊初始序號,發(fā)送完成后便進入 SYN-RECEIVED 狀態(tài)轧简。
(3)第三次握手:當客戶端收到連接同意的應(yīng)答后,還要向服務(wù)端發(fā)送一個確認報文匾二∠溃客戶端發(fā)完這個報文段后便進入 ESTABLISHED 狀態(tài),服務(wù)端收到這個應(yīng)答后也進入 ESTABLISHED 狀態(tài)察藐,此時連接建立成功皮璧。
這里可能大家會有個疑惑:為什么 TCP 建立連接需要三次握手,而不是兩次分飞?這是因為這是為了防止出現(xiàn)失效的連接請求報文段被服務(wù)端接收的情況悴务,從而產(chǎn)生錯誤。
2譬猫、TCP斷開鏈接
TCP 是全雙工的讯檐,在斷開連接時兩端都需要發(fā)送 FIN 和 ACK。
(1)第一次握手:若客戶端 A 認為數(shù)據(jù)發(fā)送完成染服,則它需要向服務(wù)端 B 發(fā)送連接釋放請求别洪。
(2)第二次握手:B 收到連接釋放請求后,會告訴應(yīng)用層要釋放 TCP 鏈接柳刮。然后會發(fā)送 ACK 包挖垛,并進入 CLOSE_WAIT 狀態(tài)痒钝,此時表明 A 到 B 的連接已經(jīng)釋放,不再接收 A 發(fā)的數(shù)據(jù)了痢毒。但是因為 TCP 連接是雙向的送矩,所以 B 仍舊可以發(fā)送數(shù)據(jù)給 A。
(3)第三次握手:B 如果此時還有沒發(fā)完的數(shù)據(jù)會繼續(xù)發(fā)送哪替,完畢后會向 A 發(fā)送連接釋放請求栋荸,然后 B 便進入 LAST-ACK 狀態(tài)。
(4)第四次握手:A 收到釋放請求后夷家,向 B 發(fā)送確認應(yīng)答蒸其,此時 A 進入 TIME-WAIT 狀態(tài)。該狀態(tài)會持續(xù) 2MSL(最大段生存期库快,指報文段在網(wǎng)絡(luò)中生存的時間摸袁,超時會被拋棄) 時間,若該時間段內(nèi)沒有 B 的重發(fā)請求的話义屏,就進入 CLOSED 狀態(tài)靠汁。當 B 收到確認應(yīng)答后,也便進入 CLOSED 狀態(tài)闽铐。
3蝶怔、TCP協(xié)議的特點
(1)面向連接:面向連接,是指發(fā)送數(shù)據(jù)之前必須在兩端建立連接兄墅。建立連接的方法是“三次握手”踢星,這樣能建立可靠的連接。建立連接隙咸,是為數(shù)據(jù)的可靠傳輸打下了基礎(chǔ)沐悦。
(2)僅支持單播傳輸:每條TCP傳輸連接只能有兩個端點,只能進行點對點的數(shù)據(jù)傳輸五督,不支持多播和廣播傳輸方式藏否。
(3)面向字節(jié)流:TCP不像UDP一樣那樣一個個報文獨立地傳輸,而是在不保留報文邊界的情況下以字節(jié)流方式進行傳輸充包。
(4)可靠傳輸:對于可靠傳輸副签,判斷丟包,誤碼靠的是TCP的段編號以及確認號基矮。TCP為了保證報文傳輸?shù)目煽肯ⅲ徒o每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收愈捅。然后接收端實體對已成功收到的字節(jié)發(fā)回一個相應(yīng)的確認(ACK)遏考;如果發(fā)送端實體在合理的往返時延(RTT)內(nèi)未收到確認,那么對應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會被重傳蓝谨。
(5)提供擁塞控制:當網(wǎng)絡(luò)出現(xiàn)擁塞的時候灌具,TCP能夠減小向網(wǎng)絡(luò)注入數(shù)據(jù)的速率和數(shù)量青团,緩解擁塞
(6)TCP提供全雙工通信:TCP允許通信雙方的應(yīng)用程序在任何時候都能發(fā)送數(shù)據(jù),因為TCP連接的兩端都設(shè)有緩存咖楣,用來臨時存放雙向通信的數(shù)據(jù)督笆。當然,TCP可以立即發(fā)送一個數(shù)據(jù)段诱贿,也可以緩存一段時間以便一次發(fā)送更多的數(shù)據(jù)段(最大的數(shù)據(jù)段大小取決于MSS)
四娃肿、TCP和UDP的比較
1、圖片展示對比
文檔地址:https://kdocs.cn/l/slRZYAOmuhqT?f=130
2珠十、UDP 和 TCP 的應(yīng)用
文檔地址:https://kdocs.cn/l/slRZYAOmuhqT?f=130
參考博客:
https://segmentfault.com/a/1190000021815671
https://www.cnblogs.com/fundebug/p/differences-of-tcp-and-udp.html
https://www.cnblogs.com/wxd0108/p/7597216.html