데이타전송

Similar documents
슬라이드 1

11장 포인터

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

chap7.key

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

BMP 파일 처리

歯9장.PDF

PowerPoint 프레젠테이션


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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - 제11강 파일 처리

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

비트와바이트 비트와바이트 비트 (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 - chap06-2pointer.ppt

슬라이드 1

2007_2_project4

PowerPoint 프레젠테이션

Microsoft Word doc

chap 5: Trees

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap4 [호환 모드]

C Programming

PowerPoint Template

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - Lesson13.pptx

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

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

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap11-포인터의활용.pptx

PowerPoint 프레젠테이션

11장 포인터

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint - 09_(C_Programming)_(Korean)_File_Processing

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - Chap14_FileAccess.pptx

SRC PLUS 제어기 MANUAL

The Pocket Guide to TCP/IP Sockets: C Version

슬라이드 1

Microsoft PowerPoint - 06-Pointer and Memory.pptx

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

OCW_C언어 기초

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

TCP.IP.ppt

Infinity(∞) Strategy

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

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

PowerPoint Template

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

SMB_ICMP_UDP(huichang).PDF

Microsoft PowerPoint - Chapter14_17.pptx

untitled

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

1217 WebTrafMon II

PowerPoint 프레젠테이션

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

슬라이드 1

Subnet Address Internet Network G Network Network class B networ

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - 10_C_Language_Text_Files

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>



chap8.PDF

설계란 무엇인가?

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

The Pocket Guide to TCP/IP Sockets: C Version

Lab 3. 실습문제 (Single linked list)_해답.hwp

untitled

설계란 무엇인가?

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

6.1 Addresses and Pointers Recall memory concepts from Ch2 ch6_testbasicpointer.c int x1=1, x2=7; double distance; int *p; int q=8; p = &q; name addre

02장.배열과 클래스

쉽게 풀어쓴 C 프로그래밍

歯7장.PDF

chap7.PDF


Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

KNK_C_05_Pointers_Arrays_structures_summary_v02

제1장 Unix란 무엇인가?

슬라이드 1

PowerPoint Presentation

Transcription:

Network Programming Autumn 2009 C Programming Related with Data Transfer and PDU Encapsulations

Contents Dynamic Memory Allocation (Review!) Bit Stream I/O Bit Operations in C Conversion of Little and Big Endian Codes PDU Encapsulation / Decoding

Static Memory Case 배열을사용하는경우에고려해야할문제점 / 단점파악 배열의크기로인해메모리할당에인위적인제한을가짐 실제저장하는요소의수가예상보다매우적으면메모리낭비발생 배열이담을수있는것보다더큰데이터를담아배열의경계를넘는경우프로그램은심각한문제에발생 배열의장점은프로그래밍이쉽다는점

Dynamic Memory : Needs 단점때문에프로그램실행시필요할때마다메모리를할당받는동적메모리할당의개념이필요 동적메모리할당이란프로그램실행시원하는크기의메모리를요청할수있고 더이상필요하지않다면즉시해제하여다른메모리요청에해제된메모리공간이다시사용될수있게함 대부분의경우이러한기억장소는컴퓨터에서모든기억장소를충분히이용하려는응용프로그램의요구충족 동적할당은링크드 ( 연결 ) 리스트와큐, 스택, 이진트리와같이자료구조를표현할때사용

Dynamic Memory: Allocation Scope 동적메모리할당시점 컴파일과정이아닌런타임 ( 실행시간 ) 에서이루어짐동적메모리할당은프로세스메모리영역중힙세그먼트 (Heap Segment) 에할당되며동적메모리는변수가아닌 포인터 변수를통해서만접근가능

Dynamic Memory : Library funtions in C <stdlib.h> void *malloc(size_t size); void *calloc(size_t num_elelments, size_t element_size); void *realloc(void *ptr, size_t size); void free(void *ptr); malloc() 함수 인수로크기 (byte 단위 ) 를넘겨주면운영체제에서는비어있는영역을할당하여그시작주소를반환 calloc() 함수 num_elelments * element_size 만큼의크기를할당하면서할당된공간을자동으로 0 으로초기화

Dynamic Memory : Library funtions in C realloc() 함수 이미할당되어있는영역을다시 size만큼재할당새로운영역의시작주소를반환이전내용은그대로보존되므로정보의손실은발생하지않음 free() 함수 인수는 malloc(), calloc(), realloc() 호출에서반환받은값반드시메모리주소함수는할당받은영역을해제 C 프로그램에서는일반적으로 malloc(), free() 함수를이용하여동적메모리를제어

malloc() char *ptr; ptr= (char *) malloc(80); ptr 40003100 0x 7f7f0100 스택세그먼트... (80 바이트 ) 0x 40003100 힙세그먼트... 데이터세그먼트...... 코드세그먼트

malloc() malloc() 함수앞의 (char *) 는 cast 연산자 만약 malloc() 함수가운영체제, 즉시스템으로부터메모리를할당받지못하면 ( 요청한만큼의메모리블록이없는경우 ) 이함수는 NULL 포인터를반환 일반적인형태 char *p; ptr= (char *) malloc(80); if(ptr==null) { printf( 메모리할당실패 \n ); exit(1); }. free(ptr) ; // 할당받은영역을해제

malloc() : Example 1 #include <stdio.h> #include <stdlib.h> int main(void) { char *ptr; if((ptr=(char *)malloc(80))==null) { printf("memory Allocation Error \n"); exit(1); } printf("name? "); gets(ptr); printf("%p %s \n", ptr, ptr); free(ptr); }

Dynamic Memory Example2 struct A {char name[20]; int age; } *ptr ; // 구조체포인터변수 printf( ptr 변수의크기 : %d \n, sizeof(ptr)); if((ptr=(struct A *)malloc(sizeof(struct A)))==NULL){ } printf("memory Allocation Error \n"); exit(1); printf("name? "); gets(ptr->name); printf("age? "); scanf("%d%*c", &ptr->age); printf(" 주소 : %p, %s %d \n",ptr, ptr->name, ptr->age); free(ptr); ptr 변수의크기 : 4 name? 홍길동 age? 25 주소 : 40003108, 홍길동 25

Stream I/O 스트림은실행중인프로그램과외부장치간의연결 (interface) 을해주는논리적인접속 파일입출력스트림은실행중인프로그램과외부장치를연결 (interface) 해주는논리적인접속 표준스트림은콘솔입출력을위한스트림으로운영체제에의해서자동으로생성되고관리되므로 C 개발자가표준스트림을위한연결과정을작성할필요없음 파일입출력스트림 ( 표준스트림이아닌모든것 ) 은운영체제에의해자동으로관리되지스트림을필요할때생성하고필요치않을때소멸해야함 스트림생성 파일을열어스트림과연결시키기위한파일에대해 fopen() 함수를호출하여해당스트림을연다. 스트림소멸 fclose() 함수를사용해서스트림을닫아준다.

Binary Stream I/O 2진 (binary) 스트림에서는어떤종류의데이터도사용될수있으며문자변환발생안함즉, 2진스트림에전달된내용과실제파일에저장된내용이항상동일함바이너리데이터는사람이읽을수없기때문에프로그램을통해읽혀지는데이터에만사용될수있음 이함수들은어떠한종류의표현을사용한어떠한형태의데이터라도읽고쓸수있음 이진파일은 text editor 에서데이터를확인할수없다. 바이너리데이터의이점은데이터를입출력시숫자값을문자열로변환하는데사용되는오버헤드와정밀도손실을피할수있다는점

Binary Stream I/O size_t fread ( void *buffer, size_t size, size_t num, FILE *stream); size_t fwrite ( void *buffer, size_t size, size_t num, FILE *stream); fread() 함수 stream과관련된파일에서 num개의개체를 ( 개체는 size 길이 ) buffer가가리키는버퍼로읽어들임실제읽은개체의수를반환하며이값이 NULL이아니라면파일의끝에도달했거나에러가발생한경우 fwrite() 함수 buufer가가리키는버퍼에서 num개의개체를 ( 개체는 size 길이 ) stream과관련된파일에 write 실체쓰여진개체의수를반환하며이값은출력에러가발생할경우에만 num보다작다

Binary Stream I/O : Example main() // item 정수형배열을이진파일로저장, 읽어본다 { FILE *fp; int item[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int i, t_item[10]={0}; if((fp=fopen("data4","wb"))==null) { exit(1); } for(i=0;i<10;i++) fwrite(&item[i], sizeof(item[i]), 1, fp); // 파일저장 fp=freopen("data4","rb",fp); for(i=0;i<10;i++) fread(&t_item[i], sizeof(t_item[i]), 1, fp); // 파일읽음 fclose(fp); } puts("t_item 배열 "); for(i=0;i<10;i++) printf("%5d",t_item[i]); printf("\n");

Random Access to File C 는파일의순차적 (sequentially) 접근뿐만아니라임의접근 (random access) 도지원 파일상에서읽거나쓰기작업을하기전에원하는위치를먼저찾으면임의접근이가능한데위치찾기작업을수행하려면다음의두가지함수가필요 int fseek( FILE *stream, long offset, int from); int ftell( FILE *stream);

Random Access to File int fseek( FILE *stream, long offset, int from); int ftell( FILE *stream); ftell() 함수 : 스트림에서현재위치를반환 fseek() 함수는다음에읽거나쓰기를수행할위치를변경 첫번째인수는현위치를바꿀스트림 offset은이동할거리 from은이동할기준위치 from은주어진매크로중에선택 from 인수 찾은결과 SEEK_SET 스트림의시작에서부터의 offset 바이트, offset 은음수가아니어야한다. SEEK_CUR 스트림의현재위치로부터 offset 바이트, offset 은양수나음수이다. SEEK_END 스트림의끝에서부터의 offset 바이트, offset 은주로음수이다.

Random Access to File Example main() { FILE *fp; int cur, location, i; int item[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; if((fp=fopen("data6","wb"))==null){ exit(1); } fwrite(item, sizeof(item), 1, fp); // 파일저장 fp=freopen("data6","rb",fp); fseek(fp, 0, SEEK_SET); // fp 처음으로임의접근 location=ftell(fp); printf("loaction : %d \n", location); fread(&cur,sizeof(int),1,fp); // 첫번째데이터읽음 printf("curunt value : %d \n\n", cur);

Random Access to File fseek(fp, 0, SEEK_END); // fp 마지막으로임의접근 location=ftell(fp); printf("loaction : %d \n", location); fseek(fp, -4, SEEK_END); printf("loaction : %d \n", location); fread(&cur,sizeof(int),1,fp); // 마지막데이터읽음 printf("curunt value : %d \n\n", cur); // 마지막에서하나전으로임의접근 fseek(fp, 4*sizeof(int), SEEK_SET); // 처음부터다섯번째임의접근 location=ftell(fp); printf("loaction : %d \n", location); fread(&cur,sizeof(int),1,fp); // 다섯번째데이터읽음 printf("curunt value : %d \n", cur); } loaction : 0 curunt value : 1 loaction : 40 loaction :36 curunt value : 10 loaction : 16 curunt value : 5

Extra functions for File I/O int feof(file *stream); file 의 EOF 일경우 1 반환 int ferror(file *stream); file 의 EOF 발생시오류인지정상적인 EOF 인지확인함수, 오류인경우 1 반환 int remove(char const *filename); 지정된파일삭제 int rename(char const *oldname, char const *newname); 지정된파일이름변환 int fflush(file *stream); 대상파일의버퍼를비움스트림파일일경우디스크에기록 standard I/O 일경우입력버퍼를비움

Bit Field 구조체비트필드는멤버들의메모리할당을비트단위로할당 구조체에는메모리를효율적으로활용하기위해비트필드기능이제공 구조체비트필드선언형식 struct STRUCTURE_NAME { type member1 : bit_size; type member1 : bit_size;.... type member1 : bit_size; } structure_variable_name; 자료형은 int, char 형의 unsigned 를사용 멤버명옆에 : 과함께비트크기를지정

Bit Field struct BIT_F { unsigned char sexuality : 1; unsigned char married : 1; unsigned char dept : 4; } bit_info; // 성별 // 기혼, 미혼 // 부서코드 bit_info 구조체변수는다음과같이메모리에 1 바이트에서접근된다. married dept sex uality bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 bit 8 1 바이트

The bitwise operators of C Bitwise operator 사용예 Flag data 로사용할경우암호화프로그래밍 PDU Encoding/Decoding 그외? Data type 別표현되는값의범위를알아야함 signed/unsigned

The bitwise operators of C Logical Operations

The bitwise operators of C C 언어에서는비트단위의연산을위한 bitwise operator 제공 AND operation: & 특정비트의 Masking 에사용 OR operation: XOR operation: ^ NOT operation (Unary): ~ The shift operations: *, 보수, / 연산에사용가능 Left shift : << Right Shift : >> Operator ~ << >> >>> & ^ Precedence (H) (L)

Bitwise AND 10012 & 0011 2 = 0001 2 특정비트의 Masking 에사용 Bit OR 10012 0011 2 = 1011 2 Exclusive OR 10012 ^ 0011 2 = 1010 2 1 s Complement ~ 000010102 = 11110101 2

The bitwise operators of C: Shift operation

The bitwise operators of C Example short int s ; // assume that short int is 16 bit short unsigned u; s = 1; // s = 0xFFFF (2 s complement) u = 100; // u = 0x0064 u = u 0x0100; // u = 0x0164 s = s & 0xFFF0; // s = 0xFFF0 s = s ˆ u; // s = 0xFE94 u = u << 3; // u = 0x0B20 (logical shift ) s = s >> 2; // s = 0xFFA5 (arithmetic shift )

The bitwise operators of C Example

Print out format

Conversion of Little and Big Endian Codes 예 : 1025 (2^10 + 1) 4-byte integer에저장될경우 00000000 00000000 00000100 00000001 Base-Address Big-Endian Little-Endian + 01 00000000 00000001 + 02 00000000 00000100 + 03 00000100 00000000 + 04 00000001 00000000

Conversion of Little and Big Endian Codes Algorithm for conversion from Big to Little in case of 2 bytes integer unsigned char high,low; short littleend;... fp1=fopen(inputfile); fp2=fopen(outputfile); fread(&high, sizeof(char), 1, fp) while(!feof(fp)) {... } fread(&low, sizeof(char), 1, fp) littleend = (((unsigned)low<<8)&0xff00) high; fprintf(fp2, %d, littleend); Programming Work: 위알고리즘을기준으로 Big-Endian data file 을 Litle-Endian data file 로 conversion 하는프로그램작성

PDU Encapsulation <N> PCI <N> SDU <N> SDU <N> Layer <N> PCI <N> SDU <N> SDU <N-1> PCI <N> SDU <N-1> PCI <N- 1> Layer <N> SDU <N> SDU <N> SDU X PCI : Protocol Control Unit

PDU Encapsulation : Ethernet Frame 4 bytes Ethernet header (14 bytes) IP Header (20 bytes) TCP Header (24 bytes) Ethernet trailer (4 bytes) version 0x4 header length 0x6 destination address 00:e0:f9:23:a8:20 time-to;ive 0x80 option type 0x02 type 0x0800 header length Type of Service/TOS 0x5 0x00 Identification 0x9d08 protocol 0x06 cource IP address 128.143.137.144 destination IP address 128.143.71.21 total length (in bytes) 0x002c flags fragment offset 010 2 0000000000000 2 header checksum 0x8bff source port number 1627 10 destination port number 80 10 sequence number 0x0009465b acknowledgement number 0x00000000 unused flags window size 000000 2 000010 2 8192 10 TCP checksum 0x598e option length 0x04 CRC source address 0:a0:24:71:e4:44 urgent pointer 0x0000 maximum segment size 1460 10

PDU Encapsulation : Ethernet Header 6 b y t e s d e s t i n a t i o n a d d r e s s s o u r c e a d d r e s s t y p e 4 y b ts e C R C A p p l i c a t i o n d a t a E t h e r n e t H e a d e r I P H e a d e r T C P H e a d e r E t h e r n e t T r a i l e r E t h e r n e t f r a m e

PDU Encapsulation : Ethernet PCI 6 b y t e s 0 0 : e 0 : f 9 : 2 3 : a 8 : 2 0 0 : a 0 : 2 4 : 7 1 : e 4 : 4 4 0 x 0 8 0 0 4 y b ts e C R C A p p l i c a t i o n d a t a E t h e r n e t H e a d e r I P H e a d e r T C P H e a d e r E t h e r n e t T r a i l e r E t h e r n e t f r a m e

PDU Encapsulation : IP Header 32 bits version (4 bits) header length T TL Time-to-Live (8 bits) DS Identification (16 bits) Protocol (8 bits) ECN flags (3 bits) Total Length (in bytes) (16 bits) Fragment Offset (13 bits) Header Checksum (16 bits) Source IP address (32 bits) Destination IP address (32 bits) I P H e a d e r A p p l i c a t i o n d a t a E t h e r n e t H e a d e r T C P H e a d e r E t h e r n e t T r a i l e r E t h e r n e t f r a m e

PDU Encapsulation : IP PCI 32 bits 0x4 0x5 0x0 0x0 44 10 9d08 010 2 0000000000000 2 128 10 0x06 8bff 128.143.137.144 128.143.71.21 I P H e a d e r A p p l i c a t i o n d a t a E t h e r n e t H e a d e r T C P H e a d e r E t h e r n e t T r a i l e r E t h e r n e t f r a m e

PDU Encapsulation : TCP Header 32 b its S o urce P ort Nu m b er Des tin a tion P o rt Nu m ber S equ en c e n u m b er (32 b its ) A c k n o wled g em en t n u m b er (32 b its ) hea der length 0 Fla g s T C P c h ec k s u m option type length win d o w s iz e u rg en t p o in ter Ma x. segment siz e Option: maximum segment size A p p l i c a t i o n d a t a E t h e r n e t H e a d e r E t h e r n e t T r a i l e r I P H e a d e r T C P H e a d e r E t h e r n e t f r a m e

PDU Encapsulation : TCP PCI 32 b its 1627 10 80 10 607835 10 0 10 819210 6 10 000000 2 000010 2 0x598e 0000 2 2 10 4 10 1460 10 A p p l i c a t i o n d a t a E t h e r n e t H e a d e r E t h e r n e t T r a i l e r I P H e a d e r T C P H e a d e r E t h e r n e t f r a m e