글
(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을 입력해도 자동으로 소켓은 생성된다.
○ 세번째 인자값의 활용
- 하나의 프로토콜 체계 안에서 데이터 전송 타입까지 같지만 최종적으로는 통신하는 형태가 다른, 즉 전송 타입은 같지만
그 안에서도 프로토콜이 또 다시 나뉘는 상황에서 이 세 번째 인자가 유용한 인자가 된다. 즉 세 번째 인자는 프로토콜을
조금 더 구체화하기 위해서 사용된다.
'P rogramming > Socket' 카테고리의 다른 글
4. 주소정보 할당 - bind() (1) | 2012.02.29 |
---|---|
3. 주소 정보의 표현 (sockaddr / sockaddr_in) (4) | 2012.02.28 |
1. 소켓 프로그래밍의 이해 (3) | 2012.02.27 |
프로토콜 체계와 주소체계 - PF_INET, AF_INET (1) | 2012.02.27 |
데이터 송수신 함수 - send(), recv() / sendto(), recvfrom() (2) | 2011.12.01 |
RECENT COMMENT