본문 바로가기

[+] Information/[-] Network

[2009/05/26] 소켓의 생성과 프로토콜의 설정

1. 프로토콜의 정의

 - 컴퓨터(호스트) 상호간의 대화에 필요한 통신 규약
 1) 호스트 상호간에는 프로토콜에 대한 이해가 필요.

 - 프로토콜은 잘 정의되어야 하며, 혼돈의 소지가 있으면 안된다.

 - 이미 정의 되어 있는 프로토콜도 존재하며, 앞으로 우리도 많은 프로토콜을 설계 할 것이다.



2. 소켓의 생성

 
- 소켓은 기본적인 통신의 도구이다.

 - 프로토콜에 독립적이다.

 - 데이터 전송 타입을 지정 해 줘야 한다.
 1) 연결 지향 소켓, 비 연결 지향 소켓

#include <sys/type.h>
#include <sys/sockey.h>

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

 1) int domain : 프로토콜 체계 지정 부분.

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

 

* IPv4 : 4바이트로 나타내는 주소체계(2^32개)
* IPv6 : 16바이트로 나타내는 주소체계(2^128개)

 2) int type : 전송 소켓 타입 지정 부분.(연결 지향형 소켓, 비 연결 지향형 소켓)



3. 소켓의 타입

- 연결 지향형 소켓(SOCK_STREAM, TCP 소켓)
 1) 전송하는 순서대로 데이터가 전달된다.
 2) 에러나 데이터의 손실 없이 무사히 전달된다.
 3) 전송되는 데이터의 경계가 존재하지 않는다.

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



4. 프로토콜의 선택


 Case  Domain  Type  Protocol
 1  PF_INET  SOCK_STREAM  IPPROTO_TCP(0)
 2  PF_INET  SOCK_DGRAM  IPPROTO_UDP(0)




5. 윈도우즈 기반으로 구현하기

 
- 소켓의 생성
#include <sys/type.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol);
(리눅스)

#include <winsock2.h>

SOCKET socket(int af, int type, int protocol);
(윈도우)

 - 소켓의 종료

#include <unistd.h>

int close(int fildes);
(리눅스)

#include <winsock2.h>

int closesocket( SOCKET s);
(윈도우)