這篇文章主要講解了“網(wǎng)絡七層模型與TCP/UDP的原理是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“網(wǎng)絡七層模型與TCP/UDP的原理是什么”吧!
10年積累的成都做網(wǎng)站、成都網(wǎng)站設計、成都外貿(mào)網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設流程,更有白水免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
為了使全球范圍內(nèi)不同的計算機廠家能夠相互之間能夠比較協(xié)調(diào)的進行通信,這個時候就有必要建立一種全球范圍內(nèi)的通用協(xié)議,以規(guī)范各個廠家之間的通信接口,這就是網(wǎng)絡七層模型的由來。本文首先會對網(wǎng)絡七層模型的功能進行介紹,然后會講解傳輸層的兩個重要協(xié)議:TCP和UDP協(xié)議,并且會著重講解TCP協(xié)議中的三次握手和四次揮手的過程。
關于網(wǎng)絡七層模型,我們首先以一個圖例來展示其功能:
應用層:主要指的是應用程序部分,比如我們的Java程序,應用層所產(chǎn)生的數(shù)據(jù)成為應用層數(shù)據(jù),典型的應用層協(xié)議,比如有HTTP協(xié)議,dubbo的rpc協(xié)議,這些都是由我們的應用層程序自己定義的;
表示層:這一層主要是對應用層的數(shù)據(jù)進行一些格式轉(zhuǎn)換,加解密或者進行壓縮和解壓縮的功能;
會話層:會話層的主要作用是負責進程與進程之間會話的建立、管理以及終止的服務;
傳輸層:傳輸層提供了兩臺機器之間端口到端口的一個數(shù)據(jù)傳輸服務,因為應用層、表示層和會話層所針對的都是某個應用進程,而進程是和端口綁定的,但是同一臺服務器上是可以有多個進程的,因而傳輸層提供的就是這種不同的端口到端口的訪問,以實現(xiàn)區(qū)分不同進程之間的通信服務。在傳輸層最典型的協(xié)議有TCP和UDP協(xié)議,TCP提供的是面向連接的、可靠的數(shù)據(jù)傳輸服務,而UDP則是無連接的、不可靠的數(shù)據(jù)傳輸服務。在上面的圖中我們也可以看出,經(jīng)過傳輸層之后,數(shù)據(jù)會被加上TCP或者UDP頭部,用以實現(xiàn)不同傳輸層協(xié)議的功能;
網(wǎng)絡層:傳輸層提供的是同一臺主機上的端口到端口的傳輸服務,而網(wǎng)絡層則提供的是不同主機之間的連接服務,最典型的網(wǎng)絡層協(xié)議就是IP協(xié)議,網(wǎng)絡層會將當前的數(shù)據(jù)包加上一個IP頭部,從而實現(xiàn)目標機器的尋址;
數(shù)據(jù)鏈路層:這一層是承接軟件和硬件的一層,由于其會將當前的數(shù)據(jù)報發(fā)送到不穩(wěn)定的物理層硬件上進行傳輸,因而為了保障數(shù)據(jù)的完整性和可靠性,數(shù)據(jù)鏈路層就提供了校驗、確認和反饋等機制,用以提供可靠的數(shù)據(jù)報傳輸服務;
物理層:物理層的主要作用就是將0101
這種二進制的比特流數(shù)據(jù)轉(zhuǎn)換為光信號,用以在物理介質(zhì)上進行傳輸。
網(wǎng)絡七層模型主要是提供的一種規(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)該層的相關功能。
另外,網(wǎng)絡七層模型是一種比較理想化的模型,現(xiàn)在應用比較廣泛的是網(wǎng)絡五層模型,五層模型與七層模型的主要區(qū)別在于將應用層、表示層和會話層統(tǒng)一劃分到應用層中了,由應用程序?qū)崿F(xiàn)其相關的功能。
在我們的應用開發(fā)過程中,我們其實不需要太過于關注底層相關的功能,這些只需要相關的服務提供商提供相應的功能即可。不過在傳輸層之中,我們需要特別關注一下現(xiàn)在廣泛使用的兩個協(xié)議:TCP和UDP協(xié)議。這兩個協(xié)議之間的主要區(qū)別如下:
TCP | UDP |
---|---|
面向連接 | 無連接 |
提供數(shù)據(jù)可靠保證 | 不提供數(shù)據(jù)可靠性保證 |
速度相對較慢 | 速度較快 |
占用資源較多 | 占用資源較少 |
關于TCP和UDP,可以看到,這兩個協(xié)議各自分別有非常鮮明的特點:TCP雖然占用資源較多,速度相對較慢,但是提供了可靠的數(shù)據(jù)傳輸服務,這在大多數(shù)的互聯(lián)網(wǎng)業(yè)務中是非常必要的;而UDP雖然不提供可靠性的數(shù)據(jù)保證,但是其速度非???,而且占用資源較小,這在一些對數(shù)據(jù)可靠性較低的場景中是非常有用的,比如音視頻服務,物聯(lián)網(wǎng)數(shù)據(jù)上報服務等等,這些情況下,數(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ā)送方響應ACK,這個時候才會發(fā)送下一個數(shù)據(jù)窗口的數(shù)據(jù),如果當前窗口內(nèi)有任意一個數(shù)據(jù)報沒有發(fā)送成功,那么整個窗口內(nèi)的數(shù)據(jù)都會重新發(fā)送;而UDP則沒有窗口的概念和對應的ACK機制,其獲取到每一個數(shù)據(jù)報之后,都只是簡單的為其封裝UDP協(xié)議頭,然后將其發(fā)送出去,其不會管這個數(shù)據(jù)是否發(fā)送成功,因而UDP傳輸比TCP是要快很多的。對于數(shù)據(jù)傳輸格式,這里我們以TCP和UDP的數(shù)據(jù)報的格式進行講解,如下是TCP的數(shù)據(jù)報格式:
可以看到,TCP數(shù)據(jù)報的頭部中不僅包含了源端口號和目的端口號,還包含了序號、確認序號、首部長度、標志位等等信息,總的來看,除去真正的數(shù)據(jù)部分,頭部信息占用的位數(shù)就達到了192位,當然,這么多字段主要的作用是為了實現(xiàn)TCP面向連接的可靠性傳輸?shù)墓δ?。如下則是UDP數(shù)據(jù)報的格式:
可以看到,這里UDP的數(shù)據(jù)包格式相對于TCP就非常的精簡了,其頭部主要就只有源端口號、目的端口號、長度和校驗和字段,這些總共占用的字節(jié)數(shù)是8個字節(jié)。這也就是UDP協(xié)議傳輸速率非常快的另一個原因。
TCP是一個提供可靠傳輸服務、面向連接的的傳輸層協(xié)議,其可靠性保證主要是通過每次數(shù)據(jù)報發(fā)送時的ACK機制實現(xiàn)的,而其連接的建立和釋放則主要是通過三次握手和四次揮手的方式實現(xiàn)的。如下是其三次握手和四次揮手的過程:
對于三次握手,其整體過程如下:
首先客戶端會發(fā)送一個建立連接的請求,其標志位中會帶上SYN=1, seq=x
,這里的SYN=1
根據(jù)前面TCP頭部信息的講解中我們知道,其表示建立連接的請求,而seq=x
則只是當前請求的一個序號,不同的請求是有不同的序號的,加這個序號的原因也是為了將其與服務端的響應請求關聯(lián)起來;
在服務端接收到客戶端建立連接的請求之后,其就會返回SYN=1, ACK=1, seq=y, ack_seq=x+1
,這里的SYN=1, ACK=1
表示的是對客戶端建立連接的請求的同意響應,seq=y
則標識了這是服務端的一次數(shù)據(jù)發(fā)送,而ack_seq=x+1
則表示其是對客戶端的seq=x
的請求的一個響應;
在客戶端接收到服務端的響應的時候,客戶端就能夠確認服務端是能夠正常接收和發(fā)送數(shù)據(jù)的,而服務端在接收到客戶端的第一次請求的時候也能夠確認客戶端能夠正常的發(fā)送請求。這個時候,客戶端就會發(fā)送一個ACK=1, seq=x+1, ack_seq=y+1
給服務器,服務器接收到后就會完成連接的建立。
可以看到,前兩次請求都是建立連接所必要的,而客戶端要發(fā)送第三次請求的原因主要有兩點:
可以讓服務器確??蛻舳耸悄軌蛘0l(fā)送和接收請求的;
由于連接的建立是在不穩(wěn)定的網(wǎng)絡上進行的,因而這里有可能第一次請求是由于客戶端在某個時間點發(fā)送的,但是由于網(wǎng)絡延遲,導致很久之后服務器才接收到該請求,但此時服務器并不知道這個連接建立的請求是否是正常請求,其還是會正常發(fā)送一個同意建立連接的響應給客戶端,如果第一請求是由于網(wǎng)絡延遲造成的,那么客戶端是不會再發(fā)送第三次握手給服務器的,這個時候服務器等待超時后也就不會建立這一次的連接了。
對于四次揮手,其是在客戶端與服務器交互完成之后,由客戶端發(fā)起的。四次揮手的主要流程如下:
客戶端首先會發(fā)送一個FIN=1, seq=u
給服務器,根據(jù)前面TCP頭部信息的講解,我們知道FIN=1
表示這是一個斷開連接的請求,而seq=u
則標識了這次請求的一個序號;
服務器接收到客戶端的斷開連接的請求后,其就會向客戶端發(fā)送一個ACK=1, seq=v, ack_seq=u+1
的響應,這里的seq=v
還是表示當前請求的序號,而ack_seq=u+1
則表示這是對客戶端發(fā)送的seq=u
的斷開連接的請求的響應,但是需要注意的是,這個請求并不表示服務器同意斷開連接,此時還只是一個半關閉的狀態(tài),因為此時服務器可能還有數(shù)據(jù)在進行處理沒有發(fā)送給客戶端,此時服務器就會完成這些斷開連接的工作;
待服務器完成了斷開連接的準備工作之后,其就會給客戶端發(fā)送一個FIN=1, ACK=1, seq=w, ack_seq=u+1
的響應,注意,這個過程中客戶端一直都處于等待狀態(tài)的。這里相對于前一次響應,多了一個FIN=1
,就是表示當前是確認斷開連接的請求;
客戶端在接收到服務器的響應之后,其就會給服務器發(fā)送一個ACK=1, seq=u+1, ack_seq=w+1
的響應,表示同意斷開連接,服務器接收到后就會斷開連接,而客戶端則會等待一小段時間后自行斷開連接。
本文首先講解了OSI網(wǎng)絡七層模型,詳細講解了模型中每一層的作用,然后講解了傳輸層中TCP和UDP的主要區(qū)別,從傳輸方式和傳輸數(shù)據(jù)格式上對兩種協(xié)議進行了對比,最后講解了TCP協(xié)議中三次握手和四次揮手的主要過程,并且詳細講解了每一步的作用。
感謝各位的閱讀,以上就是“網(wǎng)絡七層模型與TCP/UDP的原理是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對網(wǎng)絡七層模型與TCP/UDP的原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!