Ch13 TCP/IP和網路程式設計
阿新 • • 發佈:2021-11-29
Ch13 TCP/IP和網路程式設計
13.2 TCP/IP
TCP/IP資料流路徑
13.3 IP主機和IP地址
-
主機是支援TCP/IP協議的計算機或裝置。
-
IP地址分為兩部分,即NetworkID欄位和HostID欄位。
13.4 IP協議
- IP協議用於在IP主機之間傳送/接收資料包,IP協議盡最大努力交付資料包。
13.5 IP資料包格式
IP資料包由IP頭、傳送方IP地址和接收方IP地址以及資料組成。每個IP資料包的大小最大為64KB。
13.12 網路程式設計
13.12.2 伺服器-客戶機計算模型
大多數網路程式設計任務都基於伺服器-客戶機計算模型。在伺服器-客戶機計算模財中我們首先在伺服器主機上執行伺服器程序。然後,我們從客戶機主機執行客戶機在UDP中,伺服器等待來自客戶機的資料報,處理資料報並生成對客戶機的響應。在TCP中,伺服器等待客戶機連線。客戶機首先連線到伺服器,在客戶機和伺服器之間建立一個虛擬電路,建立連線後,伺服器和客戶機可以交換連續的資料流。
13.13 套接字程式設計
在網路程式設計中,TCP/IP的使用者介面是通過一系列C語言庫函式和系統呼叫來實現的, 這些函式和系統呼叫統稱為套接字API (( Rago 1993; Stevens等2004 )。
13.13.1 套接字地址
struct sockaddr_in { sa_family_t sin_family; // AF_INET for TCP/IP in_port_t sin_port; // port number struct in_addr sin_addr; // IP address }; struct in_addr { // internet address uint32_t s_addr; // IP address in network byte order };
- TCP/IP 網路的 sin_family 始終設定為 AF_INET。
- sm_port包含按網路位元組順序排列的埠號。
- sin_addr是按網路位元組順序排列的主機IP地址。
13.13.2 套接字API
-
init套接字
//udp int udp_sock = socket(AF_INET, SOCK_DGRAM, 0); //tcp int tcp_sock = socket(AF_INET, SOCK_STRAM, 0);
-
int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen)
-
UDP套接字
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen); ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
-
TCP套接字
int listen(int sockfd, int backlog); int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-
send()/read() and recv/write()
ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t write(sockfd, void *buf, size_t, len) ssize_t recv(int sockfd, void *buf, size_t len, int flags); ssize_t read(sockfd, void *buf, size_t len);