SlideShare a Scribd company logo
1 of 69
Download to read offline
소켓 프로그래밍 기초
2014.11.28
노래방기계
201021448 김광민
201021395 유용우
UNIX PROGRAMMING
1. TCP/IP 개요
2. IP 주소와 호스트명
3. 포트번호
4. 소켓프로그래밍 기초
5. 소켓 인터페이스 함수
6. 유닉스 도메인 소켓 예제
7. 인터넷 소켓 예제
8. 연습문제
목차
UNIX PROGRAMMING
소켓 프로그래밍 기초
TCP / IP 개요
3 / 69
응용 계층
전송 계층
네트워크 계층
네트워크 접속 계층
하드웨어
SMTP, Telnet,
FTP, HTTP
TCP, UDP
IP, ARP, ICMP
이더넷, FDDI
TCP / IP 계층 UNIX PROGRAMMING
소켓 프로그래밍 기초
TCP / IP 개요
4 / 69
TCP/UDP 프로토콜 비교
UNIX PROGRAMMING
TCP UDP
연결지향형(connection-oriented) 비연결형(connectionless)
신뢰성(reliability) 보장 신뢰성 보장하지 않음
흐름 제어 기능(flow-control) 제공 흐름 제어 기능 없음
순서 보장(sequence) 순서 보장 하지 않음(no sequence)
신뢰성 있는 데이터 전송 스트리밍 서비스에 주로 사용됨
소켓 프로그래밍 기초
TCP / IP 개요
5 / 69
UNIX PROGRAMMING
응용 프로그램
소켓 인터페이스
TCP/UDP
IP
Ethernet
응용 프로그램
소켓 인터페이스
TCP/UDP
IP
EthernetInternet
라우터 라우터
Socket Interface를 이용한
통신 구조
IP주소와 호스트명
6 / 69
IP 주소
127.0.0.1
인터넷을 이용할 때 사용하는 주소로 점(.)으로 구분된 32비트 숫자
UNIX PROGRAMMING
소켓 프로그래밍 기초
IP주소와 호스트명
7 / 69
호스트명
www.catholic.ac.kr
호스트명 도메인명
UNIX PROGRAMMING
소켓 프로그래밍 기초
호스트명과 IP 주소 변환
8 / 69
file을 먼저 찾아봄 -> /etc/hosts
/etc/nsswitch.conf
파일에서 찾지 못하면? -> DNS 서비스를 이용함
유닉스에서는 호스트명과 IP 주소를 변환하는 함수를 여러가지 형태로 제공한다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
hosts: files dns
호스트명과 IP 주소 읽어오기
9 / 69
#include <netdb.h>
struct hostent* gethostent(void);
int sethostent(int stayopen);
int endhostent(void);
UNIX PROGRAMMING
소켓 프로그래밍 기초
호스트명과 IP 주소 읽어오기
10 / 69
struct hostent* gethostent(void);
host명과 IP 주소를 읽어서 hostent 구조체에 저장하고
그 주소를 리턴한다.
struct hostent {
char* h_name;
char** h_aliases;
int h_addrtype;
int h_length;
char** h_addr_list;
};
호스트명 저장
호스트를 가리키는데 사용하는 다른 이름 저장
호스트 주소 형식 지정
주소의 길이
해당 호스트의 주소 목록 저장
UNIX PROGRAMMING
소켓 프로그래밍 기초
호스트명과 IP 주소 읽어오기
11 / 69
int sethostent(int stayopen);
stayopen 값이 true면
- 연결된 TCP 소켓이 네임 서버 질의를 위해 사용 되어야 한다는 것을 가리
킨다.
DB의 현재 읽기 위치를 시작 부분으로 재설정하는 함수.
int endhostent(void);
DB를 닫는다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
호스트명과 IP 주소 읽어오기
12 / 69
ex11_1.c
호스트 파일의 처음으로 읽기 위치 설정
호스트 파일에서
차례로 호스트명을 출력
호스트 파일을 닫음
<출력 결과>
UNIX PROGRAMMING
소켓 프로그래밍 기초
호스트명으로 정보 검색
13 / 69
#include <netdb.h>
struct hostent* gethostbyname(const char *name);
host명을 인자로 받아 데이터베이스에서 해당 항목을 검색해
hostent 구조체에 저장하고 그 주소를 리턴한다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
IP 주소로 정보 검색
14 / 69
#include <netdb.h>
struct hostent* gethostbyaddr(const char* addr, int len,
int type);
IP 주소를 인자로 받아 DB에서 해당 항목을 검색해 hostent
구조체에 저장하고 그 주소를 리턴한다.
type은 주소의 형식으로 <sys/socket.h> 파일에 정의된 주소
형식중 하나를 지정해야 한다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
IP 주소로 정보 검색
15 / 69
<sys/socket.h>
/usr/src/linux-headers-3.2.0-23/include/linux/socket.h
UNIX PROGRAMMING
소켓 프로그래밍 기초
포트 번호
16 /69
0번 ~ 1023번: 잘 알려진 포트 (well-known port)
1024번 ~ 49151번: 등록된 포트 (registered port)
49152번 ~ 65535번: 동적 포트 (dynamic port)
프로그램 간 상호 정보 교환시 파일이나 임시 저장소를 거치지
않고 직접 연결하기 위한 가상의 논리적 접속
UNIX PROGRAMMING
소켓 프로그래밍 기초
포트 정보 읽어오기
17 / 69
#include <netdb.h>
struct servent* getservent(void);
int setservent(int stayopen);
int endservent(void);
UNIX PROGRAMMING
소켓 프로그래밍 기초
포트 정보 읽어오기
18 / 69
struct servent* getservent(void);
포트 정보를 읽어서 servent 구조체에 저장하고 그 주소를 반환
struct servent {
char* s_name;
char** s_aliases;
int s_port;
char* s_proto;
};
포트명 저장
해당 서비스를 가리키는데 사용하는 다른 이름 저장
포트 번호 저장
서비스에 사용하는 프로토콜의 종류
UNIX PROGRAMMING
소켓 프로그래밍 기초
포트 정보 읽어오기
19 / 69
int setservent(int stayopen);
stayopen 값이 true면
- 포트 정보 데이터베이스를 열어둠.
DB의 현재 읽기 위치를 시작 부분으로 재설정하는 함수.
int endservent(void);
DB를 닫는다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
포트 정보 읽어오기
20 / 69
ex11_2.c
호스트 파일의 처음으로 읽기 위치 설정
처음 10개의 포트 정보를
차례로 읽어 출력
DB를 닫음
<출력 결과>
UNIX PROGRAMMING
소켓 프로그래밍 기초
서비스명으로 정보 검색
21 / 69
#include <netdb.h>
struct servent* getservbyname(const char *name,
const char* proto);
getservbyname 함수는 포트명을 인자로 받아 DB에서 해당 항목을
검색해서 servent 구조체에 저장하고 그 주소를 리턴한다.
두 번째 인자인 proto에는 “tcp”나 “udp” 또는 NULL을
지정한다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
IP 주소로 정보 검색
22 / 69
#include <netdb.h>
struct servent* getservbyport(int port,
const char* proto);
getservbyport 함수는 포트 번호를 인자로 받아 DB에서 해당
항목을 검색해 servent 구조체에 저장하고 그 주소를 리턴한다.
두 번째 인자인 proto에는 “tcp”나 “udp” 또는 NULL을
지정한다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓 프로그래밍 기초
23 / 69
소켓은 응용 계층과 전송 계층을 연결하는 기능을 제공하는
프로그래밍 인터페이스이다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓의 종류
24 / 69
소켓은 같은 호스트에서 프로세스 사이에 통신할 때 사용하는
유닉스 도메인 소켓과 인터넷을 통해 다른 호스트와 통신할 때
사용하는 인터넷 소켓이 있다.
AF_UNIX : 유닉스 도메인 소켓
AF_INET : 인터넷 소켓
UNIX PROGRAMMING
소켓 프로그래밍 기초
포트 정보 읽어오기
25 / 69
ex11_2.c
호스트 파일의 처음으로 읽기 위치 설정
처음 10개의 포트 정보를
차례로 읽어 출력
DB를 닫음
<출력 결과>
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓의 통신 방식
26 / 69
TCP/IP 프로토콜에서 전송 계층에서 사용하는 프로토콜로는
TCP와 UDP가 있다. 소켓을 이용할 때도 하부 프로토콜로
TCP/UDP의 사용을 선택해야 한다.
SOCK_STREAM : TCP 프로토콜 사용
SOCK_DGRAM : UDP 프로토콜 사용
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓 구조체
27 / 69
소켓을 이용한 프로그래밍에서는 소켓의 종류와 IP 주소, 포트
번호 등을 지정하기 위한 구조체를 사용한다.
struct sockaddr_un {
sa_family_t sun_family;
char sun_path[108];
};
AF_UNIX
경로명
<구조체 정의(un.h)>
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓 구조체
28 / 69
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
};
AF_INET
포트명
struct in_addr {
in_addr_t s_addr;
};
32bit IP Address
in_addr 구조체
UNIX PROGRAMMING
소켓 프로그래밍 기초
바이트 순서(Byte ordering)
29 / 69
빅 엔디언 방식 리틀 엔디언 방식
메모리의 낮은 주소에 정수의
첫 바이트를 저장
TCP/IP의 바이트 순서
메모리의 높은 주소에 정수의
첫 바이트를 저장
Intel의 바이트 순서
0x12345678 저장?
[0] [1] [2] [3]
0x12 0x34 0x56 0x78
[0] [1] [2] [3]
0x78 0x56 0x34 0x12
UNIX PROGRAMMING
소켓 프로그래밍 기초
바이트 순서(Byte ordering)
30 / 69
데이터 전이도
클라이언트 서버
0x78 0x56 0x34 0x12
0x12 0x34 0x56 0x78 0x12 0x34 0x56 0x78
0x78 0x56 0x34 0x12
BYTE ORDER 변경 BYTE ORDER 변경
TCP/IP에서
데이터 전송
HBO(Host Byte Order)
NBO(Network Byte Order) NBO(Network Byte Order)
UNIX PROGRAMMING
소켓 프로그래밍 기초
바이트 순서 함수
31 / 69
#include <sys/types.h>
#include <netinet/in.h>
#include <inttypes.h>
uint32_t htonl(unit32_t hostlong);
uint16_t htons(unit16_t hostshort);
uint32_t ntohl(unit32_t netlong);
uint16_t ntohs(unit16_t netshort);
htonl 함수는 32비트 HBO를 32비트 NBO로 변환한다.
htons 함수는 16비트 HBO를 16비트 NBO로 변환한다.
ntohl 함수는 32비트 NBO를 32비트 HBO로 변환한다.
ntohs 함수는 16비트 HBO를 16비트 NBO로 변환한다.
UNIX PROGRAMMING
소켓 프로그래밍 기초
NBO를 HBO로 변환하기
32 / 69
ex11_2.c
호스트 파일의 처음으로 읽기 위치 설정
처음 10개의 포트 정보를
차례로 읽어 출력
DB를 닫음
<출력 결과>
ntohs 함수
UNIX PROGRAMMING
소켓 프로그래밍 기초
HBO를 NBO로 변환하기
33 / 69
ex11_2.c
telnet이라는 이름으로 검색함
21 포트를 검색함
DB를 닫음
<출력 결과>
UNIX PROGRAMMING
소켓 프로그래밍 기초
IP 주소의 형태
34 / 69
192.168.0.1
IP 주소는 점 형태로 구분된다.
시스템 내부에 IP가 저장될 때에는 binary 값으로 변환하여 저장됨.
UNIX PROGRAMMING
소켓 프로그래밍 기초
문자열 형태의 IP를 숫자 형태로 변환
35 / 69
inet_addr 함수는 IP 주소를 문자열로 받아 이를 binary 값으로
변환하여 리턴한다.
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
UNIX PROGRAMMING
소켓 프로그래밍 기초
구조체 형태의 IP를 숫자 형태로 변환
36 / 69
inet_addr 함수는 IP 주소를 구조체로 받아 이를 binary 값으로
변환하여 리턴한다.
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
char* inet_ntoa(const struct in_addr in);
UNIX PROGRAMMING
소켓 프로그래밍 기초
IP 주소 변환하기
37 / 69
문자열로 된 IP 주소를 binary 형태로 변환
정수형으로 변환된 IP 주소로 정보를 검색함
호스트명 출력
구조체 형태의 IP 주소를 변환
<출력 결과>
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓 인터페이스 함수
38 / 69
소켓 인터페이스 함수
socket : 소켓 파일기술자 생성
bind : 소켓 파일기술자를 지정된 IP 주소/포트번호와 결합
listen : 클라이언트의 접속 요청 대기
connect : 클라이언트가 서버에 접속 요청
accept : 클라이언트의 접속 허용
recv : 데이터 수신(SOCK_STREAM)
send : 데이터 송신(SOCK_STREAM)
recvfrom : 데이터 수신(SOCK_DGRAM)
sendto : 데이터 송신(SOCK_DGRAM)
close : 소켓 파일기술자 종료
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓 인터페이스 함수
39 / 69
socket()
bind()
listen()
accept()
recv()
send()
close()
socket()
connect()
send()
recv()
close()
소켓 파일기술자 생성
소켓 파일기술자를 지정된
IP 주소/포트번호와 결합
클라이언트의 접속 요청 대기
클라이언트가 서버에
접속 요청
클라이언트의 접속 허용
데이터 수신
(SOCK_STREAM)
데이터 송신
(SOCK_STREAM)
소켓 파일기술자 종료
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓 생성하기
40 / 69
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain : 소켓 종류(AF_UNIX, AF_INET)
type : 통신방식(TCP, UDP)
protocol : 소켓에 이용할 프로토콜
UNIX PROGRAMMING
소켓 프로그래밍 기초
소켓에 이름 지정하기
41 / 69
#include <sys/types.h>
#include <sys/socket.h>
int bind(int s, const struct sockaddr* name, int namelen);
s : socket 함수가 생성한 소켓 디스크립터
name : 소켓의 이름을 표현하는 구조체
namelen : name의 크기
UNIX PROGRAMMING
소켓 프로그래밍 기초
클라이언트 기다리기
42 / 69
#include <sys/types.h>
#include <sys/socket.h>
int listen(int s, int backlog);
s : socket 함수가 생성한 소켓 디스크립터
backlog : 최대 허용 클라이언트 수
UNIX PROGRAMMING
소켓 프로그래밍 기초
연결 요청 수락하기
43 / 69
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, socklen_t
*addrlen);
s : socket 함수가 생성한 소켓 디스크립터
addr : 접속을 수락한 클라이언트의 IP 정보
addrlen : addr의 크기
UNIX PROGRAMMING
소켓 프로그래밍 기초
서버와 연결하기
44 / 69
#include <sys/types.h>
#include <sys/socket.h>
int connect(int s, const struct sockaddr *name, int
namelen);
s : socket 함수가 생성한 소켓 디스크립터
name : 접속을 수락한 클라이언트의 IP 정보
namelen : name의 크기
UNIX PROGRAMMING
소켓 프로그래밍 기초
데이터 보내기
45 / 69
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int s, const void *msg, size_t len, int flags);
s : socket 함수가 생성한 소켓 디스크립터
msg : 전송할 메시지를 저장한 메모리 주소
len : 메시지의 크기
flags : 데이터를 주고받는 방법을 지정한 플래그
UNIX PROGRAMMING
소켓 프로그래밍 기초
데이터 받기
46 / 69
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int s, void *buf, size_t len, int flags);
s : socket 함수가 생성한 소켓 디스크립터
buf : 전송받은 메시지를 저장한 메모리 주소
len : 버퍼의 크기
flags : 데이터를 주고받는 방법을 지정한 플래그
UNIX PROGRAMMING
소켓 프로그래밍 기초
유닉스 도메인 소켓 예제(서버)
47 / 69
socket 생성
socket 주소 구조체에 값 지정
소켓 디스크립터와 소켓을 합침
클라이언트의 접속을 대기함
UNIX PROGRAMMING
소켓 프로그래밍 기초
유닉스 도메인 소켓 예제(서버)
48 / 69
클라이언트 접속 수용
클라이언트가 보낸 메시지를 버퍼에 복사함
버퍼를 출력
UNIX PROGRAMMING
소켓 프로그래밍 기초
유닉스 도메인 소켓 예제(클라이언트)
49 / 69
socket 생성
socket 주소 구조체에 값 지정
server에 연결 요청
server에 Data send
<서버 출력 결과>
UNIX PROGRAMMING
소켓 프로그래밍 기초
인터넷 소켓 예제(클라이언트)
50 / 69
socket 생성
socket 주소 구조체에 값 지정
server에 연결 요청
server에서 Data를 받음
버퍼에 받은 메시지 출력
UNIX PROGRAMMING
소켓 프로그래밍 기초
인터넷 소켓 예제(서버)
51 / 69
socket 생성
socket 주소 구조체에 값 지정
socket과 주소를 합침
클라이언트 접속 대기
UNIX PROGRAMMING
소켓 프로그래밍 기초
인터넷 소켓 예제(서버)
52 / 69
클라이언트 연결
클라이언트로 데이터 보내기
소켓 디스크립터 close
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제
UNIX PROGRAMMING
연습문제 08
• 조건1) /etc/hosts에 특정 호스트가 있는지 확인
• 조건2) 해당 호스트가 없으면 DNS 조회하여 결과 출력
=> 특정 호스트의 IP주소를 출력하는 프로그램 작성
54 / 69
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 08
• 조건1) 서버는 클라이언트 메시지를 받아 응답을 한다.
• 조건2) 클라이언트 'q' 를 누를 때 까지 반복한다.
55 / 69
호스트 관련 라이브러리 헤더 파일 선언
host를 받아 IP를 조회 (hosts->DNS)
IP정보를 in_addr 구조체로 복사
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 08
• 실행 결과
56 / 69
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
• 조건1) 서버는 클라이언트에서 접속이 가능해야 한다.
• 조건2) 서버는 클라이언트의 메시지를 받아 응답을 한다.
• 조건3) 클라이언트가 'q' 를 누를 때 까지 접속이 유지된다.
• 조건4) 서버는 'q' 를 입력 받으면 연결을 종료한다.
=> 클라이언트의 입력을 돌려주는 echo 프로그램 구현
57 / 69
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
58 / 69
Host, Socket 관련 라이브러리 헤더 파일 선언
사용할 포트를 사용자로부터 입력 받아 실행
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
59 / 69
소켓 생성
소켓 기술자와 소켓 구조체 메모리를 매핑
구조체 초기화 및 주소 세팅
클라이언트의 접속을 기다리는 대기 모드로 설정
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
60 / 69
클라이언트와 연결 수립
클라이언트의 메시지를 다시 돌려줌
‘q’를 입력받으면 연결 종료
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
• 실행 결과
61 / 69
Server
Client
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
62 / 69
시 연
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 09
• 조건1) 서버는 클라이언트에서 접속이 가능해야 한다.
• 조건2) 서버는 클라이언트에서 파일명을 입력 받는다.
• 조건3) 서버는 해당 파일명이 존재하는지 확인한다.
• 조건4) 존재한다면 서버는 해당 파일의 내용을 전송한다.
=> 서버의 특정 파일의 내용을 클라이언트로
전송하는 프로그램 작성
63 / 69
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 10
64 / 69
Host, Socket 관련 라이브러리 헤더 파일 선언
사용할 포트를 사용자로부터 입력 받아 실행
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 10
65 / 69
소켓 생성
소켓 기술자와 소켓 구조체 메모리를 매핑
구조체 초기화 및 주소 세팅
클라이언트의 접속을 기다리는 대기 모드로 설정
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 10
66 / 69
파일 기술자 수립
클라이언트로 데이터를 256byte씩 전송
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 10
• 실행 결과
67 / 69
Server
Client
UNIX PROGRAMMING
소켓 프로그래밍 기초
연습문제 10
68 / 69
시 연
UNIX PROGRAMMING
소켓 프로그래밍 기초
감사합니다 노래방기계 – 김광민, 유용우
UNIX PROGRAMMING

More Related Content

What's hot

[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?
용민 박
 
Icmp Attak Against Tcp
Icmp Attak Against TcpIcmp Attak Against Tcp
Icmp Attak Against Tcp
xyzlee
 
네트워크의 개념
네트워크의 개념네트워크의 개념
네트워크의 개념
Chulgyu Shin
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit)
ymtech
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
문익 장
 

What's hot (20)

[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
Python socket programming
Python socket programmingPython socket programming
Python socket programming
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
 
Python Network Programming
Python Network ProgrammingPython Network Programming
Python Network Programming
 
Icmp Attak Against Tcp
Icmp Attak Against TcpIcmp Attak Against Tcp
Icmp Attak Against Tcp
 
Ryu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic MonitorRyu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic Monitor
 
네트워크의 개념
네트워크의 개념네트워크의 개념
네트워크의 개념
 
스트리밍 프로토콜
스트리밍 프로토콜스트리밍 프로토콜
스트리밍 프로토콜
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim
 
Network researching
Network researchingNetwork researching
Network researching
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명
 
DPDK
DPDKDPDK
DPDK
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit)
 
ACL - cisco 2811 router
ACL - cisco 2811 router ACL - cisco 2811 router
ACL - cisco 2811 router
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
 
네트워크 기본
네트워크 기본네트워크 기본
네트워크 기본
 
Tcpdump
TcpdumpTcpdump
Tcpdump
 
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
 
Linux tutorial
Linux tutorialLinux tutorial
Linux tutorial
 

Viewers also liked

파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷
Jihoon Kong
 
Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기
지수 윤
 
Evaluation question 2
Evaluation question 2Evaluation question 2
Evaluation question 2
Sofia Green
 
Presentacion power point. titas. andres e corrales v
Presentacion power point.  titas. andres e corrales vPresentacion power point.  titas. andres e corrales v
Presentacion power point. titas. andres e corrales v
andrescorralescb
 
History of Coldplay
History of ColdplayHistory of Coldplay
History of Coldplay
Sofia Green
 
Politícas de integración tic en la normal superior
Politícas de integración tic en la normal superiorPolitícas de integración tic en la normal superior
Politícas de integración tic en la normal superior
andrescorralescb
 
Irish Sports Institute 2014 DaithiOMurchu
Irish Sports Institute 2014 DaithiOMurchuIrish Sports Institute 2014 DaithiOMurchu
Irish Sports Institute 2014 DaithiOMurchu
Dr. Daithí Ó Murchú
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초
Yu Yongwoo
 
C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터
Yu Yongwoo
 

Viewers also liked (17)

게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차
 
파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷
 
Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기
 
Evaluation question 2
Evaluation question 2Evaluation question 2
Evaluation question 2
 
Presentacion power point. titas. andres e corrales v
Presentacion power point.  titas. andres e corrales vPresentacion power point.  titas. andres e corrales v
Presentacion power point. titas. andres e corrales v
 
SSH Bruteforce 공격 실제 사례 분석
SSH Bruteforce 공격 실제 사례 분석SSH Bruteforce 공격 실제 사례 분석
SSH Bruteforce 공격 실제 사례 분석
 
History of Coldplay
History of ColdplayHistory of Coldplay
History of Coldplay
 
Politícas de integración tic en la normal superior
Politícas de integración tic en la normal superiorPolitícas de integración tic en la normal superior
Politícas de integración tic en la normal superior
 
Internet expandeix la societat
Internet expandeix la societatInternet expandeix la societat
Internet expandeix la societat
 
Irish Sports Institute 2014 DaithiOMurchu
Irish Sports Institute 2014 DaithiOMurchuIrish Sports Institute 2014 DaithiOMurchu
Irish Sports Institute 2014 DaithiOMurchu
 
UpResume
UpResumeUpResume
UpResume
 
Legal translations
Legal translationsLegal translations
Legal translations
 
VISUAL CV
VISUAL CVVISUAL CV
VISUAL CV
 
10 most beautiful spots to visit new zealand (www.touropia.com)
10 most beautiful spots to visit new zealand (www.touropia.com)10 most beautiful spots to visit new zealand (www.touropia.com)
10 most beautiful spots to visit new zealand (www.touropia.com)
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초
 
소프트웨어 공학 (최종 설계 명세서)
소프트웨어 공학 (최종 설계 명세서)소프트웨어 공학 (최종 설계 명세서)
소프트웨어 공학 (최종 설계 명세서)
 
C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터
 

Similar to 리눅스 소켓 프로그래밍 기초

Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
knight1128
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스
종빈 오
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
흥배 최
 
TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디
quxn6
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
흥배 최
 

Similar to 리눅스 소켓 프로그래밍 기초 (20)

(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
Nodejs_chapter3
Nodejs_chapter3Nodejs_chapter3
Nodejs_chapter3
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 
TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
ice_grad
ice_gradice_grad
ice_grad
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개
 
Interface and Protocol
Interface and ProtocolInterface and Protocol
Interface and Protocol
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Tcp summary
Tcp summaryTcp summary
Tcp summary
 
(120804) #fitalk advanced mac os forensics (hfs+ filesystem)
(120804) #fitalk   advanced mac os forensics (hfs+ filesystem)(120804) #fitalk   advanced mac os forensics (hfs+ filesystem)
(120804) #fitalk advanced mac os forensics (hfs+ filesystem)
 
(120804) #fitalk advanced mac os forensics (hfs+ filesystem)
(120804) #fitalk   advanced mac os forensics (hfs+ filesystem)(120804) #fitalk   advanced mac os forensics (hfs+ filesystem)
(120804) #fitalk advanced mac os forensics (hfs+ filesystem)
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 

More from Yu Yongwoo

웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
Yu Yongwoo
 
웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동
Yu Yongwoo
 
웹 개발 스터디 01 - MySQL
웹 개발 스터디 01 - MySQL웹 개발 스터디 01 - MySQL
웹 개발 스터디 01 - MySQL
Yu Yongwoo
 
웹 개발 스터디 02 - javascript, bootstrap
웹 개발 스터디 02 - javascript, bootstrap웹 개발 스터디 02 - javascript, bootstrap
웹 개발 스터디 02 - javascript, bootstrap
Yu Yongwoo
 
웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS
Yu Yongwoo
 
C 언어 스터디 05 - 파일 입출력
C 언어 스터디 05 - 파일 입출력C 언어 스터디 05 - 파일 입출력
C 언어 스터디 05 - 파일 입출력
Yu Yongwoo
 
C 언어 스터디 04 - 구조체, 동적할당
C 언어 스터디 04 - 구조체, 동적할당C 언어 스터디 04 - 구조체, 동적할당
C 언어 스터디 04 - 구조체, 동적할당
Yu Yongwoo
 
C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수
Yu Yongwoo
 

More from Yu Yongwoo (17)

2018 종합선물세트 for 취준생
2018 종합선물세트 for 취준생2018 종합선물세트 for 취준생
2018 종합선물세트 for 취준생
 
나도 내가 뭘 말해야되는지 잘 모르겠어 (본격 스타트업 환상 부수기)
나도 내가 뭘 말해야되는지 잘 모르겠어 (본격 스타트업 환상 부수기)나도 내가 뭘 말해야되는지 잘 모르겠어 (본격 스타트업 환상 부수기)
나도 내가 뭘 말해야되는지 잘 모르겠어 (본격 스타트업 환상 부수기)
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
 
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
 
웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동
 
웹 개발 스터디 01 - MySQL
웹 개발 스터디 01 - MySQL웹 개발 스터디 01 - MySQL
웹 개발 스터디 01 - MySQL
 
웹 개발 스터디 01 - PHP
웹 개발 스터디 01 - PHP웹 개발 스터디 01 - PHP
웹 개발 스터디 01 - PHP
 
웹 개발 스터디 02 - javascript, bootstrap
웹 개발 스터디 02 - javascript, bootstrap웹 개발 스터디 02 - javascript, bootstrap
웹 개발 스터디 02 - javascript, bootstrap
 
웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS
 
C 언어 스터디 05 - 파일 입출력
C 언어 스터디 05 - 파일 입출력C 언어 스터디 05 - 파일 입출력
C 언어 스터디 05 - 파일 입출력
 
C 언어 스터디 04 - 구조체, 동적할당
C 언어 스터디 04 - 구조체, 동적할당C 언어 스터디 04 - 구조체, 동적할당
C 언어 스터디 04 - 구조체, 동적할당
 
C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수
 
자바 서블릿과 세션 (Java Servlet, Session)
자바 서블릿과 세션 (Java Servlet, Session)자바 서블릿과 세션 (Java Servlet, Session)
자바 서블릿과 세션 (Java Servlet, Session)
 
Bootstrap 기초, JSP Include
Bootstrap 기초, JSP IncludeBootstrap 기초, JSP Include
Bootstrap 기초, JSP Include
 
세션 하이재킹
세션 하이재킹세션 하이재킹
세션 하이재킹
 
'Database Design' Term Project initial Proposal Presentation (Korean)
'Database Design' Term Project initial Proposal Presentation (Korean)'Database Design' Term Project initial Proposal Presentation (Korean)
'Database Design' Term Project initial Proposal Presentation (Korean)
 
2015_YoWu_SSM_Apply_PT
2015_YoWu_SSM_Apply_PT2015_YoWu_SSM_Apply_PT
2015_YoWu_SSM_Apply_PT
 

리눅스 소켓 프로그래밍 기초

  • 1. 소켓 프로그래밍 기초 2014.11.28 노래방기계 201021448 김광민 201021395 유용우 UNIX PROGRAMMING
  • 2. 1. TCP/IP 개요 2. IP 주소와 호스트명 3. 포트번호 4. 소켓프로그래밍 기초 5. 소켓 인터페이스 함수 6. 유닉스 도메인 소켓 예제 7. 인터넷 소켓 예제 8. 연습문제 목차 UNIX PROGRAMMING
  • 3. 소켓 프로그래밍 기초 TCP / IP 개요 3 / 69 응용 계층 전송 계층 네트워크 계층 네트워크 접속 계층 하드웨어 SMTP, Telnet, FTP, HTTP TCP, UDP IP, ARP, ICMP 이더넷, FDDI TCP / IP 계층 UNIX PROGRAMMING
  • 4. 소켓 프로그래밍 기초 TCP / IP 개요 4 / 69 TCP/UDP 프로토콜 비교 UNIX PROGRAMMING TCP UDP 연결지향형(connection-oriented) 비연결형(connectionless) 신뢰성(reliability) 보장 신뢰성 보장하지 않음 흐름 제어 기능(flow-control) 제공 흐름 제어 기능 없음 순서 보장(sequence) 순서 보장 하지 않음(no sequence) 신뢰성 있는 데이터 전송 스트리밍 서비스에 주로 사용됨
  • 5. 소켓 프로그래밍 기초 TCP / IP 개요 5 / 69 UNIX PROGRAMMING 응용 프로그램 소켓 인터페이스 TCP/UDP IP Ethernet 응용 프로그램 소켓 인터페이스 TCP/UDP IP EthernetInternet 라우터 라우터 Socket Interface를 이용한 통신 구조
  • 6. IP주소와 호스트명 6 / 69 IP 주소 127.0.0.1 인터넷을 이용할 때 사용하는 주소로 점(.)으로 구분된 32비트 숫자 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 7. IP주소와 호스트명 7 / 69 호스트명 www.catholic.ac.kr 호스트명 도메인명 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 8. 호스트명과 IP 주소 변환 8 / 69 file을 먼저 찾아봄 -> /etc/hosts /etc/nsswitch.conf 파일에서 찾지 못하면? -> DNS 서비스를 이용함 유닉스에서는 호스트명과 IP 주소를 변환하는 함수를 여러가지 형태로 제공한다. UNIX PROGRAMMING 소켓 프로그래밍 기초 hosts: files dns
  • 9. 호스트명과 IP 주소 읽어오기 9 / 69 #include <netdb.h> struct hostent* gethostent(void); int sethostent(int stayopen); int endhostent(void); UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 10. 호스트명과 IP 주소 읽어오기 10 / 69 struct hostent* gethostent(void); host명과 IP 주소를 읽어서 hostent 구조체에 저장하고 그 주소를 리턴한다. struct hostent { char* h_name; char** h_aliases; int h_addrtype; int h_length; char** h_addr_list; }; 호스트명 저장 호스트를 가리키는데 사용하는 다른 이름 저장 호스트 주소 형식 지정 주소의 길이 해당 호스트의 주소 목록 저장 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 11. 호스트명과 IP 주소 읽어오기 11 / 69 int sethostent(int stayopen); stayopen 값이 true면 - 연결된 TCP 소켓이 네임 서버 질의를 위해 사용 되어야 한다는 것을 가리 킨다. DB의 현재 읽기 위치를 시작 부분으로 재설정하는 함수. int endhostent(void); DB를 닫는다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 12. 호스트명과 IP 주소 읽어오기 12 / 69 ex11_1.c 호스트 파일의 처음으로 읽기 위치 설정 호스트 파일에서 차례로 호스트명을 출력 호스트 파일을 닫음 <출력 결과> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 13. 호스트명으로 정보 검색 13 / 69 #include <netdb.h> struct hostent* gethostbyname(const char *name); host명을 인자로 받아 데이터베이스에서 해당 항목을 검색해 hostent 구조체에 저장하고 그 주소를 리턴한다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 14. IP 주소로 정보 검색 14 / 69 #include <netdb.h> struct hostent* gethostbyaddr(const char* addr, int len, int type); IP 주소를 인자로 받아 DB에서 해당 항목을 검색해 hostent 구조체에 저장하고 그 주소를 리턴한다. type은 주소의 형식으로 <sys/socket.h> 파일에 정의된 주소 형식중 하나를 지정해야 한다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 15. IP 주소로 정보 검색 15 / 69 <sys/socket.h> /usr/src/linux-headers-3.2.0-23/include/linux/socket.h UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 16. 포트 번호 16 /69 0번 ~ 1023번: 잘 알려진 포트 (well-known port) 1024번 ~ 49151번: 등록된 포트 (registered port) 49152번 ~ 65535번: 동적 포트 (dynamic port) 프로그램 간 상호 정보 교환시 파일이나 임시 저장소를 거치지 않고 직접 연결하기 위한 가상의 논리적 접속 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 17. 포트 정보 읽어오기 17 / 69 #include <netdb.h> struct servent* getservent(void); int setservent(int stayopen); int endservent(void); UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 18. 포트 정보 읽어오기 18 / 69 struct servent* getservent(void); 포트 정보를 읽어서 servent 구조체에 저장하고 그 주소를 반환 struct servent { char* s_name; char** s_aliases; int s_port; char* s_proto; }; 포트명 저장 해당 서비스를 가리키는데 사용하는 다른 이름 저장 포트 번호 저장 서비스에 사용하는 프로토콜의 종류 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 19. 포트 정보 읽어오기 19 / 69 int setservent(int stayopen); stayopen 값이 true면 - 포트 정보 데이터베이스를 열어둠. DB의 현재 읽기 위치를 시작 부분으로 재설정하는 함수. int endservent(void); DB를 닫는다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 20. 포트 정보 읽어오기 20 / 69 ex11_2.c 호스트 파일의 처음으로 읽기 위치 설정 처음 10개의 포트 정보를 차례로 읽어 출력 DB를 닫음 <출력 결과> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 21. 서비스명으로 정보 검색 21 / 69 #include <netdb.h> struct servent* getservbyname(const char *name, const char* proto); getservbyname 함수는 포트명을 인자로 받아 DB에서 해당 항목을 검색해서 servent 구조체에 저장하고 그 주소를 리턴한다. 두 번째 인자인 proto에는 “tcp”나 “udp” 또는 NULL을 지정한다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 22. IP 주소로 정보 검색 22 / 69 #include <netdb.h> struct servent* getservbyport(int port, const char* proto); getservbyport 함수는 포트 번호를 인자로 받아 DB에서 해당 항목을 검색해 servent 구조체에 저장하고 그 주소를 리턴한다. 두 번째 인자인 proto에는 “tcp”나 “udp” 또는 NULL을 지정한다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 23. 소켓 프로그래밍 기초 23 / 69 소켓은 응용 계층과 전송 계층을 연결하는 기능을 제공하는 프로그래밍 인터페이스이다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 24. 소켓의 종류 24 / 69 소켓은 같은 호스트에서 프로세스 사이에 통신할 때 사용하는 유닉스 도메인 소켓과 인터넷을 통해 다른 호스트와 통신할 때 사용하는 인터넷 소켓이 있다. AF_UNIX : 유닉스 도메인 소켓 AF_INET : 인터넷 소켓 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 25. 포트 정보 읽어오기 25 / 69 ex11_2.c 호스트 파일의 처음으로 읽기 위치 설정 처음 10개의 포트 정보를 차례로 읽어 출력 DB를 닫음 <출력 결과> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 26. 소켓의 통신 방식 26 / 69 TCP/IP 프로토콜에서 전송 계층에서 사용하는 프로토콜로는 TCP와 UDP가 있다. 소켓을 이용할 때도 하부 프로토콜로 TCP/UDP의 사용을 선택해야 한다. SOCK_STREAM : TCP 프로토콜 사용 SOCK_DGRAM : UDP 프로토콜 사용 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 27. 소켓 구조체 27 / 69 소켓을 이용한 프로그래밍에서는 소켓의 종류와 IP 주소, 포트 번호 등을 지정하기 위한 구조체를 사용한다. struct sockaddr_un { sa_family_t sun_family; char sun_path[108]; }; AF_UNIX 경로명 <구조체 정의(un.h)> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 28. 소켓 구조체 28 / 69 struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; }; AF_INET 포트명 struct in_addr { in_addr_t s_addr; }; 32bit IP Address in_addr 구조체 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 29. 바이트 순서(Byte ordering) 29 / 69 빅 엔디언 방식 리틀 엔디언 방식 메모리의 낮은 주소에 정수의 첫 바이트를 저장 TCP/IP의 바이트 순서 메모리의 높은 주소에 정수의 첫 바이트를 저장 Intel의 바이트 순서 0x12345678 저장? [0] [1] [2] [3] 0x12 0x34 0x56 0x78 [0] [1] [2] [3] 0x78 0x56 0x34 0x12 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 30. 바이트 순서(Byte ordering) 30 / 69 데이터 전이도 클라이언트 서버 0x78 0x56 0x34 0x12 0x12 0x34 0x56 0x78 0x12 0x34 0x56 0x78 0x78 0x56 0x34 0x12 BYTE ORDER 변경 BYTE ORDER 변경 TCP/IP에서 데이터 전송 HBO(Host Byte Order) NBO(Network Byte Order) NBO(Network Byte Order) UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 31. 바이트 순서 함수 31 / 69 #include <sys/types.h> #include <netinet/in.h> #include <inttypes.h> uint32_t htonl(unit32_t hostlong); uint16_t htons(unit16_t hostshort); uint32_t ntohl(unit32_t netlong); uint16_t ntohs(unit16_t netshort); htonl 함수는 32비트 HBO를 32비트 NBO로 변환한다. htons 함수는 16비트 HBO를 16비트 NBO로 변환한다. ntohl 함수는 32비트 NBO를 32비트 HBO로 변환한다. ntohs 함수는 16비트 HBO를 16비트 NBO로 변환한다. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 32. NBO를 HBO로 변환하기 32 / 69 ex11_2.c 호스트 파일의 처음으로 읽기 위치 설정 처음 10개의 포트 정보를 차례로 읽어 출력 DB를 닫음 <출력 결과> ntohs 함수 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 33. HBO를 NBO로 변환하기 33 / 69 ex11_2.c telnet이라는 이름으로 검색함 21 포트를 검색함 DB를 닫음 <출력 결과> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 34. IP 주소의 형태 34 / 69 192.168.0.1 IP 주소는 점 형태로 구분된다. 시스템 내부에 IP가 저장될 때에는 binary 값으로 변환하여 저장됨. UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 35. 문자열 형태의 IP를 숫자 형태로 변환 35 / 69 inet_addr 함수는 IP 주소를 문자열로 받아 이를 binary 값으로 변환하여 리턴한다. #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> in_addr_t inet_addr(const char *cp); UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 36. 구조체 형태의 IP를 숫자 형태로 변환 36 / 69 inet_addr 함수는 IP 주소를 구조체로 받아 이를 binary 값으로 변환하여 리턴한다. #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> char* inet_ntoa(const struct in_addr in); UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 37. IP 주소 변환하기 37 / 69 문자열로 된 IP 주소를 binary 형태로 변환 정수형으로 변환된 IP 주소로 정보를 검색함 호스트명 출력 구조체 형태의 IP 주소를 변환 <출력 결과> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 38. 소켓 인터페이스 함수 38 / 69 소켓 인터페이스 함수 socket : 소켓 파일기술자 생성 bind : 소켓 파일기술자를 지정된 IP 주소/포트번호와 결합 listen : 클라이언트의 접속 요청 대기 connect : 클라이언트가 서버에 접속 요청 accept : 클라이언트의 접속 허용 recv : 데이터 수신(SOCK_STREAM) send : 데이터 송신(SOCK_STREAM) recvfrom : 데이터 수신(SOCK_DGRAM) sendto : 데이터 송신(SOCK_DGRAM) close : 소켓 파일기술자 종료 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 39. 소켓 인터페이스 함수 39 / 69 socket() bind() listen() accept() recv() send() close() socket() connect() send() recv() close() 소켓 파일기술자 생성 소켓 파일기술자를 지정된 IP 주소/포트번호와 결합 클라이언트의 접속 요청 대기 클라이언트가 서버에 접속 요청 클라이언트의 접속 허용 데이터 수신 (SOCK_STREAM) 데이터 송신 (SOCK_STREAM) 소켓 파일기술자 종료 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 40. 소켓 생성하기 40 / 69 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); domain : 소켓 종류(AF_UNIX, AF_INET) type : 통신방식(TCP, UDP) protocol : 소켓에 이용할 프로토콜 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 41. 소켓에 이름 지정하기 41 / 69 #include <sys/types.h> #include <sys/socket.h> int bind(int s, const struct sockaddr* name, int namelen); s : socket 함수가 생성한 소켓 디스크립터 name : 소켓의 이름을 표현하는 구조체 namelen : name의 크기 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 42. 클라이언트 기다리기 42 / 69 #include <sys/types.h> #include <sys/socket.h> int listen(int s, int backlog); s : socket 함수가 생성한 소켓 디스크립터 backlog : 최대 허용 클라이언트 수 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 43. 연결 요청 수락하기 43 / 69 #include <sys/types.h> #include <sys/socket.h> int accept(int s, struct sockaddr *addr, socklen_t *addrlen); s : socket 함수가 생성한 소켓 디스크립터 addr : 접속을 수락한 클라이언트의 IP 정보 addrlen : addr의 크기 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 44. 서버와 연결하기 44 / 69 #include <sys/types.h> #include <sys/socket.h> int connect(int s, const struct sockaddr *name, int namelen); s : socket 함수가 생성한 소켓 디스크립터 name : 접속을 수락한 클라이언트의 IP 정보 namelen : name의 크기 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 45. 데이터 보내기 45 / 69 #include <sys/types.h> #include <sys/socket.h> ssize_t send(int s, const void *msg, size_t len, int flags); s : socket 함수가 생성한 소켓 디스크립터 msg : 전송할 메시지를 저장한 메모리 주소 len : 메시지의 크기 flags : 데이터를 주고받는 방법을 지정한 플래그 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 46. 데이터 받기 46 / 69 #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int s, void *buf, size_t len, int flags); s : socket 함수가 생성한 소켓 디스크립터 buf : 전송받은 메시지를 저장한 메모리 주소 len : 버퍼의 크기 flags : 데이터를 주고받는 방법을 지정한 플래그 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 47. 유닉스 도메인 소켓 예제(서버) 47 / 69 socket 생성 socket 주소 구조체에 값 지정 소켓 디스크립터와 소켓을 합침 클라이언트의 접속을 대기함 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 48. 유닉스 도메인 소켓 예제(서버) 48 / 69 클라이언트 접속 수용 클라이언트가 보낸 메시지를 버퍼에 복사함 버퍼를 출력 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 49. 유닉스 도메인 소켓 예제(클라이언트) 49 / 69 socket 생성 socket 주소 구조체에 값 지정 server에 연결 요청 server에 Data send <서버 출력 결과> UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 50. 인터넷 소켓 예제(클라이언트) 50 / 69 socket 생성 socket 주소 구조체에 값 지정 server에 연결 요청 server에서 Data를 받음 버퍼에 받은 메시지 출력 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 51. 인터넷 소켓 예제(서버) 51 / 69 socket 생성 socket 주소 구조체에 값 지정 socket과 주소를 합침 클라이언트 접속 대기 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 52. 인터넷 소켓 예제(서버) 52 / 69 클라이언트 연결 클라이언트로 데이터 보내기 소켓 디스크립터 close UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 54. 연습문제 08 • 조건1) /etc/hosts에 특정 호스트가 있는지 확인 • 조건2) 해당 호스트가 없으면 DNS 조회하여 결과 출력 => 특정 호스트의 IP주소를 출력하는 프로그램 작성 54 / 69 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 55. 연습문제 08 • 조건1) 서버는 클라이언트 메시지를 받아 응답을 한다. • 조건2) 클라이언트 'q' 를 누를 때 까지 반복한다. 55 / 69 호스트 관련 라이브러리 헤더 파일 선언 host를 받아 IP를 조회 (hosts->DNS) IP정보를 in_addr 구조체로 복사 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 56. 연습문제 08 • 실행 결과 56 / 69 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 57. 연습문제 09 • 조건1) 서버는 클라이언트에서 접속이 가능해야 한다. • 조건2) 서버는 클라이언트의 메시지를 받아 응답을 한다. • 조건3) 클라이언트가 'q' 를 누를 때 까지 접속이 유지된다. • 조건4) 서버는 'q' 를 입력 받으면 연결을 종료한다. => 클라이언트의 입력을 돌려주는 echo 프로그램 구현 57 / 69 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 58. 연습문제 09 58 / 69 Host, Socket 관련 라이브러리 헤더 파일 선언 사용할 포트를 사용자로부터 입력 받아 실행 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 59. 연습문제 09 59 / 69 소켓 생성 소켓 기술자와 소켓 구조체 메모리를 매핑 구조체 초기화 및 주소 세팅 클라이언트의 접속을 기다리는 대기 모드로 설정 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 60. 연습문제 09 60 / 69 클라이언트와 연결 수립 클라이언트의 메시지를 다시 돌려줌 ‘q’를 입력받으면 연결 종료 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 61. 연습문제 09 • 실행 결과 61 / 69 Server Client UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 62. 연습문제 09 62 / 69 시 연 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 63. 연습문제 09 • 조건1) 서버는 클라이언트에서 접속이 가능해야 한다. • 조건2) 서버는 클라이언트에서 파일명을 입력 받는다. • 조건3) 서버는 해당 파일명이 존재하는지 확인한다. • 조건4) 존재한다면 서버는 해당 파일의 내용을 전송한다. => 서버의 특정 파일의 내용을 클라이언트로 전송하는 프로그램 작성 63 / 69 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 64. 연습문제 10 64 / 69 Host, Socket 관련 라이브러리 헤더 파일 선언 사용할 포트를 사용자로부터 입력 받아 실행 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 65. 연습문제 10 65 / 69 소켓 생성 소켓 기술자와 소켓 구조체 메모리를 매핑 구조체 초기화 및 주소 세팅 클라이언트의 접속을 기다리는 대기 모드로 설정 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 66. 연습문제 10 66 / 69 파일 기술자 수립 클라이언트로 데이터를 256byte씩 전송 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 67. 연습문제 10 • 실행 결과 67 / 69 Server Client UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 68. 연습문제 10 68 / 69 시 연 UNIX PROGRAMMING 소켓 프로그래밍 기초
  • 69. 감사합니다 노래방기계 – 김광민, 유용우 UNIX PROGRAMMING