728x90

프로토콜과 소켓의 생성

- 컴퓨터 상호간의 데이터 송수신에 필요한 통신 규약 / 약속

- 소켓을 생성할 때 프로토콜을 지정

- 생성 함수에 3개의 프로토콜 정보를 전달해야 함

    -> domain : 주소 영역(프로토콜 체계) 설정

    -> type : 소켓의 통신 타입 설정

    -> protocol : 통신에 사용할 프로토콜 설정

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

 

프로토콜 체계

- 프로토콜의 종류에 따라 부류가 나뉘는데 그 부류를 프로토콜 체계라고 부름

    -> IPv4, IPv6의 차이는 주소 표현 방법의 차이

 

소켓의 타입

- 데이터의 전송 방식

- IPv4는 연결 지향형 소켓 타입과 비 연결 지향형 소켓 타입으로 나뉨

- 연결 지향형(SOCK_STREAM)

    -> 전화처럼 서로 제대로 통화중인지 확인을 함

    -> 전송 순서대로 데이터가 수신되고 중간에 데이터가 소멸되지 않음

    -> 데이터의 경계가 존재하지 않음

        * 데이터를 송신할 때 나눠서 보냈어도 수신할때 나눠서 받을 필요는 없음

    -> 연결은 1:1의 구조를 가지면서 확인 절차를 거침

- 비연결 지향형(SOCK_DGRAM)

    -> 전송 순서와 상관없이 빠른 속도의 전송을 지향

    -> 데이터의 손실 및 파손의 우려가 있음

        * 확인 절차가 없기 때문에 데이터에 문제가 있어도 재요청을 하지 않음

    -> 데이터의 경계가 존재

    -> 한번에 전송할 수 있는 데이터의 크기가 제한

- 연결 지향형은 신뢰성이 높지만 속도가 상대적으로 느리고 비연결 지향형은 그와 반대

 

프로토콜 설정

- 앞선 두 정보만 있어도 IPv4에서는 프로토콜을 결정하는데 충분함

    -> 3번째 인자에 0을 넘겨도 원하는 소켓을 생성하는데 문제가 없음

- 하지만 세번째 정보를 전달하는 이유는 하나의 프로토콜 체계 안에 데이터의 전송방식이 다를 경우를 대비

- IPv4의 소켓 생성

int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);		// 연결 지향형
int udp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_UDP);		// 비연결 지향형
728x90

+ Recent posts