소켓통신

프로그램과 프로그램과의 통신.
(인터넷에서 통신하느냐, 컴퓨터 내에서 통신하느냐에 등등 사용영역에 따라 다름)

소켓 생성

소켓을 생성한다는 의미는 호스트가 통신을 하기 위해 필요한 리소스를 할당하는 것을 의미.

 

함수 원형

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

  • domain : 소켓의 사용영역 정의.
  • type : 소켓이 데이터를 전송하는데 있어서 사용하게 되는 전송 타입을 설정.
  • protocol : 두 호스트간에 통신을 하는데 있어서 특정 프로토콜을 지정하기 위해 사용.

 

리턴 값

성공 : file descriptor

실패 : -1

 

@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 을 입력해도 자동으로 소켓은 생성된다.

세번째 인자값의 활용

  • 하나의 프로토콜 체계 안에서 데이터 전송타입까지 같지만 최종적으로 통신하는 형태가 다른,
    즉 전송 타입은 같지만 그 안에서도 프로토콜이 또 다시 나뉘는 상황에서 이 세번째 인자가 유용한 인자가 된다.
    즉 세번째 인자는 프로토콜을 조금 더 구체화 하기위해 사용된다.

 

 

socket 함수는 위에서 다루었고, 나머지 함수에 대해 아주 간략하게 정리하겠습니다.
bind 함수는 소켓에 IP와 port를 지정해줘서 소켓을 통신에 사용할 수 있도록 준비해줍니다.
listen함수는 client로부터 연결 요청을 대기열에 넣어주는 함수입니다.
accept함수는 대기열에 있는 접속 요청을 받아들이고, client와 통신하는 전용 소켓을 생성합니다.
connect 함수는 서버로 접속을 요청하는 함수입니다.


[참조] 나머지함수 설명은 아래주소에서 참조하세요

http://forum.falinux.com/zbxe/index.php?document_srl=430926&mid=C_LIB


'미분류' 카테고리의 다른 글

codegate vuln - 300  (0) 2015.11.27
PEDA 튜토리얼  (0) 2015.11.27
LOB fedora  (0) 2015.11.09
socketaddr / sockaddr_in  (0) 2015.11.01
White hat 2015 [write-up]  (0) 2015.10.30

+ Recent posts