1단원에서 소개한 내용을 상세히 다루는 파트
socket() 함수 설명
c
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
파라미터 3개 ; domain, type, protocol에 대해서 알아보자.
domain: 소켓이 사용할 프로토콜type: 소켓의 데이터 전송방식protocol: 세부 프로토콜 결정
이제부터, domain, type, protocol이 각각 무엇을 의미하는지 자세히 알아보자
이를 통해 파라미터를 잘 채울 수 있는 방법 또한 알 수 있게 된다.
프로토콜 결정하기 (domain)
c
PF_INEF : IPv4
PF_INEF6 : IPv6
PF_LOCAL : 로컬 통신을 위한 유닉스의 프로토콜 체계
PF_PACKET : low-level 소켓을 위한 프로토콜 체계
PF_IPX : IPX 노벨 프로토콜 체계
데이터 전송방식 (type)
PF_INEF 위주로 설명
1. 연결지향형 소켓 (SOCK_STREAM)
- 중간에 데이터가 소멸되지 않고, 목적지로 전송
- 전송 순서대로 데이터가 수신된다.
- 전송되는 데이터의 경계가 존재하지 않는다.
- read()와 write()의 호출횟수가 큰 의미가 없다.
- 100바이트를 write()로 3번 전송하고, read()로 1번 수신.
- 소켓 대 소켓의 연결은 반드시 일대일.
정리해보면, 신뢰성 있는 순차적인 바이트 기반의 연결지향형 데이터 전송방식의 소켓
2. 비 연결지향형 소켓 (SOCK_DGRAM)
- 전송된 순서에 상관없이 가장 빠른 전송 지향
- 전송된 데이터는 손실의 우려가 있고, 파손의 우려도 있다.
- 전송된 데이터의 경계가 존재
- read()와 write()의 호출 횟수가 같아야 함.
- 100바이트를 write()로 2번 전송하고, read()로 2번 수신.
- 한번에 전송할 수 있는 데이터의 크기가 제한
정리해보면, 신뢰성과 순차성을 보장하지는 않는, 고속 전송을 목적으로 하는 소켓
세부 프로토콜 (protocol)
굳이 세부 프로토콜까지 알아야 할까? 그 이유는?
- domain에서 정한 프로토콜은 넓은 의미의 프로토콜.
- 그 안에서도 다시 프로토콜이 나뉠 수 있음.
예시 : IPv4 프로토콜 체계에서 동작하는 연결지향형 데이터 전송 소켓
- IPv4 → PF_INEF
- 연결지향형 → SOCK_STREAM
- 이를 만족하는 소켓은 IPPROTO_TCP 하나