네트워크

[네트워크 - 윤성우의 열혈 TCP/IP] 소켓의 타입과 프로토콜의 설정

우디혜 2020. 12. 28. 22:21

프로토콜

프로토콜은 컴퓨터 네트워킹에 필요한 통신 규약이다. 즉 컴퓨터 간에 데이터를 송수신할 때 쓰이는 약속과 같다.

 

소켓의 생성

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

소켓을 생성하기 위해서는 3가지 파라미터가 필요한데,

domain은 프로토콜 체계(Protocol Family)

type은 소켓의 데이터 전송 방식

protocol은 프로토콜 방식

 

* 프로토콜 체계에는 PF_INET(IPv4 인터넷 프로토콜 체계), PF_INET6(IPv6 인터넷 프로토콜 체계) 등이 있다.

 

소켓의 타입

대부분 실무에서는 IPv4 인터넷 프로토콜 체계를 사용하는데 해당 프로토콜 체계 아래는 2가지의 데이터 전송 방식이 존재한다. 

 

연결지향형 소켓(SOCK_STREAM), TCP 소켓이라고도 불린다.

int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)
  • 전송 순서대로 데이터가 수신된다.
  • 전송되는 데이터의 경계가 존재하지 않는다.
    • write된 데이터는 바로 read되지 않고 buffer에 차곡차곡 저장되었다가 한 번에 read하게된다. 이때 한 번의 read 호출 안에서 buffer 안의 데이터를 1바이트씩 읽어내기 때문에 데이터의 경계가 없다고 표현한 것이다
    • 따라서 함수 호출 횟수는 중요하지 않기 때문에 호출 횟수에 의존해서는 안된다.
    • 호출 횟수로는 경계가 결정되지 않기 때문에, 전송되는 데이터의 양과 수신되는 데이터 양이 일치하게 코드를 작성하는 것이 중요하다.
  • 연결된 소켓의 상태를 파악하면서 데이터를 전송하기 때문에 데이터 손실이 발생하지 않는다.

- 압축 텍스트 파일 전송 혹은 은행 거래를 위한 데이터 송수신 등 데이터가 손실되면 안되는 통신에 사용된다.

 

비연결지향형 소켓(SOCK_DGRAM), UDP 소켓이라고도 불린다.

int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
  • 가장 빠르게 전송된 데이터 순으로 수신된다.
  • 전송되는 데이터의 경계가 존재한다.
  • 전송되는 데이터가 손실될 우려가 있다.
  • 한 번에 전송할 수 있는 데이터 크기에 제한이 있다.

- 실시간 라이브 방송과 같이 데이터 손실 우려보다 속도가 더 중요시 되는 통신에 사용된다.