您好,登錄后才能下訂單哦!
這篇文章主要講解了“網絡七層模型與TCP/UDP的原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“網絡七層模型與TCP/UDP的原理是什么”吧!
為了使全球范圍內不同的計算機廠家能夠相互之間能夠比較協調的進行通信,這個時候就有必要建立一種全球范圍內的通用協議,以規范各個廠家之間的通信接口,這就是網絡七層模型的由來。本文首先會對網絡七層模型的功能進行介紹,然后會講解傳輸層的兩個重要協議:TCP和UDP協議,并且會著重講解TCP協議中的三次握手和四次揮手的過程。
關于網絡七層模型,我們首先以一個圖例來展示其功能:
應用層:主要指的是應用程序部分,比如我們的Java程序,應用層所產生的數據成為應用層數據,典型的應用層協議,比如有HTTP協議,dubbo的rpc協議,這些都是由我們的應用層程序自己定義的;
表示層:這一層主要是對應用層的數據進行一些格式轉換,加解密或者進行壓縮和解壓縮的功能;
會話層:會話層的主要作用是負責進程與進程之間會話的建立、管理以及終止的服務;
傳輸層:傳輸層提供了兩臺機器之間端口到端口的一個數據傳輸服務,因為應用層、表示層和會話層所針對的都是某個應用進程,而進程是和端口綁定的,但是同一臺服務器上是可以有多個進程的,因而傳輸層提供的就是這種不同的端口到端口的訪問,以實現區分不同進程之間的通信服務。在傳輸層最典型的協議有TCP和UDP協議,TCP提供的是面向連接的、可靠的數據傳輸服務,而UDP則是無連接的、不可靠的數據傳輸服務。在上面的圖中我們也可以看出,經過傳輸層之后,數據會被加上TCP或者UDP頭部,用以實現不同傳輸層協議的功能;
網絡層:傳輸層提供的是同一臺主機上的端口到端口的傳輸服務,而網絡層則提供的是不同主機之間的連接服務,最典型的網絡層協議就是IP協議,網絡層會將當前的數據包加上一個IP頭部,從而實現目標機器的尋址;
數據鏈路層:這一層是承接軟件和硬件的一層,由于其會將當前的數據報發送到不穩定的物理層硬件上進行傳輸,因而為了保障數據的完整性和可靠性,數據鏈路層就提供了校驗、確認和反饋等機制,用以提供可靠的數據報傳輸服務;
物理層:物理層的主要作用就是將0101
這種二進制的比特流數據轉換為光信號,用以在物理介質上進行傳輸。
網絡七層模型主要是提供的一種規范,而在這每一層上為了實現不同的功能,各個計算機廠商都會實現自己的協議,這些協議的標識就是通過一些協議頭和進行的,比如上面圖中,數據在經過每一層的封裝之后都會為其加上自己的協議頭部,當數據經過屋里介質傳輸到目標機器上后,其就會反過來,將數據進行一層一層的解析,解析的過程其實就是根據其每一層頭部信息來實現該層的相關功能。
另外,網絡七層模型是一種比較理想化的模型,現在應用比較廣泛的是網絡五層模型,五層模型與七層模型的主要區別在于將應用層、表示層和會話層統一劃分到應用層中了,由應用程序實現其相關的功能。
在我們的應用開發過程中,我們其實不需要太過于關注底層相關的功能,這些只需要相關的服務提供商提供相應的功能即可。不過在傳輸層之中,我們需要特別關注一下現在廣泛使用的兩個協議:TCP和UDP協議。這兩個協議之間的主要區別如下:
TCP | UDP |
---|---|
面向連接 | 無連接 |
提供數據可靠保證 | 不提供數據可靠性保證 |
速度相對較慢 | 速度較快 |
占用資源較多 | 占用資源較少 |
關于TCP和UDP,可以看到,這兩個協議各自分別有非常鮮明的特點:TCP雖然占用資源較多,速度相對較慢,但是提供了可靠的數據傳輸服務,這在大多數的互聯網業務中是非常必要的;而UDP雖然不提供可靠性的數據保證,但是其速度非常快,而且占用資源較小,這在一些對數據可靠性較低的場景中是非常有用的,比如音視頻服務,物聯網數據上報服務等等,這些情況下,數據丟失一兩幀都是可以接受的。
TCP和UDP在資源占用上的區別,不僅體現在數據傳輸方式上,還體現在了數據的傳輸格式上。對于數據傳輸方式,TCP每次發送數據的方式都是按照時間窗口的方式一個數據報一個數據報的發送,并且需要等待每個數據報都給數據發送方響應ACK,這個時候才會發送下一個數據窗口的數據,如果當前窗口內有任意一個數據報沒有發送成功,那么整個窗口內的數據都會重新發送;而UDP則沒有窗口的概念和對應的ACK機制,其獲取到每一個數據報之后,都只是簡單的為其封裝UDP協議頭,然后將其發送出去,其不會管這個數據是否發送成功,因而UDP傳輸比TCP是要快很多的。對于數據傳輸格式,這里我們以TCP和UDP的數據報的格式進行講解,如下是TCP的數據報格式:
可以看到,TCP數據報的頭部中不僅包含了源端口號和目的端口號,還包含了序號、確認序號、首部長度、標志位等等信息,總的來看,除去真正的數據部分,頭部信息占用的位數就達到了192位,當然,這么多字段主要的作用是為了實現TCP面向連接的可靠性傳輸的功能。如下則是UDP數據報的格式:
可以看到,這里UDP的數據包格式相對于TCP就非常的精簡了,其頭部主要就只有源端口號、目的端口號、長度和校驗和字段,這些總共占用的字節數是8個字節。這也就是UDP協議傳輸速率非常快的另一個原因。
TCP是一個提供可靠傳輸服務、面向連接的的傳輸層協議,其可靠性保證主要是通過每次數據報發送時的ACK機制實現的,而其連接的建立和釋放則主要是通過三次握手和四次揮手的方式實現的。如下是其三次握手和四次揮手的過程:
對于三次握手,其整體過程如下:
首先客戶端會發送一個建立連接的請求,其標志位中會帶上SYN=1, seq=x
,這里的SYN=1
根據前面TCP頭部信息的講解中我們知道,其表示建立連接的請求,而seq=x
則只是當前請求的一個序號,不同的請求是有不同的序號的,加這個序號的原因也是為了將其與服務端的響應請求關聯起來;
在服務端接收到客戶端建立連接的請求之后,其就會返回SYN=1, ACK=1, seq=y, ack_seq=x+1
,這里的SYN=1, ACK=1
表示的是對客戶端建立連接的請求的同意響應,seq=y
則標識了這是服務端的一次數據發送,而ack_seq=x+1
則表示其是對客戶端的seq=x
的請求的一個響應;
在客戶端接收到服務端的響應的時候,客戶端就能夠確認服務端是能夠正常接收和發送數據的,而服務端在接收到客戶端的第一次請求的時候也能夠確認客戶端能夠正常的發送請求。這個時候,客戶端就會發送一個ACK=1, seq=x+1, ack_seq=y+1
給服務器,服務器接收到后就會完成連接的建立。
可以看到,前兩次請求都是建立連接所必要的,而客戶端要發送第三次請求的原因主要有兩點:
可以讓服務器確保客戶端是能夠正常發送和接收請求的;
由于連接的建立是在不穩定的網絡上進行的,因而這里有可能第一次請求是由于客戶端在某個時間點發送的,但是由于網絡延遲,導致很久之后服務器才接收到該請求,但此時服務器并不知道這個連接建立的請求是否是正常請求,其還是會正常發送一個同意建立連接的響應給客戶端,如果第一請求是由于網絡延遲造成的,那么客戶端是不會再發送第三次握手給服務器的,這個時候服務器等待超時后也就不會建立這一次的連接了。
對于四次揮手,其是在客戶端與服務器交互完成之后,由客戶端發起的。四次揮手的主要流程如下:
客戶端首先會發送一個FIN=1, seq=u
給服務器,根據前面TCP頭部信息的講解,我們知道FIN=1
表示這是一個斷開連接的請求,而seq=u
則標識了這次請求的一個序號;
服務器接收到客戶端的斷開連接的請求后,其就會向客戶端發送一個ACK=1, seq=v, ack_seq=u+1
的響應,這里的seq=v
還是表示當前請求的序號,而ack_seq=u+1
則表示這是對客戶端發送的seq=u
的斷開連接的請求的響應,但是需要注意的是,這個請求并不表示服務器同意斷開連接,此時還只是一個半關閉的狀態,因為此時服務器可能還有數據在進行處理沒有發送給客戶端,此時服務器就會完成這些斷開連接的工作;
待服務器完成了斷開連接的準備工作之后,其就會給客戶端發送一個FIN=1, ACK=1, seq=w, ack_seq=u+1
的響應,注意,這個過程中客戶端一直都處于等待狀態的。這里相對于前一次響應,多了一個FIN=1
,就是表示當前是確認斷開連接的請求;
客戶端在接收到服務器的響應之后,其就會給服務器發送一個ACK=1, seq=u+1, ack_seq=w+1
的響應,表示同意斷開連接,服務器接收到后就會斷開連接,而客戶端則會等待一小段時間后自行斷開連接。
本文首先講解了OSI網絡七層模型,詳細講解了模型中每一層的作用,然后講解了傳輸層中TCP和UDP的主要區別,從傳輸方式和傳輸數據格式上對兩種協議進行了對比,最后講解了TCP協議中三次握手和四次揮手的主要過程,并且詳細講解了每一步的作用。
感謝各位的閱讀,以上就是“網絡七層模型與TCP/UDP的原理是什么”的內容了,經過本文的學習后,相信大家對網絡七層模型與TCP/UDP的原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。