프로토콜(Protocol)

Benedictus Park·2022년 12월 15일
0

TCP/IP

목록 보기
2/11
post-thumbnail

1. Protocol(프로토콜)이란?

컴퓨터끼리 데이터를 주고받기 위한 규약

2. Protocol Family(프로토콜 체계)

socket() 함수의 첫 번째 인자 위치에는 '프로토콜 체계'의 종류가 들어간다. 프로토콜 체계의 종류는 아래와 같다.

  • PF_INET / IPv4 인터넷 프로토콜 체계
  • PF_INET6 / IPv6 인터넷 프로토콜 체계
  • PF_LOCAL / 로컬 통신을 위한 UNIX 프로토콜 체계
  • PF_PACKET / 저수준 소켓을 위한 프로토콜 체계
  • PF_IPX / IPX 노벨 프로토콜 체계

이중 가장 널리 사용되는 것은 PF_INET(IPv4) 체계이다.

3. Socket의 타입

  • 연결지향형 소켓(SOCK_STREAM)
    socket() 함수의 두 번째 인자로 SOCK_STREAM을 전달하면 연결지향형 소켓이 생성된다. 특징은 아래와 같다.
    • 독립된 전송 라인을 사용하기에 데이터 무결성이 보장된다.
    • 먼저 보낸 데이터가 먼저 도착한다.
    • 전송되는 데이터 간 경계가 없다.
    • 1대1 연결만 가능하다.

전송되는 데이터 간 경계가 없다는 말은 3번의 write 호출로 100Byte의 데이터를 보내고 1번의 read 호출로 100Byte를 읽든지, 1번의 write 호출로 200Byte의 데이터를 보내고 30번의 read 호출로 200Byte를 읽든지 문제가 없다는 의미이다.

각 소켓은 내부에 버퍼를 가지고 있는데, 데이터가 수신되면 이 버퍼에 일단 저장이 된다. 그리고 '일단 저장'된 데이터를 read 함수를 통해 읽어들이는 방식으로 프로그램이 돌아가기 때문에 가능한 것이다.

  • 비 연결지향형 소켓(SOCK_DGRAM)
    socket() 함수의 두 번째 인자로 SOCK_DGRAM을 전달하면 비 연결지향형 소켓이 생성된다. 특징은 아래와 같다.
    • 빠른 전송만이 우선시된다.
    • 데이터의 순서는 무시된다.
    • 데이터 손실의 우려가 있다.
    • 전송되는 데이터에 경계가 있다.
    • 한 번에 전송할 수 있는 데이터 크기에 제한이 있다.

전송되는 데이터 간 경계가 있다는 말은 3번에 걸쳐서 전송된 데이터는 3번에 걸쳐 받아야 한다는 뜻이다.

4. socket() 함수의 마지막 인자

세부적인 프로토콜의 종류를 넣어줘야 한다. 예를 들어, socket() 함수의 두 번째 인자로 SOCK_STREAM을 넘겨줬다면 연결지향형 소켓 중 한 종류를, SOCK_DGRAM을 넘겨줬다면 비 연결지향형 소켓 중 한 종류를 택해 그에 해당하는 상수를 넣어주면 된다.

연결지향형 소켓 중 가장 일반적인 선택은 TCP(IPPROTO_TCP),
비 연결지향형 소켓 중 가장 일반적인 선택은 TCP(IPPROTO_UDP)이다.

5. 예제

  • TCP 소켓을 생성하는 문장
int tcp_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  • UDP 소켓을 생성하는 문장
int udp_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

0개의 댓글

관련 채용 정보