인터넷과 프로토콜(3)-소켓통신

목차

  1. 프로세스 간 통신
  2. 클라이언트와 서버 프로세스
  3. 프로세스와 컴퓨터 네트워크 사이의 인터페이스
  4. 소켓 프로그래밍 예제

프로세스 간 통신

네트워크 애플리케이션을 개발하기 전 여러 종단 시스템에서 실행하는 프로그램이 서로 통신하는 방법을 배워야 합니다. 운영체제 용어에서 실제 통신하는 것은 프로그램이 아니라 프로세스(process) 입니다. 프로세스는 종단 시스템에서 실행되는 프로그램입니다.

통신 프로세스가 같은 종단 시스템에서 실행될 때 서로 프로세스 간에 통신합니다. 프로세스 간의 통신을 위한 규칙은 종단 시스템의 운영 체제에 의해 운영됩니다.

2개의 다른 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지(message) 교환 으로 서로 통신합니다. 송신 프로세스는 메시지를 만들어서 네트워크로 보냅니다.

클라이언트와 서버 프로세스

네트워크 애플리케이션은 네트워크에서 서로 메시지를 보내는 두 프로세스로 구성됩니다. 웹 애플리케이션에서 클라이언트와 브라우저 프로세스는 웹 서버 프로세스와 메시지를 교환합니다.

P2P 파일 공유 시스템에서는 한 peer의 프로세스에서 다른 peer의 프로세스로 파일을 전송합니다. 통신하는 프로세스 각 쌍에 대해 일반적으로 클라이언트 의 프로세스와 서버 의 프로세스 중 하나로 이름 짓습니다.

웹 브라우저에서는 클라이언트 프로세스이고 웹 서버는 서버 프로세스입니다. P2P 파일 공유와 같은 애플리케이션에서 프로세스가 클라이언트와 서버 둘 다 가능합니다.

그래서 정의를 해보자면,

두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 클라이언트라 하고, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버라고 합니다.

프로세스와 컴퓨터 네트워크 사이의 인터페이스

프로세스는 소켓(socket) 을 통해 네트워크로 메시지를 보내고 받습니다. 프로세스는 집(house)이고 소켓은 출입구(door)입니다.

프로세스가 메시지를 다른 호스트의 프로세스로 보내고 싶을 때, 그것은 출입구 바깥 네트워크로 메시지를 밀어냅니다. 메시지가 목적지 호스트에 도착하면 메시지는 수신 프로세스의 출입구를 거치고 수신 프로세스는 메시지를 처리합니다.

위의 그림이 인터넷에서 통신하는 두 프로세스 사이의 소켓 통신을 설명합니다. 프로세스가 사용하는 하위 전송 프로토콜이 인터넷의 TCP 프로토콜이라 가정한다면, 소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스입니다.

또한, 소켓은 호스트의 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스이므로, 애플리케이션과 네트워킈 사이의 API(Application Programming Interface) 라고 합니다.

소켓 프로그래밍 예제

import socket
def main():
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    	s.connect(('google.com', 80))
        request = 'GET http://google.com HTTP/1.1\n\n'.encode()
        s.send(request)
        print(s.recv(4096).decode())

main()        

위는 socket 객체를 생성한 뒤 구글에 접속해서 데이터를 받아오는 예제입니다. 데이터를 요청할 때는 GET이란 명령어를 전송합니다. 명령어를 전송할 때 Byte 단위로 보내기 위해 Encode() 메소드를 이용해 인코딩했습니다. 그리고 socket 객체에 있는 메소드 recv()를 이용해 데이터를 받아옵니다.

이는 인터넷의 논리적 계층에서 최하위 계층인 TCP/IP 프로토콜에서 일어나는 작용입니다.

좋은 웹페이지 즐겨찾기