正文開始
上一文章中咱們理解了每一層通訊協議大約是在做什麼事情以後,咱們這篇文章中將專門來說明,在傳輸層的兩個協議TCP
與UDP
。
為什麼會選這兩個出來說呢 ? 因為在即時影音傳輸的世界中,這兩個協議常常拿出來進行比較(雖然大部份還是 TCP),而且這兩個是所有資料傳輸的基本,不論是要傳輸文字、檔案、語音都一定會透過這兩個來傳送資料,所以這兩個很重要。
這篇文章的主是題就是:
什麼是 TCP 和 UDP 呢? 這協議到底用來做啥的 ?
接下來會就簡單的分成兩個章節:
- UDP (User Datagram Protocol)
- TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
首先我們已經知道協議是用做完成某事件的過程,那 UDP 是想用來做什麼呢 ?
咱們已經知道傳輸層
主要是處理應用程式與應用程式如何進行傳輸,而要送到某個應用程式最基本所需要的東西就是 Port。
UDP 就是符合咱們最低需求的東西。
UDP 就是用來傳輸資料到某台電腦中的應用程式 (有沒有收到不用管)
它的封包長的如下。
UDP 封包 = 表頭 + 資料
其中表頭欄位如下,事實上也就只是加上 Port 而以,其中 length 只是用來說明它是資料有多大。
Source Port: 55084
Destination Port: 443
Length: 31 (byte)
UDP 注意事項
- UDP 的特點就是射後不理,他不會管對方有沒有收到的 (不可靠傳輸)。
- 它有可能會發生到達順序不一致問題。
Ex.
發送方發送:
T1 時間 => UDP A
T2 時間 => UDP B
T3 時間 => UDP C
接受方收到:
T4 時間 => UDP C
T5 時間 => UDP B
T6 時間 => UDP A
TCP (Transmission Control Protocol)
UDP 協議已經可以完成傳輸層最低的需求,那還需要 TCP 做什麼呢 ? 上面有說到 UDP 是不可靠傳輸,因此呢 TCP 誕生的目的就是為了可靠的傳輸,也就是說它是負責任的好人。
TCP 是為了達到可靠性傳輸而誕生出來的。
接下來我們來看一下它的執行過程,基本上分三個部份連線
、傳輸
、斷線
,全部理解完基本上你就可以理解為什麼它是可靠性傳輸。
TCP 建立連線 (三次握手)
- A 傳送建立連線訊息給 B,裡面有個包個數字 seq (x)。
- B 收到後,將這個 x 記錄下來,然後回發個訊息,它包含另一個 seq(y) 與 ack(x+1), x + 1 的目的是因為這樣才能證明是 B 收到 A 的信以後,才回復的)
- A 收到後,也回應個 ack(y+1) 與 seq(z) ( 同理這樣才能證明 A 是收到 B 寫的 )
注意,在建立連線時,雙方第一次傳送的 seq 被稱為初始序列號,這在傳送資料時會用到。
TCP 傳送資料
建立完連線以後,就可以開始傳送資料,最基本的型式如下圖。它就是丟一個資料過去,然後回一個 ack。
- A 發送 seq 為 x 的 1024 byte 的資料給 B
- B 收到後回個 ack 為 x + 1024 byte 的訊息給 A
這裡就提供了最基本的可靠性,如果一個傳送資料的請求,在一定的時間內沒有回應 ack,則就進行重發。
但是這樣不能說很有效率,所以有另一種型式,基本上就是 A 發送多個請求,然後在回傳一個 ack,然後使用 ack 回傳的編號,就可以知道 B 已經成功了收到多少的資料。
- A 發送 seq 為 x 的 1024 byte 大小的資料給 B
- A 再發送 seq 為 x 的 2024 byte 大小的資料給 B
- B 在回應 ack 中會回傳它收到了 2048 + x (初始序列號)
TCP 斷線 (四次揮手)
最後斷線的過程如下:
- A 發送一個斷線訊息給 B
- B 收到後回發一個 ok 訊息給 A
- 接下來 B 在發送一個斷線訊息給 A
- A 收到後再回發一個 ok 訊息給 B ( 這時 B 就正式斷線 )
- A 大約在 4 分鐘過後才正式斷線 ( 這時 A 就正式斷線,資源才會釋放 )
寫到這裡時事實上我有個疑惑,那就是為什麼 B 要在主動發個斷線訊息給 A 呢 ? 後來調了一下發現,A 發送給 B 斷線時,事實上只是和 B 說 A 不在發送訊息了,但 A 還是可以收訊息,所以 B 也要在發個訊息說不在送訊息了,這時雙方都說不在送訊息後,才正式算斷線。
結論
本篇文章咱們學習到了兩個傳輸層的協議 TCP 與 UDP。
UDP
它是為了要符合傳輸層最低需求,可以傳送到某個應用程式上的協議,因此它不包證可靠性,但是雖然說不可靠,但是某些高大尚的企業為了追求效能,會使用 UDP 來進行傳輸,然後自已實作一定等級的可靠性機制。
TCP
TCP 是為了達到可靠性傳輸而誕生出來的,但是相對的它比較耗資源,在傳輸資料時都需要先透過三次握手來建立連線,然後才能開始傳輸。