인터넷 프로토콜 제품군(Internet Protocol Suite) 은 인터넷 및 유사한 컴퓨터 네트워크에서 사용되는 개념적 모델 및 통신 프로토콜 집합이다. 제품군의 기본 프로토콜은 TCP (Transmission Control Protocol) 및 IP (Internet Protocol)이기 때문에 일반적으로 TCP / IP 라고 한다.
소켓
소켓이란?
네트워크 소켓은 컴퓨터 네트워크의 노드 내에서 데이터를 보내거나 받는 내부 끝점(endpoint)을 의미한다.
리눅스에서 소켓은 I/O 인터페이스의 한 종류이며 네트워크 프로그래밍의 가장 기본적인 부분을 담당한다.
리눅스 소켓의 구분
도메인 분류 (범위)
네트워크 도메인 소켓 - 네트워크 주소 (IP/PORT)를 통해 통신
유닉스 도메인 소켓 - 시스템(호스트)내에서 파일 경로를 통해 통신
타입 분류
스트림 소켓 - TCP, 연결 지향형, 연결 필요
데이터그램 소켓 - UDP, 비 연결 지향형, 연결 없이 데이터 전송 가능
raw 소켓 - 전송 계층 포멧없이 인터넷 프로토콜 패킷을 직접 주고 받는 소켓 (프로토콜 헤더 포함)
응용 계층에서는 사용자 데이터만 바라보고, 전송 계층에서는 TCP 헤더와 데이터,
네트워크 계층에서는 IP 헤더, TCP 헤더, 데이터를 바라보는데,
raw 소켓의 의미는 각 계층에서 IP 헤더, TCP 헤더, 데이터를 모두 바라보는 것을 의미힌다.
소켓 생성
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
socket()은 통신을 위한 엔드포인트를 생성하고 해당 엔드포인트를 참조하는 파일 디스크립터를 반환한다.
성공적인 호출에 의해 반환된 파일 디스크립터는 현재 프로세스에서 열리지 않은 가장 낮은 번호의 파일 디스크립터이다.
domin
AF_UNIX : 유닉스 도메인 소켓(AF_LOCAL)
AF_INET : IPv4 네트워크 도메인 소켓
AF_INET6 : IPv6 네트워크 도메인 소켓
type
SOCK_STREAM : TCP 스트림 소켓
SOCK_DGRAM : UPD 데이터그램 소켓
SOCK_RAW : raw 소켓
protocol
IPPROTO_IP : IP 프로토콜 사용
IPPROTO_TCP : TCP 프로토콜 사용 (SOCK_STREAM)
IPPROTO_UDP : UDP 프로토콜 사용 (SOCK_DGRAM)
IPPROTO_ICMP : ICMP 프로토콜 사용
소켓도 파일 디스크립터이므로 사용이 완료되면 close()를 이용해 닫아주어야 한다.
성공 시 새 소켓의 파일 디스크립터를 반환하고, 오류 발생 시 -1이 반환되고 errno가 설정된다.
errno
EACCESS : 권한 오류
EINVAL : protocol, type 등 인자 오류
EMFILE : 프로세스에서 열린 파일 디스크립터 개수 제한
ENFILE : 시스템에서 열린 파일 디스크립터 개수 제한
ENOBUFS : 메모리 부족
ENOMEM : 메모리 부족
바이트 순서
엔디안(바이트 순서)이란?
컴퓨팅에서 엔디안(endianness)은 숫자의 이진 표현 내에서 바이트의 순서를 나타낸다.
빅 엔디안 순서는 최상위 바이트를 가장 먼저, 최하위 바이트는 마지막에 두고,
리틀 엔디안 순서는 반대이다.
예)
시스템에서 엔디안은 CPU 종속적인 규칙이다.
빅 엔디안은 네트워킹 프로토콜 (IP, TCP, UDP)에서 기본적으로 사용되는 순서이며, RISC 프로세서 (Sparc, Motorola CPU) 들이 사용하는 방식이다.
리틀 엔디안은 인텔 호환 계열 CPU에서 사용하는 방식이다.
주의할 점은 우리가 사용하는 대부분의 컴퓨터는 인텔 호환 계열 CPU로, 내부적으로 리틀 엔디안 방식을 사용하고,
소켓 프로그래밍 시 사용되는 네트워크 프로토콜 들은 기본적으로 빅 엔디안 방식을 사용한다는 점이다.
[리눅스 개발환경] 16. 소켓 개요
TCP/IP
소켓
소켓 생성
바이트 순서
예제