프로토콜
프로토콜은 컴퓨터 네트워킹에 필요한 통신 규약이다. 즉 컴퓨터 간에 데이터를 송수신할 때 쓰이는 약속과 같다.
소켓의 생성
int socket (int domain, int type, int protocol);
소켓을 생성하기 위해서는 3가지 파라미터가 필요한데,
domain은 프로토콜 체계(Protocol Family)
type은 소켓의 데이터 전송 방식
protocol은 프로토콜 방식
* 프로토콜 체계에는 PF_INET(IPv4 인터넷 프로토콜 체계), PF_INET6(IPv6 인터넷 프로토콜 체계) 등이 있다.
소켓의 타입
대부분 실무에서는 IPv4 인터넷 프로토콜 체계를 사용하는데 해당 프로토콜 체계 아래는 2가지의 데이터 전송 방식이 존재한다.
연결지향형 소켓(SOCK_STREAM), TCP 소켓이라고도 불린다.
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)
- 전송 순서대로 데이터가 수신된다.
- 전송되는 데이터의 경계가 존재하지 않는다.
- write된 데이터는 바로 read되지 않고 buffer에 차곡차곡 저장되었다가 한 번에 read하게된다. 이때 한 번의 read 호출 안에서 buffer 안의 데이터를 1바이트씩 읽어내기 때문에 데이터의 경계가 없다고 표현한 것이다
- 따라서 함수 호출 횟수는 중요하지 않기 때문에 호출 횟수에 의존해서는 안된다.
- 호출 횟수로는 경계가 결정되지 않기 때문에, 전송되는 데이터의 양과 수신되는 데이터 양이 일치하게 코드를 작성하는 것이 중요하다.
- 연결된 소켓의 상태를 파악하면서 데이터를 전송하기 때문에 데이터 손실이 발생하지 않는다.
- 압축 텍스트 파일 전송 혹은 은행 거래를 위한 데이터 송수신 등 데이터가 손실되면 안되는 통신에 사용된다.
비연결지향형 소켓(SOCK_DGRAM), UDP 소켓이라고도 불린다.
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
- 가장 빠르게 전송된 데이터 순으로 수신된다.
- 전송되는 데이터의 경계가 존재한다.
- 전송되는 데이터가 손실될 우려가 있다.
- 한 번에 전송할 수 있는 데이터 크기에 제한이 있다.
- 실시간 라이브 방송과 같이 데이터 손실 우려보다 속도가 더 중요시 되는 통신에 사용된다.
'네트워크' 카테고리의 다른 글
[네트워크 - 윤성우의 열혈 TCP/IP] 주소체계와 데이터 정렬 (0) | 2020.12.31 |
---|---|
[네트워크 - 윤성우의 열혈 TCP/IP] 네트워크 프로그래밍과 소켓의 이해 (0) | 2020.12.27 |