V : 데이터 전송하기
TCP/IP 윈도우 소켓 프로그래밍 을 읽고 정리한 문서입니다 ;)
응용 프로그램 프로토콜과 데이터 전송
응용 프로그램의 고유 기능을 결정하는 부분은 데이터 처리 부분이다. 어떤 데이터를 어떤 형식으로 주고받고 어떻게 처리할지를 결정하는 것이 개발자가 할 가장 중요한 작업이다.
응용 프로그램 프로토콜은 응용 프로그램 수준에서 주고받는 데이터의 형식과 의미 그리고 처리 방식을 정의한 프로토콜이다.
또한, 이렇게 데이터를 보낼 때 클라이언트와 호스트 간 바이트 정렬을 통일시켜야 올바르게 데이터를 보내고 받을 수 있게 된다. 일반적으로 빅 엔디안 방식으로 통일시킨다.
구조체 멤버 맞춤은 구조체의 패딩을 없앰으로서 읽기 성능을 희생하여 공간 이득을 보는 방법으로서, #pragma pack(1)
을 명시하여 1바이트 경계에 맞추게끔 한다.
통신 양단이 주고받을 데이터를 구조체로 정의하는 것만으로는 충분하지 않다. TCP처럼 데이터의 경계를 구분하지 않는 프로토콜을 사용하는 경우, 이 메시지 경계를 구분하기 위한 추가 작업을 해야 한다.
데이터 경계 구분 방법
- 송신자가 항상 고정 길이 데이터를 보내는 방법
- 구현이 쉽지만 낭비가 심하다.
- 가변 길이 데이터를 보내되 끝에 EOR을 넣어 표시하는 방법
- 데이터 내부에 EOR 과 동일한 패턴이 있으면 안되며 성능이 저하된다.
- 보낼 데이터 크기를 고정 길이로 보낸 뒤 그만큼 가변 길이로 보내는 방법
- 구현이 어렵지 않으며 처리 효율도 높다.
- 송신자가 가변 길이 데이터를 보낸 뒤 연결을 바로 종료하는 방법
- 한 쪽에서 다른 쪽으로 일방적으로 보낼 때 적합하지만 효율성이 낮다.
요약
- 응용 프로그램 프로토콜
- 응용 프로그램 수준에서 주고받는 데이터의 형식과 처리 방식을 정의한 프로토콜
- 데이터 전송 시 고려 사항
- 항상 고정 길이 데이터를 보내는 방식
- 가변 길이 데이터를 보내고 끝에 EOR 을 추가하는 방식
- 고정 길이로 크기를 보내고 그만큼 가변 길이 데이터를 보내는 방식
- 가변 길이 데이터를 보내고 연결을 종료하는 방식
- 바이트 정렬
- 다른 바이트 정렬을 사용하는 시스템 사이에서 데이터를 교환할 때는 이를 통일시켜야 한다.
- 구조체 멤버 맞춤
#pragma pack
지시자를 사용하면 구조체의 멤버 맞춤 방식을 바꿀 수 있다.
'공부한 이야기 > 윈도우 소켓 프로그래밍' 카테고리의 다른 글
VII : UDP 서버-클라이언트 (0) | 2023.04.29 |
---|---|
VI : 멀티스레드 (0) | 2023.04.29 |
IV : TCP 서버-클라이언트 (0) | 2023.04.29 |
III : 소켓 주소 구조체 다루기 (0) | 2023.04.29 |
II : 윈도우 소켓 시작하기 (0) | 2023.04.29 |