본문 바로가기

CS/컴퓨터 네트워크

실습 2-1. 소켓의 프로토콜과 특성

 

*프로토콜 이란

- 개념적으로 약속의 의미

- 컴퓨터 상호간의 데이터 송수신에 필요한 통규약

- 소켓을 생성할 때 기본적인 프로토콜을 지정해야함

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

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

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

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

매개변수가 모두 프로토콜 정보와 관련이 있다

 

* 프로토콜 체계

- 프로토콜도 그 종류에 따라서 부류가 나뉘는데, 그 부류를 가리켜 프로토콜 체계라 한다.

- 프로토콜의 체계 PF_INET은 IPv4인터넷 프로토콜 체계를 의미

- 소켓함수 매개변수 중 첫번째 파라미터

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

 

* 소켓의 타입

- 데이터 전송방식을 의미하고 소켓이 생성될 때 소켓의 타입도 결정되어야 함

- PF_INET의 대표적인 소켓 타입 : 연결 지향형 소켓타입, 비 연결 지향형 소켓타입

 

- 연결 지향형 소켓(SOCK_STREAM)의 데이터 전송 특성 (e.g. TCP)

   중간에 데이터 소멸이 없음, 전송 순서대로 데이터 수신, 데이터 경계 존재하지 않음, 소켓대 소켓의 연결은 반드시 1대1 구조

   -> 독립된 별도의 전송라인을 통해서 데이터를 전달하기 때문에, 라인상 문제가 없으면 소멸 안됨

   -> 먼저 보내진 데이터가 나중에 보내진 데이터보다 무조건 먼저 도착

   -> (비유) 사탕 100개를 10개씩 나눠서 보내도 받는 사람은 100개를 한번에 받아야 봉투에 담을 수 있음

         데이터 전송 컴퓨터가 write함수를 10번써서 100바이트를 전송하면 수신 컴퓨터는 read함수를 한번 써서 100바이트 모두 수신

   -> 소켓은 내부적으로 버퍼(바이트 배열)를 가짐, 데이터 수신 쪽에 데이터 도착하자마자 read함수 호출하는 것이 아님

        버퍼가 초과되지 않는 한 데이터를 쌓아둘 수 있음

        버퍼에서 순서가 잘못된 게 없는지 확인하고 read함수 호출

   -> 보내는 측과 받는 측이 1대1로 작업을 처리해서 신뢰성 

 

- 비 연결 지향형 소켓(SOCK_DGRAM)의 데이터 전송특성 (e.g. UDP)

   전송순서 상관없이 빠른 속도 전송, 데이터 손실 파손 우려, 데이터간 경계 존재, 한번에 전송할 수 있는 데이터 크기 제한

   -> (비유) 어떤 택배가 먼저 출발했는지 상관없이 먼저 도착하는 택배를 받음. 택배 파손 손실 우려가 있으며 실을 수 있는 무게 제한

   -> 두번에 나눠서 보낸 데이터는 두번에 나눠서 수신

   -> 신뢰성과 순차성 데이터를 보장하지 않는 고속의 데이터 전송

 

* 프로토콜의 최종선택

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

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

   여기서 첫번째 인자와 두번째 인자로만으로도 TCP임을 알 수 있기 때문에 세번째 인자에는 0을 넣어도 됨

   만약 다른 프로토콜을 사용하려면 그 프로토콜의 이름을 세번째 인자에 넣어주면 됨

 

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

int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);