프로그래밍/예전글

소켓의 프로토콜 (socket함수를 파헤쳐보자)

Cat체셔 2010. 8. 16. 15:08

프로토콜이란?
 - 멀리 떨어져 있는 두 사람이 대화를 주고받기 위해서는 나름의 대화방법을 결정해야 하는데, 여기서 결정하는 대화방법을 프로토콜이라고 한다. 즉, '컴퓨터 상호간의 통신에 필요한 규약.'이라고 할 수 있다.


SOCKET socket(int af, int type, int protocol);
 - af(linux에선 domain) : 소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달.
 - type                        : 소켓의 데이터 전송방식에 대한 정보 전달.
 - protocol                  : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달.


프로토콜 체계(첫 번째 인자값)
 - PF_INET       : IPv4 인터넷 프로토콜 체계
 - PF_INET6     : IPv6 인터넷 프로토콜 체계
 - PF_LOCAL   : 로컬 통신을 위한 UNIX 프로토콜 체계
 - PF_PACKET : Low Level 소켓을 위한 프로토콜 체계
 - PF_IPX         : IPX 노벨 프로토콜 체계


소켓의 타입(두 번째 인자값)
 - SOCK_STREAM(연결지향형 소켓)
      - 특징 : 중간에 데이터가 소멸되지 않고 목적지로 전송된다.
                : 전송 순서대로 데이터가 수신된다.
                : 전송되는 데이터의 경계(Boundary)가 존재하지 않는다.
      - 신뢰성 있는 순차적인 바이트 기반의 연결지향 데이터 전송 방식의 소켓

 - SOCK_DRAM(비 연결지향형 소켓) : 
      - 특징 : 전송된 데이터는 손실의 우려가 있고, 파손의 우려가 있다.
                : 전송되는 데이터의 경계(Boundary)가 존재한다.
                : 한번에 전송할 수 있는 데이터의 크기가 제한된다.
      - 신뢰성과 순차적 데이터 전송을 보장하지 않는 고속의 데이터 전송을 목표로 하는 소켓


프로토콜(세 번째 인자값)
 솔직히 첫번째와 두번째 인자값만으로도 충분히 우리가 원하는 유형의 소켓을 만들 수 있다. 그렇기 때문에 이 인자값에 0을 넣어주어도 상관이 없다. 하지만 한 가지 예외가 생긴다. 그 예외가 바로 하나의 프로토콜 체계 안에 데이터의 전송방식이 동일한 프로토콜이 둘 이상 존재하는 경우가 생길지도 모른다는 것이다. 그것을 구분해 주는 것이 바로 아래의 인자값들이다.
 - IPPROTO_TCP : 연결지향형 데이터 소켓.
 - IPPROTO_UDP : 비연결지향형 데이터 소켓.