Linux オペレーティング システムは、オープン ソース システムとして、ネットワーク通信の分野で優れたパフォーマンスを発揮し、そのプロトコル スタックは重要なコンポーネントの 1 つと考えられています。この記事では、ネットワーク インターフェイス、ソケット、TCP/IP プロトコル スタックなど、Linux プロトコル スタックの主要なコンポーネントについて詳しく説明し、読者の理解を助けるために特定のコード例を使用します。
ネットワーク インターフェイスは、Linux プロトコル スタックの最下位コンポーネントであり、ネットワーク データ パケットの送受信を担当します。 Linux では、ネットワーク インターフェイスはデバイス ドライバーを通じて実装され、各ネットワーク インターフェイスには eth0、eth1 などの一意の識別子があります。以下に示すように、ifconfig コマンドを使用して現在のシステムのネットワーク インターフェイス情報を表示できます。
ifconfig
Linux では、ネットワーク インターフェイスのソケット アドレス構造は で定義されます。 < ;linux/if.h>
ヘッダー ファイル内で、プログラマは、socket() および binding() を呼び出して、指定されたネットワーク インターフェイスにバインドされたソケットを作成できます。簡単なコード例を次に示します。
#include <sys/types.h> #include <sys/socket.h> #include <linux/if.h> int main() { int sockfd; 構造体 sockaddr sa; sockfd = ソケット(AF_INET, SOCK_DGRAM, 0); if(sockfd < 0) { pererror("ソケット"); -1 を返します。 } 構造体 ifreq ifr; memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, "eth0"); if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (void*)&ifr, sizeof(ifr)) < 0) { perror("setsockopt"); 閉じる(sockfd); -1 を返します。 } 閉じる(sockfd); }
ソケットは、Linux プロトコル スタックのミドルウェアで、アプリケーション層とトランスポート層の間の通信の処理を担当します。 Linux では、ソケット インターフェイスは <sys/socket.h>
ヘッダ ファイルで定義されており、プログラマは、socket()、bind()、listen()、accept()、connect( )、およびソケットを作成および管理するためのその他の関数。
以下は、単純なソケットベースの Echo サーバーを実装する単純な TCP サーバーのサンプル コードです。
#<sys/types.h> を含める #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #ポート 8080 を定義 int main() { int sockfd、new_sockfd; struct sockaddr_inserver_addr、client_addr; 文字バッファ[1024]; sockfd = ソケット(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { pererror("ソケット"); -1 を返します。 } サーバー_アドレス.sin_family = AF_INET; サーバー_addr.sin_addr.s_addr = INADDR_ANY; サーバーアドレス.sin_port = htons(PORT); if(bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { pererror("バインド"); -1 を返します。 } listen(sockfd, 5); while(1) { int addrlen = sizeof(client_addr); new_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen); memset(バッファ, 0, sizeof(バッファ)); read(new_sockfd, バッファ, sizeof(buffer)); write(new_sockfd, バッファ, strlen(buffer)); 閉じる(new_sockfd); } 閉じる(sockfd); 0を返します。 }
以上がLinux プロトコル スタックの主要コンポーネントの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。