소켓의 생성과 프로토콜의 설정 School of Electronics and Information.

Slides:



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

Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
Java Socket 통신 이개혁 정대준.
TCP/IP 통신망 특론 3장 인터넷프로토콜( IP ).
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 버전 중에서
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
TCP/IP Socket Cover Slide 조태문.
Network 네트워크 이론 및 실습 TCP / IP 4장.
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
Chapter 03. 소켓 주소 구조체 다루기.
Domain Name System (DNS)
얇지만 얇지 않은 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)
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
Department of Computer Engineering
Chapter 02. 윈도우 소켓 시작하기.
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
(Web Programming & Practice)
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Term Project Team Member
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
School of Electronics and Information. Kyung Hee University.
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
UDP Test 프로그램 분석.
Linux Socket Programming - 도메인과 주소체계 -
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
IP(Internet Protocol)
Internet Address Conversion Functions
School of Electronics and Information. Kyung Hee University.
네트워크 프로그래밍의 이해 School of Electronics and Information.
User Datagram Protocol (UDP)
윤성우의 열혈 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.
제 11장 User Datagram Protocol(UDP)
Department of Computer Engineering
Chapter 03. 소켓 주소 구조체 다루기.
Department of Computer Engineering
Presentation transcript:

소켓의 생성과 프로토콜의 설정 School of Electronics and Information. Kyung Hee University. Dae Sun Kim <dskim@networking.khu.ac.kr>

프로토콜의 정의 컴퓨터(호스트) 상호간의 대화에 필요한 통신 규약 호스트 상호간에는 프로토콜에 대한 이해가 필요. 프로토콜은 잘 정의되어야 하며, 혼돈의 소지가 있으면 않된다. 이미 정의 되어 있는 프로토콜도 존재하며, 앞으로 우리도 많은 프로토콜을 설계 할 것이다.

소켓의 생성 소켓은 기본적인 통신의 도구이다. 프로토콜에 독립적이다. 데이터 전송 타입을 지정 해 줘야 한다. 연결 지향 소켓, 비 연결 지향 소켓. #include <sys/types.h> #include <sys/socket.h> int socket (int domain, int type, int protocol)

Low level socket을 위한 인터페이스 프로토콜 체계 프로토콜 체계 정 의 PF_INET IPv4 인터넷 프로토콜 PF_INET6 IPv6 인터넷 프로토콜 PF_LOCAL Local 통신을 위한 UNIX 프로토콜 PF_PACKET Low level socket을 위한 인터페이스 PF_IPX IPX 노벨 프로토콜

소켓의 타입 1 internet 연결 지향형 소켓(SOCK_STREAM, TCP 소켓) 두 가지 종류의 서버. 전송하는 순서대로 데이터가 전달된다. 에러나 데이터의 손실 없이 무사히 전달된다. 전송되는 데이터의 경계가 존재하지 않는다.. internet Network A connection Network B

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

프로토콜의 선택 CASE Domain Type Protocol 1 PF_INET SOCK_STREAM IPPROTO_TCP(0) 2 SOCK_DGRAM IPPROTO_UDP(0)

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

주소체계

서버 소켓 구현의 이해 인터넷상에 존재하는 호스트를 구분하기 위한 32비트 주소 체계

Port란 무엇인가? 호스트 내에서 실행되고 있는 프로세스(Process)를 구분 짓기 위한 16 비트의 논리적 할당(소켓에 할당된다). 16비트 이므로 값의 범위가 0 ~ 65536 이다. Well-known ports : 0 ~ 1023 chatting Chatting Client File 전송 FTP Client 211.217.204.103 FTP Server

주소정보의 표현 및 변환

주의 : 모든 데이터는 네트워크 바이트 순서로 저장 해야 한다. IPv4의 주소체계를 나타내는 구조체 struct sockaddr_in { sa_family_t sin_family; /* 주소 체계(AF_INET) */ uint16_t sin_port; /* port 정보 */ 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 int32_t uint_32_t signed 8-bit int unsigned 8-bit int signed 16-bit int unsigned 16-bit int signed 32-bit int unsigned 32-bit int <sys/types.h> sa_family_t socklen_t address family length of struct <sys/socket.h>

호스트 바이트 순서 0x12345678 Big-Endian Little-Endian 0x12 0x78 0x34 0x56 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 htons(unsigned short); unsigned short ntohs(unsigned short); unsigend long htonl(unsigned long); unsigned long ntohl(unsigned long); ‘h’ : host byte order ‘n’ : network byte order ‘s’ : short (16 bit) ‘l’ : long (32 bit)

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

인터넷 주소 조작 함수 FROM Dotted-Decimal Notation TO Big-Endian 32 비트 정수형 데이터 (Network) FROM Big-Endian 32 비트 정수형 데이터 (Network) TO Dotted-Decimal Notation unsigned long inet_addr(const char * string) char * inet_ntoa(struct in_addr addr)

프로그램 예제 inet_addr.c, inet_ntoa.c 2. 실행결과.

인터넷 주소 초기화 Template 1: struct sockaddr_in addr;      2: char *serv_ip="211.217.168.13";    3: char *serv_port="9190";      4: memset(&addr, 0, sizeof(addr_len));   5: addr.sin_family = AF_INET;   6: addr.sin_addr.s_addr = inet_addr(serv_ip);   7: addr.sin_port = htons(atoi(serv_port));

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); 6: addr.sin_port = htons(atoi(serv_port));

소켓에 주소 할당하기

주소 정보 할당하기 #include <sys/type.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr * myaddr, int addrlen); sockfd : 주소를 할당하고자 하는 소켓의 파일 디스크립터를 인자로 전달 myaddr : 할당하고자 하는 주소 정보를 지니고 있는 sockaddr_in 구조체 변수의 포인터를 인자로 전달 addrlen : 인자로 전달될 주소 정보 구조체의 길이를 전달

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

프로그램 예제 bind_sock.c 실행결과.