프로토콜과 소켓의 생성
- 컴퓨터 상호간의 데이터 송수신에 필요한 통신 규약 / 약속
- 소켓을 생성할 때 프로토콜을 지정
- 생성 함수에 3개의 프로토콜 정보를 전달해야 함
-> domain : 주소 영역(프로토콜 체계) 설정
-> type : 소켓의 통신 타입 설정
-> protocol : 통신에 사용할 프로토콜 설정
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
프로토콜 체계
- 프로토콜의 종류에 따라 부류가 나뉘는데 그 부류를 프로토콜 체계라고 부름
-> IPv4, IPv6의 차이는 주소 표현 방법의 차이
소켓의 타입
- 데이터의 전송 방식
- IPv4는 연결 지향형 소켓 타입과 비 연결 지향형 소켓 타입으로 나뉨
- 연결 지향형(SOCK_STREAM)
-> 전화처럼 서로 제대로 통화중인지 확인을 함
-> 전송 순서대로 데이터가 수신되고 중간에 데이터가 소멸되지 않음
-> 데이터의 경계가 존재하지 않음
* 데이터를 송신할 때 나눠서 보냈어도 수신할때 나눠서 받을 필요는 없음
-> 연결은 1:1의 구조를 가지면서 확인 절차를 거침
- 비연결 지향형(SOCK_DGRAM)
-> 전송 순서와 상관없이 빠른 속도의 전송을 지향
-> 데이터의 손실 및 파손의 우려가 있음
* 확인 절차가 없기 때문에 데이터에 문제가 있어도 재요청을 하지 않음
-> 데이터의 경계가 존재
-> 한번에 전송할 수 있는 데이터의 크기가 제한
- 연결 지향형은 신뢰성이 높지만 속도가 상대적으로 느리고 비연결 지향형은 그와 반대
프로토콜 설정
- 앞선 두 정보만 있어도 IPv4에서는 프로토콜을 결정하는데 충분함
-> 3번째 인자에 0을 넘겨도 원하는 소켓을 생성하는데 문제가 없음
- 하지만 세번째 정보를 전달하는 이유는 하나의 프로토콜 체계 안에 데이터의 전송방식이 다를 경우를 대비
- IPv4의 소켓 생성
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // 연결 지향형
int udp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_UDP); // 비연결 지향형
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 03-2. 주소정보의 표현 (0) | 2021.02.02 |
---|---|
열혈 TCP/IP 03-1. 소켓에 할당되는 IP주소와 PORT번호 (0) | 2021.02.02 |
열혈 TCP/IP 1-3. 윈도우 기반 구현하기 (0) | 2021.01.31 |
열혈 TCP/IP 1-2. 리눅스 기반 파일 조작하기 (0) | 2021.01.31 |
열혈 TCP/IP 1-1. 네트워크 프로그래밍과 소켓의 이해 (0) | 2021.01.26 |