프로토콜이란
- 개념적으로 약속의 의미를 담고 있다.
- 컴퓨터 상호간의 데이터 송수신에 필요한 통신규약
- 소켓을 생성할 때 기본적인 프로토콜을 지정해야 한다.
#include <sys/socket.h>
int socket ( int domain, int type, int protocol ) ;
성공시 파일 디스크립터, 실패시 -1 반환
domain : 소켓이 사용할 프로토콜 체계 정보 전달
type 소켓의 데이터 전송방식에 대한 정보
protocol 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달
결국 3가지 모두 프로토콜 정보와 관련있음
프로토콜 체계
소켓의 타입
- 소켓의 타입 : 데이터 전송 방식을 의미함
- 소켓이 생성될 때 소켓의 타입도 결정되어야 함
두 타입의 소켓
- 연결 지향형 소켓 TCP
중간에 데이터 소멸이 없음
전송 순서대로 데이터 수신
데이터의 경계가 존재하지 않음
소켓대 소켓의 연결은 1대 1
컨베이어 벹트를 생각하자
int tcp_socket = socket( PE_INET, SOCK_STREAM, IPPROTO_TCP );
- 비 연결지향형 소켓 UDP
전송순서 상관없이 빠른 속도의 전송
데이터 손실 및 파손의 우려
데이터의 경계 존재
한번에 전송할 수 있는 데이터의 크기가 제한
오토바이 퀵 서비스를 생각하자
int udp_socket = socket( PE_IENT, SOCK_DGRAM, IPPROTO_UDP );
※ 첫번째, 두번째 인자로 전달된 정보를 통해서 소켓의 프로토콜이 사실상 결정 되기 때문에 세번 째 인자로 0 을 전달해도 됨
인터넷 주소란
- 4 바이트 주소체계인 IPv4 와 16바이트 주소체계인 IPv6 가 있다
- 인터넷상에서 컴퓨터를 구분하는 목적으로 사용되는 주소.
- 네트워크 주소와 호스트 주소로 나뉨
- 소켓을 생성할 때 기본적인 프로토콜을 지정해야 한다.
클래스 구분
PORT 번호
- IP는 컴퓨터를 구분하는용도, PORT 번호는 소켓을 구분하는 용도
- 하나의 프로그램 내에 둘 이상의 소켓이 존재할 수 있으므로, 둘 이상의 PORT가
하나의 프로그램에 의해 할당 될 수 있음
- PORT 번호는 16비트, 0 ~ 65535
- 0 ~ 1023 은 잘 알려진 PORT 라서 이미 용도가 결정되어 있음
IPv4 구조체
struct sockaddr_in {
sa_family_t sin_family ; 주소체계 정보 저장
uint16_6 sin_port ; PORT 번호
struct in_addr sin_addr ; 32비트 IP 주소
char sin_zero[8] ; 사용되지 않음, 반드시 0으로 채워야함
}
struct in_addr {
in_addr_t s_addr ; 32비트 IPv4 인터넷 주소
}
바이트 순서와 네트워크 바이트 순서
- 빅 엔디안
상위바이트의 값을 작은 번지수에 저장
- 리틀 엔디안
상위 바이트의 값을 큰 번지수에 저장
추후 추가 설명