TCP
TCP(Transmission Control Protocol,傳輸控制協議)是面向連接的協議,也就是說,在收發數據前,必須和對方建立可靠的連接。
TCP首部格式
- 序號 :用於對字節流進行編號,例如序號為 301,表示第一個字節的編號為 301,如果攜帶的數據長度為 100 字節,那么下一個報文段的序號應為 401。
- 確認號 :期望收到的下一個報文段的序號。例如 B 正確收到 A 發送來的一個報文段,序號為 501,攜帶的數據長度為 200 字節,因此 B 期望下一個報文段的序號為 701,B 發送給 A 的確認報文段中確認號就為 701。
- 數據偏移 :指的是數據部分距離報文段起始處的偏移量,實際上指的是首部的長度。
- 確認 ACK :當 ACK=1 時確認號字段有效,否則無效。TCP 規定,在連接建立后所有傳送的報文段都必須把 ACK 置 1。
- 同步 SYN :在連接建立時用來同步序號。當 SYN=1,ACK=0 時表示這是一個連接請求報文段。若對方同意建立連接,則響應報文中 SYN=1,ACK=1。
- 終止 FIN :用來釋放一個連接,當 FIN=1 時,表示此報文段的發送方的數據已發送完畢,並要求釋放運輸連接。
- 窗口 :窗口值作為接收方讓發送方設置其發送窗口的依據。之所以要有這個限制,是因為接收方的數據緩存空間是有限的。
UDP
UDP(User Data Protocol,用戶數據報協議)是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並盡可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制。
UDP首部格式
首部字段只有 8 個字節,包括源端口、目的端口、長度、檢驗和。12 字節的偽首部是為了計算檢驗和臨時添加的。
總結
TCP:面向連接,提供可靠的服務,有流量控制,擁塞控制,無重復、無丟失、無差錯,面向字節流(把應用層傳下來的報文看成字節流,把字節流組織成大小不等的數據塊),只能是點對點,首部 20 字節,全雙工。
UDP:無連接,盡最大努力交付,沒有擁塞控制,面向報文(對於應用程序傳下來的報文不合並也不拆分,只是添加 UDP 首部),支持一對一、一對多、多對多,首部 8 字節。