1. 소켓 데이터구조(자료구조)
ㅇ 인터넷 상에서 통신용 소켓은,
- 응용 프로그램이 읽고 쓸 수 있는 소프트웨어 자료 구조임
ㅇ 운영체제 커널에서 제공하는 소켓 API를 통해,
- TCP 커넥션 양측 종단에 각각 소켓 데이터 구조를 생성
ㅇ Socket 시스템 호출은,
- 운영체제 안에서 하나의 자료구조인 socket을 만들어냄
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
- IPPROTO_TCP
. SOCK_STREAM 유형에서 사용, TCP 소켓, 스트림 기반의 소켓
- IPPROTO_UDP
. SOCK_DGRAM 유형에서 사용, UDP 소켓, 데이터그램 기반의 소켓
- IPPROTO_ICMP
3. 소켓 시스템 호출(System Call)의 예들
※ ☞ 소켓 인터페이스 참조
- socket(), bind(), connect(), listen(), accept(), write(), close(), read() 등
4. 소켓 주소의 정보 표현 (구조체에 의함)
ㅇ 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]; // 사용되지 않음
}
ㅇ 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에 의함)