*프로토콜 이란
- 개념적으로 약속의 의미
- 컴퓨터 상호간의 데이터 송수신에 필요한 통규약
- 소켓을 생성할 때 기본적인 프로토콜을 지정해야함
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain : 소켓이 사용할 프로토콜 체계 정보 전달
type : 소켓의 데이터 전송방식에 대한 정보 전달
protocol : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달
매개변수가 모두 프로토콜 정보와 관련이 있다
* 프로토콜 체계
- 프로토콜도 그 종류에 따라서 부류가 나뉘는데, 그 부류를 가리켜 프로토콜 체계라 한다.
- 프로토콜의 체계 PF_INET은 IPv4인터넷 프로토콜 체계를 의미
- 소켓함수 매개변수 중 첫번째 파라미터
PF_INET | IPv4 인터넷 프로토콜 체계 |
PF_INET6 | IPv6 인터넷 프로토콜 체계 |
PF_LOCAL | 로컬 통신을 위한 UNIX 프로토콜 체계 |
PF_PACKET | LOW LEVEL 소켓을 위한 프로토콜 체계 |
PF_IPX | IPX 노벨 프로토콜 체계 |
* 소켓의 타입
- 데이터 전송방식을 의미하고 소켓이 생성될 때 소켓의 타입도 결정되어야 함
- PF_INET의 대표적인 소켓 타입 : 연결 지향형 소켓타입, 비 연결 지향형 소켓타입
- 연결 지향형 소켓(SOCK_STREAM)의 데이터 전송 특성 (e.g. TCP)
중간에 데이터 소멸이 없음, 전송 순서대로 데이터 수신, 데이터 경계 존재하지 않음, 소켓대 소켓의 연결은 반드시 1대1 구조
-> 독립된 별도의 전송라인을 통해서 데이터를 전달하기 때문에, 라인상 문제가 없으면 소멸 안됨
-> 먼저 보내진 데이터가 나중에 보내진 데이터보다 무조건 먼저 도착
-> (비유) 사탕 100개를 10개씩 나눠서 보내도 받는 사람은 100개를 한번에 받아야 봉투에 담을 수 있음
데이터 전송 컴퓨터가 write함수를 10번써서 100바이트를 전송하면 수신 컴퓨터는 read함수를 한번 써서 100바이트 모두 수신
-> 소켓은 내부적으로 버퍼(바이트 배열)를 가짐, 데이터 수신 쪽에 데이터 도착하자마자 read함수 호출하는 것이 아님
버퍼가 초과되지 않는 한 데이터를 쌓아둘 수 있음
버퍼에서 순서가 잘못된 게 없는지 확인하고 read함수 호출
-> 보내는 측과 받는 측이 1대1로 작업을 처리해서 신뢰성
- 비 연결 지향형 소켓(SOCK_DGRAM)의 데이터 전송특성 (e.g. UDP)
전송순서 상관없이 빠른 속도 전송, 데이터 손실 파손 우려, 데이터간 경계 존재, 한번에 전송할 수 있는 데이터 크기 제한
-> (비유) 어떤 택배가 먼저 출발했는지 상관없이 먼저 도착하는 택배를 받음. 택배 파손 손실 우려가 있으며 실을 수 있는 무게 제한
-> 두번에 나눠서 보낸 데이터는 두번에 나눠서 수신
-> 신뢰성과 순차성 데이터를 보장하지 않는 고속의 데이터 전송
* 프로토콜의 최종선택
- IPv4 인터넷 프로토콜 체계에서 동작하는 연결 지향형 데이터 전송 소켓
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
여기서 첫번째 인자와 두번째 인자로만으로도 TCP임을 알 수 있기 때문에 세번째 인자에는 0을 넣어도 됨
만약 다른 프로토콜을 사용하려면 그 프로토콜의 이름을 세번째 인자에 넣어주면 됨
- IPv4 인터넷 프로토콜 체계에서 동작하는 비 연결 지향형 데이터 전송 소켓
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
실습 3-2. 주소정보 표현, 인터넷 주소 변환 (0) | 2020.04.07 |
---|---|
실습 3-1. 소켓에 할당되는 IP주소와 PORT 번호 (0) | 2020.04.07 |
5. 프로토콜 레이어 아키텍처와 서비스 모델 (0) | 2020.04.07 |
4. 네트워크의 delay, loss, throughput (0) | 2020.04.07 |
실습 1-3. 저수준 파일 입출력과 파일 디스크립터 (0) | 2020.04.07 |