(1) 프로토콜의 정의
: 컴퓨터 상호간의 대화에 필요한 통신 규약.


(2) 소켓 생성
: 소켓을 생성한다는 의미는 호스트가 통신을 하기 위해 필요한 리소스를 할당하는것을 의미.

○ 함수원형
  
int socket(int domain, int type, int protocol)
 

○ 리턴 값
  성공 : file descriptor, 실패 : -1

- domain : 생성할 소켓이 통신을 하기 위해 사용할 프로토콜 체계를 설정
- type : 소켓이 데이터를 전송하는데 있어서, 사용하게 되는 전송 타입을 설정
- protocol : 두 호스트간에 통신을 하는데 있어서 특정 프로토콜을 지정하기 위해 사용


domain (프로토콜 체계)
: usr/include/sys/socket.h에 선언되어 있는 프로토콜 체계

  ○ PF_INET : IPv4 인터넷 프로토콜
  ○ PF_INET6 : IPv6 인터넷 프로토콜
  ○ PF_LOCAL : Local 통신을 위한 UNIX 프로토콜
  ○ PF_PACKET : Low level socket을 위한 인터페이스
  ○ PF_IPX : IPX 노벨 프로토콜

- 소켓을 생성할 때 환경을 고려하여 프로토콜 체계를 지정해 주면 그 환경에 사용 가능한 소켓이 생성된다.
- 즉, 소켓은 모든 프로토콜을 수용할 수 있다는 뜻. "소켓은 프로토콜에 독립적이다!"


type (소켓의 타입)
: 데이터의 전송 타입으로 SOCK_STREAM, SOCK_DGRAM이 있다.

  ○ SOCK_STREAM : 연결 지향형 소켓
    - 에러나 데이터의 손실 없이 무사히 전달.
    - 전송하는 순서대로 데이터가 전달.
    - 전송되는 데이터의 경계가 존재하지 않음.
    => 신뢰성 있는 순차적인 바이트 기반의 연결 지향 전송 타입

  ○ SOCK_DGRAM : 비연결 지향형 소켓
    - 전송되는 순서에 상관없이 가장 빠른 전송을 지향.
    - 전송되는 데이터는 손실될 수도 있고, 에러가 발생할 수 있음.
    - 전송되는 데이터의 경계가 존재.
    - 한번에 전송되는 데이터의 크기는 제한.


protocol (프로토콜의 선택)
: 호스트와 호스트 사이에 사용 할 프로토콜을 설정.

  ○ 프로토콜 체계가 PF_INET인 경우 다음과 같은 값이 올 수 있다.
    - IPPROTO_TCP : TCP를 기반으로 하는 소켓을 생성 (연결 지향형 소켓)
    - IPPROTO_UDP : UDP를 기반으로 하는 소켓을 생성 (비연결 지향형 소켓)

  ○ (PF_INET) - (SOCK_STREAM) - (TCP 소켓)(PF_INET) - (SOCK_DGRAM) - (UDP 소켓)
    - 1번째와 2번째 인자로 인해 프로토콜은 정해지는것 처럼 보인다.
    - 따라서 세번째 인자 값에 0을 입력해도 자동으로 소켓은 생성된다.

  ○ 세번째 인자값의 활용
    - 하나의 프로토콜 체계 안에서 데이터 전송 타입까지 같지만 최종적으로는 통신하는 형태가 다른, 즉 전송 타입은 같지만
     
그 안에서도 프로토콜이 또 다시 나뉘는 상황에서 이 세 번째 인자가 유용한 인자가 된다. 즉 세 번째 인자는 프로토콜을
      조금 더 구체화하기 위해서 사용된다.


 
by 민트앤라떼 2012. 2. 27. 19:20