Python Socket/HTTP 20110456 overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.

Slides:



Advertisements
Similar presentations
Python Essential 세미나 1 Socket Programming 발표자 : 임민상 ( 화 )
Advertisements

AMAN2002 를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍 www. nms4you.com 1 AMAN2002 추가 기능 실습 Chapter 13:
1. Section I. 웹 프로토콜과 로그의 이해 1. 웹 프로토콜 1.1 통신 절차 1.2 HTTP Request 1.3 HTTP Response 2. 웹 로그 2.1 W3C 유형 2.2 NCSA 포맷 2.3 로그 분석 2.
Chapter 02. 웹에 대한 이해. Chapter 02. 웹에 대한 이해 웹의 역사 HTTP 웹 애플리케이션 기술.
TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
Java Socket 통신 이개혁 정대준.
제 22 장 HTTP 22.1 HTTP 트랜잭션 22.2 요청 메시지 22.3 응답 메시지 22.4 헤더 22.5 예제
Introduction to Django
Chapter 03. 네트워크 보안 : 길을 지배하려는 자에 대한 저항
Network Lab. Yong bae, Kim
Understanding of Socket and File I/O
암호화 기술(SSL, IPSec) 손재성 권기읍 안복선 최준혁
Chapter 06. 프로토콜.
Chapter 06. UDP 서버/클라이언트.
22 장 프로세스간 전달 : UDP와 TCP 22.1 프로세스간 전달 22.2 사용자 데이터그램 프로토콜
TCP/IP Socket Cover Slide 조태문.
TCP/IP 소켓 프로그래밍 - C 버전 중에서
NFS, FTP coearth, george.
Dept. of Computer Engineering, Hannam Univ. Won Goo Lee
SNMP (Simple Network Management System)
20 장 네트워크층 프로토콜 : ARP, IPv4, ICMP, IPv6, ICMPv6
Internet Control Message Protocol (ICMP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
TCP/IP Socket Cover Slide 조태문.
Web Servers (IIS & Apache)
10. About TCP / IP SPARCS 08 우성필.
제 18 장 TCP/IP 연결 확립과 종료 정보통신연구실.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
Chapter 11. Raw 소켓.
Chapter 02 웹의 이해.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
JAVA 프로그래밍 12장 네트워킹(Networking).
Choi Seong Yun 네트워크 프로그래밍 Choi Seong Yun
명품 JAVA Programming 제 16 장 네트워크.
S N M P (Simple Network Management System).
Embeded 기초 다지기 2015년 10월 26일 intern Sally
(Web Programming & Practice)
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
Network Management 김대환 김태훈 김숙흔 이근민.
Socket Address Structure and Byte Ordering Functions
Chapter 8 연결형 프로토콜 서버 발표자 : SE Lab 황 성 하
Department of Computer Engineering
School of Electronics and Information. Kyung Hee University.
DHCP 박윤환 윤준호.
TCP/IP 통신망 특론 2장 Link Layer 컴퓨터 네트워크 실험실 이희규.
Network Programming(1)
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
Network Security WireShark를 활용한 프로토콜 분석 II.
Chapter 15 Transmission Control Protocol (TCP).
서버 실습 기말과제 게임소프트웨어 b 이도하 Date :2014/12/11(목)
네트워크와 소켓 프로그래밍 Chapter 01. * 학습목표 TCP/IP 프로토콜의 동작 원리를 개관 소켓의 기본 개념을 이해
School of Electronics and Information. Kyung Hee University.
Transmission Control Protocol (TCP)
연습 문제 풀이 헥사 값의 의미 FTP 응답 코드의 의미 분석 (a) D 0A (b)
User Datagram Protocol (UDP)
TCP/IP 네트워크 구조 TCP/IP 개요 TCP/IP 프로토콜 한빛미디어(주).
Chapter 16 Socket Interface.
Department of Computer Engineering
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Internet & WWW Protocols
제 11장 User Datagram Protocol(UDP)
Department of Computer Engineering
웹 스크래핑.
실시간 음성 채팅 서비스 (Voice Chatting Programe)
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Department of Computer Engineering
Presentation transcript:

Python Socket/HTTP overmania

목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.

파이썬 소켓 Python socket/network

소켓 ?  프로세스 간 통신을 지원하는 프로그래밍 인터페이스  프로세스 간이기에 프로세스가 동일 머신에 있을 필 요가 없다.  머신에서 지원하는 API 이므로 운영체제마다 작동이 다를 수 있습니다.  ex) Windows 에서는 select 함수가 socket 에서만 작동하지만, Linux 환경에서는 socket 과 file 에 모두 적용됩니다.  소켓은 입력과 출력이 모두 가능합니다.

소켓의 주소  유닉스 파일 소켓  유닉스는 소켓 또한 파일로 취급된다. 저수준 파일 입출력 을 위한 소켓을 지정할 수 있다.  주소값은 경로명이다.  로컬 머신 내이므로 TCP, UDP 모두 신뢰  AF_UNIX 로 선언 가능.  네트워크 소켓  인터넷을 통한  AF_INET 은 IPv4 주소를 가지는 소켓.  AF_INET6 는 IPv6 주소를 가지는 소켓.

소켓의 타입  SOCK_DGRAM  Datagram 을 통해서 데이터를 송수신한다. UDP 를 이용하고 UDP 특성상 segment 가 정상적으로 전달되지 않을 수 있다.  SOCK_STREAM  Stream 을 통해서 데이터를 송수신한다. TCP 를 이용하고 TCP 특성상 reliable 하게 전송된다.  SOCK_RAW  Process 가 직접 internal network protocol 과 interface 에 접근 가능하도록 하는 소켓입니다. 루트 권한이 있어야 작동하 고 IP packet 을 직접 분석해볼 수 있습니다.

클라이언트 / 서버 모형  서버 : 서비스를 제공하는 주체  클라이언트 : 서비스를 제공받는 주체.

소켓 작동 순서  아래와 같은 시나리오로 작동합니다.

포트  머신에서 해당 프로세스를 찾는데 필요한 숫자.  1~65535 의 범위를 가질 수 있습니다.  1~1024 는 이미 예약이 된 포트이므로 그 특정한 서비 스를 위해서 만드는 프로그램이 아니면 사용될 수 없 습니다.  파이썬에서 port 에 0 을 주면 사용되지 않는 포트를 자 동으로 할당해줍니다.

서버 소켓 관련 함수  socket.socket([family[, type[, proto]]])  socket.bind(address)  socket.listen(backlog)  socket.accept()  socket.close()

socket.socket([ family [, type [, proto ]]])  address family, socket type, protocol 를 인자로 받습니다.  Address family : 소켓의 주소 형태를 선언 (AF_UNIX, AF_INET, AF_INET6 등 ).  Socket type : 소켓이 TCP, UDP, RAW 등 어떠한 통신 규 약으로 데이터를 전송하는지 정한다. (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW)  Protocol : 일반적으로 0 이나, IPPROTO_IP 등 소켓 주소 를 더 구체적으로 선언 가능.

socket.bind(address)  소켓을 해당 주소에 bind 합니다.  address 는 socket address 타입에 맞게 들어가야 합니다.  AF_INET -> IPv4, AF_INET6 -> IPv6  Address 는 네트워크 소켓에서 (HOST, PORT) 라는 튜플 인자입니다.  HOST = socket.gethostbyname(‘’) ‘localhost’ ‘’  어떻게 다를까요 ??

socket.listen( backlog )  해당 소켓 Object 를 다른 소켓의 connect 요청을 수행 할 수 있도록 만듭니다.  Backlog 는 대기 상태로 받아들일 수 있는 최대 요청의 숫자. ( 시스템마다 다르고, 일반적으로 최대 5)  Backlog 이상의 요청이 오면 클라이언트는 connection refuse 를 받게 됩니다.  Server socket 을 listen 상태로 두고 연결이 오면 새로운 socket 을 생성하는 식으로 처리합니다.

socket.accept()  Listen 상태의 socket 이 connect 요청을 받을 경우 accept 를 통해서 connection 을 accept 할 수 있습니다.  반환값은 ( 연결된 소켓, 연결된 소켓의 주소 ) 의 pair 입 니다.  반환된 (conn, conn_addr) 에서 conn 을 통해 클라이언 트와 통신이 가능하다.

socket.close()  송수신이 완료된 소켓을 종료하는 함수입니다.  비정상 종료되어 close() 되지 않으면 해당 포트에 소켓 을 bind 하지 못하니 주의하세요.  Server 의 경우 listen 소켓을 서버가 종료될 때 같이 종 료될 수 있도록 처리합니다.  Accept 로 생긴 소켓은 처리가 완료되면 꼭 close 합니 다.

클라이언트 소켓 관련 함수  socket.socket([family[, type[, proto]]])  socket.connect(address)  socket.close()

socket.connect( address )  Remote HOST 에 연결을 시도합니다.  Address 는 Server 에서 bind 할 때처럼 (HOST, PORT) 의 tuple 입니다.  HOST 는 연결할 서버의 주소.  PORT 는 연결하려는 서버가 서비스를 제공하고 있는 포트.

중요한 소켓 함수들  socket.send(string[, flags])  socket.recv(bufsize[, flags])  socket.gethostbyname(hostname)  socket.getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]])

Blocking vs Non-Blocking  Blocking : recv 나 send 가 호출될 때 명령이 수행될 때 까지 더 이상 함수를 호출하지 않음.  Non Blocking : recv 나 send 호출이 즉시 실행되지 않으 면 error exception 발생.  기본적으로 생성된 소켓은 blocking socket  socket.setblocking(flag) 을 이용해서 바꾸어준다.  flag == False -> non-blocking  flag == True -> blocking

Time out  Blocking socket 은 클라이언트가 연결하고 전송하지 않 을 경우 다른 명령을 처리할 수가 없다.  몇 초 동안 전송하거나 전송받기를 기다릴 것인지를 timeout 을 설정함으로써 구현할 수 있다.  Blocking socket 에 socket.settimeout(value) 을 이용하면 된다.

다중 연결 처리  여러가지 방법이 있습니다.  1. 멀티프로세스  2. 멀티스레드  3. select( 이벤트 처리 방식 )  멀티 프로세스와 멀티 스레딩.  하나의 데이터를 여러 연결이 공유해야 하는 상황이 오면 곤란합니다.  하지만 그렇지 않은 경우만을 고려해봅시다.

멀티 프로세스  프로세스 : 컴퓨터 내의 작업 수행단위 ( 프로그램이 메모리 영역에 올라가 실행 중인 상태 )  전략  Listen 하고 있는 소켓이 accept 를 통해서 새로운 연결을 받 을 경우 새로운 프로세스를 생성하여 connect 된 소켓과의 통신을 담당하게 한다.  주의점  프로세스가 명령을 수행한 후에 남아있으면 시스템의 메모 리가 낭비됩니다.( 좀비 프로세스 )  ( 그 외에 일반적인 프로세스 단점들 )

select 를 이용한 다중연결처리  select.select(rlist, wlist, xlist[, timeout])  세가지 리스트로 소켓을 구분합니다.  rlist : 읽기가 block 되었는지 검사  wlist : 쓰기가 block 되었는지 검사  xlist : 예외 발생 검사.  Timeout 을 option 으로 줄 수도 있습니다.  Performance 는 ……

소켓의 고급 설정은 ?  socket.setsockopt(level, optname, value)  SO_REUSEADDR 설정하면 디버깅할 때 편합니다  Timeout 을 기다리는 소켓을 kernel 이 재사용할 수 있습니다.  man(2) setsockopt man(2) setsockopt  socket option socket option

몇 가지 중요한 TCP 관련 설정들  SO_REUSEADDR  TIME_OUT 에 들어간 port 에 다시 bind 할 수 있도록 만들어 주는 옵션

몇 가지 중요한 TCP 관련 설정들  TCP_NODELAY  Nagle Algorithm 이라는 패킷 역위 방지 알고리즘을 꺼 전송 속도를 높입니다.  SO_LINGER  Linger : to remain just alive for some time prior to death  소켓이 close 요청을 할 때, 송신 버퍼의 모든 내용을 전송 할 때까지 kernel 에서 응용프로그램으로 복귀하지 않는다.  Port 가 TIME_WAIT 상태에 들지 않도록 하는데 많이 쓰입 니다.

소켓 서버 모듈  소켓 서버의 구조는  연결 요청을 감지하는 Server  요청되는 연결을 처리하는 Handler  예제 코드를 보면서 어떻게 쓰는지 봅시다.

실습

HTTP 프로토콜

HTTP 란 무엇인가  Hyper Text Transfer Protocol  인터넷 환경이 다양한 형식의 파일로 이루어져 이러 한 다양한 형식의 파일을 전송하는 방법을 정의.

HTTP request  일반적으로 이런 형태로 작성됩니다.  CRLF = “\r\n” SP = ‘ ‘

HTTP request method  GET  Request-URI 서버로부터 받아오는 method  Header 에 If-Modified-Since 를 추가하여 로컬의 파일과 다르 지 않을 때 전송을 받지 않도록 할 수도 있다.  HEAD  GET 과 비슷하나 response 에 additional body 를 받지 않습니 다.  PUT  Server 에 로그인이나 파일 전송 등을 위해

HTTP request 구조  HTTP request 는 simple request + request header + entity body  simple request line 의 구조는  Method SP Request-URI SP HTTP-Version CRLF  Request header field 의 구조는  Header: SP Value CRLF  Parsing 을 위한 첨언.  Entity body 가 없으면 CRLFCRLF 로 request message 가 끝납 니다.  Header field 각 라인은 CRLF 로 구분됩니다.

HTTP request header  Host:  Request-URI 를 찾을 host 를 명시합니다.  HTTP request 가 반드시 들고 있다고 생각하세요.  If-Modified-Since = "If-Modified-Since" ":" HTTP-date  Conditional Get 의 구현을 위한 header 입니다.  HTTP-date 에 명시된 시점 이후에 문서의 수정이 없을 경우 전송받지 않습니다.  Content-Length = Length  Entity body 에 전송될 내용이 있을 경우 그 크기를 명시한다.

HTTP Request 예제

HTTP response  일반적으로 이 형태로 전송됩니다.

Status Code 200 OK  request succeeded, requested object later in this message 301 Moved Permanently  requested object moved, new location specified later in this message (Location:) 400 Bad Request  request message not understood by server 404 Not Found  requested document not found on this server 505 HTTP Version Not Supported

HTTP response 구조  HTTP response 는 simple response + response header + entity body  simple response line 의 구조는  Version SP Status-Code SP Phrase CRLF  Response header field 의 구조는  Header: SP Value CRLF

HTTP response header, 예제