Socket Address Structure and Byte Ordering Functions

Slides:



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

Network Lab. Byoung-Son, Choi
Understanding of Socket and File I/O
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험]
13장 소켓.
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
TCP Client/Server Program
Department of Computer Science and Engineering
TCP/IP 소켓 프로그래밍 - C 버전 중에서
Sockets Introduction and Protocol Setting
Department of Computer Engineering
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
Chapter 03. 소켓 주소 구조체 다루기.
Network Lab. Seoung Hyeon, Lee
Department of Computer Science and Engineering
컴퓨터 네트워크 PART 03 프로그래밍 (chapter 01 Socket 프로그래밍) 임효택
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
제 14장 Multicast & Broadcast
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Socket Address Structure and Byte Ordering Functions
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
Internet Address Conversion Functions
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
Understanding of Socket and File I/O
Department of Computer Engineering
Department of Computer Science and Engineering
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Department of Computer Engineering
Sockets Introduction and Protocol Setting
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
Network 네트워크 이론 및 실습 TCP / IP 4장.
Department of Computer Engineering
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
Understanding of Socket and File I/O
Chapter 27 Mobile IP.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
Chapter 03. 소켓 주소 구조체 다루기.
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Department of Computer Engineering
Network Lab. Young-Chul Hwang
Department of Computer Engineering
ARP.
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 memcopy (void *dest, const void *src, size_t nbytes); int memcmp (const void *ptr1, const void *ptr2, size_t nbytes);