2014년 12월 8일 월요일

TCP/IP 소켓 프로그래밍 2강

이번에는 소켓의 타입과 프로토콜의 설정하는 법을 알아보고자 한다.
일단 프로토콜이란 무엇일까??
세상에는 수많은 컴퓨터가 있고 수많은 os가 존재한다.
이런 것이 서로 통신을 하려면 서로 약속을 해야한다.
이 통신 약속이 프로토콜이다.

처음에 소켓을 쓰려면 소켓을 생성해야했다.
이번 강에는 이 소켓 함수를 세세하게 뜯어볼려고 한다.(물론 내가 뜯어본건 아니다..;;)

소켓 생성 함수는 다음과 같다.

#include <sys/socket.h>
int socket(int domain, int type, int protocol);

domain - 소켓이 사용할 프로토콜 체계 정보 전달.
type  - 소켓의 데이터 전송방식에 대한 정보 전달.
protocol - 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달.

프로토콜의 종류(Protocol)
소켓에서 사용할 프로토콜의 종류는 다음과 같다

PF_INET - IPv4 인터넷 프로토콜 체계
PF_INET6 - IPv6 인터넷 프로토콜 체계
PF_LOCAL - 로컬 통신을 위한 UNIX 프로토콜 체계
PF_PACKET - Low Level 소켓을 위한 프로토콜 체계
PF_IPX - IPX 노벨 프로토콜 체계

이중 PF_INET 를 주로 쓴다. 현재까지는...
IPv6로 바뀌면 그걸로 바꿔서 소켓 생성하면 된다.

소켓의타입(Type)
소켓의 데이터 전송 방식을 의미한다.

SOCK_STREAM - 연결지향형 소켓
SOCK_DGRAM - 비 연결지향형 소켓

연결지향형 소켓은 다음과 같은 특징이 있다.
1. 중간에 데이터가 소멸되지 않고 목적지로 전송된다.
2. 전송 순서대로 데이터가 수신된다.
3. 전송되는 데이터의 경계가 존재하지 않는다.

비 연결지향형 소켓은 다음과 같은 특징이 있다.
1. 전송 순서에 상관없이 가장 빠른 전송을 지향한다.
2. 전송된 데이터는 손실의 우려가 있고, 파손의 우려가 있다.
3. 전송되는 데이터의 경계가 존재한다.
4. 한번에 전송할 수 있는 데이터의 크기가 제한된다.

연결지향성 소켓을 TCP방식이라고 하고, 비 연결지향성 소켓을 UDP 방식이라고 한다.

TCP 소켓을 생성하는 예제
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

UDP 소켓을 생성하는 예제
int udo_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

다음은 예제인데 이것도 예제를 다운 받아 직접 실행시켜가며 해보자 -_-;

다음 3강은 주소체계와 데이터 정렬을 알아볼 것이다~

댓글 없음:

댓글 쓰기