응용 프로그램 프로토콜과 데이터 전송
1. 응용 프로그램 프로토콜
- 응용프로그램 프로토콜은, 응용 프로그램 수준에서 주고받는 데이터의 형식과 의미 그리고 처리 방식을 정의한 프로토콜이다.
- TCP/IP 표준 프로토콜과 비슷하나, 응용 프로그램마다 자유롭게 정의한다는 점, 즉 표준화되어있지 않다는 점이 다르다.
- 응용 프로그램 프로토콜의 기본은 "주고받을 메시지 형식"을 정하는 것이다.
ex) 그림판
[주고 받아야할 정보]
1. 직선의 시작과 끝
2. 선의 두께와 색상
struct DrawingMessage1
{
int type; // = LINE
int x1, y1; // 직선의 시작점
int x2, y2; // 직선의 끝점
int width; // 선의 두께
int color; // 선의 색상
};
- type : 보내는 쪽에서 어떤 데이터를 보낸는지 알 수 있게 표시한다.
2. 데이터 전송
- 데이터 전송시 고려사항
1) 경계 구분
- TCP처럼 메시지 경계를 구분하지 않는 프로토콜을 사용할 경우에는 응용 프로그램 수준에서 메시지 경계를 구분하기 위한 추가 작업을 해야 한다.
[경계구분의 4가지 방법]
- [고정길이 데이터] : 송신자는 항상 고정길이 데이터를 보낸다. 수신자는 항상 고정길이 데이터를 읽는다.
- 구현이 쉽지만, 적절한 고정길이를 정하는데 어려움
- 낭비하는 부분이 발생할 수 있음
- 주고 받을 데이터의 길이 변동폭이 크지않으면 편리
- [가변길이 데이터] : 송신자는 가변 길이 데이터를 보내고 끝 부분에 특별한 표시(EOR)를 붙인다. 수신자는 EOR이 나올 때까지 데이터를읽는다.
- 생성될 데이터의 길이를 미리 알 수 없을 때 사용하기 적합
- 데이터가 생성되는 즉시 곧바로 전송, 끝이라고 판단하면 EOR 전송
- 몇 가지 문제점이 있음
- 데이터 중간에 EOR과 똑같은 패턴이 들어있으면 안된다.
- 데이터를 효율적으로 수신하는 방식을 고안하지 않으면 성능이 떨어짐
- [고정 + 가변] : 송신자는 보낼 데이터를 고정 길이 데이터로 보내고, 이어서 가변 길이 데이터를 보낸다. 수신자는 고정 길이 데이터를 읽어서 뒤따라올 가변 데이터의 길이를 알아내고, 이 길이만큼 데이터를 읽는다.
- 구현도 쉽고, 처리 효율성도 높다.
- [데이터 전송 후 종료] : 송신자는 가변 길이 데이터 전송 후 접속을 정상 종료한다. 수신자느 recv()함수의 리턴 값이 0(=정상종료)이 될 때까지 데이터를 읽는다.
- 한쪽에서 다른 쪽으로 일방적으로 데이터를 보내는 경우에 적당하다.
- 데이터를 자주 전송하는 경우 비효율적
2) 바이트 정렬
- 서로 다른 바이트 정렬 방식을 사용하는 시스템 사이에 데이터를 교환할 때는 바이트 정렬 방식을 통일해야하 한다.
3) 구조체 멤버 맞춤
- 구조체 멤버 맞춤은 구조체 멤버의 메모리 시작 주소를 결정하는 컴파일러의 규칙이다.
- 예를 들면, 아래와 같은 경우 10바이트가 아닌, 16파이트가 전송된다.
정확히 10바이트를 보내고자 한다면, #pragma pack 지시자를 사용해야 한다.
'TCP-IP 윈도우 소켓 프로그래밍' 카테고리의 다른 글
[TCP/IP] 6장. 멀티 스레드 (0) | 2021.04.26 |
---|---|
[TCP/IP] 4장. TCP 서버- 클라이언트 (0) | 2021.04.09 |
[TCP/IP] 3장. 소켓 주소 구조체 다루 (0) | 2021.04.09 |
[TCP/IP] 2장. 윈도우 소켓 시작하기 (0) | 2021.04.07 |
[TCP/IP] 1장. 네트워크와 소켓 프로그래밍 (0) | 2021.04.06 |