ホームページ >運用・保守 >Linuxの運用と保守 >Linux プロトコル スタックの一般的なネットワーク プロトコルと機能の概要

Linux プロトコル スタックの一般的なネットワーク プロトコルと機能の概要

WBOY
WBOYオリジナル
2024-03-21 08:33:031307ブラウズ

Linux プロトコル スタックの一般的なネットワーク プロトコルと機能の概要

オープンソース オペレーティング システムとして、Linux のネットワーク プロトコル スタックは重要な役割を果たし、ネットワーク データ送信、ルーティング、接続管理、その他の機能の処理を担当します。この記事では、Linux プロトコル スタックにおけるいくつかの一般的なネットワーク プロトコルとその機能を紹介し、具体的なコード例を添付します。

  1. TCP プロトコル

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を返します。
}
  1. UDP プロトコル

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。