Linux作為一個開源作業系統,其網路協定堆疊扮演著至關重要的角色,負責處理網路資料的傳輸、路由、連接管理等功能。本文將介紹Linux協定堆疊中常見的一些網路協定及其功能,並附上具體的程式碼範例。
TCP(Transmission Control Protocol)是一種面向連接的、可靠的、基於位元組流的傳輸協定。它提供了資料完整性校驗、流量控制、擁塞控制等功能,確保資料的可靠傳輸。
下面是一個簡單的使用TCP協定進行客戶端與伺服器通訊的範例:
// TCP client #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> int main() { int sockfd; struct sockaddr_in server_addr; char buffer[1024]; sockfd = socket(AF_INET, SOCK_STREAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); send(sockfd, "Hello, server!", strlen("Hello, server!"), 0); recv(sockfd, buffer, sizeof(buffer), 0); printf("%s ", buffer); close(sockfd); return 0; }
// TCP server #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> int main() { int sockfd, client_sock; struct sockaddr_in server_addr, client_addr; char buffer[1024]; sockfd = socket(AF_INET, SOCK_STREAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); listen(sockfd, 5); int addr_len = sizeof(client_addr); client_sock = accept(sockfd, (struct sockaddr*)&client_addr, &addr_len); recv(client_sock, buffer, sizeof(buffer), 0); printf("%s ", buffer); send(client_sock, "Hello, client!", strlen("Hello, client!"), 0); close(client_sock); close(sockfd); return 0; }
UDP(User Datagram Protocol)是一種無連接的、不可靠的傳輸協議,它不保證數據的可靠性和順序性,適用於一些即時性要求較高的場景。
以下是一個簡單的使用UDP協定進行客戶端與伺服器通訊的範例:
// UDP客戶端 #include <sys/socket.h>; #include <netinet/in.h>; #include <stdio.h>; #include <string.h>; int main() { int sockfd; struct sockaddr_in server_addr; 字元緩衝區[1024]; sockfd = 套接字(AF_INET, SOCK_DGRAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); sendto(sockfd, "你好,伺服器!", strlen("你好,伺服器!"), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)); recv(sockfd, 緩衝區, sizeof(緩衝區), 0); printf("%s “, 緩衝); 關閉(sockfd); 返回0; }
// UDP伺服器 #include <sys/socket.h>; #include <netinet/in.h>; #include <stdio.h>; #include <string.h>; int main() { int sockfd; struct sockaddr_in server_addr, client_addr; 字元緩衝區[1024]; sockfd = 套接字(AF_INET, SOCK_DGRAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); 綁定(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); int addr_len = sizeof(client_addr); recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&client_addr, &addr_len); printf("%s “, 緩衝); sendto(sockfd, "你好,客戶端!", strlen("你好,客戶端!"), 0, (struct sockaddr*)&client_addr, addr_len); 關閉(sockfd); 返回0; }
除了TCP和UDP協定外,Linux協定堆疊還支援諸如IP協定、ICMP協定、ARP協定等網路協議,它們共同構成了一個完整的網路通訊體系,為應用程式提供了豐富的網路通訊功能。透過學習和理解這些網路協議,我們可以更好地利用高效的Linux作業系統進行網路編程,建構可靠的網路應用。
以上是Linux協定堆疊中常見的網路協定及功能介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!