1. 소켓 데이터구조(자료구조)
ㅇ 인터넷 통신을 위한, 소켓은,
- 응용 프로그램이 읽고 쓸 수 있는 소프트웨어 자료 구조임
ㅇ 소켓 자료구조 관리
- 운영체제 커널에서 제공하는, 소켓 API(소켓 시스템호출 : socket())를 통해,
- TCP 커넥션의 양측 종단 각각에, 소켓 자료구조가 생성되고 관리됨
2. 소켓의 속성에 따른 구분
ㅇ 도메인 (domain) : 소켓 통신이 존재하는 범위
- AF_UNIX : 클라이언트와 서버가 동일한 기계 내 존재
- AF_INET : IPv4 기반 인터넷 통신 (가장 흔함)
- AF_INT6 : IPv6 기반 인터넷 통신
- AF_NS : XNS 프로토콜 사용
- (이외에도, AF_IPC, AF_X25 등 여러가지가 있음)
ㅇ 유형 (type) : 통신을 하는 방식 (데이터 전달 형식)에 따른 유형
- SOCK_STREAM : 스트림 방식 (TCP)
. 가변길이의 스트림으로써, 연결지향적, 신뢰성 보장, 양방향 통신 가능
- SOCK_DGRAM : 데이터그램 방식 (UDP)
. 고정길이의 메세지로써, 비연결형, 비 신뢰성, 빠름
- SOCK_RAW : Raw 소켓
. 사용자 정의 프로토콜을 직접 다루는 소켓 (네트워크 진단용 등)
ㅇ 프로토콜 (protocol)
- IPPROTO_IP
. 기본 IP 프로토콜
- IPPROTO_TCP
. TCP 프로토콜 (주로 SOCK_STREAM과 함께 사용)
- IPPROTO_UDP
. UDP 프로토콜 (주로 SOCK_DGRAM과 함께 사용)
- IPPROTO_ICMP
. ICMP 프로토콜 (ping 등에 사용)
* 통상, socket() 시스템호출 시, 프로토콜을 0으로 두면, 운영체제가 자동 선택함
3. 소켓 관련 시스템 호출(System Call)의 例들
※ ☞ 소켓 시스템 호출 참조
- 종류 : socket(), bind(), connect(), listen(), accept(), write(), close(), read() 등
- 흐름 : socket() -> bind() -> listen() -> accept() -> read()/write() -> close()
4. 소켓 주소의 정보 표현 (구조체 기반)
ㅇ IPv4 주소 표현 : struct sockaddr_in
struct sockaddr_in
{
sa_family_t sin_family; // 주소 체계 (Address Family)
uint16_t sin_port; // 16비트 TCP/UDP 포트번호
struct sin_addr; // 32비트 IP 주소
char sin_zero[8]; // 사용되지 않음
}
ㅇ Pv4 주소 필드 : struct in_addr
struct in_addr
{
in_addr_t s_addr; // 32비트 IPv4 주소
}
※ 헤더 파일 내 정의된 자료형 정의 (POSIX)
- sys/types
. int8_t : signed 8-bit int
. uint8_t : unsigned 8-bit int (unsigned char)
. int16_t : signed 16-bit int
. uint16_t : unsigned 16-bit int (unsigned short)
. int32_t : signed 32-bit int
. uint32_t : unsigned 32-bit int (unsigned long)
- sys/socket.h
. sa_family_t : address family
. socklen_t : length of struct
- netinet/in.h
. in_addr_t : IP Address (uint32_t에 의함)
. in_port_t : Port Number (uint16_t에 의함)