溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么

發(fā)布時間:2021-06-23 11:03:08 來源:億速云 閱讀:234 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么”吧!

        為了使全球范圍內(nèi)不同的計算機廠家能夠相互之間能夠比較協(xié)調(diào)的進行通信,這個時候就有必要建立一種全球范圍內(nèi)的通用協(xié)議,以規(guī)范各個廠家之間的通信接口,這就是網(wǎng)絡(luò)七層模型的由來。本文首先會對網(wǎng)絡(luò)七層模型的功能進行介紹,然后會講解傳輸層的兩個重要協(xié)議:TCP和UDP協(xié)議,并且會著重講解TCP協(xié)議中的三次握手和四次揮手的過程。

1. 網(wǎng)絡(luò)七層模型

        關(guān)于網(wǎng)絡(luò)七層模型,我們首先以一個圖例來展示其功能:

網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么

  • 應(yīng)用層:主要指的是應(yīng)用程序部分,比如我們的Java程序,應(yīng)用層所產(chǎn)生的數(shù)據(jù)成為應(yīng)用層數(shù)據(jù),典型的應(yīng)用層協(xié)議,比如有HTTP協(xié)議,dubbo的rpc協(xié)議,這些都是由我們的應(yīng)用層程序自己定義的;

  • 表示層:這一層主要是對應(yīng)用層的數(shù)據(jù)進行一些格式轉(zhuǎn)換,加解密或者進行壓縮和解壓縮的功能;

  • 會話層:會話層的主要作用是負責進程與進程之間會話的建立、管理以及終止的服務(wù);

  • 傳輸層:傳輸層提供了兩臺機器之間端口到端口的一個數(shù)據(jù)傳輸服務(wù),因為應(yīng)用層、表示層和會話層所針對的都是某個應(yīng)用進程,而進程是和端口綁定的,但是同一臺服務(wù)器上是可以有多個進程的,因而傳輸層提供的就是這種不同的端口到端口的訪問,以實現(xiàn)區(qū)分不同進程之間的通信服務(wù)。在傳輸層最典型的協(xié)議有TCP和UDP協(xié)議,TCP提供的是面向連接的、可靠的數(shù)據(jù)傳輸服務(wù),而UDP則是無連接的、不可靠的數(shù)據(jù)傳輸服務(wù)。在上面的圖中我們也可以看出,經(jīng)過傳輸層之后,數(shù)據(jù)會被加上TCP或者UDP頭部,用以實現(xiàn)不同傳輸層協(xié)議的功能;

  • 網(wǎng)絡(luò)層:傳輸層提供的是同一臺主機上的端口到端口的傳輸服務(wù),而網(wǎng)絡(luò)層則提供的是不同主機之間的連接服務(wù),最典型的網(wǎng)絡(luò)層協(xié)議就是IP協(xié)議,網(wǎng)絡(luò)層會將當前的數(shù)據(jù)包加上一個IP頭部,從而實現(xiàn)目標機器的尋址;

  • 數(shù)據(jù)鏈路層:這一層是承接軟件和硬件的一層,由于其會將當前的數(shù)據(jù)報發(fā)送到不穩(wěn)定的物理層硬件上進行傳輸,因而為了保障數(shù)據(jù)的完整性和可靠性,數(shù)據(jù)鏈路層就提供了校驗、確認和反饋等機制,用以提供可靠的數(shù)據(jù)報傳輸服務(wù);

  • 物理層:物理層的主要作用就是將0101這種二進制的比特流數(shù)據(jù)轉(zhuǎn)換為光信號,用以在物理介質(zhì)上進行傳輸。

        網(wǎng)絡(luò)七層模型主要是提供的一種規(guī)范,而在這每一層上為了實現(xiàn)不同的功能,各個計算機廠商都會實現(xiàn)自己的協(xié)議,這些協(xié)議的標識就是通過一些協(xié)議頭和進行的,比如上面圖中,數(shù)據(jù)在經(jīng)過每一層的封裝之后都會為其加上自己的協(xié)議頭部,當數(shù)據(jù)經(jīng)過屋里介質(zhì)傳輸?shù)侥繕藱C器上后,其就會反過來,將數(shù)據(jù)進行一層一層的解析,解析的過程其實就是根據(jù)其每一層頭部信息來實現(xiàn)該層的相關(guān)功能。

        另外,網(wǎng)絡(luò)七層模型是一種比較理想化的模型,現(xiàn)在應(yīng)用比較廣泛的是網(wǎng)絡(luò)五層模型,五層模型與七層模型的主要區(qū)別在于將應(yīng)用層、表示層和會話層統(tǒng)一劃分到應(yīng)用層中了,由應(yīng)用程序?qū)崿F(xiàn)其相關(guān)的功能。

2. TCP與UDP

        在我們的應(yīng)用開發(fā)過程中,我們其實不需要太過于關(guān)注底層相關(guān)的功能,這些只需要相關(guān)的服務(wù)提供商提供相應(yīng)的功能即可。不過在傳輸層之中,我們需要特別關(guān)注一下現(xiàn)在廣泛使用的兩個協(xié)議:TCP和UDP協(xié)議。這兩個協(xié)議之間的主要區(qū)別如下:

TCPUDP
面向連接無連接
提供數(shù)據(jù)可靠保證不提供數(shù)據(jù)可靠性保證
速度相對較慢速度較快
占用資源較多占用資源較少

        關(guān)于TCP和UDP,可以看到,這兩個協(xié)議各自分別有非常鮮明的特點:TCP雖然占用資源較多,速度相對較慢,但是提供了可靠的數(shù)據(jù)傳輸服務(wù),這在大多數(shù)的互聯(lián)網(wǎng)業(yè)務(wù)中是非常必要的;而UDP雖然不提供可靠性的數(shù)據(jù)保證,但是其速度非??欤艺加觅Y源較小,這在一些對數(shù)據(jù)可靠性較低的場景中是非常有用的,比如音視頻服務(wù),物聯(lián)網(wǎng)數(shù)據(jù)上報服務(wù)等等,這些情況下,數(shù)據(jù)丟失一兩幀都是可以接受的。

        TCP和UDP在資源占用上的區(qū)別,不僅體現(xiàn)在數(shù)據(jù)傳輸方式上,還體現(xiàn)在了數(shù)據(jù)的傳輸格式上。對于數(shù)據(jù)傳輸方式,TCP每次發(fā)送數(shù)據(jù)的方式都是按照時間窗口的方式一個數(shù)據(jù)報一個數(shù)據(jù)報的發(fā)送,并且需要等待每個數(shù)據(jù)報都給數(shù)據(jù)發(fā)送方響應(yīng)ACK,這個時候才會發(fā)送下一個數(shù)據(jù)窗口的數(shù)據(jù),如果當前窗口內(nèi)有任意一個數(shù)據(jù)報沒有發(fā)送成功,那么整個窗口內(nèi)的數(shù)據(jù)都會重新發(fā)送;而UDP則沒有窗口的概念和對應(yīng)的ACK機制,其獲取到每一個數(shù)據(jù)報之后,都只是簡單的為其封裝UDP協(xié)議頭,然后將其發(fā)送出去,其不會管這個數(shù)據(jù)是否發(fā)送成功,因而UDP傳輸比TCP是要快很多的。對于數(shù)據(jù)傳輸格式,這里我們以TCP和UDP的數(shù)據(jù)報的格式進行講解,如下是TCP的數(shù)據(jù)報格式:

網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么

        可以看到,TCP數(shù)據(jù)報的頭部中不僅包含了源端口號和目的端口號,還包含了序號、確認序號、首部長度、標志位等等信息,總的來看,除去真正的數(shù)據(jù)部分,頭部信息占用的位數(shù)就達到了192位,當然,這么多字段主要的作用是為了實現(xiàn)TCP面向連接的可靠性傳輸?shù)墓δ堋H缦聞t是UDP數(shù)據(jù)報的格式:

網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么

        可以看到,這里UDP的數(shù)據(jù)包格式相對于TCP就非常的精簡了,其頭部主要就只有源端口號、目的端口號、長度和校驗和字段,這些總共占用的字節(jié)數(shù)是8個字節(jié)。這也就是UDP協(xié)議傳輸速率非??斓牧硪粋€原因。

2.1 三次握手和四次揮手

        TCP是一個提供可靠傳輸服務(wù)、面向連接的的傳輸層協(xié)議,其可靠性保證主要是通過每次數(shù)據(jù)報發(fā)送時的ACK機制實現(xiàn)的,而其連接的建立和釋放則主要是通過三次握手和四次揮手的方式實現(xiàn)的。如下是其三次握手和四次揮手的過程:

網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么

        對于三次握手,其整體過程如下:

  • 首先客戶端會發(fā)送一個建立連接的請求,其標志位中會帶上SYN=1, seq=x,這里的SYN=1根據(jù)前面TCP頭部信息的講解中我們知道,其表示建立連接的請求,而seq=x則只是當前請求的一個序號,不同的請求是有不同的序號的,加這個序號的原因也是為了將其與服務(wù)端的響應(yīng)請求關(guān)聯(lián)起來;

  • 在服務(wù)端接收到客戶端建立連接的請求之后,其就會返回SYN=1, ACK=1, seq=y, ack_seq=x+1,這里的SYN=1, ACK=1表示的是對客戶端建立連接的請求的同意響應(yīng),seq=y則標識了這是服務(wù)端的一次數(shù)據(jù)發(fā)送,而ack_seq=x+1則表示其是對客戶端的seq=x的請求的一個響應(yīng);

  • 在客戶端接收到服務(wù)端的響應(yīng)的時候,客戶端就能夠確認服務(wù)端是能夠正常接收和發(fā)送數(shù)據(jù)的,而服務(wù)端在接收到客戶端的第一次請求的時候也能夠確認客戶端能夠正常的發(fā)送請求。這個時候,客戶端就會發(fā)送一個ACK=1, seq=x+1, ack_seq=y+1給服務(wù)器,服務(wù)器接收到后就會完成連接的建立。

        可以看到,前兩次請求都是建立連接所必要的,而客戶端要發(fā)送第三次請求的原因主要有兩點:

  • 可以讓服務(wù)器確保客戶端是能夠正常發(fā)送和接收請求的;

  • 由于連接的建立是在不穩(wěn)定的網(wǎng)絡(luò)上進行的,因而這里有可能第一次請求是由于客戶端在某個時間點發(fā)送的,但是由于網(wǎng)絡(luò)延遲,導致很久之后服務(wù)器才接收到該請求,但此時服務(wù)器并不知道這個連接建立的請求是否是正常請求,其還是會正常發(fā)送一個同意建立連接的響應(yīng)給客戶端,如果第一請求是由于網(wǎng)絡(luò)延遲造成的,那么客戶端是不會再發(fā)送第三次握手給服務(wù)器的,這個時候服務(wù)器等待超時后也就不會建立這一次的連接了。

        對于四次揮手,其是在客戶端與服務(wù)器交互完成之后,由客戶端發(fā)起的。四次揮手的主要流程如下:

  • 客戶端首先會發(fā)送一個FIN=1, seq=u給服務(wù)器,根據(jù)前面TCP頭部信息的講解,我們知道FIN=1表示這是一個斷開連接的請求,而seq=u則標識了這次請求的一個序號;

  • 服務(wù)器接收到客戶端的斷開連接的請求后,其就會向客戶端發(fā)送一個ACK=1, seq=v, ack_seq=u+1的響應(yīng),這里的seq=v還是表示當前請求的序號,而ack_seq=u+1則表示這是對客戶端發(fā)送的seq=u的斷開連接的請求的響應(yīng),但是需要注意的是,這個請求并不表示服務(wù)器同意斷開連接,此時還只是一個半關(guān)閉的狀態(tài),因為此時服務(wù)器可能還有數(shù)據(jù)在進行處理沒有發(fā)送給客戶端,此時服務(wù)器就會完成這些斷開連接的工作;

  • 待服務(wù)器完成了斷開連接的準備工作之后,其就會給客戶端發(fā)送一個FIN=1, ACK=1, seq=w, ack_seq=u+1的響應(yīng),注意,這個過程中客戶端一直都處于等待狀態(tài)的。這里相對于前一次響應(yīng),多了一個FIN=1,就是表示當前是確認斷開連接的請求;

  • 客戶端在接收到服務(wù)器的響應(yīng)之后,其就會給服務(wù)器發(fā)送一個ACK=1, seq=u+1, ack_seq=w+1的響應(yīng),表示同意斷開連接,服務(wù)器接收到后就會斷開連接,而客戶端則會等待一小段時間后自行斷開連接。

3. 小結(jié)

        本文首先講解了OSI網(wǎng)絡(luò)七層模型,詳細講解了模型中每一層的作用,然后講解了傳輸層中TCP和UDP的主要區(qū)別,從傳輸方式和傳輸數(shù)據(jù)格式上對兩種協(xié)議進行了對比,最后講解了TCP協(xié)議中三次握手和四次揮手的主要過程,并且詳細講解了每一步的作用。

感謝各位的閱讀,以上就是“網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對網(wǎng)絡(luò)七層模型與TCP/UDP的原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI