호우동의 개발일지

Today :


네트워크 애플리케이션 개발의 중심

  • 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것
    • 예시
      • 웹 어플레케이션의 서버와 클라이언트로 구별되는 두 가지 프로그램
        • 클라이언트 프로그램 : 사용자 호스트에서 실행되는 브라우저 프로그램
          • 사용자 호스트 → 데스크톱, 랩톱, 태블릿, 스마트폰

      • 서버 프로그램 : 웹 서버 호스트에서 실행되는 웹 서버 프로그램
        • 이러한 서버는 종종 데이터 센터에 위치

  • 종단 시스템에만 애플리케이션 소프트웨어가 존재 → 기본 설계 방식

 


새로운 애플리케이션 개발

  • 여러 종단 시스템에서 실행되는 소프트웨어를 작성해야 함
    • C, Java, Python 등으로 작성됨

  • 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요가 없다.
    • 네트워크 코어 장비는 네트워크 계층 및 그 하위 계층에서 기능함

 

 


네트워크 애플리케이션 구조

  • 애플리케이션 개발자 관점에서 애플리케이션 구조는 네트워크 구조와 다름
    • 네트워크 구조 : 고정되어 있고 해당 애플리케이션에 특정 서비스 집합을 제공

    • 애플리케이션 구조
      • 애플리케이션 개발자가 직접 설계
        • 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지 알림

  • 애플리케이션 구조를 선택할 때의 특징
    • 클라이언트-서버 구조 혹은 P2P 구조 중 하나를 선택
      • 두 구조는 현대 네트워크 애플리케이션에서 사용됨

 


클라이언트-서버 구조(client-server architecture)

  • 서버(server) : 해당 구조에서 항상 동작하고 있는 호스트
    • 서버 서비스는 클라이언트(client)라는 다른 호스트들에게 서비스 요청을 받음
      • 클라이언트 호스트는 항상 켜져 있지 않음

    • 클라이언트는 서버 주소로 패킷을 보내서 언제든지 서버에 연결 가능
      ← 서버는 항상 켜져 있기 때문

  • 해당 구조에서 클라이언트끼리는 서로 직접적인 통신을 하지 않음
    • 예시 : 웹 애플리케이션에서 2개의 브라우저가 직접적으로 통신하지 않음

  • 서버가 고정 IP 주소라는 잘 알려진 주소를 가짐

  • 클라이언트-서버 구조로 설계된 애플리케이션
    → 웹, 파일 전송, 원격 로그인, 전자메일


  • 데이터 센터(data center) : 많은 수의 호스트로 갖추었고, 강력한 가상 서버를 생성
    • 존재 이유 : 하나의 서버 호스트가 클라이언트의 모든 요청 응답하는 것은 불가능
    • 대략 10만 개 정도의 서버를 갖춤
    • 서비스 제공자들은 데이터 전송을 위해 데이터 센터를 이용
      → 데이터 센터에게 상호 연결 및 대역폭에 합당한 비용을 지불함

 


P2P 구조

  • 애플리케이션은 피어(peer)라는 간헐적으로 연결된 호스트쌍이 서로 직접 통신
    • 피어(peer)
      • 서비스 제공자가 소유하지 않고 사용자들이 제어하는 데스크톱과 랩탑
      • 피어들은 가정, 대학, 사무실에 위치

  • 항상 켜져 있는 인프라스트럭처 서버에 최소한으로 의존(전혀 의존하지 않을 수도)
  • 특정 서버를 통하지 않고 피어가 통신 → peer To peer(P2P)라고 부름

  • P2P 구조의 특성
    • 자가 확장성(self-scalability)을 갖춤
      • 피어들은 파일을 다른 피어들에게 분배함으로써 시스템 서비스 능력을 추가
    • P2P 구조는 비용 효율적이다.
      • 일반적으로 상당한 서버 인프라스트럭처와 서버 대역폭을 요구하지 않음

  • P2P 애플리케이션 한계
    • 고도의 분산 구조 특성 → 보안, 성능, 신뢰성이 떨어짐

 

 


프로세스 간 통신

  • 프로세스 : 종단 시스템에서 실행되는 프로그램
    • 운영체제 용어에서 실제 통신하는 것은 프로그램이 아닌 프로세스(process)

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

 


다른 호스트에서 실행되는 프로세스와의 통신

  • 2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 서로 통신
  • 송신 프로세스는 메시지를 만들어서 네트워크로 보냄
  • 수신 프로세스는 메시지를 받고 역으로 메시지를 보냄으로써 응답

 


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

  • 네트워크 애플리케이션은 네트워크에서 서로 메시지를 보내는 2개의 프로세스로 구성
    • 통신하는 프로세스 각 쌍에 대해 클라이언트 프로세스와 서버 프로세스로 구분
      • P2P 파일 공유와 같은 애플리케이션에서의 프로세스
        → 클라이언트와 서버 둘 다 가능함

  • 클라이언트와 서버 프로세스의 정의
    • 클라이언트 프로세스 : 두 프로세스 간의 통신 세션에서 통신을 초기화하는 프로세스
    • 서버 프로세스 : 세션을 시작하기 위해 접속을 기다리는 프로세스

 


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

  • 프로세스는 소켓(socket)을 토해 네트워크로 메시지를 주고받음
    • 소켓(socket) : 네트워크 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스
      • 애플리케이션과 네트워크 사이의 API라고도 불림
        • API → Application Programming Interface

 

프로세스 간 메시지 송수신 과정

  1. 송신 프로세스가 소켓을 통해 메시지를 바깥 네트워크로 밀어냄
  2. 메시지가 목적지 호스트에 도착하면 메시지는 수신 프로세스의 소켓을 거침
  3. 수신 프로세스는 메시지를 처리

 

트랜스포트 계층에 대한 애플리케이션 개발자의 통제

  • 애플리케이션 개발자의 소켓에 관한 통제권
    • 통제권을 가지는 부분 → 소켓의 애플리케이션 계층에 대한 모든 것
    • 통제권을 가지지 못하는 부분 → 소켓의 트랜스포트 계층에 대한 것

  1. 트랜스포트 프로토콜 선택 가능
    • 애플리케이션을 선택한 프로토콜이 제공하는 전송 서비스를 사용하여 구성

  2. 트랜스포트 계층 매개 변수의 설정
    • 최대 버퍼와 최대 세그먼트 크기 등

 


프로세스 주소 배정

  • 다른 호스트의 프로세스로 패킷을 보내기 위해 수신 프로세스는 주소를 가지고 있음.
  • 프로세스 식별을 위해 2가지의 정보 명시해야 함
    1. 호스트의 주소
    2. 그 목적지 호스트 내의 수신 프로세스를 명시하는 식별자

  • IP 주소 : 호스트를 유일하게 식별하는 주소
    • IP 주소는 32비트로 구성
    • 인터넷에서 호스트는 IP 주소로 식별됨

  • 프로세스 간 메시지 전달하기 위해 알아야 하는 것
    1. 메시지가 전달되어야 하는 호스트의 주소
    2. 송신 호스트는 목적지 호스트에 있는 수신 프로세스

  • 한 호스트가 많은 네트워크 애플리케이션을 수행할 수 있음
    • 인기 있는 애플리케이션은 특정한 포트 번호가 할당
      • 웹 서버 포트 번호 → 80
      • SMTP 프로토콜의 메일 서버 포트 번호 → 25

    • 위 목적들을 위해 목적지 포트 번호(port number)가 사용