• Tidak ada hasil yang ditemukan

데이터 송수신

N/A
N/A
Protected

Academic year: 2023

Membagikan "데이터 송수신"

Copied!
68
0
0

Teks penuh

(1)

데이터 송수신

인터넷 프로토콜 5장

(2)

목차

 제 5장 데이터의 송수신

 5.1 정수 인코딩

 5.2 메시지 생성, 프레이밍, 그리고 파싱

 5.3 마무리

(3)

5.1 정수 인코딩

 정수의 크기

 보내려는 정수의 크기를 미리 결정해야

 TestSizes.c

 바이트 순서화

 Big-endian

 Little-endian

 부호화와 부호 확장

 signed 와 unsigned

 Bruteforcecoding.c

(4)

TCP/IP 바이트 전송

TCP/IP 프로토콜은 바이트(bytes)를 전송함

응용 프로그램끼리 의미를 부여할 뿐, TCP/IP는 단지 단위 데이터를 전송

택배 기사는 내용물에 큰 의미를 부여하지 않으며 단지 택배 박스를 원 하는 곳으로 전달할 뿐

Application

TCP/IP

byte stream

Application

TCP/IP

byte stream

Here are some bytes. I don’t

know what they mean.

I’ll pass these to the app.

It knows

what to do.

(5)

전송 데이터의 자료형 (1)

문자열(String) 전송: 가변 길이 전송

 장점

사람이 읽기 쉬움

메시지의 확장이 용이하며 무제한

 단점

전송량 대비 전송 내용 비효율, 수신 루틴 비효율, 연산 비효율

 상호 협의 할 내용

문자 코드 페이지

 ASCII, Unicode, UTF

메시지 경계 구분 (프레이밍: framing)

길이 명시 방식: 전송할 문자열의 크기를 고정크기의 자료형에 담아서 전송. 수신자는 크기를 미리 파악하 고 정확한 문자열만큼 수신

구분자 방식: 널 문자 혹은 임의의 문자를 메시지의 경계에 삽입. 수신자는 바이트 단위로 읽다가 구분자 가 나오면 메시지의 끝으로 확인

(6)

전송 데이터의 자료형 (2)

문자열(String) 전송

 숫자 전송의 예

 문자 전송의 예

49 55 57 57 56 55 48 10 ‘1’ ‘7’ ‘9’ ‘9’ ‘8’ ‘7’ ‘0’ \n

M o m \n

3 77 111 109

0 77 0 111 0 109 0 10

(7)

char string[strBuffSize];

send(sock, string, strBuffSize, 0)

문자열 전송의 예(TCP)

주의점 : 버퍼의 크기

 TCP는 운영체제에 의존적인 TCP 버퍼가 있으

며 이 보다 작은 크기로 send()를 호출해야 한

다.

(8)

전송 데이터의 자료형

정수형(Integer)의 전송

기본 자료형의 단위로 전송

2바이트, 4바이트 단위의 전송

주의 사항

2바이트 이상의 데이터 전송간에는 항상 네트워크 바이트 순서로 전송해야 함

1바이트 교환은 의미가 없음

Network byte order (Big-Endian)

다중 바이트의 메시지 교환에 필수

호스트 바이트-네트워크 바이트 변환 함수들

htonl(), htons(), ntohl(), ntohs()

0 0 92 246 23,798

246 92 0 0 Big-Endian

Little-Endian

(9)

int data;

send(sock, &data, sizeof(data), 0)

정수 자료형 전송의 예(TCP)

‘short’, ‘long’, ‘double’, ‘char’도 동일한 방식

으로 처리

(10)

정수 인코딩을 직접 해보자

 BruteForceCoding.c

 byte ordering

 signedness

 각 함수들 내용 이해

(11)

TCP 소켓을 스트림으로 포장하기

 FILE stream

 FILE *fdopen( )

 int fclose( )

 int fflush( )

 size_t fwrite( )

 size_t fread( )

(12)

구조체 오버레이 : 정렬과 채우기

 실제로 구조체가 어떻 게 구현되는지 이해 필 요

 alignment를 위해 필요 한 padding 이해

 구조체와 메모리 할당 이해

최대한 정렬

 2

바이트 이상인 경우 시 작주소는 항상 2로 나누 어져야 한다

struct addressInfo {

uint16_t streetAddress;

int16_t aptNumber;

uint32_t postalCode;

} addrInfo;

streetAddress

aptNumber

postalCode

struct integerMessage { uint8_t oneByte;

uint16_t twoBytes;

uint32_t fourBytes;

uint64_t eightBytes;

};

struct integerMessage2 { uint8_t oneByte;

uint8_t padding;

uint16_t twoBytes;

uint32_t fourBytes;

uint64_t eightBytes;

};

(13)

문자열과 텍스트

 old-fashioned text

 ASCII

 “internationalizable” code

 C99 extensions

 wchar_t

 size_t wcstombs( )

 size_t mbstowcs( )

(14)

비트 조작 : , 거짓 값의 인코딩

 C 언어의 bitwise 연산자 이해 필요

 <<

 >>

 |

 &

 ~

(15)

5.2 Constructing, Framing, and Parsing

 Voting Protocol

 UDP로 구현시

 TCP로 구현시

 하나의 메시지 크기(경계)를 어떻게 판단할 것인가 하는 문제 존재

방법 1: delimiter-based

방법

2: Explicit length

 Text-based Message Encoding

 Binary Message Encoding

(16)

메시지 구성

(Message Composition)

메시지 구성이란?

응용 프로그램끼리 의미 있는 데이터 교환을 위한 형식 정의

응용 프로토콜과 같은 의미

일반적으로 프로토콜 헤더+데이터로 구성

프로토콜(메시지) 필드란?

메시지 내부에서 단위 의미를 가지는 데이터 영역

예)파일 전송을 위한 메시지 구성

파일을 상대방에게 전송하기 위해서는 파일 내용도 중요하지만 파일 이 름, 크기등과 같은 파일특성도 전달이 되어야 함

파일 전송을 위한 프로토콜 헤더 구성

아래와 같은 3개의 필드로 구성이 가능(정의에 따라 고정 혹은 가변 크기)

파일 이름, 파일 크기, 파일 퍼미션

파일 전송을 위한 프로토콜 데이터 구성

파일의 내용(항상 가변)

(17)

메시지 구성

(Message Composition)

고정길이 필드

정수형 자료형으로 구성

메시지 처리가 쉬우며 일반적으로 크기가 작음

가변길이 필드

문자열로 구성

 Human-readable하며 확장성이 좋으나 처리가 불편하고 크기가 클 수 있

고정길이 필드

가변길이 필드

integer short short

M i k e 1 2 \n

(18)

struct file_header { int fileSize;

char fileName[256];

} sndFileHdr;

send(sock, &sndFileHdr, sizeof(sndFileHdr), 0)

메시지 구성을 위한 자료형 정의

구조체 사용이 바람직함

저지르기 쉬운 실수

구조체 내부의 포인터 변수

값을 전달해야지 위치를 전달하는 것은 무의미

패딩, 정렬 문제

항상은 아니지만 가끔 일어나며 디버깅 어렵게 함

(19)

채우기(padding)의 문제

 시스템은 내부 정렬 규칙에 따라 채우기를 수행

 해결 방법

 구조체 멤버를 재배치

 명시적인 강제 채우기

struct tst { short x;

int y;

short z };

x [pad] y z [pad]

(20)

파일 전송 메시지 구성 예제 (고정 크기 메시지)

전송 방식: 고정 크기(바이너리 전송)

필요한 전송 정보

파일 이름(최대 255자 => 255byte의 메모리 공간 필요)

파일 크기(4byte의 경우 최대 4GB 크기의 파일 처리 가능)

파일 내용(가변 길이, 0~4GB 크기)

메시지 구성

FileName (255bytes) FileSize (4bytes) Filecontents (0~4GB)

메시지 헤더 메시지 데이터

struct msghdr {

char filename[255];

unsigned int filesize;

}

(21)

파일 전송 메시지 구성 예제 (문자열 메시지 )

전송 방식 : 가변 길이(문자열 전송 방식)

필요한 전송 정보

구분자 ( !$ : 임의로 결정, 단 파일 이름이나 길이에 나오지 않아야 함)

파일 이름(크기 제한 없음, 필드의 크기는 파일 이름에 따라 가변)

파일 크기(크기 제한 없음, 필드의 크기는 파일 크기에 따라 가변)

파일 내용(가변 길이, 0~4GB 크기)

메시지 구성(255bytes의 helloworld.c를 전송할 경우)

Helloworld.c!$255!$ Filecontents (0~4GB)

메시지 헤더 메시지 데이터

(22)

파일 내용의 전송

 파일 크기가 소켓 버퍼의 크기보다 크므로 아래와 같이 순차적 전송

#define BUFSIZE 1024 char fileBuf[BUFSIZE];

fp = fopen(“test.txt", "r");

if(fp == NULL)

DieWithError ("File open error");

while(1){

len=fread(fileBuf, sizeof(char), BUFSIZE, fp);

send(sock, fileBuf, len, 0);

if(feof(fp)) break;

}

(23)

파일 내용의 수신

#define BUFSIZE 1024

char fileBuf[BUFSIZE];

recvFileSize=0;

fp = fopen(“test.txt", “w");

if(fp == NULL)

DieWithError ("File open error");

while(origFileSize>recvFileSize) {

if ((recvMsgSize = recv(clntSock,fileBuf,BUFSIZE, 0)) < 0) DieWithError("recv() failed");

recvFileSize+=recvMsgSize;

fwrite(fileBuf, sizeof(char), BUFSIZE, fp);

}

(24)

과제

 기존 에코 프로그램을 수정하여 다음의 기능 을 가지는 프로그램을 작성하라

 클라이언트: 클라이언트 명령어의 두 번째 인자를 에코 문자열 대신 파일 이름으로 받아들여 파일을 서버에 전송하라

 Ex) FileClient lily.mmu.ac.kr test.txt 5000

 서버: 해당 파일은 서버의 실행파일이 존재하는 디

렉토리에 동일한 이름으로 저장되도록 한다.

(25)

좀 더 복잡한 메시지 구성

(26)

메시지 구성

 파일 전송의 예

Server Client

FileName FileSize File Contents

send(sock, FileName, 256, 0) send(sock, FileSize, 4, 0) while(feof(fd)) {

Send(sock, FileBuffer, 1024,0) }

char FileName[256];

int FileSize;

char FileBuffer[1024];

recv(clntSock, FileName, 256, 0) recv(clntSock, FileSize, 4, 0) while(notRecvfullFile()) {

recv(sock, FileBuffer, 1024,0)

}

(27)

에코와 파일 전송을 모두 지원하는 프로토콜

상황

클라이언트는 서버에게 string 혹은 파일을 업로드 할 수 있다.

서버는

string

을 받을 경우

echo

를 해주고 파일을 받을 경우

,

디스크

에 저장을 한 후 잘 받았다는 메시지를

(acknowledge)

회신한다

클라이언트는 echo메시지를 수신한 경우 ,echo 메시지를 출력하고,

file ack를 받을 경우 file ack를 출력한다

 client lily.mmu.ac.kr upload test.txt 5000 // 파일 전송

 client lily.mmu.ac.kr echo hello 5000 // 에코 메시지

(28)

메시지(프로토콜) 설계

서버와 클라이언트는 동일 프로그램으로 두 개의 다른 상황을 모두 만족해야 함

 EchoString

 File Upload

서버의 입장에서 클라이언트의 서비스 요청이 에코요청인지 파일업로드인지 구분할 수 있 는 방법은?

서비스 타입(에코 요청, 파일업로드) 필드를 준비하고 클라이언트를 이를 통해 서버에게 서비스 종류 를 알림

FileName FileSize File Contents string

Server Client

Echostring

Server Client

MsgType

(29)

바이너리 프로토콜 설계

 EchoString

 File Upload

FileName FileSize File Contents string

Server Client

Echostring

Server Client

MsgType

MsgType

MsgType

MsgType

/* Message Type */

#define EchoReq 01

#define FileUpReq 02

#define EchoRep 11

#define FileAck 12

char MsgType;

(30)

클라이언트 핵심 코드 (바이너리 프로토콜)

/* Message Type */

#define EchoReq 01

#define FileUpReq 02

#define EchoRep 11

#define FileAck 12 char MsgType;

char * operation; //client 203.252.164.144 upload test.txt 5000

operation=argv[2]

If (!strcmp(operation,”upload”)) MsgType=FileUpReq send(sock, &MsgType, 1,0)

else if (!strcmp(operation,”echo”)) MsgType=EchoReq

send(sock, &MsgType,1,0)

… else {

fprintf(stderr, "Usage: %s <Server IP> <operation><operand> <Echo Port>\n", argv[0]);

exit(1);

}

string MsgType

FileName FileSize File Contents

MsgType

(31)

서버 핵심 코드

(바이너리 프로토콜)

/* Message Type */

#define EchoReq 01

#define FileUpReq 02

#define EchoRep 11

#define FileAck 12 char MsgType;

recv(clntSock, &MsgType,1,0)

if (MsgType==FileUpReq) {

recv(clntSock, FileName, …

MsgType=FileAck;

send(clntSock, &MsgType, 1,0);

}

else if(MsgType==EchoReq) {

recv(clntSock, EchoString, … MsgType=EchoRep;

send(clntSock, EchoString,…);

}

else fprintf(stderr, “Bad request”)

string MsgType

FileName FileSize File Contents

MsgType

(32)

문자열 프로토콜 설계

 EchoString

 File Upload

FileName FileSize File Contents string

Server Client

Echostring

Server Client

MsgType

MsgType

MsgType

MsgType

/* Message Type */

#define EchoReq “EchoReq”

#define FileUpReq “FileUpReq”

#define EchoRep “EchoRep”

#define FileAck “FileAck”

char MsgType[10];

(33)

클라이언트 핵심 코드 (문자열 프로토콜)

/* Message Type */

#define EchoReq “EchoReq|”

#define FileUpReq “FileUpReq|”

#define EchoRep “EchoRep|”

#define FileAck “FileAck|”

#define Delimeter ‘|”

char msgType[10];

char * operation; //client 203.252.164.144 upload test.txt 5000

operation=argv[2]

If (!strcmp(operation,”upload”))

strcpy(msgType, FileUpReq);

send(sock, msgType, strlen(msgType),0)

else if (!strcmp(operation,”echo”))

strcpy(msgType, EchoReq);

send(sock, msgType,strlen(msgType,0)

… else {

fprintf(stderr, "Usage: %s <Server IP> <operation><operand> <Echo Port>\n", argv[0]);

exit(1);

}

string MsgType

FileName FileSize File Contents

MsgType

(34)

서버 핵심 코드 (문자열 프로토콜)

/* Message Type */

#define EchoReq “EchoReq|”

#define FileUpReq “FileUpReq|”

#define EchoRep “EchoRep|”

#define FileAck “FileAck|”

#define Delimeter ‘|”

char msgType[10], recvChar; int i=0;

while(i<10) {

recvChar=recv(clntSock, msgType[i],sizeof(char),0);

if (msgType[i]==Delimeter) break;

}

if (!(strcmp(msgType,FileReq)) {

recv(clntSock, FileName, …

strcpy(msgType,FileAck);

send(clntSock, msgType, strlen(msgType),0);

}

else if(!(strcmp(msgType, EchoReq)) {

recv(clntSock, EchoString, … strcpy(msgtype,EchoRep);;

send(clntSock, msgType, strlen(msgTytpe),0);

… }

else fprintf(stderr, “Bad request”)

string MsgType

FileName FileSize File Contents

MsgType

(35)

ASN.1 소개(1)

 a machine independent data description language

 CCITT (X.208) and ISO (ISO 8824) standard

 define abstract syntax of application data

 define the structure of application and presentation protocol data units (PDUs)

 define SNMP, VOIP and IEC61850 MMS

(36)

ASN.1 소개(2)

Application component

data transfer component (e.g, TCP, OSI

session) data transfer

component (e.g, TCP, OSI

session) Application component Local storage

(e.g, MIB)

Local storage (e.g, MIB)

User User

local mapping

user presentation mapping

user presentation mapping

Abstract Syntax (e.g., ASN.1)

local mapping

encoding rules

encoding rules

Transfer

Syntax

(e.g., BER)

(37)

ASN.1 소개(3)

 Application Entity에 대한 규격 표현에 주로 사용

 Application Entity

정보의 의미(sematics)에만 의미를 두고 정보의 표현 형식(syntax)에는 무관 함

 추상구문을 기술하기 위한 기법

 Application/Presentation Layer PDU(Protocol Data Unit) 표현

 다양한 인터페이스나 통신매체를 통하여 전 송되어야 할 정보를 기술하기 위한

INL(Interface Notation Language)로 사용

(38)

ASN.1 소개(4)

 다양한 데이터 타입들의 표현

BOOLEAN INTEGER BIT STRING OCTET STRING

NULL REAL

ENUMERATED

SEQUENCE SEQUENCE OF GeneralizedTime

IA5String

BMPString

UTF8String

(39)

BER(Basic Encoding Rules)(1)

 BER 은 전송되는 데이터가 어떻게 인코딩 되

어야 하는지를 기술

 기기특성, 프로그래밍 언어, 에플리케이션 표 현방법과 독립적

Application 1 02 01 06 Application 2

Age ::= INTEGER (0..7) firstGrade Age ::= 6

Value Length

Tag } 24 bits 전체

(40)

BER(2)

 CCITT (X.209) and ISO (ISO 8825) standard

 based on the use of a type-length-value (TLV) structure

Type Length Value

(41)

PER-Packed Encoding Rules

 BER과 마찬가지로 전송되는 데이터가 기기의 종류, 프로그래밍 언어,

어플리케이션 프로그램의 표현방법과는 독립적으로 어떻게 인코드 되어야 하는지를 기술

 BER과는 달리 기본적으로 태그는 전송 안 됨 그리고 length와 value가

종단간에 이미 약속이 되어 있다면 전송되지 않음

 PER은 전송 시 대역폭을 보다 적게 사용하기 위한 목적으로 정의되었

으며, 소리와 영상을 전송하는 인터넷, 공중파 통신과 같이 대역폭이 중요한 곳이라면 어느 곳이라도 유용하게 사용

Application 1 110 Application 2

Age ::= INTEGER (0..7) firstGrade Age ::= 6

total length of 3 bits

(42)

XER-XML Encoding Rules

 BER, PER과 마찬가지로 , 전송하기 위한 데이터의 장치의 종류, 프로그래밍 언

어 또는 어플리케이션 프로그램의 표현에 대해 독립적

축소된 규칙과는 달리 곧바로 읽기 쉽다.

좀 더 읽기 쉽게 하는데 목적이 있다.

추가 대역폭을 필요로 한다.

 BCN 등 대규모 대역폭을 갖는 환경에 적합하다.

Application 1 <Age>6</Age> Application 2

Age ::= INTEGER (0..7) firstGrade Age ::= 6

total length of 12

octets

(43)

ASN.1/인코딩 규칙 표준 문서

 ITU-T Rec. X.680 | ISO/IEC 8824-1 - Basic ASN.1 Notation

 ITU-T Rec. X.681 | ISO/IEC 8824-2 - Information Object Classes

 ITU-T Rec. X.682 | ISO/IEC 8824-3 - Constraints

 ITU-T Rec. X.683 | ISO/IEC 8824-4 - Parameterization

 ITU-T Rec. X.690 | ISO/IEC 8825-1

Basic Encoding Rules (BER)

Canonical Encoding Rules (CER) Distinguished Encoding Rules (DER)

 ITU-T Rec. X.691 | ISO/IEC 8825-2

Packed Encoding Rules (PER)

(44)

ASN.1 데이터 타입(1)

 프로그래밍 언어와 같이 미리 정의된 몇 가지 타입을 가진다.

 사용자는 ASN.1이 제공하는 기본 타입 외에 새 롭게 정의된 타입을 사용할 수 있다.

 타입 정의를 위한 일반적인 형식

<typereference> ::= <type>

 타입의 이름은 반드시 대문자로 시작해야 한 다.

 대부분의 ASN.1에서 미리 정의된 타입은 대문

자로 표기된다.

(45)

ASN.1 데이터 타입(2)

 BIT STRING

 비트의 임의의 스트링

 BOOLEAN

 True/False

 OCTET STRING

 8진수 스트링

 IA5STRING

 ASCII 스트링

 INTEGER

 임의의 정수

 REAL

 임의의 실수

 NULL

 널값

(46)

ASN.1 데이터 타입(3)

 PrintableString

프린트 가능한 스트링

 OCTET IDENTIFIER

객체를 식별하는 정수 값의 연속

 SEQUENCE

서로 다른 ASN.1 데이터 타입들의 순서적 집합

 SEQUENCE OF

동일한 타입의 순서적 집합

 SET

서로 다른 ASN.1 데이터 타입들의 비순서적 집합

 SET OF

동일한 타입의 비순서적 집합

(47)

태그(Tags)(1)

 정의된 모든 타입들은 태그를 지정 받는다.

 태그는 ASN.1에서 표준으로 지정될 수도 있 고, 사용자가 지정할 수도 있고

 태그는 두개의 부분으로 구성된다

Class Universal, Application, Private and Context Specific Number non-negative integer of arbitrary size

 태그는 PER에 의해 인코딩 되지 않는다

(48)

태그(Tags)(2)

 Universal Class

세계적으로 유일하게 지정되지 않으면 안되는 클래스

 Application Class

어떤 특정 ASN.1 모듈 속에 유일하게 정의되지 않으면 안되는 클래스

해당 클래스의 데이터 형은 어떤 특정한 응용 속에서만 사용될 태그

 Context-Specific Class

구조 형의 ASN.1 데이터 형 속에 유일하게 지정되지 않으면 클래스

해당 클래스 태그는 정의되어 있는 데이터 형 속에 의미를 가지며, 외부 에서는 의미를 갖지 않음

 Private Class

상호 합의 되어있는 어떤 특정 기업 및 단체에 속에서 유일하게 지정할 수 있는 클래스

(49)

태그(Tags)(3)

 BER

 4개의 구성요소로 구성

 Identifier Octets

 Contents Octets

 End of Contents(EOT)

 Length Octets

 Identifier Octets의 Encoding

데이터 값의 형식에 대한 태그 값을 encoding

태그 번호의 범위가 0~30이면 ID Octet은 단일 Octet으로 구성

1~5 비트 : 태그 번호

6비트 : P/C (0 : 기본요소, 1: 구조화) 7~8비트 : 태그 클래스(00, 01, 10, 11)

8비트 7비트 6비트 5비트 4비트 3비트 2비트 1비트

(50)

태그(Tags)(4)

 BER-계속

 Identifier Octets의 Encoding –계속

태그 번호가 31보다 크면 ID. Octet은 하나 이상의 다음 Octet이 따르는 선행 Octet 의로 구성

0 1

1 1

11111 P/C

태그클래스

선두 Octet

연속 Octet

태그 번호

(51)

태그(Tags)(5)

BER –계속

Length Octet

단형길이

Contents Octet의 길이를 encode하며, 최대 127개 까지 나타낼 수 있음

장형길이

초기는 길이 Octet의 길이를 나타내며, 길이 Octet은 내용 Octet의 길이를 니타

불확정 길이

Contents Octets이 EOT에 의해 끝남

ID. Octets 0 길이

Contents Octets

ID. Octets 1 초기

길이 Octet Contents Octets

00 00

10000000 ID. Octets

Contents Octets EOT

(52)

태그(Tags)(6)

 BER- 계속

Contents Octets

O 또는 하나 이상의 Octet으로 구성되며 ASN.1 데이터 값을 encode

BOOLEAN 값 encode

 ID. Octets : 1

 부호화 형 : 기본 요소

 Contents Octet : 단일 Octet

 내용 값 : FALSE(0), TRUE(1)

정수 값 encode

 ID. Octet : 2

 부호화 형 : 기본 요소

 Contents : 하나 이상의 Octet으로 구성되며, 2의 보수로 표시함

(53)

태그(Tags)(7)

Type SNMPv1

protocol

SNMPv2

protocol ASN.1 Tag Tag Number

Tag Value

INTEGER/Integer32 OCTET STRING

NULL

OBJECT IDENTIFIER SEQUENCE

IpAddress

Counter/Counter32 Gauge/Gauge32

TimeTicks Opaque Counter64

UNIVERSAL 2 UNIVERSAL 4 UNIVERSAL 5 UNIVERSAL 6 UNIVERSAL 16

APPLICATION 0 APPLICATION 1 APPLICATION 2 APPLICATION 3 APPLICATION 4 APPLICATION 6

0x02 0x04 0x05 0x06 0x10 0x00 0x01 0x02 0x03 0x04 0x06

0x02 0x04 0x05 0x06 0x30 0x40 0x41 0x42 0x43 0x44 0x46

(54)

ASN.1 표현(1)

 BOOLEAN

Values true or false

Tag UNIVERSAL 1

Type Notation

Married ::= BOOLEAN

ValueAvailable ::= BOOLEAN

(55)

ASN.1 표현(2)

 INTEGER

Values 숫자로 구성

양수 또는 음수, 크기 제한 없음

Tag UNIVERSAL 2

Type Notation

Size ::= INTEGER

Color ::= INTEGER {red(0),

blue(1),

yellow(2)}

(56)

ASN.1 표현(3)

 ENUMERATED

Values 음수가 아닌

정수값으로 구성됨 Tag UNIVERSAL 10

Type Notation

Color ::= ENUMERATED {

red(0), blue(1), yellow(2)}

Color ::= ENUMERATED {red, blue, yellow}

(57)

ASN.1 표현(4)

 REAL

Values 실수 값(부동 소수점) 숫자들

Tag UNIVERSAL 9

Type Notation

PoundsPerSquareInch ::= REAL

(58)

ASN.1 표현(5)

 BIT STRING

Values 비트의 문자열, 길이 제한 없음

암호화/FAX 데이터

Tag UNIVERSAL 3

Type Notation

DigitizedVoice ::= BIT STRING Color ::= BIT STRING

{red(0), blue(1), yellow(2)}

(59)

ASN.1 표현(6)

 OCTET STRING

Value 옥텟 (8-bit bytes) 으로 구성된 문자열

Tag UNIVERSAL 4

Type Notation

TransparentType ::= OCTET STRING

BinaryFile ::= OCTET STRING

(60)

ASN.1 표현(7)

 NULL

Values 널(NULL)

Tag UNIVERSAL 5

Type Notation

PlaceHolder ::= NULL

(61)

ASN.1 표현(8)

 SEQUENCE

Values 순서가 있는 값들의 나열

Tag UNIVERSAL 16

Type Notation

PersonnelRecord ::= SEQUENCE { name OCTET STRING,

location INTEGER {homeOffice(0), fieldOffice(1), roving(2)},

age INTEGER OPTIONAL

}

(62)

ASN.1 표현(9)

 SEQUENCE OF

Values 순서가 있는 값들의 반복

Tag UNIVERSAL 16

Type Notation

PersonnelRecord ::= SEQUENCE { name OCTET STRING,

location INTEGER {homeOffice(0), fieldOffice(1), roving(2)},

age INTEGER OPTIONAL }

PersonnelFile ::= SEQUENCE OF

PersonnelRecord

(63)

ASN.1 표현(10)

 SET

Values 순서 없는 값들의 목록

Tag UNIVERSAL 17

Type Notation

Building ::= SET {

address OCTET STRING, occupied BOOLEAN

}

PersonnelRecord ::= [0] IMPLICIT SET {

name [0] IMPLICIT OCTET STRING, location [1] IMPLICIT INTEGER

{homeOffice(0), fieldOffice(1), roving(2)} OPTIONAL,

age [2] IMPLICIT INTEGER OPTIONAL

}

(64)

ASN.1 표현(11)

Seq :: = SEQUENCE {

one [1] INTEGER OPTIONAL two [2] INTEGER OPTIONAL }

SeqVal ::= Seq { one 10 }

IMPLICIT

 SeqVal이 T(SEQ),L,[T(1),L,V(10)]로 인코딩

 위와 같은 경우를 IMPLICIT 인코딩이라고 함

 IMPLICIT이 의미하는 것은 [1]의 tag 정보만으로 실제의 type을 알 수 있기 때문에 굳이 실제 의 type을 사용하지 않는 다는 것을 의미

EXPLICIT

 Tag의 정보를 사용하고 실제 Type의 정보 또한 보내도록 하는 Option을 사용할 수 있음

 이 경우 EXPLICIT TAG라고 함

 T(SEQ),L,{T(1),L,[T(INTEGER),L,V(10)]}

(65)

ASN.1 표현(12)

 IMPLICIT

기존 데이터 형 Tag를 치환

 EncryptionKey ::= [UNIVERSAL 30] IMPLICIT OCTET STRING

기존 데이터 형이 옥텟 스트링형의 태그를 새로 지정한 태그

[UNIVERSAL 30]으로 치환하는 경우

 EXPLICIT

기존 데이터 형의 태그를 치환하지 않음

(66)

ASN.1 표현(13)

 SET OF

Values 순서 없이 반복된 값들

Tag UNIVERSAL 17 Type Notation

PersonnelRecord ::= [0] IMPLICIT SET {

name [0] IMPLICIT OCTET STRING, location [1] IMPLICIT INTEGER

{homeOffice(0), fieldOffice(1), roving(2)} OPTIONAL,

age [2] IMPLICIT INTEGER OPTIONAL }

PersonnelFile ::= SET OF PersonnelRecord

(67)

ASN.1 표현(14)

 COMPONENTS OF

인자들이 다른 SEQUENCE 또는 SET을 포함함을 표시하기 위해 사용

CommonParameters ::= SEQUENCE {

responseRequired BOOLEAN, requestID INTEGER}

ResponsePDU1 ::= SEQUENCE {

COMPONENTS OF CommonParameters, result OCTET STRING}

--equivalent to

ResponsePDU2 ::= SEQUENCE {

responseRequired BOOLEAN,

requestID INTEGER,

result OCTET STRING}

(68)

ASN.1 표현(15)

 CHOICE

Values 기술된 요소 중에 하나를 선택 Tag 선택된 요소에 따라 결정

Type Notation

MessageType ::= CHOICE {

text OCTET STRING, codedNumeric INTEGER}

Division ::= CHOICE {

manufacturing [0] IMPLICIT SEQUENCE { plantID INTEGER,

majorProduct OCTET STRING}, r-and-d [1] IMPLICIT SEQUENCE {

labID INTEGER,

currentProject OCTET STRING}, unassigned [2] IMPLICIT NULL

}

Referensi

Dokumen terkait

Application Layer Presentation Layer Session Layer Transport Layer Network Layer Data Link Layer Physical Layer Application Layer Presentation Layer Session Layer

The seven Layers - protocol stack Presentation Application Session Transport Network Data Link Physical Presentation Application Session Transport Network Data Link Physical

 Custom session handler allowing data storage anywhere...  Most PHP applications run

Silabus: Jaringan Komputer Hal: 3 dari 8 Menjelaskan dan memberikan contoh penerapan Application , Presention dan Session layer pada referensi OSI Mahasiswa dapat memahami dan

Application Presentation Session Transport Network Data Link Physical Application Presentation Session Transport Network Data Link Physical.. Sending Host

Diskripsi Singkat MK Mata kuliah jaringan komputer ini membahas tentang konsep dasar jaringan komunikasi komputer, Model Referensi OSI &amp; TCP/IP, Local Area Network (LAN),

The Windows Startup Application continues by starting the Service Control Manager, the Local Security Authority Subsystem, and a new process, Local Session

3.Dalam OSI Layer memiliki 7tujuh Layer dalam menjelaskan proses komunikasi data di dalam jaringan sedangkan pada TCP/IP hanya memiliki 4empat Layer 4.OSI Reference Model bersifat