Linux Socket Programming - 도메인과 주소체계 -

Slides:



Advertisements
Similar presentations
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Advertisements

HANNAM Univ. 제 3 장 주소 체계와 데이터 정렬 Network Lab. Byoung-Son, Choi TCP/IP Socket Programming…
Part TCP / IP(계속) 3. IP 주소 4. IP 라우팅 5. 응용 프로토콜.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
인터넷의활용.
Network Lab. Byoung-Son, Choi
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
13장 소켓.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Network Lab. Young-Chul Hwang
연결리스트(linked list).
제 9 장 구조체와 공용체.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
Chapter 03. 소켓 주소 구조체 다루기.
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
제 14장 Multicast & Broadcast
Department of Computer Engineering
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
Socket Address Structure and Byte Ordering Functions
Chapter 21 Network Layer: ARP, ICMP (IGMP).
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Socket Address Structure and Byte Ordering Functions
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
Internet Address Conversion Functions
Chapter 06. UDP 서버/클라이언트.
Department of Computer Science and Engineering
FTP 프로그램의 활용 FTP 프로그램의 용도 인터넷 공간에 홈페이지 파일을 업로드할 때 필요
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Socket Address Structure and Byte Ordering Functions
CHAP 12. 리소스와 보안.
C#.
시스템 인터페이스 Lab3 Unix 사용법 실습.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
2장. 인터넷의 개념과 주소.
Internet Address Conversion Functions
School of Electronics and Information. Kyung Hee University.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Department of Computer Engineering
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
Chapter 27 Mobile IP.
라우터의 이해 (보충자료) TCP/IP구성 Ping명령어를 이용한 연결검사 비트와 바이트 10진수/2진수/16진수
3. 모듈 (5장. 모듈).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
제 4 장 Record.
Chapter 03. 소켓 주소 구조체 다루기.
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
13. 포인터와 배열! 함께 이해하기.
6 객체.
ARP.
Presentation transcript:

Linux Socket Programming - 도메인과 주소체계 - NETWORK Labs. 김 도 형 한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실

목 차 주소 체계의 이해 소켓 주소의 형태 Big-endian, Little-endian byte Ordering 의 차이 가상 지역 주소와 형태 소켓 주소가 필요하지 않을 때

이름없는 소켓 개 요 No dial U.S present’s office Soviet Union’s

이름없는 소켓(계속) 익명 호출 socketpair(2)에 의해 생성 주소를 갖지 않는 소켓을 생성 직접 연결되고 주소 불필요 예) 긴급전화와 같이 전화번호가 없어도 직접연결 원격소켓이 연결되기 위해 실제 주소가 필요 연결된 소켓 중 하나는 주소가 없다. 호출한 위치의 로컬 소켓은 알 수 없다.

이름없는 소켓(계속) 주소 생성 지역 주소 통신에 필요 서비스에 접속하기 위한 프로그램 필요 지역주소는 접속유지에 필요 고정주소가 배정되면 망 관리자의 작업증가

도메인 이해 socket(2) 함수 TCP/IP를 대신하여 사용 #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]);

도메인 이해(계속) protocol 구문 일반적으로 0 으로 지정 주소 그룹 함수 운영체제에서 domain에 기본 프로토콜로 사용 주소 그룹 함수 AF_접두어로 표시 domain 구문은 주소 계층을 사용하기 위해 선택

도메인 이해(계속) 소켓 주소 형성 통신 프로토콜의 조건 도메인 형태 AF_접두사는 주소 체계 표시 자신의 네트워킹 주소 형태 주소계층은 사용되는 주소의 형태를 표시 도메인 형태 AF_LOCAL AF_UNIX AF_INET AF_접두사는 주소 체계 표시 도메인 구분은 주소 체계로 선택

소켓 주소 형태 소켓 주소 생성 BSD소켓 인터페이스 주소구조를 받아들일 포인터 타입( void *)이 없다. ANSI-C표준 미적용 주소구조를 받아들일 포인터 타입( void *)이 없다. C언어에 의해서 일반적인 주소 구조로 정의 # include <sys/socket.h>

소켓 주소 형태(계속) 소켓 주소생성 struct sockaddr { Sa_family_t sa_family; /* 주소 계층*/ Char sa_data[14] /* 주소 데이터*/ }; sa_family_t 는 리눅스 기반의 2바이트 정수 주소 데이터 sa_data[14]는 나머지 14바이트를 표시 전체 구조는 16바이트

소켓 주소 형태(계속) 소켓 주소 생성 (계속) 소켓 주소생성 개요 묘사 sa_data[14] sa_family

소켓 주소 형태(계속) 다른 주소 구문과 일치 모든 주소가 sa_family 멤버 같은 로케이션내에서 선언 레퍼런스 모델을 제공 모든 주소가 sa_family 멤버 같은 로케이션내에서 선언 원소들이 주소에서 남아 있는 바이트의 크기가를 판단하는데 필요

지역주소 형태 개 요 Linux가 실행되는 HOST 소켓에 사용 프린터로 출력되는 lpr(1) 명령에서 사용됨. PC의 지역 소켓이 통신 지역 통신을 위한 TCP/IP 사용도 가능.

지역 주소 형태(계속) 개 요(계속) 지역 주소 계층은 AF_UNIX도메인을 참조 Linux 커널 2.2.0이후로 추상 소켓이름을 지원함 구문의 명칭 – sockaddr_un AF_LOCAL또는 AF_UNIX주소 이름

지역 주소 형태(계속) 개 요(계속) struct sockaddr_un { Sa_family sun_family; /* 주소 계층*/ Char sun_path[108]; /* 경로명 */ }; sun_family 는 AF_LOCAL또는 AF_UNIX를 선언 scokaddr_un 규칙에 따라 값을 표현 sun_path[108]는 UNIX 경로명을 포함 문자 배열의 끝에 null byte가 필요치 않음

지역 주소 형태(계속) 일반적인 지역 주소의 형태 이름공간의 주소는 파일시스템의 경로명 경로명의 의한 소켓의 프로세서이름 경로명의 구성요소로 접근 디렉토리명에서 마지막 소켓 오브젝트 생성 권한을 갖음

지역 주소 형태(계속) 일반적인 지역 주소의 형태 /dev/printer의 AF_LOCAL/AF_UNIX 주소 / d e v Sun_family=AF_LOCAL Sun_path[108]

지역 주소 형태(계속) 일반적인 지역 주소의 형태 첫째 2바이트는 AF_LOCAL의 주소타입을 표시 null문자가 아닌 나머지 바이트는 /dev/printer 문자 C 코드는 주소를 초기화 프로그램은 자료 입력 전 모두 0으로 초기화 memset(3) 함수를 사용해서 종료. struct sockaddr_un unaddr; memset (&uaddr, 0, sizeof uaddr); 위 함수 호출은 주소 계층을 모두 0으로 바꿈

지역 주소 형태(계속) af_unix.c Sck_unix 선언 경로명 /tmp/my_sock 복사 adr_unix - 지역주소구조 정의 주소길이 계산 Socket(2)에 의해 소켓 생성 소켓 생성 Unlink(2) 호출 Netstat(1) invoke Adr_unix를 0으로 변환 소켓 종료 UNIX경로명 생성 AF_UNIX 초기화

지역 주소 형태(계속) 가상 지역 주소 AF_UNIX소켓은 항상 파일 시스템 객체가 포함 bind(2)호출에 의해 원래 파일 시스템 객체가 제거되지 않고 같은 이름이 사용되면 할당되지 않음 리눅스 커널 2.2는 지역 주소에 대한 가상 명칭가능 경로명의 첫번째 바이트를 null로 만듦

지역 주소 형태(계속) af_unix2.c

지역 주소 형태(계속) 주 의 AF_LOCAL, AF_UNIX를 리눅스의 SUN_LEN()매크로를 이용하면 첫번째 바이트는 null이 아님

인터넷(IPv4) 소켓 주소 형태 개 요 일반적으로 사용하는 리눅스 기반 주소계층은 AF_INET 계열 TCP/IP네트워크 이외의 다른 호스트와 통신하기 위해 IPv4를 제공 socketaddr_in 구문을 정의하는 include파일은 C언어에 의해 정의 #include <netient/in.n>

인터넷(IPv4) 소켓 주소 형태(계속) 개 요 struct sockaddr_in { sa_family_t sin_family; /* 주소계층 */ uinet16_t sin_port; /* 포트 번호*/ struct in_addr sin_addr; /* 인터넷 주소*/ unsigned char sin_zero[8] /* pad bytes */ }; Struct in_addr { unit32_t s_addr; /* 인터넷 주소*/

인터넷(IPv4) 소켓 주소 형태(계속) 개 요(계속) sin_family멤버는 sa_ family와 같은 저장공간을 공유 sin_family의 값은 AF_INET값을 초기화 sin_port멤버는 소켓 주소의 TCP/IP포트를 정의 network byte order에 값이 존재 in _addr는 32비트의 부호가 없는 정수로 이루어져 있음 나머지 8바이트는 sin_zero[8]에 의한 16바이트로 삽입

인터넷(IPv4) 소켓 주소 형태(계속) 개 요 Sin_zero[8] Sin_family=AF_INET sin_port sin_addr Network Byte Order sin_addr멤버가 4byte를 사용하므로 sin_prot멤버가 2바이트로 사용됨. sin_port, sin_addr값은 network byte order에 있으므로 태그를 표시

인터넷(IPv4) 소켓 주소 형태(계속) Network Byte Order 이해 종류가 다른 CPU구조들은 16또는 32비트이상의 정수 생성을 위해 데이터의 다중바이트 분류에 많은 다른 방법을 사용 대표적인 방법 big-endian little -endian

인터넷(IPv4) 소켓 주소 형태(계속) Network Byte Order이해 (계속) 0x1234의 표현 Big Endian Little Endian 0x12 0x34 Big Endian Order 0x34 0x12 Little Endian Order

인터넷(IPv4) 소켓 주소 형태(계속) Network Byte Order이해 (계속) 중요한 바이트를 어느쪽으로 두느냐에 따라서 Big-Endian , Little-Endian으로 구별 Intel CPU는 하위 바이트를 처음 두는 Little-Endian 사용. Motolora 68000시리즈는 Big-Endian 사용 만약 Big-Endian와 Little-Endian사용 시 사전에 확인 사전 확인 없이 사용하면 0x3412의 값은 4660대신 13330으로 표현됨

인터넷(IPv4) 소켓 주소 형태(계속) Network Byte Order이해 (계속) 네트워크전송시 Big-endian을 사용, 문제 해결 이 규칙을 따르면 모든 소프트웨어는 통신이 가능 AF_INET번지로 통신 TCP/IP포트 번호(in_port), IP번호(sin_addr)는 네트워크 바이트 오더에 존재

인터넷(IPv4) 소켓 주소 형태(계속) Endian 변환 Intel CPU용 little-endian 바이트 16bit 변환 #include < netinet/in.h > unsigned long htonlunsigned long hostlong ) ; unsigned short htons ( unsigned short hostshort ) ; unsigned long ntohl ( unsigned long netlong ) ; unsigned short ntohs ( unsigned short netshort ) ;

인터넷(IPv4) 소켓 주소 형태(계속) Endian 변환(계속) 네트워크 오더를 위해서 아래와 같은 함수를 사용 short host_short = 0x1234; short netw_short; netw_short = htons(host_shrt); netw_short는 네크워크 오더를 위해 적당한 값을 갖는다. netw_short를 호스트에서 사용하기 위한 변환 host_short = ntohs(netw_short);

인터넷(IPv4) 소켓 주소 형태(계속) 인터넷 주소 초기화 원격서비스에 연결할 때 호스트가 2개 이상의 각각 IP를 갖고 있는 NIC를 갖고 있을 때. 커널이 로컬포트 번호를 할당할 때 sin_prot 는 0으로 초기화

인터넷(IPv4) 소켓 주소 형태(계속) 인터넷 주소 초기화 예제 2.8 struct socketaddr_in adr_inet; int adr_len; memset(&adr_inet,0,sizeof adr_inet); adr_inet.sin_family = AF_INET; adr_inet.sin+port = ntohs(0); adr_inet.sin_addr.s_addr = ntohl(INADDR_ANY); adr_len = sizeof adr_inet;

인터넷(IPv4) 소켓 주소 형태(계속) 인터넷 주소 초기화(계속) adr_inet는 sockaddr_in 구문을 이용해서 정의 adr_inet는 memset(3)에 의해 0 입력 AF_INET이 adr_inet.sin_family로 의한 주소 계층 성립 ntohs(3) 함수로 endian변환 htohl(3) 함수로 endian 변환 adr_inet구문으로 주소크기 단순화

인터넷(IPv4) 소켓 주소 형태(계속) 인터넷 주소 초기화(계속) 일반적으로 사용되는 루프 백 IP 동일 호스트에서 다른 프로세스간의 통신 설정 adr_inet.sin_addr.s_addr = ntohl(INADDR_LOOPBACK);

인터넷(IPv4) 소켓 주소 형태(계속) 특정 인터넷 주소 초기화 인터넷 주소는 고정된 길이 AF_LOCAL주소의 길이는 유동적 AF_INET주소는 C언어에서 소켓의 크기를 선언 sizeof(struct sockaddr_in)

X.25주소 설명 X.25 주소 지정 소켓 인터페이스는 리눅스에서 거의 사용되지 않는 다른 프로토콜을 사용가능하게 함. sockaddr_x25구문으로 x.25프로토콜을 규정 sruct sockaddr_x25 { sa_family_t sx25_family; /* AF_X25 */ x25_address sx25_addr; /* X.121 Address */ }; typedef struct { char x25_addr[16]: } x25_address;

X.25주소 설명 sx25_family는 일반적인 소켓 구조의 처음 2바이트를 점유하고 AF_X25값을 갖고 있어야 함 X.25 네트워크 주소는 연속된 10진 숫자로 이루어져야 함 (X.121표준)

X.25주소 설명(계속) listing 2.11

X.25주소 설명(계속) 프로그램이 수행시 netstat(1)을 호출 하지 않음 netstat(1)이 AF_X25소켓에 전달하지 않음 /proc/net/x25의 내용을 표시하기 위해 cat(1)사용 커널을 컴파일 하여 proc파일 시스템을 컴파일 하여야 함

다른 주소 계층 설명 다른 주소계층의 지정 리눅스에서 지원하는 주소계층 각각 프로토콜은 시스템에 커널에 직접 컴파일 주의 AF_INET6 – 개발되고 있는 IPv6 AF_AX25 – X.25 아마추어 무선(HAM) 프로토콜 AF_APPLETALK – 리눅스용 AppleTalk 프로토콜 각각 프로토콜은 시스템에 커널에 직접 컴파일 주의 불완전하거나 시험적인 프로토콜은 시스템에 악영향을 미침

AF_UNSPEC 주소 계층 개 요 AF_UNSPEC은 지정하지 않은 주소 계층을 표현함 다른 프로토콜과 주소계층을 갖고 프로그램 작성하려면 지정되지 않은 주소계층을 표시할 방법 필요

다른 주소 계층 설명(계속) union { sockaddr sa; sockaddr_un un; sockaddr_in in; sockaddr_x25 x25; full_sockaddr_ax25 ax25; sockaddr_atalk at; } u;

AF_UNSPEC 주소 계층(계속) 어떤 변수가 입력 전에 union을 초기화 프로그램 종료 후, AF_INET주소로 이동 u.sa.sa_family = AF_UNSPEC; 프로그램 종료 후, AF_INET주소로 이동 u.in.sin_family = AF_INET; 주소계층을 알지 못할 때 AF_UNSPEC는 안전장치처럼 작용한다.