프로토콜 체계와 소켓 타입(TCP/UDP)


네트워크 프로그램을 할 때 가장 핵심이 되는 것이 소켓이다.

수년 전에도 지금도 socket을 이용하여 컴퓨터, 각종 디바이스( 핸드폰, 테블릿 등)와 데이터를 송수신을 한다.

이런 socket을 생성할 때 2가지 중요한 정보를 입력 하는데 그것이 바로 프로토콜 체계와 소켓을 타입이다.

오늘은 두 가지 중요한 정보에 대해 설명 하도록 하겠다. 


프로토콜 체계


포로토콜(protocol)이란 컴퓨터 간에 데이터를 주고 받는 방식이다.

즉 각 컴퓨터 간 서로 데이터를 주고 받기 위해서 정의해 놓는 약속을 뜻한다.

이러한 규약을 정해 놓지 않으면 내가 의도한 것과 다르게 상대 컴퓨터에서 이해를 다르게 할 수 있다.


소켓 통신을 할 때 사용하는 프로토콜 부류가 몇가지 있다. 

이러한 부류를 프로토콜 체계라고 하며 c에서 소켓을 생성 할 때 다음과 같이 함수를 호출 할 때 첫 번째 인자에 프로토콜 부류를 넣는다.


#include <sys/socket.h>

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


프로토콜 부류 종류는 아래와 같다.

 이름

프로토콜 체계(Protocol Family) 

 PF_INET     IPv4 인터넷 프로토콜 체계

 PF_INET6

 IPv6 인터넷 프로토콜 체계 

 PF_LOCAL

 로컬 통신을 위한 UNIX 프로토콜 체계 

 PF_PACKET

 Low Level 소켓을 위한 프로토콜 체계 

 PF_IPX

 IPX 노벨 프로토콜 체계 



주소 체계


C에서는 소켓을 생성 후 bind나 connect 할 때 주소 구조체에 주소 체계를 넣어 준다.

Python에서는 프로토콜 체계를 넣지 않고 아래 처럼 주소 체계만 넣어 준다.


serverSocket = socket(AF_INET, SOCK_STREAM)


주소 체계의 종류는 다음과 같다.



 이름

주소 체계(Address Family) 

 AF_INET     IPv4 인터넷 프로토콜 체계

 AF_INET6

 IPv6 인터넷 프로토콜 체계 

 AF_LOCAL

 로컬 통신을 위한 UNIX 프로토콜 체계 



소켓 타입(TCP/UDP)


소켓 타입은 데이터 전송 방식을 의미 하며 socket 함수 호출 시 2번 째 인자에 값을 넣는다.


[C 예제]

#include <sys/socket.h>

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


[Python 예제]

serverSocket = socket(AF_INET, SOCK_STREAM)


대표적인 소켓의 타입은 아래와 같다.


 TCP

 UDP

 연결 지향형 소켓

 비 연결 지향형 소켓 

 SOCK_STREM

 SOCK_DGRAM 

 데이터 손실 없이 목적지로 전송

 데이터 손실 우려가 있다. 

 전송 순서대로 데이터가 수신 된다.

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

 데이터 경계 없음

 데이터 경계 존재 




반응형

+ Recent posts