Socket Address Structure and Byte Ordering Functions

Slides:



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

Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
Network Lab. Byoung-Son, Choi
Understanding of Socket and File I/O
TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험]
13장 소켓.
Chapter 06. UDP 서버/클라이언트.
TCP/IP Socket Cover Slide 조태문.
TCP/IP 소켓 프로그래밍 - C 버전 중에서
Department of Computer Engineering
네트워크 프로그래밍 Unix Network Programming, 2nd Ed., W. Richard Stevens, Prentice Hall PTR, 한국어 판 Unix Network Programming, Stevens 저, 김치하, 이재용 역, 대영사,
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
TCP/IP Socket Cover Slide 조태문.
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
Chapter 03. 소켓 주소 구조체 다루기.
Department of Computer Engineering
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
컴퓨터 네트워크 PART 03 프로그래밍 (chapter 01 Socket 프로그래밍) 임효택
호스트이름과 네트워크이름 찾기 (Hostname and Network Name Lookups)
Chapter 11. Raw 소켓.
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
(Web Programming & Practice)
Socket Address Structure and Byte Ordering Functions
제 14 장 도메인 네임 시스템 정보통신연구실.
Department of Computer Engineering
Term Project Team Member
Internet Address Conversion Functions
Department of Computer Engineering
Advanced Socket Programming
School of Electronics and Information. Kyung Hee University.
Department of Computer Engineering
Department of Computer Science and Engineering
Chapter 03. 소켓 주소 구조체 다루기.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Socket Address Structure and Byte Ordering Functions
IP(Internet Protocol)
헤더 파싱 ( Header Parsing ).
네트워크와 소켓 프로그래밍 Chapter 01. * 학습목표 TCP/IP 프로토콜의 동작 원리를 개관 소켓의 기본 개념을 이해
Internet Address Conversion Functions
School of Electronics and Information. Kyung Hee University.
네트워크 프로그래밍의 이해 School of Electronics and Information.
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Chapter 16 Socket Interface.
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
Department of Computer Engineering
제 11장 User Datagram Protocol(UDP)
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
Department of Computer Engineering
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
Chapter 03. 소켓 주소 구조체 다루기.
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Department of Computer Engineering
Presentation transcript:

Socket Address Structure and Byte Ordering Functions Department of Computer Engineering Kyung Hee University. Choong Seon Hong

네트워크 프로그래밍 네트워크 프로그래밍 이란? 네트워크로 연결되어 있는 두 호스트간의 데이터 송수신. 파일 입출력과의 차이점은 데이터를 주고 받는 대상에 있다 socket socket File Write Write Read Read

파일 디스크립터 Program 1 2 3 4 5 6 Operating System 표준입력 표준출력 표준에러 파일 A 소켓 B 표준입력 1 표준출력 2 표준에러 3 파일 A 4 소켓 B 5 소켓 C 6 파일 D

소켓 번호 유닉스는 모든 파일, 장치 등을 파일로 취급 소켓 디스크립터 파일 디스크립터, 키보드, 모니터, 하드웨어 장치, 소켓 등 소켓 디스크립터 소켓을 개설하여 얻는 파일 디스크립터 데이터를 송수신할 때 사용 파일 또는 소켓 정보 구조체 디스크립터 테이블 family : PF_INET service : SOCK_STREAM local IP local port remote IP remote port … … (파일) 3 pointer (파일) 4 pointer (소켓) 5 pointer …

소켓 번호 응용 프로그램과 소켓 그리고 TCP/IP의 관계

소켓의 생성 소켓은 TCP/IP 만을 위해 정의된 것은 아님 TCP/IP, 유닉스 네트워크, XEROX 네트워크 등에서 사용 가능 따라서, 소켓 개설 시 프로토콜 체계를 지정해야 함 지정할 수 있는 프로토콜 체계의 종류 서비스 타입 #include <sys/types.h> #include <sys/socket.h> int socket ( int domain, // 프로토콜 체계 int type, // 서비스 타입 int protocol); // 소켓에 사용할 프로토콜 PF_INET // IPv4 프로토콜 체계 PF_INET6 // IPv6 프로토콜 체계 PF_UNIX // 유닉스 방식의 프로토콜 체계 PF_LOCAL // Local 통신을 위한 UNIX 프로토콜 체계 PF_PACKET // 리눅스에서 패킷 캡쳐를 위해 사용 SOCK_STREAM // TCP 소켓 (연결형) SOCK_DGRAM // UDP 소켓 (비연결형) SOCK_RAW // RAW 소켓

소켓의 타입 1 연결 지향형 소켓(SOCK_STREAM, TCP 소켓) Internet connection 신뢰성 있는 순차적인 바이트 기반의 연결 지향 전송 타입 전송하는 순서대로 데이터가 전달 에러나 데이터의 손실 없이 전달됨 전송되는 데이터의 경계가 존재하지 않음 Internet Network A connection Network B

소켓의 타입 2 Internet 비 연결 지향형 소켓(SOCK_DGRAM, UDP 소켓) 전송되는 순서에 상관없이 가장 빠른 전송을 지향 전송되는 데이터는 손실 될 수도 있고, 에러 발생 가능 전송되는 데이터의 경계가 존재 한번에 전송되는 데이터의 크기는 제한됨 Internet Network A Network B

프로그램 예제 확인 프로그램 예제 make_socket.c

주의 : 모든 데이터는 네트워크 바이트 순서로 저장 해야 한다. IPv4의 주소체계를 나타내는 구조체 클라이언트 또는 서버의 구체적인 주소를 표현을 위해 사용 주소체계 IP 주소 포트번호 struct sockaddr_in { sa_family_t sin_family; // 주소 체계 uint16_t sin_port; // 16비트 포트번호 struct in_addr sin_addr; // 32 비트 IP 주소 char sin_zero[8]; // 사용되지 않음 }; struct in_addr { uint32_t s_addr; // 32비트 IP 주소를 저장하는 구조체 }; 주의 : 모든 데이터는 네트워크 바이트 순서로 저장 해야 한다.

데이터 타입 Data type Description Header int8_t uint8_t int16_t uint16_t signed 8-bit int (signed char) unsigned 8-bit int (unsigned char) signed 16-bit int (signed short) unsigned 16-bit int (unsigned short) signed 32-bit int (signed long) unsigned 32-bit int (unsigned long) <sys/types.h> sa_family_t socklen_t address family length of struct <sys/socket.h> in_addr_t in_port_t IPv4 address, normally uint32_t TCP or UDP port, normally uint16_t <netinet/in.h>

바이트 순서 호스트 바이트 순서 컴퓨터가 내부 메모리에 숫자를 저장하는 순서 CPU의 종류에 따라 다름 80x86 : little-endian MC68000 : big-endian 네트워크 바이트 순서 포트번호나 IP 주소와 같은 정보를 바이트 단위로 전송하는 순서 high-order (big-endian) 로 전송 80x86과 MC68000 간의 데이터 전송 바이트 순서가 바뀜 0x12345678 Big-Endian Little-Endian 0x12 0x78 12 번지 0x34 0x56 13 번지 0x56 0x34 14 번지 0x78 0x12 15 번지

데이터 표현 방식에 따른 문제점 Big-Endian Little-Endian 0x1234 0x3412 0x12 0x12 12 번지 0x34 0x34 13 번지 0x1234 0x3412

네트워크 바이트 순서 Big-Endian Little-Endian 0x1234 0x1234 12 번지 0x34 0x12 13 번지 0x1234 0x1234

바이트 순서 변환 함수 -unsigned short integer (2바이트) 변환 unsigned short htons(unsigned short);  host-to-network 바이트 변환 unsigned short ntohs(unsigned short);  network-to-host 바이트 변환 - unsigned long integer (4바이트) 변환 unsigend long htonl(unsigned long);  host-to-network 바이트 변환 unsigned long ntohl(unsigned long);  network-to-host 바이트 변환 ‘h’ : host byte order ‘n’ : network byte order ‘s’ : short (16 bit) ‘l’ : long (32 bit)

프로그램 예제 확인 1. 프로그램 예제 endian_conv.c 2. 실행결과

Byte Manipulation Functions #include <string.h> void bzero (void *dest, size_t nbytes); void bcopy (const void *src, void *dest, size_t nbytes); int bcmp (const void *ptr1, const void *ptr2, size_t nbytes); #include <string.h> void *memset (void *dest, int c, size_t len); void memcpy (void *dest, const void *src, size_t nbytes); int memcmp (const void *ptr1, const void *ptr2, size_t nbytes);

실습과제 IP 주소를 입력 받아 해당값을 Big-endian과 Little-endian의 16진수 값으로 출력해주는 프로그램을 작성하시오. 입력값이 IP 주소 범위를 벗어나는 경우 예외처리 입력값이 IP 주소 형식을 벗어나는 경우 예외처리