오픈 소스 운영 체제인 Linux의 네트워크 프로토콜 스택은 네트워크 데이터 전송, 라우팅, 연결 관리 및 기타 기능을 처리하는 중요한 역할을 합니다. 이 기사에서는 Linux 프로토콜 스택의 몇 가지 일반적인 네트워크 프로토콜과 해당 기능을 소개하고 특정 코드 예제를 첨부합니다.
TCP(전송 제어 프로토콜)는 연결 지향적이고 안정적인 바이트 스트림 기반 전송 프로토콜입니다. 데이터 무결성 검증, 흐름 제어, 혼잡 제어 및 기타 기능을 제공하여 안정적인 데이터 전송을 보장합니다.
다음은 클라이언트-서버 통신에 TCP 프로토콜을 사용하는 간단한 예입니다.
// TCP client #include#include #include #include 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#include #include #include 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(사용자 데이터그램 프로토콜)는 연결이 없고 신뢰할 수 없는 전송 프로토콜입니다. 보장되지 않으며 실시간 요구 사항이 높은 일부 시나리오에 적합합니다.
다음은 클라이언트-서버 통신에 UDP 프로토콜을 사용하는 간단한 예입니다.
// UDP client #include#include #include #include int main() { int sockfd; struct sockaddr_in server_addr; char buffer[1024]; sockfd = socket(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, "Hello, server!", strlen("Hello, server!"), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)); recv(sockfd, buffer, sizeof(buffer), 0); printf("%s ", buffer); close(sockfd); return 0; }
// UDP server #include#include #include #include int main() { int sockfd; struct sockaddr_in server_addr, client_addr; char buffer[1024]; sockfd = socket(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); bind(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 ", buffer); sendto(sockfd, "Hello, client!", strlen("Hello, client!"), 0, (struct sockaddr*)&client_addr, addr_len); close(sockfd); return 0; }
TCP 및 UDP 프로토콜 외에도 Linux 프로토콜 스택은 IP 프로토콜, ICMP 프로토콜, ARP 프로토콜 등과 같은 네트워크 프로토콜도 지원합니다. , 함께 구성되어 완벽한 네트워크 통신 시스템을 제공하고 애플리케이션에 풍부한 네트워크 통신 기능을 제공합니다. 이러한 네트워크 프로토콜을 배우고 이해함으로써 우리는 네트워크 프로그래밍을 위해 Linux 운영 체제를 더 잘 활용하고 효율적이고 안정적인 네트워크 애플리케이션을 구축할 수 있습니다.
위 내용은 Linux 프로토콜 스택의 일반적인 네트워크 프로토콜 및 기능 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!