前言
今天是第六節內容的分享了,學的是傳輸層協議的知識點。主要分為兩種對立性質的協議,學起來會比較有對比性。
TCP和UDP的介紹
瞭解常見服務的應用埠號
TCP和UDP的報文格式
TCP三次握手和四次揮手
傳輸層協議
傳輸層有兩大協議TCP UDP
(1)TCP協議
TCP協議是一種面向連線的協議,可提供可靠的傳輸服務
TCP的埠號
作用:
用來區分不同的網路服務
埠的分類:
知名埠和動態埠
知名埠:
0-1023,常見應用程式會使用的埠
動態埠:
1024-65535,一般作為源埠使用
埠號對應的協議
TCP頭部
整個TCP頭部一共20個位元組
Source Port:
源端
Destination Port:
目的埠
Sequence Number:
順序號碼
Acknowledge Number:
確認號碼
Header Length;
報頭長度
Resv:
保留欄位
SYN:
表示建立連線
ACK:
表示響應
Window:
視窗,用於流量控制
Checksum:
校驗欄位
TCP三次握手
第一次握手:
主機A傳送位碼為syn=1(表示要求建立連線),隨機產生seq number的資料包到主機B
第二次握手:
主機B收到請求後要確認聯機資訊,向A傳送ack number=(主機A的seq+1),同時syn=1,ack=1,隨機產生一個seq number的資料包傳送給A
第三次握手:
主機A收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連線建立成功。
TCP的傳輸過程
上圖給出了主機A分2次(分2個數據包)向主機B傳遞200位元組的過程。首先,主機A透過1個數據包傳送100個位元組的資料,資料包的 Seq 號設定為 1200。主機B為了確認這一點,向主機A傳送 ACK 包,並將 Ack 號設定為 1301。
為了保證資料準確到達,目標機器在收到資料包(包括SYN包、FIN包、普通資料包等)包後必須立即回傳ACK包,這樣傳送方才能確認資料傳輸成功。
此時 Ack 號為 1301 而不是 1201,原因在於 Ack 號增加了傳輸資料的位元組數。假設每次 Ack 號不加傳輸的位元組數,這樣雖然可以確認資料包的傳輸,但無法明確100位元組全部正確傳遞還是丟失了一部分,比如只傳遞了80位元組。
因此按如下的公式確認 Ack 號:seq+傳遞的位元組數+1。
TCP的流量控制
接收端將自己可以接收的緩衝區大小放入 TCP 首部中的 “視窗大小” 欄位, 透過ACK端通知傳送端;視窗大小欄位越大, 說明網路的吞吐量越高接收端一旦發現自己的緩衝區快滿了, 就會將視窗大小設定成一個更小的值通知給傳送端;傳送端接受到這個視窗之後, 就會減慢自己的傳送速度
如果接收端緩衝區滿了, 就會將視窗置為0; 這時傳送方不再發送資料, 但是需要定期傳送一個視窗探測資料段, 來檢視接收端是否有視窗有容量來接收資料
TCP的關閉連線
TCP的連線的拆除需要傳送四個包,因此稱為四次揮手
由於TCP連線是全雙工的,因此每個方向都必須單獨進行關閉
TCP的四次揮手
(1)客戶端A傳送一個FIN,用來關閉客戶A到伺服器B的資料傳送。(2)伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。
(3)伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A。(4)客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1。
UCP的協議
UDP協議是一種面向無連線的協議,使用者資料報協議,傳送資料前無需建立連線,不使用擁塞控制,不保證可靠交付,最大努力交付。
UDP頭部
UDP頭部共8個位元組,傳輸資料時沒有確認機制
Source Port:
源埠
Destination Port:
目的埠
Header;
報頭長度
Checksum:
校驗欄位
UDP的傳輸過程
UDP傳輸資料不建立連線,因此也就不需要維護連線狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的訊息。
UDP是面向報文的。傳送方的UDP對應用程式交下來的報文,在新增首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。
雖然UDP是一個不可靠的協議,但它卻是分發資訊的一個理想協議。例如,在螢幕上報告股票市場、顯示航空資訊等等都使用的是UDP協議。
最後
如果大家覺得本系列不錯,覺得有幫助的朋友可以關注、點贊、收藏支援一下~
碼字不易,你的點贊就是對我創作的支援!