TCP和UDP的區別
1.連接
TCP是面向連接的傳輸層協議,即傳輸數據之前必須先建立好連接。
UDP無連接。
2. 服務對象
TCP是點對點的兩點間服務,即一條TCP連接只能有兩個端點;
UDP支持一對一,一對多,多對一,多對多的交互通信。
3.可靠性
TCP是可靠交付:無差錯,不丟失,不重復,按序到達。
UDP是盡最大努力交付,不保證可靠交付。
4.擁塞控制,流量控制
TCP有擁塞控制和流量控制保證數據傳輸的安全性。
UDP沒有擁塞控制,網絡擁塞不會影響源主機的發送效率。
5. 報文長度
TCP是動態報文長度,即TCP報文長度是根據接收方的窗口大小和當前網絡擁塞情況決定的。
UDP面向報文,不合並,不拆分,保留上面傳下來報文的邊界。
6.首部開銷
TCP首部開銷大,首部20個字節。
UDP首部開銷小,8字節。(源端口,目的端口,數據長度,校驗和)
socket網絡編程的步驟
1.基於TCP的socket:
服務器端程序:
① 創建一個socket,用函數socket()
② 綁定IP地址、端口等信息到socket上,用函數bind()
③ 設置允許的最大連接數,用函數listen()
④ 接收客戶端上來的連接,用函數accept()
⑤ 收發數據,用函數send()和recv(),或者read()和write()
⑥ 關閉網絡連接close()
客戶端程序:
① 創建一個socket,用函數socket()
② 設置要連接的對方的IP地址和端口等屬性
③ 連接服務器,用函數connect()
④ 收發數據,用函數send()和recv(),或read()和write()
⑤ 關閉網絡連接close()
2.基於UDP的socket:
服務器端流程
① 建立套接字文件描述符,使用函數socket(),生成套接字文件描述符。
② 設置服務器地址和偵聽端口,初始化要綁定的網絡地址結構。
③ 綁定偵聽端口,使用bind()函數,將套接字文件描述符和一個地址類型變量進行綁定。
④ 接收客戶端的數據,使用recvfrom()函數接收客戶端的網絡數據。
⑤ 向客戶端發送數據,使用sendto()函數向服務器主機發送數據。
⑥ 關閉套接字,使用close()函數釋放資源。UDP協議的客戶端流程
客戶端流程
① 建立套接字文件描述符,socket()。
② 設置服務器地址和端口,struct sockaddr。
③ 向服務器發送數據,sendto()。
④ 接收服務器的數據,recvfrom()。
⑤ 關閉套接字,close()。