首頁 >運維 >linux運維 >Linux協定堆疊中常見的網路協定及功能介紹

Linux協定堆疊中常見的網路協定及功能介紹

WBOY
WBOY原創
2024-03-21 08:33:031307瀏覽

Linux協定堆疊中常見的網路協定及功能介紹

Linux作為一個開源作業系統,其網路協定堆疊扮演著至關重要的角色,負責處理網路資料的傳輸、路由、連接管理等功能。本文將介紹Linux協定堆疊中常見的一些網路協定及其功能,並附上具體的程式碼範例。

  1. TCP協定

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;
}
  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_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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn