【Linux網絡編程】05 TCP與UDP 特點(字節跳動等面試被問過)

1-TCP ----面向連接

電話系統服務模式的抽象
每一次完整的數據傳輸都要經過建立連接、使用連接、終止連接的過程
本質上,連接是一個管道,收發數據不但順序一致,而且內容相同,保證數據傳輸的可靠性

總結特點:面向連接,是打電話的抽象模型
出錯重傳,比較安全可靠,每次收到數據都會給到迴應ACK

2-UDP----面向無連接

郵件系統服務模式的抽象
每個分組都攜帶完整的目的地址

總結特點:用戶數據報協議
不面向連接,郵件的抽象模型
出錯不重傳,相對不可靠
在局域網中效率比較高

TCP和UDP的區別和各自適用的場景

TCP和UDP區別

1) 連接
TCP是面向連接的傳輸層協議,即傳輸數據之前必須先建立好連接。
UDP無連接。
2) 服務對象
TCP是點對點的兩點間服務,即一條TCP連接只能有兩個端點;
UDP支持一對一,一對多,多對一,多對多的交互通信。
3) 可靠性
TCP是可靠交付:無差錯,不丟失,不重複,按序到達。
UDP是盡最大努力交付,不保證可靠交付。
4)擁塞控制,流量控制
TCP有擁塞控制和流量控制保證數據傳輸的安全性。
UDP沒有擁塞控制,網絡擁塞不會影響源主機的發送效率。
5) 報文長度
TCP是動態報文長度,即TCP報文長度是根據接收方的窗口大小和當前網絡擁塞情況決定的。
UDP面向報文,不合並,不拆分,保留上面傳下來報文的邊界。
6) 首部開銷
TCP首部開銷大,首部20個字節。
UDP首部開銷小,8字節。(源端口,目的端口,數據長度,校驗和)
7)TCP和UDP適用場景
從特點上我們已經知道,TCP 是可靠的但傳輸速度慢,UDP 是不可靠的但傳輸速度快。因此在選用具體協議通信時,應該根據通信數據的要求而決定。
若通信數據完整性需讓位與通信實時性,則應該選用TCP 協議(如文件傳輸、重要狀態的更新等);反之,則使用 UDP 協議(如視頻傳輸、實時通信等)。

請你來說一下socket編程中服務器端和客戶端主要用到哪些函數

1)基於TCP的socket:

1、服務器端程序:

1創建一個socket,用函數socket()
2綁定IP地址、端口等信息到socket上,用函數bind()
3設置允許的最大連接數,用函數listen()
4接收客戶端上來的連接,用函數accept()
5收發數據,用函數send()和recv(),或者read()和write()
6關閉網絡連接

2、客戶端程序:

1創建一個socket,用函數socket()
2設置要連接的對方的IP地址和端口等屬性
3連接服務器,用函數connect()
4收發數據,用函數send()和recv(),或read()和write()
5關閉網絡連接
在這裏插入圖片描述

2)基於UDP的socket:

1、服務器端流程

1建立套接字文件描述符,使用函數socket(),生成套接字文件描述符。
2設置服務器地址和偵聽端口,初始化要綁定的網絡地址結構。
3綁定偵聽端口,使用bind()函數,將套接字文件描述符和一個地址類型變量進行綁定。
4接收客戶端的數據,使用recvfrom()函數接收客戶端的網絡數據。
5向客戶端發送數據,使用sendto()函數向服務器主機發送數據。
6關閉套接字,使用close()函數釋放資源。UDP協議的客戶端流程

2、客戶端流程

1建立套接字文件描述符,socket()。
2設置服務器地址和端口,struct sockaddr。
3向服務器發送數據,sendto()。
4接收服務器的數據,recvfrom()。
5關閉套接字,close()。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章