표현 계층(Presentation Layer)은 응용 프로세스 사이에 전송되는 메시지의 표현 방법을 다룬다. 즉, 표현 계층 프로토콜의 전송 메시지에 표현된 문법(Syntax)내용을 통신 양단의 프로세스가 해석하는 기능을 제공함으로써, 송신 프로세스가 전달하는 의미(Semantic)를 수신 프로세스에서 정확히 이해할 수 있게 한다.
데이터 표현
일반적으로 응용 환경에서 데이터를 표현하는 방법은 컴퓨터마다 다르다.
ex) 문자를 표현하는 방법은 ASCII 코드와 EBCDIC 코드를 사용하는 방법으로 나뉘는데, 서로 다른 코드를 사용하는 컴퓨터 끼리 통신하려면 문자 코드를 변환하는 과정이 필요하다.
추상 문법
- 컴퓨터에서 사용하는 데이터 표현 규칙인 추상 문법(Abstract Syntax)으로 표현된 의미를 올바르게 송수신하려면 메시지를 전송하기 전에 변환해야 한다. 즉, 특정 컴퓨터에 독립적이면서 네트워크 전체에서 일관성 있는 새로운 표현 규칙인 전송 문법(Transfer Syntax)으로 변환하여 전송한다.
- 전송 선로를 통해 교환되는 데이터는 공통의 표현 규칙인 전송 문법으로 표현된다. 반대로 네트워크에서 데이터를 수신할 때는 전송 문법의 데이터를 자신이 이해하는 추상 문법으로 변환한다.
ASN.1
ISO는 분산 환경에서 표현되는 데이터를 정의하기 위한 일반적인 추상 문법으로 ASN.1(Abstract Syntax Notation Number 1)을 정의하였다. ASN.1은 응용 환경에서 폭넓게 사용된다.
PASCAL, C 언어용 코드를 생성하는 ASN.1 컴파일러도 존재한다.
ASN 규격은 응용 계층의 문법 규칙뿐 아니라, PDU(Protocol Data Unit)의 구조를 정의하도록 만들어졌다. ASN.1의 기본 목적은 변수 선언과 관련된 데이터형의 정의인데, 일반 프로그래밍 언어에서 사용하는 방식과 비슷한 문법 형식을 지원한다.
ASN.1 규약에서는 네가지 유형의 클래스를 지원한다.
유형 | 설명 |
UNIVERSAL | 일반 데이터형 |
CONTEXT-SPECIFIC | 특정 컨텍스트와 관련된 유형 |
APPLICATION | 응용 개체의 공통 유형 |
PRIVATE | 사용자 정의 유형 |
ASN.1의 UNIVERSAL 클래스
UNIVERSAL 클래스는 일반 데이터형을 정의한다. 이와 관련된 데이터는 기본형(Primitive)과 구조형(Constructured)으로 나뉜다.
기본형
변수형 | 의미 |
BOOLEAN | 참, 거짓 |
INTEGER | 정수형 숫자 |
BITSTRING | 비트들의 연속 |
OCTSTRING | 옥텟들의 연속 |
IA5String/GraphString | - |
NULL | 변수형 미정의 |
ANY | 변수형을 다른 곳에서 정의 |
- 기본형은 BOOLEAN, INTEGER 등의 단위형과 단위형의 연속적인 배열인 연속형(string)으로 구성된다.
- NULL은 변수형을 정의하지 않은 경우에 사용되며, ANY는 변수형이 다른 곳에서 정의되는 경우에 사용된다.
구조형
변수형 | 의미 |
SEQUENCE | 순서대로 나열한 임의 유형의 집합 (고정 크기) |
SEQUENCEOF | 순서대로 나열한 동일 유형의 집합 (고정/가변 크기) |
SET | 순서 없이 나열한 임의 유형의 집합 (고정 크기) |
SETOF | 순서 없이 나열한 동일 유형의 집합 (고정/가변 크기) |
CHOICE | 미리 정의된 유형 집합에서 선택한 순서가 없는 유형 집합 (고정 크기) |
- UNIVERSAL 클래스의 또다른 유형인 구조형은 기본형이나 다른 구조형을 하나 이상 조합해 정의한다.
- C 프로그래밍 언어의 구조체와 같은 역할을 한다.
ASN.1의 태그
구조형에 선언된 변수를 개별적으로 사용하려고 태깅(Tagging)기능을 지원한다. 태깅 기능을 사용하려면 각 변수에 태그(Tag)를 부여해야 하는데, 이는 일반 프로그래밍 언어의 배열에서 사용하는 인덱스와 기능이 유사하다.
태그의 세 가지 선언 방법
- CONTEXT-SPECIFIC : 태그의 범위가 현재 구조형에 한정되어 적용됨.
- APPLICATION : 태그의 범위가 전체 응용 컨텍스트에 적용됨.
- PRIVATE : 태그의 범위가 해당 사용자에게 적용됨.
데이터 압축과 보안
- 표현 계층에서 다루는 기능에는 전송되는 데이터의 양과 관련된 부분이 있다. 전송 데이터 양이 많으면 그대로 송신하는 것보다 원래 의미를 유지하는 범위 내에서 크기를 줄이는 것이 효율적이다. 표현 계층은 이를 위해 압축(Compression)기능을 수행한다.
- 최근 많은 응용 프로그램에서 필요한 암호화(Encryption) 기능도 표현 계층에 속한다. 암호화는 데이터를 송수신하는 당사자 외의 제3자에게 부당하게 정보가 유출되거나 왜곡되는 현상을 방지한다. 특히 모든 사람에게 개방적인 현대 인터넷 환경에서는 보안이 아주 중요하다.
데이터 압축
- 네트워크 사용작에게 전송되는 데이터의 신뢰성과 함께 전송 속도도 중요한 고려 사항이다.
- 인터넷 환경에서는 대용량 멀티미디어 데이터를 많이 다룬다. 특히 대용량 실시간 데이터는 전송할 때 데이터의 신뢰성보다 시간 특성이 더 강조된다.
- 대용량 데이터는 압축하여 크기를 줄인 후 전송하는 것이 전송 속도 면에서 유리하다. 데이터의 압축 정도는 원래 데이터 패턴에 영향을 받는데, 중복 정보가 많으면 압축률이 높지만 그렇지 않은 경우는 낮다.
- ex) 이미 압축된 데이터를 다시 압축하는 것은 무의미 하다. 압축된 데이터의 내용에는 중복 정보가 더 이상 없다고 보아야 하기 때문이다.
- 동일한 데이터에 어떤 알고리즘을 적용하느냐에 따라 압축률이 달라진다. 이는 원래 데이터에 포함된 정보의 특성을 미리 알면 더 효과적으로 압축할 수 있다는 의미이다. 따라서 일반적으로 가장 좋은 압축 알고리즘이란 없으며, 데이터의 특성에 맞는 알고리즘을 사용하는 것이 중요하다.
연속 문자 압축의 예
- a는 T라는 문자를 모자이크 형태로 형상화한 정지 영상 데이터이다. 가로 18바이트, 세로 10바이트 크기의 도화지에 X와 O 문자를 사용해 T문자를 그림 형식으로 표현했다. 이 데이터를 압축없이 전송하면 단순한 산술 계산으로도 18*10 = 180 바이트의 데이터를 전송해야 한다.
- X와 O 문자가 특정 위치에서 반복되고 있는데 특정 문자가 몇 번 반복된다는 표현 기법을 사용하여 압축하면, 원래 의미를 유지하면서 데이터 크기를 줄일 수 있다.
- 데이터를 압축하는 알고리즘은 간단한 방식으로 구현할 수 있다. send data라는 구조체를 정의하고 Patter 변수는 원래 데이터에 포함된 문자의 코드값의 a는 X, O 문자의 코드값을 , Count 변수는 해당 문자 패턴이 연속해서 몇 번 반복하는지를 나타낸다.
struct send_data { // 그림 크기를 18*10로 가정, 크기는 3바이트
char pattern; // 원래 데이터에 포함된 임의의 패턴
short count; // pattern에 보관된 데이터의 반복 횟수
}
- a 데이터를 압축한 데이터 패턴은 b와 같다. 첫 번째 행부터 마지막 행까지 왼쪽에서 오른쪽으로 임의의 패턴이 몇 번 반복하는지를 순서대로 기록한 것이며, 압축 데이터는 send_data 구조체의 크기인 3바이트의 정보가 19행으로 표시된다. 따라서 크기는 3 * 19 = 57바이트이고, 원본 데이터보다 180 - 57 = 123 바이트 줄었다. 한편 압축 데이터으 ㅣ내용에는 {O, 2, X, 16}의 내용이 여러번 반복되는데, 이 내용은 다시 적절한 알고리즘을 사용해 추가로 압축할 수 있다.
- b와 같은 압축 데이터를 이용해 a와 같은 원본 데이터를 얻는 과정을 압축해제(Decompression)라 한다. 압축 해제 과정은 b의 내용을 토대로 18*10의 밑그림 위에 pattern의 내용을 count만큼씩 표시하는 것으로 a를 복원할 수 있다.
- 데이터 압축 알고리즘은 동일 패턴이 많이 반복되는 데이터를 압축할 때는 매우 효과적이지만 동일 패턴이 없으면 압축 데이터가 오히려 커질 수 있다. 따라서 압축 효율은 압축 알고리즘과 원래 데이터의 상관 관계에 영향을 받는다.
손실 비손실 데이터 압축
- 데이터를 압축하는 유형에는 비손실 압축과 손실 압축이 있다.
- 비손실 압축(Lossless Compression)은 압축 과정에서 원래 데이터의 내용을 분실하지 않는다. 즉, 압축 해제를 통해 얻은 데이터가 압축 이전의 데이터와 완전히 동일하다. 비손실 압축 알고리즘을 사용해 압축 데이터를 복원하면 원래 데이터를 얻을 수 있다.
- 손실 압축(Lossy Compression)은 압축 해제한 데이터가 원래 데이터와 동일하지 않다. 데이터 손실 정도는 응용 환경에 따라 허용 범위가 다르다.
- ex) 화상 정보나 음성 정보처럼 사람들이 감각적으로 느끼는 정보는 사용자 환경에 따라 손실 범위를 조절할 수 있는다. 원래 데이터의 손실을 허용하면서 압축하는 이유는 압축 효율을 높이기 위함이다.
- 손실 압축을 거친 압축 데이터는 압축 해제가 되었을 때, 원래 데이터를 완전히 복원할 수 없다.
- 손실 압축을 사용하는 이유는 비손실 압축에 비하여 압축 데이터의 크기가 작기 때문이다. 따라서 네트워크로 전송되는 데이터의 양도 줄게 되어 전송 효율을 높일 수 있기 때문이다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크
https://soso-hyeon.tistory.com/109
[쉽게 배우는 데이터 통신과 네트워크] CH11. 상위 계층의 이해
01 상위 계층 소개 02 세션 계층응용 환경에서 전송 계층이 제공하는 서비스를 손쉽게 이용하려면 사용자의 논리적 관점을 고려하여 단순한 사용자 인터페이스를 제공해야 한다. 1 세션 계층의
soso-hyeon.tistory.com
'CS > Network' 카테고리의 다른 글
[Chapter 12] 소켓을 이용한 네트워크 프로그래밍 (소켓의 주소 체계) (0) | 2025.02.17 |
---|---|
[Chapter 11] 상위 계층의 이해(응용 계층) (0) | 2025.02.17 |
[Chapter 11] 상위 계층의 이해(상위 계층 소개, 세션 계층) (0) | 2025.02.17 |
[Chapter 10] UDP 프로토콜(OSI TP 프로토콜) (0) | 2025.02.17 |
[Chapter 10] UDP 프로토콜(RTP 프로토콜) (0) | 2025.02.17 |