オープンソース オペレーティング システムとして、Linux のネットワーク プロトコル スタックは重要な役割を果たし、ネットワーク データ送信、ルーティング、接続管理、その他の機能の処理を担当します。この記事では、Linux プロトコル スタックにおけるいくつかの一般的なネットワーク プロトコルとその機能を紹介し、具体的なコード例を添付します。
TCP (伝送制御プロトコル) は、コネクション指向で信頼性の高い、バイト ストリーム ベースの伝送プロトコルです。データの完全性検証、フロー制御、輻輳制御などの機能を提供し、データの信頼性の高い送信を保証します。
次は、クライアント/サーバー通信に TCP プロトコルを使用する簡単な例です:
// TCP クライアント #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> int main() { int sockfd; struct sockaddr_inserver_addr; 文字バッファ[1024]; sockfd = ソケット(AF_INET, SOCK_STREAM, 0); サーバー_アドレス.sin_family = AF_INET; サーバーアドレス.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, "こんにちは、サーバー!", strlen("こんにちは、サーバー!"), 0); recv(sockfd, バッファ, sizeof(バッファ), 0); printf("%s "、バッファ); 閉じる(sockfd); 0を返します。 }
// TCPサーバー #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> int main() { int sockfd、client_sock; struct sockaddr_inserver_addr、client_addr; 文字バッファ[1024]; sockfd = ソケット(AF_INET, SOCK_STREAM, 0); サーバー_アドレス.sin_family = AF_INET; サーバーアドレス.sin_port = htons(8080); サーバー_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, バッファ, sizeof(buffer), 0); printf("%s "、バッファ); send(client_sock, "こんにちは、クライアント!", strlen("こんにちは、クライアント!"), 0); 閉じる(client_sock); 閉じる(sockfd); 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_inserver_addr; 文字バッファ[1024]; sockfd = ソケット(AF_INET, SOCK_DGRAM, 0); サーバー_アドレス.sin_family = AF_INET; サーバーアドレス.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_inserver_addr、client_addr; 文字バッファ[1024]; sockfd = ソケット(AF_INET, SOCK_DGRAM, 0); サーバー_アドレス.sin_family = AF_INET; サーバーアドレス.sin_port = htons(8080); サーバー_addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); int addr_len = sizeof(client_addr); recvfrom(sockfd, バッファ, 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 中国語 Web サイトの他の関連記事を参照してください。