열렬히.뛰기

2. 소켓 타입 & 프로토콜

네트워크 > 소켓 프로그래밍 > 소켓 프로그래밍 > 2. 소켓 타입 & 프로토콜

1단원에서 소개한 내용을 상세히 다루는 파트

socket() 함수 설명

c
#include <sys/socket.h>

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

파라미터 3개 ; domain, type, protocol에 대해서 알아보자.

  • domain : 소켓이 사용할 프로토콜
  • type : 소켓의 데이터 전송방식
  • protocol : 세부 프로토콜 결정

이제부터, domain, type, protocol이 각각 무엇을 의미하는지 자세히 알아보자

이를 통해 파라미터를 잘 채울 수 있는 방법 또한 알 수 있게 된다.

프로토콜 결정하기 (domain)

c
PF_INEF : IPv4
PF_INEF6 : IPv6
PF_LOCAL : 로컬 통신을 위한 유닉스의 프로토콜 체계
PF_PACKET : low-level 소켓을 위한 프로토콜 체계
PF_IPX : IPX 노벨 프로토콜 체계

데이터 전송방식 (type)

PF_INEF 위주로 설명

1. 연결지향형 소켓 (SOCK_STREAM)

  • 중간에 데이터가 소멸되지 않고, 목적지로 전송
  • 전송 순서대로 데이터가 수신된다.
  • 전송되는 데이터의 경계가 존재하지 않는다.
    • read()와 write()의 호출횟수가 큰 의미가 없다.
    • 100바이트를 write()로 3번 전송하고, read()로 1번 수신.
  • 소켓 대 소켓의 연결은 반드시 일대일.

정리해보면, 신뢰성 있는 순차적인 바이트 기반의 연결지향형 데이터 전송방식의 소켓

2. 비 연결지향형 소켓 (SOCK_DGRAM)

  • 전송된 순서에 상관없이 가장 빠른 전송 지향
  • 전송된 데이터는 손실의 우려가 있고, 파손의 우려도 있다.
  • 전송된 데이터의 경계가 존재
    • read()와 write()의 호출 횟수가 같아야 함.
    • 100바이트를 write()로 2번 전송하고, read()로 2번 수신.
  • 한번에 전송할 수 있는 데이터의 크기가 제한

정리해보면, 신뢰성과 순차성을 보장하지는 않는, 고속 전송을 목적으로 하는 소켓

세부 프로토콜 (protocol)

굳이 세부 프로토콜까지 알아야 할까? 그 이유는?

  • domain에서 정한 프로토콜은 넓은 의미의 프로토콜.
  • 그 안에서도 다시 프로토콜이 나뉠 수 있음.

예시 : IPv4 프로토콜 체계에서 동작하는 연결지향형 데이터 전송 소켓

  1. IPv4 → PF_INEF
  2. 연결지향형 → SOCK_STREAM
  3. 이를 만족하는 소켓은 IPPROTO_TCP 하나