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);
(윈도우)
'[+] Information > [-] Network' 카테고리의 다른 글
[2009/05/27] 주소 체계와 데이터 정렬 (0) | 2009.05.27 |
---|---|
[2009/05/26] 예제소스(make_socket_linux.c, make_socket_win.c) (0) | 2009.05.26 |
[2009/5/24] 윈도우즈 기반으로 구현하기 (0) | 2009.05.24 |
[2009/5/24] 예제소스(low_open.c, low_read.c, fd.seri.c) (0) | 2009.05.24 |