본문 바로가기
Programming/Linux C/C++

소켓의 타입과 프로토콜의 설정

by 개Foot/Dog발?! 2014. 9. 1.

URL : http://christin2.tistory.com/25


소켓의 생성


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

- domain : 소켓이 사용할 프로토콜 체계 정보 전달

- type : 소켓의 데이터 전송방식에 대한 정보 전달

- protocol : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달

ref URL : http://forum.falinux.com/zbxe/?mid=C_LIB&document_srl=429387&sort_index=readed_count&order_type=desc

ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/socket


프로토콜 체계(Protocol Family)

: 생성되는 소켓이 사용할 프로토콜의 부류 정보

: 소켓 생성의 첫 번째 인자



소켓의 타입(Type)

: 소켓의 데이터 전송 방식을 의미

: 소켓 생성의 두 번째 인자


1. 연결지향형 소켓(SOCK_STREAM) : 신뢰성 있는 순차적인 바이트 기반의 연결지향 데이터 전송 방식의 소켓

 ∙ 특성

  - 중간에 데이터가 소멸되지 않고 목적지로 전송됨

  - 전송 순서대로 데이터가 수신됨

  - 전송되는 데이터의 경계가 존재하지 않음

 * read 함수의 호출 횟수와 write 함수의 호출 횟수는 연결지향형 소켓의 경우 큰 의미를 갖지 못함

 * 소켓 대 소켓의 연결은 반듯이 1:1이어야 함

** TCP 프로토콜을 사용하는 것

 

2. 비 연결지향형 소켓(SOCK_DGRAM) : 신뢰성과 순차적 데이터 전송을 보장하지 않는, 고속의 데이터 전송을 목적으로 하 는 소켓

 ∙ 특성

  - 전송된 순서에 상관없이 가장 빠른 전송을 지향함

  - 전송된 데이터는 손실의 우려가 있고, 파손의 우려가 있음

  - 전송되는 데이터의 경계가 존재

  - 한 번에 전송할 수 있는 데이터의 크기가 제한됨

 ** UDP 프로토콜을 사용하는 것



프로토콜의 최종선택

: 소켓의 데이터 전송방식은 같지만, 그 안에서도 프로토콜이 다시 나뉘는 상황에서 세 번째 인자를 통해 더 구체화


Ex)

IPv4 인터넷 프로토콜 체계에서 동작하는 연결지향형 데이터 전송 소켓

int tcp_socket = socket ( PF_INET, SOCK_STREAM, IPPROTO_TCP );

IPv4 인터넷 프로토콜 체계에서 동작하는 비 연결지향형 데이터 전송 소켓

int ucp_socket = socket ( PF_INET, SOCK_DGRAM, IPPROTO_UCP );