//TODO:
TCP、UDP在OSI(Open System Interconnect)網絡模型中處於傳輸層協議
IP在OSI網絡模型屬於網絡層
常用網絡函數:
socket函數 創建套接字、確定套接字的參數 int socket(int domain, int type, int protocol); 參數 domain: 地址簇,常用的為IPv4 AF_INET和IPv6 AF_INET6 type: 數據傳輸方式/套接字類型,常用的為 流格式(面向連接)SOCK_STREAM、數據報格式(面向無連接)SOCK_DGRAM protocol:傳輸協議,常用的有 TCP傳輸協議 IPPROTO_TCP 和 UDP傳輸協議 IPPTOTO_UDP
返回值
創建的套接字值
bind函數 服務器端使用bind函數將套接字和本地IP、端口等信息綁定(傳輸層和網絡層互聯) int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 參數 sockfd: socket函數創建的套接字 *addr: 服務器本地的IP、端口、地址簇等信息 addrlen:服務器信息的結構體大小
返回值
成功 0 失敗 -1
listen函數
服務器綁定套接字和本地設備信息后,調用listen函數讓套接字進入被動監聽狀態
int listen(int sockfd, int backlog);
參數
sockfd: 需要進入監聽的套接字
backlog:監聽客戶端請求隊列的最大個數,如果設置參數為SOMAXCONN,則由系統自動決定
返回值
成功 0 失敗 -1
accept函數 服務器端阻塞接收客戶端socket上的數據流,做響應處理 int accept(int sock, struct sockaddr *addr, socklen_t *addrlen); 參數 sock: listen函數監聽到需要響應的套接字(服務端套接字) addr: 客戶端的IP、端口號等信息(客戶端信息) addrlen:客戶端信息結構的大小 返回值 返回一個新的和客戶端通信的套接字
connect函數 客戶端連接到指定服務器的接口 int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 參數 sockfd: 客戶端創建用於與服務器端通信的套接字 addr: 指定的服務器參數包括傳輸格式、地址、端口號等信息 addrlen:服務器參數結構體的大小 返回值 成功 0 失敗 -1
select函數 檢測多個套接字的變化狀態來做響應處理 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); 參數 nfds: 所監視的文件描述符中最大的值+1 *readfds: 監測是否可讀的文件描述符 *writefds: 監測是否可寫的文件描述符 *exceptfds:監測是否有異常的文件描述符 *timeout: 超時時間,如果為NULL,則阻塞等待直到前面的文件描述符變化 返回值: 監測到變化的文件描述符,如果因為超時而退出則返回值為0,如果異常 則為-1
1】TCP協議數據傳輸具有粘包性
2】TCP的三次握手發生在connect函數階段
3】UDP的數據傳輸需要使用sendto和recvfrom函數,他們和send、recv區別是,前者不光包含套接字信息,還包括目標地址信息
TCP服務端編程
socket > bind > listen > accept > read ...send...
socket > bind > listen > select > read ... send...
TCP客戶端編程
socket > bind > connect > read ... send...
socket > bind > connect > select > read ... send...
客戶端如果不調用bind函數,客戶端設備會隨機分配一個沒有使用的端口
UDP服務器編程
socket > bind > recvfrom... sendto...
UDP客戶端編程
socket > recvfrom... sendto...
TCP與UDP基本區別
1.基於連接與無連接
2.TCP要求系統資源較多,UDP較少;
3.UDP程序結構較簡單
4.流模式(TCP)與數據報模式(UDP);
5.TCP保證數據正確性,UDP可能丟包
6.TCP保證數據順序,UDP不保證
UDP應用場景:
1.面向數據報方式
2.網絡數據大多為短消息
3.擁有大量Client
4.對數據安全性無特殊要求
5.網絡負擔非常重,但對響應速度要求高