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

  • 클라이언트-서버

    • 서버 - 항상 동작하고 있는 호스트

    • 클라이언트 - 서버에게 서비스 요청을 하는 호스트

    • 서버는 고정 IP주소라는 잘 알려진 주소를 가지고 항상 동작하고, 클라이언트는 서버 주소로 패킷을 보내 언제든지 서버에 연결할 수 있다.

    • 서비스 요청을 많이 받는 서버의 경우 많은 수의 호스트를 갖춘 데이터 센터가 강력한 가상의 서버를 생성하는 역할로 사용된다.

  • P2P

    • 피어(peer) - P2P 구조에서 서비스 제공자가 소유하지 않고 사용자들이 제어하는 데스크톱과 랩톱을 말한다.

    • 피어라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신한다.

    • 자가 확장성 - 각 피어들은 파일을 다른 피어들에게 분배함으로써 해당 시스템에 서비스 능력을 추가할 수 있다.

    • 예) BitTorrent

프로세스 간 통신

  • 클라이언트 프로세스

    • 웹 어플리케이션에서 클라이언트 브라우저 프로세스

    • P2P에서 파일을 내려받는 피어

  • 서버 프로세스

    • 웹 어플리케이션에서 웹 서버 프로제스

    • P2P에서 파일을 올리는 피어

  • 일반적으로 두 프로세스간 통신 세션에서 초기화하는 프로세스를 클라이언트, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버라고 한다.

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

  • 하나의 프로세스에서 다른 프로세스로 보내는 메시지는 네트워크를 통해 이동한다.

  • 소켓 - 프로세스가 메시지를 네트워크로 보내기 위한 통로 역할을 한다. 소켓은 애플리케이션과 네트워크 사이의 API라고도 한다.

  • 프로세스 주소

    • 호스트의 주소 - IP주소로 식별

    • 목적지 호스트 내의 수신 프로세스를 명시하는 식별자 - 포트번호로 식별

애플리케이션이 이용 가능한 트랜스포트 서비스

  • 신뢰적 데이터 전송 - 프로토콜이 프로세스 간 보장된 데이터 전송 서비스를 제공하는 것을 말한다. 이 서비스가 제공되면 송신 프로세스는 데이터를 소켓으로 보내고 그 데이터가 오류 없이 수신 프로세스에 도착할 것이라는 확신을 가진다.

  • 처리율 - 네트워크 경로를 따라 두 프로세스 간의 통신 세션에서 송신 프로세스가 수신 프로세스를 비트로 전달할 수 있는 비율

  • 시간 - 데이터를 전송하는 시간을 보장 받는다.

  • 보안 - 기밀성, 데이터 무결성, 종단 인증 등의 보안 서비스를 제공받는다.

인터넷 전송 프로토콜 제공 서비스

  • TCP

    • 연결 지향형 서비스 - 메시지를 전송하기 전에 클라이언트와 서버는 핸드 셰이킹 단계를 통해 서로 전송 제어 정보를 교환하여 연결한다.

    • 신뢰적 데이터 전송 서비스 - 모든 데이터를 오류 없이 올바른 순서로 전달한다.

  • UDP

    • 비연결형 - 핸드셰이킹 과정이 없이 바로 메시지를 전송한다.

    • 비신뢰적 데이터 전송 서비스 - 수신 소켓에 도착하는 것을 보장하지 않고, 수신 소켓에 도착하는 메시지들의 순서를 보장하지 않는다.

HTTP

  • HTTP

    • 메시지의 구조 및 클라이언트와 서버가 메시지를 어떻게 교환하는지에 대해 정의하고 있는 웹의 애플리케이션 계층 프로토콜

    • HTTP 서버는 클라이언트에 대한 정보를 유지하지 않으므로 HTTP를 비상태 프로토콜이라고 한다.

    • 웹 서버는 항상 켜져 있고, 고정 IP 주소를 가지며, 수백만 브라우저로부터 요청을 서비스한다.

  • 웹 페이지 - 기본 HTML 파일과 여러 참조 객체로 구성

  • URL - 객체를 갖고 있는 서버의 호스트 이름과 객체의 경로 이름을 가진 웹 페이지 주소

  • 웹 브라우저 - 요구한 웹 페이지를 보여주고 여러가지 인터넷 항해와 구성 특성을 제공

  • 쿠키

    • 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일

    • 네가지 요소

      • HTTP 응답 메시지 쿠키 헤더라인

      • HTTP 요청 메시지 쿠키 헤더라인

      • 사용자의 브라우저에 사용자 종단 시스템과 관리를 지속시키는 쿠키 파일

      • 웹 사이트의 백엔드 데이터베이스

    • 작동 방식

      • 클라이언트 호스트가 HTTP 요청을 하면 서버 호스트는 HTTP 응답 메시지에 Set-cookie 헤더와 식별번호를 포함하여 보낸다.

      • 이후 일정 시간동안 클라이언트 호스트가 HTTP 요청을 할때 HTTP 요청 메시지에 쿠키 파일을 추가하여 보낸다.

      • 서버 호스트는 식별번호를 식별하여 클라이언트 호스트가 원하는 웹 정보를 유지할 수 있다.

  • 웹 캐싱

    • 자체의 저장디스크를 갖고 최근 호출된 객체의 사본을 저장 및 보존하여 브라우저가 사용자의 HTTP 요구를 웹 캐시에 가장 먼저 보내도록 구성할 수 있다.

    • 작동 방식

      • 브라우저는 웹 캐시와 TCP 연결을 설정하고 웹 캐시에 있는 객체에 대한 HTTP 요청을 보낸다.

      • 웹 캐시는 객체의 사본이 자기에게 저장되어 있는지 확인한다. 만약 저장되어 있다면 웹 개시는 클라이언트 브라우저로 HTTP 응답 메시지와 함께 객체를 전송한다. 만약 저장되어 있지 않다면, 웹 캐시는 기점 서버로 TCP 연결을 설정하고, 캐시와 서버간의 TCP 연결로 객체에 대한 HTTP 요청을 보낸다.

      • 요청을 받은 후에 기점 시버는 웹 캐시로 HTTP 응답 메시지와 함께 객체를 보낸다.

      • 웹 캐시의 객체를 수신할 때, 객체를 지역 저장장치에 복사하고 클라이언트 브라우저에 HTTP 응답 메시지와 함께 객체의 사본을 보낸다.

HTTP/2

  • HTTP/1.1에서 하나의 TCP 연결 상에서 멀티플렉싱 요청/응답 지연 시간을 줄이는데 있으며, 요청 우선순위화, 서버 푸시, HTTP 헤더 필드의 효율적인 합축 기능 등을 제공한다.

  • HTTP/1.1의 경우 지속적인 TCP 연결을 이용하기 때문에 웹 페이지당 오직 하나의 TCP 연결을 가진다. 이 때, 하나의 TCP 상에서 웹 페이지에 있는 모든 객체를 보내게 되기 때문에 HOL 블로킹 문제가 발생한다. 이를 해결하기 위해 HTTP/2에선 여러 개의 병렬 TCP 연결을 열어 같은 웹 페이지에 있는 객체들을 브라우저로 병렬적으로 전송하여 HOL 블로킹 문제를 해결했다.

  • HTTP/2 프레이밍 - 각 메시지를 작은 프레임으로 나누고, 같은 TCP 연결에서의 요청과 응답 메시지를 인터리빙한다.

DNS

  • DNS (Domain Name System) - 라우터의 경우 IP주소를 통해 호스트가 인터넷의 어디에 위치하는지에 대한 자세한 정보를 얻을 수 있다. 반면 사람에겐 IP주소가 매우 복잡하고 외우기 어렵다고 느낄 수 있는데 이를 절충하기 위해 호스트 이름을 IP 주소로 변환해주는 디렉터리 서비스가 존재하는데 이를 DNS라고 한다.

  • 변환 과정

    • 브라우저는 URL로부터 호스트 이름을 추출하고 호스트 이름을 DNS 애플리케이션의 클라이언트에 넘긴다.

    • DNS 클라이언트는 DNS 서버로 호스트 이름을 포함하는 질의를 보낸다.

    • DNS 클라이언트는 호스트 이름에 대한 IP 주소를 가진 응답을 받게 된다.

    • 브라우저가 DNS로부터 IP 주소를 받으면 브라우저는 해당 IP 주소와 그 주소의 80번 포트에 위치하는 HTTP 서버 프로세스로 TCP연결을 초기화한다.

P2P

  • 간헐적으로 연결되는 호스트 쌍들이 서로 직접 통신한다.

  • 클라이언트-서버 구조보다 일반적으로 분배시간이 적고, 자가 확장성을 갖는다.

  • 피어가 비트의 소비자이자 재분배자이다.

CDN

  • 다수의 지점에 분산된 서버들을 운영하며, 비디오 및 다른 형태의 웹 콘텐츠 데이터의 복사본을 이러한 분산 서버에 저장하는 네트워크를 콘텐츠 분배 네트워크라고 한다.

  • 사용자는 최선의 서비스와 사용자 경험을 제공할 수 있는 지점의 CDN 서버로 연결되고, CDN 은 콘텐츠 제공자가 소유한 사설 CDN일 수 있고, 제 3자가 운영하는 CDN을 통해 다수의 콘텐츠 제공자가 서비스할 수 있다.

  • 서버 위치 지정 방법

    • Enter Deep - 서버 클러스터를 세계 곳곳의 접속 네트워크에 구축함으로써 ISP의 접속 네트워크로 깊숙이 들어가는 것이다. 이로 인해 서버를 최대한 사용자 가까이에 위치시켜 사용자와 CDN 서버 사이의 링크 및 라우터 수를 줄이고, 사용자가 경험하는 지연 시간 및 처리율을 개선할 수 있다.

    • Bring Home - 좀 더 적은 수의 핵심 지점에 큰 규모의 서버 클러스터를 구축하여 ISP를 Home으로 가져오는 개념이다. Enter Depp에 비해 클러스터 유지 및 관리 비용이 줄지만 사용자가 느끼는 지연 시간 및 처리율은 상대적으로 나빠진다.