프로토콜(Protocol) : 컴퓨터 상호간의 데이터 송수신에 필요한 통신규약 (약속)
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
//성공시 파일 디스크립터, 실패시 -1을 반환한다.
Arguments 인자
1) PF_INET : IPv4 인터넷 프로토콜 체계
2) PF_INET6 : IPV6 인터넷 프로토콜 체계
3) PF_LOCAL : 로컬 통신을 위한 UNIX 프로토콜 체계
4) PF_PACKET : Low Level 소켓을 위한 프로토콜 체계
5) PF_IPX : IPX 노벨 프로토콜 체계
1) 연결 지향형(TCP) 소켓 타입 : SOCK_STREAM
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
//IPv4 인터넷 프로토콜 체계에서 동작하는 '연결지향형 전송 소켓'
특징 1 : 중간에 데이터가 소멸될 수 있다.
특징 2 : 전송 순서대로 데이터가 수신되지 않는다.
특징 3 : 데이터 경계가 존재하지 않는다.
특징 4 : 소켓 대 소켓의 연결은 1:1 구조이다.
2) 비연결 지향형 (UDP) 소켓 타입 : SOCK_DGRAM
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
//IPv4 인터넷 프로토콜 체계에서 동작하는 '비연결지향형 전송 소켓'
특징 1 : 데이터 손실 및 파손의 우려가 있다.
특징 2 : 데이터 경계가 존재한다.
특징 3 : 한 번에 전송할 수 있는 데이터의 크기가 제한된다.
참고 (네트워크 연결 방식 종류 - TCP가 연결지향형 소켓 타입인 이유)
1) Circuit Switching : 연결 지향 방식 - 중앙제어 및 전체 경로 설정
2) Packet Switching : 비연결 지향 방식 - 인터넷 연결 방식
2-1) TCP : (논리적) 연결 지향 방식 - 연결 setup이 되어야 전송 가능하다. (상대방이 연결되어야 한다.)
2-2) UDP : (논리적) 비연결 지향 방식 - 상대방 연결 없이도 전송 가능하다. (ex. 우편)