Protocol(프로토콜)이란, 컴퓨터 상호간의 데이터 송수신에 필요한 통신규약이며 소켓을 생성할 때 기본적인 프로토콜을 지정해야 한다.
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
- domain : 소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달
- type : 소켓의 데이터 전송방식에 대한 정보 전달
- protocol : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달
→모두 프로토콜 정보와 관련있다.
Protocol Family(프로토콜 체계)
프로토콜도 그 종류에 따라서 부류가 나뉘는데, 그 부류를 가리켜 프로토콜 체계라 한다. int domain에 들어가는 부분이다.
Type(소켓의 타입)
데이터 전송 방식을 의미한다. 소켓이 생성될 때 소켓의 타입도 결정되어야 한다.
PF_INET의 대표적인 소켓 타입
- TCP(연결 지향형 소켓 타입)
- UDP(비연결 지향형 소켓 타입)
TCP
- 중간에 데이터가 소멸되지 않는다.
- Error Control이 존재한다.
- 전송 순서대로 데이터가 수신된다.
- 소켓 대 소켓의 연결은 반드시 1대1 구조이다.
- Stream 기반으로, 대용량 Data를 한 번에 전송한다.
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
//IPPROTO_TCP : protocol number로 TCP는 6번, UDP는 17번이다.
//0으로 설정 시, default값으로 자동으로 할당된다.
UDP
- 전송순서에 상관없이 빠른 속도의 전송을 지향한다.
- 데이터 손실 및 파손의 우려가 있다.
- 한 번에 전송할 수 있는 데이터의 크기가 제한된다.(작은 data)
- Message를 기반으로 Data를 Packet단위로 나누어 보낸다.
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
//첫 번째, 두 번째 인자로 전달된 정보를 토대로 소켓의 프로토콜은 결정되기 때문에,
//세 번째 인자를 0으로 전달해도 상관없다.
'네트워크 프로그래밍' 카테고리의 다른 글
[Socket] 도메인 이름과 인터넷 주소 (0) | 2023.10.17 |
---|---|
[Socket] 소켓의 Half-Close (0) | 2022.07.29 |
[Socket] TCP기반 서버/클라이언트 (0) | 2022.07.07 |
[Socket] 주소체계와 데이터 정렬 (0) | 2022.07.07 |
[Socket] 네트워크 프로그래밍과 소켓의 이해 (0) | 2022.07.07 |