目錄
一、數據傳輸過程
1.1 TCP字節流服務圖
1.2 UDP數據報服務圖
二、tcp與udp的區別
1.連接方式 ?
2.可靠性 ?
3.傳輸效率 ?
4.有序性 ?
5.流量控制和擁塞控制 ?
6.應用場景 ?
7.首部長度
三、tcp與udp能不能使用同一個端口號?
?四、同一個協議,TCP 和 TCP 能不能使用同一個端口號?
一、數據傳輸過程
1.1 TCP字節流服務圖
發送端
應用層:應用層通過多次調用 `send()` 函數分別發送 “abcdef”、“12345”、“test” 這些數據。`send()` 函數用于將應用層數據傳遞給傳輸層。
傳輸層:TCP 協議將這些數據暫存于 TCP 發送緩沖區。TCP 為了提高傳輸效率,會根據自身機制(如窗口大小、擁塞控制等 )對發送緩沖區中的數據進行組合和封裝。如圖中所示,可能會把 “abcdef” 和 “123” 組合在一起封裝成一個 TCP 報文段,“45test” 單獨封裝成一個 TCP 報文段。這種組合并非嚴格按應用層發送順序和邊界,而是根據 TCP 自身策略。
接收端
傳輸層:接收端的 TCP 協議從網絡中接收 TCP 報文段,先存儲在 TCP 接收緩沖區。
應用層:應用層通過 `recv()` 函數從 TCP 接收緩沖區讀取數據。由于 TCP 發送時可能對數據進行了組合封裝,接收端應用層調用 `recv()` 讀取數據時,不一定能按發送端應用層的原始邊界和順序獲取數據,可能會一次性讀取多個發送端組合封裝的數據,也可能分多次讀取。
????????總體而言,該圖展示了 TCP 字節流服務中,數據在發送端和接收端的處理過程,突出 TCP 并不保證應用層數據的邊界,而是以字節流形式進行傳輸和處理。 ?
呈現了 TCP 協議的數據傳輸流程。發送端應用層多次調用 send() 函數發送數據,數據先存于 TCP 發送緩沖區,傳輸層根據自身機制(如窗口、擁塞控制 )將緩沖區數據封裝成 TCP 報文段發送;接收端傳輸層接收 TCP 報文段存于 TCP 接收緩沖區,應用層通過 recv() 函數讀取數據。
1.2 UDP數據報服務圖
發送端
應用層:通過 `sendto()` 函數來發起數據發送操作。`sendto()` 是 UDP 編程中用于發送數據報的函數,它可以指定目標地址(IP 地址和端口號 )以及要發送的數據內容。在應用層,可能會有多個不同的操作或請求需要通過 UDP 發送數據,所以會多次調用 `sendto()` 函數 。
傳輸層:將應用層傳遞過來的數據封裝成 UDP 數據報。UDP 數據報由 UDP 報頭和數據部分組成,報頭包含源端口號、目的端口號、長度和校驗和等信息,完成封裝后的數據報會被發送到網絡中。
接收端
傳輸層:從網絡中接收 UDP 數據報,檢查數據報的目的端口號等信息,將符合條件的數據報傳遞給應用層 。
應用層:使用 `recvfrom()` 函數接收從傳輸層傳來的 UDP 數據報。`recvfrom()` 函數不僅能接收數據,還能獲取發送方的地址信息(源 IP 地址和端口號 ) 。同樣,在應用層可能會多次調用 `recvfrom()` 函數來處理不同時刻接收到的數據報。
????????展示了 UDP 協議數據傳輸過程。發送端應用層通過 sendto() 函數將數據傳遞給傳輸層,傳輸層封裝成 UDP 數據報進行發送;接收端傳輸層接收 UDP 數據報,應用層通過recvfrom() 函數接收數據。體現了 UDP 無連接、簡單的傳輸特點,發送方直接發送,接收方直接接收,不涉及復雜連接建立與管理。
二、tcp與udp的區別
1.連接方式 ?
????????TCP:面向連接的協議,在數據傳輸之前,需要先建立連接,通過三次握手來確保連接的可靠性,數據傳輸完成后,需要釋放連接。
????????UDP:無連接的協議,發送數據時不需要先建立連接,也不需要在數據傳輸完成后釋放連接,簡單地將數據報發送出去即可。
2.可靠性 ?
????????TCP:提供可靠的傳輸服務。它通過序列號、確認應答、重傳機制等保證數據的有序性和完整性,能夠自動糾正傳輸過程中出現的錯誤。 ?
????????UDP:不保證數據傳輸的可靠性。它只是盡最大努力將數據報發送到目的地,不進行錯誤檢查和重傳,可能會出現數據丟失、重復或亂序的情況。
3.傳輸效率 ?
????????TCP:由于需要建立連接、進行可靠性檢查和流量控制等,會引入一定的開銷,傳輸效率相對較低。 ?
????????UDP:沒有連接建立和復雜的控制機制,頭部開銷小,傳輸效率高,適合對實時性要求高、允許一定數據丟失的應用。
4.有序性 ?
????????TCP:能保證數據按照發送的順序到達接收端,對數據進行排序和重組,確保應用層接收到的是有序的數據。 ?
????????UDP:不保證數據的有序性,數據報可能會以不同的順序到達接收端,應用層需要自己處理數據的順序問題。
5.流量控制和擁塞控制 ?
????????TCP:具有完善的流量控制和擁塞控制機制。通過滑動窗口協議進行流量控制,根據網絡擁塞情況調整發送速率,避免網絡擁塞。 ?
????????UDP:沒有內置的流量控制和擁塞控制機制,需要應用層自行實現相關功能,如果網絡出現擁塞,可能導致數據丟失加劇。
6.應用場景 ?
????????TCP:適用于對數據準確性和完整性要求高的場景,如文件傳輸、電子郵件、遠程登錄、網頁瀏覽等。 ?
????????UDP:適用于對實時性要求高、能容忍一定數據丟失的場景,如視頻直播、音頻通話、在線游戲、DNS查詢等。
7.首部長度
????????TCP:首部長度一般為20字節,當有選項時,首部長度會增加。 ?
????????UDP:首部長度固定為8字節,包括源端口、目的端口、長度和校驗和字段。
三、tcp與udp能不能使用同一個端口號?
????????TCP和UDP可以使用相同的端口號,因為它們是獨立的傳輸協議,每種協議有自己的端口空間。在通信過程中,端口號用于標識應用程序或服務,以便正確地將數據包傳遞到目標應用程序。因此,同一個端口號可以同時被TCP和UDP協議使用,只要它們不在同一個主機上相互沖突即可。這種情況在網絡編程或應用程序開發中是很常見的。
?四、同一個協議,TCP 和 TCP 能不能使用同一個端口號?
????????不可以,每個協議都有自己的一組預留端口號。TCP和UDP有各自獨立的端口號范圍,因此TCP和TCP不能使用相同的端口號。TCP的端口號范圍是0到65535,UDP的端口號范圍也是0到65535,但它們之間的端口號是相互獨立的。