HANNAM Univ. 제 3 장 주소 체계와 데이터 정렬 Network Lab. Byoung-Son, Choi TCP/IP Socket Programming…

Slides:



Advertisements
Similar presentations
제 9 장 포인터.
Advertisements

2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Network Lab. Byoung-Son, Choi
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
13장 소켓.
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
TCP/IP 소켓 프로그래밍 - C 버전 중에서
제 9 장 구조체와 공용체.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
TCP/IP Socket Cover Slide 조태문.
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
Chapter 03. 소켓 주소 구조체 다루기.
Network Lab. Seoung Hyeon, Lee
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
제 14장 Multicast & Broadcast
Department of Computer Engineering
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
5장. 참조 타입.
Socket Address Structure and Byte Ordering Functions
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
23장. 구조체와 사용자 정의 자료형 2.
Department of Computer Science and Engineering
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Socket Address Structure and Byte Ordering Functions
11장. 1차원 배열.
Linux Socket Programming - 도메인과 주소체계 -
C#.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Internet Address Conversion Functions
School of Electronics and Information. Kyung Hee University.
24장. 파일 입출력.
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
Department of Computer Engineering
Department of Computer Engineering
8주차: Strings, Arrays and Pointers
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
Canary value 스택 가드(Stack Guard).
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 02. 윈도우 소켓 시작하기.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
제 4 장 Record.
Chapter 03. 소켓 주소 구조체 다루기.
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Network Lab. Young-Chul Hwang
13. 포인터와 배열! 함께 이해하기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

HANNAM Univ. 제 3 장 주소 체계와 데이터 정렬 Network Lab. Byoung-Son, Choi TCP/IP Socket Programming…

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 2 목차  Internet Address  Port 란 무엇인가 ?  주소 정보의 표현  네트워크 바이트 순서  인터넷 주소 시작하기  인터넷 주소의 초기화  주소 정보 할당하기  윈도우 기반으로 구성하기  WSAStringTo Address & WSAAddressToString

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 3 Internet Address  인터넷 상에 존재하는 호스트들을 구분하기 위한 32 비트 주소 체계  십진수 표현 방식 (Dotted-decimal Notation)  각각의 십진수 값은 1 바이트로 표현 [ 그림 3-1] 인터넷 주소 체계 (P. 67) – TCP/IP 프로토콜, 미래컴 참조

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 4 Internet Address  4 바이트 IP 주소 ■ 네트워크 주소 ( 네트워크 ID) + 호스트 주소 ( 호스트 ID) 네트워크 ID 호스트 ID [ 그림 3-2] IP 주소 Routing(P. 68)

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 5 포트란 무엇인가 ?  호스트 내에 실행되고 있는 프로세스 (Process) 를 구분 짓기 위한 16 비트의 논리적 할당 ■ 값의 범위 : 0 ~ Process Host AHost B PORT [ 그림 3-3] Port 를 할당 받은 프로세스 (P. 69)

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 6 포트란 무엇인가 ?  잘 알려진 포트 (Well-Known Port) ■ 예약되어 있는 Port ■ 0 ~ 1023 ▶ FTP : 21 ▶ Telnet : 23 ▶ HTTP : 80 chatting Chatting Client File 전송 FTP Server FTP Client 두 개의 포트를 이용한 통신 예

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 7 주소 정보의 표현  IPv4 의 주소체계를 나타내는 구조체 ■ sockaddr_in struct sockaddr_in { sa_family_tsin_family; /* 주소 체계(AF_INET) */ uint16_tsin_port; /* port 정보 */ struct in_addrsin_addr; /* 32 비트 IP 주소정보 */ char sin_zero[8]; /* 사용되지 않음 */ }; struct in_addr { uint32_ts_addr; /* 32비트 IP 주소정보 */ }; 주의 : 모든 데이터는 네트워크 바이트 순서로 저장해야 한다.

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 8 주소 정보의 표현  POSIX(Portable Operating System Interface) ■ 유닉스 계열의 운영체제 ■ 표준화한 데이터 타입 Data type DescriptionHeader int8_t uint8 _t int16_t uint16 _t int32_t uint32 _t signed 8-bit int unsigned 8-bit int (unsigned char) signed 16-bit int unsigned 16-bit int (unsigned short) signed 32-bit int unsigned 32-bit int (unsigned long) sa_family_t socklen_t address family length of struct [ 표 3-1] 데이터 타입 (P. 71)

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 9 주소 정보의 표현  Local Unix 프로토콜에서 사용되는 주소 정보 구 조체  이외에도 주소 정보를 나타내기 위한 다양한 구 조체들이 존재 struct sockaddr_un { sa_family_tsun_family; /* 주소 체계*/ char sun_path[108]; /*경로이름*/ };

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 10 주소 정보의 표현  sockaddr_in 구조체 정보 ■ sin_family ▶ 주소체계에 대한 정보 입력 ■ sin_port ▶ 16 비트 포트 정보 대입 ▶ 네트워크 바이트 순서로 대입 ■ sin_addr ▶ 32 비트 IP 주소 정보 대입 ▶ 네트워크 바이트 순서로 대입 ■ sin_zero ▶ 특별한 의미없이 단순히 채워주기 (padding) 의 목적으로 사용되는 구조체 주소체계 (Address Family) 정의 AF INET AF_INET6 AF_LOCAL IPv4 인터넷 프로토콜 IPv6 인터넷 프로토콜 Local 통신을 위한 UNIX 프로토콜 [ 그림 3-4] 주소 체계 (P. 72)

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 11 네트워크 바이트 순서  바이트 순서 (Byte Order) ■ 상위 바이트의 값을 메모리에서 어느쪽으로 두느냐에 따라서 구분 ▶ Big-Endian  상위 바이트 값이 메모리상에 먼저 ( 번지수가 작은 위치 ) 표시  호스트 바이트 순서 (Host Byte Order) –Motolora 계열 ▶ Little-Endian  하위 바이트 값이 메모리상에 먼저 ( 번지수가 작은 위치 ) 표시  호스트 바이트 순서 (Host Byte Order) –Intel x86 계열 메모리 번지수가 증가하는 방향 0x120x340x560x78 메모리 번지수가 증가하는 방향 0x780x560x340x12 [ 그림 3-4] Big-Endian 바이트 표현 방식 (P. 73)[ 그림 3-5] Little-Endian 바이트 표현 방식 (P. 73) 32 비트 값인 “ 0x ” 을 표현하는 경우

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 12 네트워크 바이트 순서  데이터 표현 방식에 따른 문제점 Big-EndianLittle-Endian 0x12 0x34 0x12 0x34 12 번지 13 번지 0x12340x3412 0x120x34

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 13 네트워크 바이트 순서  네트워크 바이트 순서 (Network Byte Order) ■ Big-Endian 방식을 적용하기로 약속 Big-EndianLittle-Endian 0x12 0x34 0x12 12 번지 13 번지 0x1234 0x120x34 0x1234 0x120x34

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 14 네트워크 바이트 순서  바이트 순서 변환 (Endian Conversion) unsigned short htons(unsigned short); /*Port 정보의 바이트 순서 변경*/ unsigned short ntohs(unsigned short); /*Port 정보의 바이트 순서 변경*/ unsigend long htonl(unsigned long); /*IP 주소의 바이트 순서 변경*/ unsigned long ntohl(unsigned long); /*IP 주소의 바이트 순서 변경*/ ‘ h ’ : host byte order ‘ n ’ : network byte order ‘ s ’ : short (16 bit) ‘ l ’ : long (32 bit)

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 15 네트워크 바이트 순서  endian_conv.c 소스 코드 실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 16 인터넷 주소 조작하기  inet_addr 함수 ■ Dotted-Decimal Notation 을 Big-Endian 32 비트 정수형 데 이터로 표현 ( 네트워크 바이트 순서 ) unsigned long inet_addr(const char * string) 성공시 : Big_Endian 32 비트 값 실패시 : INNADDR_NONE 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 17 인터넷 주소 조작하기  inet_aton 함수 ■ inet_addr 함수 보다 개선된 함수 ■ inet_addr 함수의 리턴된 값을 주소 정보 구조체 sockaddr_in 안에 선언되어 있는 in_addr 구조체의 포인터로 전달 슬라이드 24 번 참조 int inet_aton (const char * string, struct in_addr * addr) 성공시 : 0 이 아닌 값 (true) 실패시 : 0(false) 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 18 인터넷 주소 조작하기  inet_aton 함수 ■ Big-Endian 32 비트 정수형 데이터 ( 네트워크 바이트 순서 ) 를 Dotted-Decimal Notation 로 표현 char * inet_ntoa(struct in_addr addr) 성공시 : 변환된 해당 문자의 포인터 실패시 : -1 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 19 인터넷 주소 초기화  일반적인 형태 1: struct sockaddr_in addr; /* 인터넷 주소 정보를 나타내는 구조체 변수 생성 */ 2: char *serv_ip=" "; /*IP 선언 */ 3: char *serv_port="9190"; /*Prot 선언 */ 4: memset(&addr, 0, sizeof(addr_len)); /* 인자로 전달된 구조체 변수 초기화 */ 5: addr.sin_family = AF_INET; /* 프로토콜 체계 설정 */ 6: addr.sin_addr.s_addr = inet_addr(serv_ip); /*IP 주소를 설정 */ 7: addr.sin_port = htons(atoi(serv_port)); /* 스트링을 정수값으로 변환후, 네트워크 바이트 순서로 변환 */

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 20 인터넷 주소 초기화  개선된 형태 1:struct sockaddr_in addr; 2:char *serv_port="9190"; 3:memset(&addr, 0, sizeof(addr_len)); 4:addr.sin_family = AF_INET; 5:addr.sin_addr.s_addr = htons(INADDR_ANY); /* 현재 시스템의 IP 를 자동적으로 찾아줌 */ 6:addr.sin_port = htons(atoi(serv_port)); 서버의 IP 가 뭐더라 ? INADDR_AN Y

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 21 주소 정보 할당하기  bind() ■ 소켓에 주소 정보 할당 ▶ sockfd : 주소를 할당하고자 하는 소켓의 파일 디스크립터를 인자로 전달 ▶ myaddr : 할당하고자 하는 주소 정보를 지니고 있는 sockaddr_in 구조체 변수의 포인터를 인자로 전달 ▶ addrlen : 인자로 전달될 주소 정보 구조체의 길이를 전달 #include int bind(int sockfd, struct sockaddr * myaddr, int addrlen); 성공시 : 0 실패시 : -1

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 22 주소 정보 할당하기  bind_sock 함수 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 23 주소 정보 할당하기  struct sockaddr() ■ 프로토콜 체계에 따라 주소 체계가 다름 ■ socket 함수와 bind 함수는 특정 프로토콜 체계를 위한 함수가 아 님 ▶ 프로토콜에 독립적 ■ 따라서, 일반적 ( 범용적으로 사용가능하게끔 ) 선언되어야 함 ▶ Local Unix 프로토콜을 위한 sockaddr_un 구조체의 포인터도 인자 값으로 사용할 수 있어야 함 struct sockaddr { sa_family sin_family; char sa_data[14]; };

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 24 윈도우 기반으로 구현하기  endian_conv_win.c 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 25 윈도우 기반으로 구현하기  inet_addr_win.c 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 26 윈도우 기반으로 구현하기  bind_sock.c 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 27 WSAStringToAddress & WSAAddressToString  윈속 2 에서 추가된 변환 함수  운영체제에 완전히 종속적 ■ 이 교재에서는 사용하지 않음

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 28 WSAStringToAddress & WSAAddressToString  WSAStringToAddress 함수 ■ 주소정보를 나타내는 문자열을 가지고 주소 정보 구조체 변수를 적절히 채워주는 함수 #include INT WSAStringToAddress( LPTSTR AddressString, /*십진표기법의 주소정보문자열을 가리키는 포인터, Port 정보 포함*/ INT AddressFamily, /* AddressString 포인터가 가리키는 주소정보문자열이 속하는 주소 체계를 전달*/ LPWSAPROTOCOL_INFO lpProtocolInfo, /*프로토콜 프로바이더(Protocol Provider) 설정, 일반적으로 NULL을 전달*/ LPSOCKADDR lpAddress, /*주소정보구조체 변수의 포인터를 인자로 전달, 함수 호출의 결과로 변환된 결과를 얻기 위한 변수*/ LPINT lpAddressLength /* lpAddress 포인터가 가리키는 버퍼(주소 정보 구조체 변수)의 크기를 전달하기 위해 사용*/ );

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 29 WSAStringToAddress & WSAAddressToString  WSAAddressToString 함수 ■ 주소 정보 구조체 변수를 주소정보를 나타내는 문자열로 변환하 는 함수 #include INT WSAAddressToString( LPSOCKADDR lpsaAddress, /*문자열로 변환할 주소 정보를 지니고 있는 구조체 변수의 포인터*/ DWORD dwAddressLength, /*lpsaAddress 포인터가 가리키는 변수의 크기*/ LPWSAPROTOCOL_INFO lpProtocolInfo, /*프로토콜 프로바이더(protocal provider)설정 일반적으로 NULL을 전달 */ LPTSTR lpszAddressString, /*문자열로 변경된 결과를 저장할 버퍼의 포인터*/ LPDWORD lpdwAddressStringLength /*함수 호출시 lpsaAddressString이 가리키는 버퍼의 크기를 전달하기 위해 사용, 함수 호출이 끝나면 전달된 포인터가 가리키는 변수에 저장된 문자열의 크기가 저장*/ );

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 30 WSAStringToAddress & WSAAddressToString  활용예제 소스 코드실행 결과

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 31 참고문헌  “ 데이터 통신과 네트워킹 ”, 이재광 외 2 명, 교보문 고  “TCP/IP 프로토콜 ”, 이재광외 5 명, 미래컴  “Linux Socket Programming by Example”, Warren W. Gay, QUE '00

Network Lab. HANNAM Univ. TCP/IP Socket Programming… 32 Q & A