한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실

Slides:



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

TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
한남대학교 컴퓨터공학과 소프트웨어공학실험실 최 용 준
Understanding of Socket and File I/O
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험]
Chapter 06. UDP 서버/클라이언트.
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
TCP Client/Server Program
Department of Computer Science and Engineering
TCP/IP 소켓 프로그래밍 - C 버전 중에서
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
TCP/IP Socket Cover Slide 조태문.
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
Chapter 03. 소켓 주소 구조체 다루기.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
Internet Address Conversion Functions
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
제 14장 Multicast & Broadcast
Department of Computer Engineering
Department of Computer Engineering
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
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
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 8 연결형 프로토콜 서버 발표자 : SE Lab 황 성 하
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Department of Computer Science and Engineering
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
14장. 포인터와 함수에 대한 이해.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Socket Address Structure and Byte Ordering Functions
UDP Test 프로그램 분석.
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
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
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
Chapter 04. TCP 서버/클라이언트.
3. 모듈 (5장. 모듈).
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Department of Computer Engineering
Presentation transcript:

한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실 Chapter 5. 소켓 주소 결합 Network Lab. 김 윤 수 한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실

목 차 bind(2) 함수의 목적 bind(2)함수의 사용 소켓주소 알아내기 동료소켓주소 알아내기 인터페이스 주소지정

Ipaddress + port number의 배정 Bind(2)함수의 목적 Socket에 이름(소켓주소)을 배정한다. Telephone Network (02)252-3404 전화번호의 배정 Ipaddress + port number의 배정 143.248.1.4:80

Bind(2)함수의 목적 IP 응용프로그램과 소켓 그리고 TCP/IP AP1 AP2 AP3 AP4 Application Layer Socket descriptor Socket Layer TCP UDP Transport Layer Port Number 3000 3001 3002 3003 IP Network Layer 143.248.1.80 Link Layer Network

Bind(2)함수의 사용 bind(2)함수의 개요 1. 앞의 socket(2) 호출에 의해 리턴된 소켓 파일 기술자 sockfd. 2. 소켓에 할당하기 위한 주소 구조체를 가르키는 my_addr. 3. bytes 단위의 주소(my_addr)구조체의 크기를 지정하는 addrlen #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr *my_addr, int addrlne);

Bind(2)함수의 사용-bind.c (The bind(2) function) 초기화 소켓생성/주소설정 주소 결합 소켓 주소 출력

Bind(2)함수의 사용-bind.c (The bind(2) function) 초기화 int z; /* Status return code */ int sck_inet; /* Socket */ struct sockaddr_in adr_inet;/* AF_INET */ int len_inet; /* length */ 소켓생성 sck_inet = socket(AF_INET,SOCK_STREAM,0);

Bind(2)함수의 사용-bind.c (The bind(2) function) AF_INET 주소 생성 memset(&adr_inet,0,sizeof adr_inet); adr_inet.sin_family = AF_INET; adr_inet.sin_port = htons(9000); inet_aton("127.0.0.24",&adr_inet.sin_addr); len_inet = sizeof adr_inet; 주소 결합 z = bind(sck_inet, (struct sockaddr *)&adr_inet, len_inet);

Bind(2)함수의 사용-bind.c (The bind(2) function) 결합된 소켓 주소출력 system("netstat -pa --tcp 2>/dev/null | " "sed -n '1,/^Proto/p;/bind/p'"); 에러 검출 함수 static void bail(const char *on_what) { perror(on_what); exit(1); }

Bind(2)함수의 사용-bind.c (The bind(2) function) 실행결과 shell> ./bind Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.24:9000 *:* CLOSE 17365/bind

소켓주소 알아내기 – getsockname(2) 이함수는 아래와 같은 세 개의 입력인자를 취한다. 소켓주소에 대한 질의를 위한 Socket S receiving 버퍼에 대한 포인터 (인자 이름) 최대 길이 변수에 대한 포인터. 이 변수는 버퍼(인자 namelen)에서 받을 수 있는 바이트단위의 최대 길이를 제공한다. 이 변수는 receiving 버퍼에 쓰여진 실제 바이트수를 가지고 업데이트 된다. #include <sys/socket.h> int getsockname(int s, struct sockaddr *name, socklen_t *namelen)

소켓주소 알아내기-sckname.c(getsockname(2)함수호출) 초기화 소켓생성/주소설정 socket() 주소 결합 bind() Sock_addr()함수호출 Getsockname(2)함수호출 소켓주소 알아내기 소켓 주소 출력

소켓주소 알아내기-sckname.c(getsockname(2)함수호출) 초기화 int z; /* Status return code */ int sck_inet; /* Socket */ struct sockaddr_in adr_inet;/* AF_INET */ int len_inet; /* length */ char buf[64]; /* Work buffer */ 소켓생성 sck_inet = socket(AF_INET,SOCK_STREAM,0);

소켓주소 알아내기-sckname.c(getsockname(2)함수호출) AF_INET 주소 생성 memset(&adr_inet,0,sizeof adr_inet); adr_inet.sin_family = AF_INET; adr_inet.sin_port = htons(9000); inet_aton("127.0.0.24",&adr_inet.sin_addr); len_inet = sizeof adr_inet; 주소 결합 z = bind(sck_inet, (struct sockaddr *)&adr_inet, len_inet);

소켓주소 알아내기-sckname.c(getsockname(2)함수호출) sock_addr 함수 호출 if ( !sock_addr(sck_inet,buf,sizeof buf) ) bail("sock_addr()"); 소켓 주소 출력 printf("Address is '%s'\n",buf); 실행결과 shell> ./sckname Address is '127.0.0.24:9000'

소켓주소 알아내기-sckname.c(getsockname(2)함수호출) sock_addr 초기화 char * sock_addr(int s,char *buf,size_t bufsiz) { int z; /* Status return code */ struct sockaddr_in adr_inet;/* AF_INET */ int len_inet; /* length */ . }

소켓주소 알아내기-sckname.c(getsockname(2)함수호출) 소켓 주소 알아내기 len_inet = sizeof adr_inet; z = getsockname(s, (struct sockaddr *)&adr_inet, &len_inet); 주소변환 snprintf(buf,bufsiz, "%s:%u", inet_ntoa(adr_inet.sin_addr), (unsigned)ntohs(adr_inet.sin_port));

동료 소켓주소 알아내기 getsockname(2) 함수의 개요 소켓주소에 대한 질의를 위한 Socket S receiving 버퍼에 대한 포인터 (인자 name) 최대 길이 변수에 대한 포인터. 이 변수는 버퍼(인자 namelen)에서 받을 수 있는 바이트단위의 최대 길이를 제공한다. 이 값은 receiving 버퍼에 쓰여진 바이트수를 가지고 업데이트 된다. #include <sys/sock.h> int getpeername(int s, struct sockaddr *name, socklen_t *namelen);

동료 소켓주소 알아내기 getpeer.c 초기화 소켓주소 알아내기 주소변환 예제5.3 getpeer.c – The getpeername(2) Function 초기화 소켓주소 알아내기 주소변환

동료 소켓주소 알아내기 getpeer.c getpeer.c 초기화 소켓 주소 알아내기 char * peer_addr(int s,char *buf,size_t bufsiz) { int z; /* Status return code */ struct sockaddr_in adr_inet;/* AF_INET */ int len_inet; /* length */ 소켓 주소 알아내기 len_inet = sizeof adr_inet; z = getpeername(s, (struct sockaddr *)&adr_inet, &len_inet);

동료 소켓주소 알아내기 getpeer.c 주소변환 z = snprintf(buf,bufsiz, "%s:%u", inet_ntoa(adr_inet.sin_addr), (unsigned)ntohs(adr_inet.sin_port));

External Organization 인터페이스 주소지정 특정 인터페이스를 이용하는 firewall의 예 External Organization Inernal Organization Firewall Firewall specific control program workstation Inerface B External Network user4 Inerface A External Network user2 Server user1 Server user3

인터페이스 주소지정 특정 인터페이스 주소 결합 Listing 5.4 binding a specific IP Interface 1. socket(2) 함수를 사용하여 소켓을 만든다. 2. 함수 bind(2)를 사용하여 지역 소켓에 대한 연결을 받아 들이려는 인터페이스의 IP주소를 결합한다. Listing 5.4 binding a specific IP Interface 소켓 만들기 sck_inet = socket(AF_INET,SOCK_STREAM,0); 소켓 주소 생성 adr_inet.sin_addr.s_addr = inet_addr("192.168.0.1"); 주소결합 z = bind(sck_inet, (struct sockaddr *)&adr_inet,len_inet);

인터페이스 주소지정 무작위 인터페이스 주소 결합 Listing 5.5 binding a specific IP Interface 1. socket(2)함수를 사용해서소켓을 만든다. 2.bind(2)함수를 사용해서 소켓에 IP 주소 INADDR_ANY를 결합한다. Listing 5.5 binding a specific IP Interface 소켓 만들기 sck_inet = socket(AF_INET,SOCK_STREAM,0); 소켓 주소 생성 adr_inet.sin_addr.s_addr = htonl(INADDR_ANY); 주소결합 z = bind(sck_inet, (struct sockaddr *)&adr_inet,len_inet);

인터페이스 주소지정 주소 지정 memset(&adr_inet,0,sizeof adr_inet); adr_inet.sin_family = AF_INET; adr_inet.sin_port = htons(9000); adr_inet.sin_addr.s_addr = htonl(INADDR_ANY); /* inet_addr("192.168.0.1"); */ if (adr_inet.sin_port == INADDR_NONE) abort(); /* Failed */