The Pocket Guide to TCP/IP Sockets: C Version

Similar documents
The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

0. 들어가기 전

The Pocket Guide to TCP/IP Sockets: C Version

BMP 파일 처리

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

thesis

yessign Version 3.1 (yessign). ccopyright 2009 yessign ALL RIGHTS RESERVED

bn2019_2

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

- - yessign Version 3.5 (yessign)

PowerPoint 프레젠테이션

Microsoft Word doc

PowerPoint Presentation

The Pocket Guide to TCP/IP Sockets: C Version

Slide 1

chap 5: Trees

SMB_ICMP_UDP(huichang).PDF

0. 들어가기 전

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

chap7.key

게시판 스팸 실시간 차단 시스템

vi 사용법

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - Chapter_04.pptx

1217 WebTrafMon II

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

강의 개요

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint 프레젠테이션

TCP.IP.ppt

adfasdfasfdasfasfadf

JAVA PROGRAMMING 실습 02. 표준 입출력

SRC PLUS 제어기 MANUAL

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - ch07 - 포인터 pm0415

2009년 상반기 사업계획

Microsoft PowerPoint - e pptx

PowerPoint Presentation

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

본 강의에 들어가기 전

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx


C# Programming Guide - Types

PowerPoint Presentation

歯9장.PDF

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

C++ Programming

MySQL-.. 1

Microsoft PowerPoint - chap06-2pointer.ppt

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

untitled

Index Process Specification Data Dictionary


<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

자바-11장N'1-502

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

hd1300_k_v1r2_Final_.PDF

K&R2 Reference Manual 번역본

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M.

Microsoft PowerPoint - chap11.ppt [호환 모드]

11장 포인터

본 강의에 들어가기 전

PowerPoint Presentation

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

본 강의에 들어가기 전

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

제1장 Unix란 무엇인가?

Chapter 4. LISTS

11장 포인터

Microsoft PowerPoint - lec2.ppt

PowerPoint 프레젠테이션

final_thesis

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft PowerPoint - 03-TCP Programming.ppt

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Transcription:

인터넷프로토콜 5 장 데이터송수신

목차 제 5 장데이터의송수신 5.1 정수인코딩 5.2 메시지생성, 프레이밍, 그리고파싱 5.3 마무리

5.1 정수인코딩 정수의크기 보내려는정수의크기를미리결정해야 TestSizes.c 바이트순서화 Big-endian Little-endian 부호화와부호확장 signed 와 unsigned Bruteforcecoding.c

TCP/IP 바이트전송 TCP/IP 프로토콜은바이트 (bytes) 를전송함 응용프로그램끼리의미를부여할뿐, TCP/IP 는단지단위데이터를전송 택배기사는내용물에큰의미를부여하지않으며단지택배박스를원하는곳으로전달할뿐 Application Application byte stream TCP/IP Here are some bytes. I don t know what they mean. byte stream TCP/IP I ll pass these to the app. It knows what to do.

전송데이터의자료형 (1) 문자열 (String) 전송 : 가변길이전송 장점 사람이읽기쉬움 메시지의확장이용이하며무제한 단점 전송량대비전송내용비효율, 수신루틴비효율, 연산비효율 상호협의할내용 문자코드페이지 ASCII, Unicode, UTF 메시지경계구분 ( 프레이밍 : framing) 길이명시방식 : 전송할문자열의크기를고정크기의자료형에담아서전송. 수신자는크기를미리파악하고정확한문자열만큼수신구분자방식 : 널문자혹은임의의문자를메시지의경계에삽입. 수신자는바이트단위로읽다가구분자가나오면메시지의끝으로확인

전송데이터의자료형 (2) 문자열 (String) 전송 숫자전송의예 49 55 57 57 56 55 48 10 1 7 9 9 8 7 0 \n 문자전송의예 0 77 0 111 0 109 0 10 M o m \n 3 77 111 109

문자열전송의예 (TCP) char string[strbuffsize]; send(sock, string, strbuffsize, 0) 주의점 : 버퍼의크기 TCP 는운영체제에의존적인 TCP 버퍼가있으며이보다작은크기로 send() 를호출해야한다.

전송데이터의자료형 정수형 (Integer) 의전송 기본자료형의단위로전송 2바이트, 4바이트단위의전송 주의사항 2바이트이상의데이터전송간에는항상네트워크바이트순서로전송해야함 1바이트교환은의미가없음 Network byte order (Big-Endian) - 다중바이트의메시지교환에필수 - 호스트바이트-네트워크바이트변환함수들 htonl(), htons(), ntohl(), ntohs() Little-Endian 0 0 92 246 23,798 Big-Endian 246 92 0 0

정수자료형전송의예 (TCP) int data; send(sock, &data, sizeof(data), 0) short, long, double, char 도동일한방식으로처리

정수인코딩을직접해보자 BruteForceCoding.c byte ordering signedness 각함수들내용이해

TCP 소켓을스트림으로포장하기 FILE stream FILE *fdopen( ) int fclose( ) int fflush( ) size_t fwrite( ) size_t fread( )

구조체오버레이 : 정렬과채우기 실제로구조체가어떻게구현되는지이해필요 struct addressinfo { uint16_t streetaddress; int16_t aptnumber; uint32_t postalcode; } addrinfo; streetaddress aptnumber postalcode struct integermessage2 { uint8_t onebyte; uint8_t padding; uint16_t twobytes; uint32_t fourbytes; uint64_t eightbytes; }; alignment 를위해필요한 padding 이해 struct integermessage { uint8_t onebyte; uint16_t twobytes; uint32_t fourbytes; uint64_t eightbytes; }; 구조체와메모리할당이해 최대한정렬 2 바이트이상인경우시작주소는항상 2 로나누어져야한다

old-fashioned text ASCII 문자열과텍스트 internationalizable code C99 extensions wchar_t size_t wcstombs( ) size_t mbstowcs( )

비트조작 : 참, 거짓값의인코딩 C 언어의 bitwise 연산자이해필요 << >> & ~

Voting Protocol UDP 로구현시 TCP 로구현시 5.2 Constructing, Framing, and Parsing 하나의메시지크기 ( 경계 ) 를어떻게판단할것인가하는문제존재 방법 1: delimiter-based 방법 2: Explicit length Text-based Message Encoding Binary Message Encoding

메시지구성 (Message Composition) 메시지구성이란? 응용프로그램끼리의미있는데이터교환을위한형식정의 응용프로토콜과같은의미 일반적으로프로토콜헤더 + 데이터로구성 프로토콜 ( 메시지 ) 필드란? 메시지내부에서단위의미를가지는데이터영역 예 ) 파일전송을위한메시지구성 파일을상대방에게전송하기위해서는파일내용도중요하지만파일이름, 크기등과같은파일특성도전달이되어야함 파일전송을위한프로토콜헤더구성 아래와같은 3 개의필드로구성이가능 ( 정의에따라고정혹은가변크기 ) 파일이름, 파일크기, 파일퍼미션 파일전송을위한프로토콜데이터구성 파일의내용 ( 항상가변 )

메시지구성 (Message Composition) 고정길이필드 정수형자료형으로구성 메시지처리가쉬우며일반적으로크기가작음 가변길이필드 문자열로구성 Human-readable 하며확장성이좋으나처리가불편하고크기가클수있음 고정길이필드 integer short short 가변길이필드 M i k e 1 2 \n

메시지구성을위한자료형정의 구조체사용이바람직함 struct file_header { int filesize; char filename[256]; } sndfilehdr; send(sock, &sndfilehdr, sizeof(sndfilehdr), 0) 저지르기쉬운실수 구조체내부의포인터변수 값을전달해야지위치를전달하는것은무의미 패딩, 정렬문제 항상은아니지만가끔일어나며디버깅어렵게함

struct tst { short x; int y; short z }; 채우기 (padding) 의문제 x [pad] y z [pad] 시스템은내부정렬규칙에따라채우기를수행 해결방법 구조체멤버를재배치 명시적인강제채우기

파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes) FileSize (4bytes) Filecontents (0~4GB) 메시지헤더 메시지데이터 struct msghdr { char filename[255]; unsigned int filesize; }

파일전송메시지구성예제 ( 문자열메시지 ) 전송방식 : 가변길이 ( 문자열전송방식 ) 필요한전송정보 구분자 (!$ : 임의로결정, 단파일이름이나길이에나오지않아야함 ) 파일이름 ( 크기제한없음, 필드의크기는파일이름에따라가변 ) 파일크기 ( 크기제한없음, 필드의크기는파일크기에따라가변 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 (255bytes 의 helloworld.c 를전송할경우 ) Helloworld.c!$255!$ Filecontents (0~4GB) 메시지헤더 메시지데이터

파일내용의전송 파일크기가소켓버퍼의크기보다크므로아래와같이순차적전송 #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; }

파일내용의수신 #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);

과제 기존에코프로그램을수정하여다음의기능을가지는프로그램을작성하라 클라이언트 : 클라이언트명령어의두번째인자를에코문자열대신파일이름으로받아들여파일을서버에전송하라 Ex) FileClient lily.mmu.ac.kr test.txt 5000 서버 : 해당파일은서버의실행파일이존재하는디렉토리에동일한이름으로저장되도록한다.

좀더복잡한메시지구성

파일전송의예 메시지구성 char FileName[256]; int FileSize; char FileBuffer[1024]; Server FileName FileSize File Contents Client recv(clntsock, FileName, 256, 0) recv(clntsock, FileSize, 4, 0) while(notrecvfullfile()) { recv(sock, FileBuffer, 1024,0) } send(sock, FileName, 256, 0) send(sock, FileSize, 4, 0) while(feof(fd)) { Send(sock, FileBuffer, 1024,0) }

에코와파일전송을모두지원하는 상황 프로토콜 클라이언트는서버에게 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 // 에코메시지

메시지 ( 프로토콜 ) 설계 서버와클라이언트는동일프로그램으로두개의다른상황을모두만족해야함 EchoString File Upload string Server Client Echostring FileName FileSize File Contents Server Client 서버의입장에서클라이언트의서비스요청이 MsgType 에코요청인지파일업로드인지구분할수있는방법은? 서비스타입 ( 에코요청, 파일업로드 ) 필드를준비하고클라이언트를이를통해서버에게서비스종류를알림

바이너리프로토콜설계 /* Message Type */ #define EchoReq 01 #define FileUpReq 02 #define EchoRep 11 #define FileAck 12 char MsgType; EchoString Server MsgType string Echostring MsgType Client MsgType FileName FileSize File Contents Server File Upload MsgType Client

클라이언트핵심코드 ( 바이너리프로토콜 ) /* 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 { } MsgType MsgType FileName FileSize File Contents string fprintf(stderr, "Usage: %s <Server IP> <operation><operand> <Echo Port>\n", argv[0]); exit(1);

/* 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 ) MsgType MsgType FileName FileSize File Contents string

문자열프로토콜설계 /* Message Type */ #define EchoReq #define FileUpReq #define EchoRep #define FileAck char MsgType[10]; EchoReq FileUpReq EchoRep FileAck EchoString Server MsgType string Echostring MsgType Client Server File Upload MsgType FileName FileSize File Contents MsgType Client

클라이언트핵심코드 ( 문자열프로토콜 ) /* 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) MsgType 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); } MsgType FileName FileSize File Contents string

서버핵심코드 ( 문자열프로토콜 ) /* 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 ) MsgType MsgType FileName FileSize File Contents string

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

ASN.1 소개 (2) User User Local storage (e.g, MIB) user presentation mapping user presentation mapping Local storage (e.g, MIB) local mapping Application component Abstract Syntax (e.g., ASN.1) Application component local mapping encoding rules encoding rules data transfer component (e.g, TCP, OSI session) Transfer Syntax (e.g., BER) data transfer component (e.g, TCP, OSI session)

ASN.1 소개 (3) Application Entity 에대한규격표현에주로사용 Application Entity 정보의의미 (sematics) 에만의미를두고정보의표현형식 (syntax) 에는무관함 추상구문을기술하기위한기법 Application/Presentation Layer PDU(Protocol Data Unit) 표현 다양한인터페이스나통신매체를통하여전송되어야할정보를기술하기위한 INL(Interface Notation Language) 로사용

ASN.1 소개 (4) 다양한데이터타입들의표현 BOOLEAN INTEGER BIT STRING OCTET STRING NULL REAL SEQUENCE SEQUENCE OF GeneralizedTime IA5String BMPString UTF8String ENUMERATED

BER(Basic Encoding Rules)(1) BER 은전송되는데이터가어떻게인코딩되어야하는지를기술 기기특성, 프로그래밍언어, 에플리케이션표현방법과독립적 Age ::= INTEGER (0..7) firstgrade Age ::= 6 Application 1 02 01 06 Application 2 Value Length Tag } 전체 24 bits

BER(2) CCITT (X.209) and ISO (ISO 8825) standard based on the use of a type-length-value (TLV) structure Type Length Value

PER-Packed Encoding Rules BER 과마찬가지로전송되는데이터가기기의종류, 프로그래밍언어, 어플리케이션프로그램의표현방법과는독립적으로어떻게인코드되어야하는지를기술 BER 과는달리기본적으로태그는전송안됨그리고 length 와 value 가종단간에이미약속이되어있다면전송되지않음 PER 은전송시대역폭을보다적게사용하기위한목적으로정의되었으며, 소리와영상을전송하는인터넷, 공중파통신과같이대역폭이중요한곳이라면어느곳이라도유용하게사용 Age ::= INTEGER (0..7) firstgrade Age ::= 6 Application 1 110 Application 2 total length of 3 bits

XER-XML Encoding Rules BER, PER 과마찬가지로, 전송하기위한데이터의장치의종류, 프로그래밍언어또는어플리케이션프로그램의표현에대해독립적 축소된규칙과는달리곧바로읽기쉽다. 좀더읽기쉽게하는데목적이있다. 추가대역폭을필요로한다. BCN 등대규모대역폭을갖는환경에적합하다. Age ::= INTEGER (0..7) firstgrade Age ::= 6 Application 1 <Age>6</Age> Application 2 total length of 12 octets

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)

ASN.1 데이터타입 (1) 프로그래밍언어와같이미리정의된몇가지타입을가진다. 사용자는 ASN.1 이제공하는기본타입외에새롭게정의된타입을사용할수있다. 타입정의를위한일반적인형식 <typereference> ::= <type> 타입의이름은반드시대문자로시작해야한다. 대부분의 ASN.1 에서미리정의된타입은대문자로표기된다.

BIT STRING 비트의임의의스트링 BOOLEAN True/False OCTET STRING 8 진수스트링 IA5STRING ASCII 스트링 INTEGER 임의의정수 REAL 임의의실수 NULL 널값 ASN.1 데이터타입 (2)

ASN.1 데이터타입 (3) PrintableString 프린트가능한스트링 OCTET IDENTIFIER 객체를식별하는정수값의연속 SEQUENCE 서로다른 ASN.1 데이터타입들의순서적집합 SEQUENCE OF 동일한타입의순서적집합 SET 서로다른 ASN.1 데이터타입들의비순서적집합 SET OF 동일한타입의비순서적집합

태그 (Tags)(1) 정의된모든타입들은태그를지정받는다. 태그는 ASN.1 에서표준으로지정될수도있고, 사용자가지정할수도있고 태그는두개의부분으로구성된다 Class Universal, Application, Private and Context Specific Number non-negative integer of arbitrary size 태그는 PER 에의해인코딩되지않는다

태그 (Tags)(2) Universal Class 세계적으로유일하게지정되지않으면안되는클래스 Application Class 어떤특정 ASN.1 모듈속에유일하게정의되지않으면안되는클래스 해당클래스의데이터형은어떤특정한응용속에서만사용될태그 Context-Specific Class 구조형의 ASN.1 데이터형속에유일하게지정되지않으면클래스 해당클래스태그는정의되어있는데이터형속에의미를가지며, 외부에서는의미를갖지않음 Private Class 상호합의되어있는어떤특정기업및단체에속에서유일하게지정할수있는클래스

태그 (Tags)(3) BER 4개의구성요소로구성 Identifier Octets Contents Octets End of Contents(EOT) Length Octets Identifier Octets의 Encoding 데이터값의형식에대한태그값을 encoding 태그번호의범위가 0~30이면 ID Octet은단일 Octet으로구성 8 비트 7 비트 6 비트 5 비트 4 비트 3 비트 2 비트 1 비트 1~5 비트 : 태그번호 6 비트 : P/C (0 : 기본요소, 1: 구조화 ) 7~8 비트 : 태그클래스 (00, 01, 10, 11)

태그 (Tags)(4) BER- 계속 Identifier Octets 의 Encoding 계속 태그번호가 31 보다크면 ID. Octet 은하나이상의다음 Octet 이따르는선행 Octet 의로구성 연속 Octet 태그클래스 P/C 11111 1 1 1 0 선두 Octet 태그번호

태그 (Tags)(5) BER 계속 Length Octet 단형길이 Contents Octet의길이를 encode하며, 최대 127개까지나타낼수있음 ID. Octets 0 길이 장형길이 Contents Octets 초기는길이 Octet 의길이를나타내며, 길이 Octet 은내용 Octet 의길이를니타냄 ID. Octets 1 초기 불확정길이 길이 Octet Contents Octets 이 EOT 에의해끝남 Contents Octets ID. Octets 10000000 00 00 Contents Octets EOT

BER- 계속 Contents Octets 태그 (Tags)(6) O 또는하나이상의 Octet 으로구성되며 ASN.1 데이터값을 encode BOOLEAN 값 encode ID. Octets : 1 부호화형 : 기본요소 Contents Octet : 단일 Octet 내용값 : FALSE(0), TRUE(1) 정수값 encode ID. Octet : 2 부호화형 : 기본요소 Contents : 하나이상의 Octet 으로구성되며, 2 의보수로표시함

태그 (Tags)(7) Type INTEGER/Integer32 SNMPv1 protocol SNMPv2 protocol ASN.1 Tag UNIVERSAL 2 Tag Number 0x02 Tag Value 0x02 OCTET STRING UNIVERSAL 4 0x04 0x04 NULL UNIVERSAL 5 0x05 0x05 OBJECT IDENTIFIER UNIVERSAL 6 0x06 0x06 SEQUENCE UNIVERSAL 16 0x10 0x30 IpAddress APPLICATION 0 0x00 0x40 Counter/Counter32 APPLICATION 1 0x01 0x41 Gauge/Gauge32 APPLICATION 2 0x02 0x42 TimeTicks APPLICATION 3 0x03 0x43 Opaque APPLICATION 4 0x04 0x44 Counter64 APPLICATION 6 0x06 0x46

ASN.1 표현 (1) BOOLEAN Values true or false Tag UNIVERSAL 1 Type Notation Married ::= BOOLEAN ValueAvailable ::= BOOLEAN

ASN.1 표현 (2) INTEGER Values 숫자로구성양수또는음수, 크기제한없음 Tag UNIVERSAL 2 Type Notation Size ::= INTEGER Color ::= INTEGER {red(0), blue(1), yellow(2)}

ENUMERATED ASN.1 표현 (3) Values 음수가아닌정수값으로구성됨 Tag UNIVERSAL 10 Type Notation Color ::= ENUMERATED { red(0), blue(1), yellow(2)} Color ::= ENUMERATED {red, blue, yellow}

ASN.1 표현 (4) REAL Values 실수값 ( 부동소수점 ) 숫자들 Tag UNIVERSAL 9 Type Notation PoundsPerSquareInch ::= REAL

ASN.1 표현 (5) BIT STRING Values 비트의문자열, 길이제한없음 암호화 /FAX 데이터 Tag UNIVERSAL 3 Type Notation DigitizedVoice ::= BIT STRING Color ::= BIT STRING {red(0), blue(1), yellow(2)}

OCTET STRING ASN.1 표현 (6) Value 옥텟 (8-bit bytes) 으로구성된문자열 Tag UNIVERSAL 4 Type Notation TransparentType ::= OCTET STRING BinaryFile ::= OCTET STRING

ASN.1 표현 (7) NULL Values 널 (NULL) Tag UNIVERSAL 5 Type Notation PlaceHolder ::= NULL

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 }

SEQUENCE OF ASN.1 표현 (9) 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

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 }

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)]}

IMPLICIT 기존데이터형 Tag 를치환 ASN.1 표현 (12) EncryptionKey ::= [UNIVERSAL 30] IMPLICIT OCTET STRING 기존데이터형이옥텟스트링형의태그를새로지정한태그 [UNIVERSAL 30] 으로치환하는경우 EXPLICIT 기존데이터형의태그를치환하지않음

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

COMPONENTS OF ASN.1 표현 (14) 인자들이다른 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}

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 }