基礎網路概念 - TCP 與 UDP 協定
上一篇了解通訊協定以及常見的通訊協定應用之後,這篇來聊聊傳輸層中的兩個協定, TCP 與 UDP。
TCP 協定
TCP (Transmission Control Protocol) 提供一個可靠的連線導向 (Connection Oriented) 的資料流傳輸機制,負責發送端與接收端的協定建立,並且保證資料在網路上傳送的安全性。 TCP 會在接收會議層以上的通訊協定而來的資料之後,將其分割成較小封包,以便於傳輸,在將資料分割成封包時就會先附上序列編號,接著再將該封包傳送至網路層的 IP。接收端可以透過檢查編號將封包重新排序,以確保封包排列的正確性。
TCP 協定的主要功能
- 循序編號:TCP 為每個封包加上編號,如此一來,即使封包沒有按照原來的發送順序到達接收端,接收端仍可以藉由此編號進行正確的重組。
- 資料確認與重送:接收端透過與發送端的相互溝通,針對所傳來的每一個封包回送已收到的確認封包,類似郵局的雙掛號的回條概念。如果發送端在預定的時間內沒有收到該確認封包,就會認定接收端沒有收到某一部分的資料而傳輸失敗,於是便會利用重送機制,來重新傳送該封包,直至收到接收端的確認封包為止。
- 錯誤檢查:TCP 會在每個封包的表頭中加上一個檢查欄位,用來確認是否為欲傳輸的原始封包,在接收端一旦發現檢查值不合,就表示該封包已毀損或出現錯誤,接收端便無法發出確認的封包。
- 流量控制:TCP 具有流量控制的功能,以因應由於軟硬體差異,而導致每台電腦處理資料的速度不同的問題,能夠視情況的調整資料傳輸的速度,盡量減少資料流失的狀況。
TCP 傳送機制
TCP 的傳送機制有以下幾個重要的概念:
- 三向交握 (Three-way Handshake) 程序:
- 連線請求:當要建立一個 TCP 連線時,就必須利用封包內的同步旗標(SYN,Synchronize)欄位設為 1,其他欄位為 0,讓另一端的系統知道有人要求連線。
- 連線確認:接收端接收到此連線封包,並且確認可提供這個服務,便會將要回傳的封包 SYN 旗標欄位設為 1,也會將確認旗標(ACK, Acknowledge)欄位設為 1,讓發送端知道其要求連線的傳輸已被收到且確認。
- 連線成功:接著發送端會將 SYN 旗標欄位設為 0,ACK 欄位設為 1 傳回,告知「已確認你的確認動作,要開始傳輸資料」。
- 確認封包機制:TCP 使用可靠的傳輸機制,也就是確認與重送。接收端以確認信息(Acknowledgement)回應發送端,確定資料正確無誤的送達,雙方也會保留傳輸封包的紀錄,以作為下一筆資料的確認依據。
- 逾時及重送機制:發送端在送出封包後,會開始一個該封包的計時器 (Timer),其功能是如果在逾時之前收到封包的確認信息,則表示送收正常,取消該封包的計時器,繼續進行下一個封包的傳送。當然,如果沒有按照預估的時間內接到目的端的確認信息封包,則發送端會認為此封包可能在傳輸途中遺失,便會重新發送,並重設計時器。
- 滑動窗 (Sliding Windows):封包的確認及重送機制,雖能保證傳輸的正確無誤,但在效能上卻是一項問題。為解決這個問題,便出現了滑動窗這項技術。滑動窗可視為是多重發送及多重確認的技術,它能夠讓發送端在接收到確認信息之前,同時傳輸數個封包,如此可以更充分的利用網路頻寬及加速資料傳輸速度。
UDP 協定
UDP 提供一個非可靠的非連線型的資料流傳輸服務,所謂的非連線型,指的是在不通知傳送目標要開始傳送訊息的情況之下,突然開始進行送訊的一種方式。因此在通訊上的可靠性較低,但若與 TCP 比較,則因為其通訊協定本身的負擔較輕,所以速度會比較快,適合用於即時服務等範疇上。
UDP 不會運用確認機制來保證資料是否正確的被接收,資料的接收也不必按照順序,不需要重新傳送遺失的資料,也不提供回傳機制來控制資料流的速度。因此,若要傳輸像語音、影像等訊息量較大的資料,可以容忍遺失一些封包,此時會較建議使用 UDP 協定。
TCP 與 UDP 比較
TCP | UDP | |
---|---|---|
連接特性 | 可靠的連接導向 | 非可靠的連接導向 |
速度 | 慢 | 快 |
傳輸方式 | 封包按順序傳輸 | 封包以串流方式傳輸 |
握手程序 | 需要 | 不需要 |
優點 | 可靠的傳輸機制 | 傳輸量大、迅速 |
缺點 | 速度較慢 | 不可靠,應用程式須自行提供可靠機制 |
適用服務 | 如電子郵件、檔案傳輸 | 如串流媒體、網路遊戲 |
參考資料
基礎網路概念 - TCP 與 UDP 協定