Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

1 Python Socket/HTTP 20110456 overmania

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

3 파이썬 소켓 Python socket/network

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

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

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

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

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

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

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

11 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 등 소켓 주소 를 더 구체적으로 선언 가능.

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

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

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

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

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

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

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

19 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

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

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

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

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

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

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

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

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

28 실습

29 HTTP 프로토콜

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

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

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

33 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 로 구분됩니다.

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

35 HTTP Request 예제

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

37 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

38 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

39 HTTP response header, 예제

40


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

Similar presentations


Ads by Google