[TIL] HTTP : The Definitive Guide "p461 ~ p469

시윤·어제

[TIL] Two Pages Per Day

목록 보기
159/159
post-thumbnail

Chapter 20. Redirection and Load Balancing

(해석 또는 이해가 잘못된 부분이 있다면 댓글로 편하게 알려주세요.)


✏️ 요약


Network Element Control Protocol

  • NECP
    • Network Element가 Server Element와 소통하기 위한 프로토콜
    • Network Elements : IP 패킷을 포워딩하는 라우터나 스위처 등의 장치
    • Server Elements : 응용 계층에서 콘텐츠를 제공하는 웹 서버나 프록시 등의 장치
  • 로드밸런싱을 명시적으로 지원하지 않는다
    • 대신, SE가 NE에 로드밸런싱 정보를 제공할 수 있는 수단 제공 ->. NE가 적절히 부하를 분산하도록 한다
  • MAC forwarding, GRE 캡슐화, NAT 등의 패킷 포워딩 수단 제공

Messages


Proxy Redirection Methods

Explicit Browser Configuration

  • 사용자가 직접 프록시의 이름이나 IP/port를 입력할 수 있는 메뉴 제공
    • 사용자가 브라우저를 정확히 구성하기 어려우니 사전에 구성되어 있는 브라우저를 다운로드 받게 유도하는 편
  • 브라우저가 특정 프록시에 모든 요청을 전송하도록 구성 -> 브라우저가 어떤 프록시에 접속해야 하는지 알고 있다
  • 단점
    • 프록시를 사용하도록 구성된 브라우저는 원본 서버에 접속할 수 없다
    • 프록시에 문제가 발생하는 경우 응답을 받을 수 없다
    • 네트워크 구조를 변경하거나, 변경된 사항을 엔드 유저한테 전파하기 어렵다 (서비스 제공자가 더 많은 프록시를 제공하길 원하는 경우 사용자가 직접 설정을 바꿔야 한다)

Proxy Auto-configuration

  • 브라우저가 동적으로 올바른 프록시 서버를 구성하도록 한다
  • PAC : Proxy Auto-Configuration Protocol
    • 브라우저는 각각의 URL이 접속해야 할 프록시가 구성된 PAC 파일을 받는다
    • 브라우저는 재시작할 때마다 새로운 PAC 파일 을 받아 구성된다
    • JavaScript로 작성되며, FindProxyForURL 메서드를 정의해야 한다
      function FindProxyForURL(url, host)
    • 브라우저는 모든 요청 URL에 대해 FindProxyForURL 메서드를 호출해야 한다 (Return value는 여러 개의 프록시일 수 있다)
      return_value = FindProxyForURL(url_of_request, host_in_url);
    • PAC 파일에는 로드밸런싱, 요청 라우팅, 실패 처리 등 부가적인 기능 또한 포함된다
  • 동작 방식
    • "netscape.com" 도메인으로 요청이 오는 경우 원본 서버로 접속
    • 그 밖의 다른 요청에 대해서는 “Proxy1.joes-cache.com"로 접속
  • 장점
    • 브라우저가 호스트명과 관련된 다양한 파라미터(DNS 주소, 서브넷 등)를 바탕으로 프록시를 선택할 수 있다
    • 네트워크 구조 변화에 맞춰 동적으로 적합한 프록시에 적합할 수 있다
  • 단점
    • PAC 파일을 어느 서버에서 받아올지 사전에 구성되어 있어야 한다 (즉 완벽히 자동화된 구성 시스템이 아니다)
    • 위의 단점을 해결하기 위해 WPAD가 등장했다

Web Proxy Autodiscovery Protocol (WPAD)

  • 웹 브라우저가 가장 인접한 프록시를 찾아 사용할 수 있게 하는 프로토콜
  • WPAD를 정의하는 가장 일반적인 어려움은 수많은 탐색 프로토콜 중 어떤 것을 선택할 것인지, 브라우저마다 어떻게 서로 다르게 프록시를 구성할 것인지다

PAC file Autodidscovery

  • WPAD는 인터넷 상에 PAC 파일을 두고 적합한 프록시 서버를 결정하기 위해 PAC 파일을 사용한다
  • WPAD는 프록시 서버의 이름을 명시적으로 결정하지 않는다
  • WPAD는 PAC 파일 URL(CURL)을 발견하면, 해당 PAC 파일을 불러와 JavaScript 프로그램을 실행하여 프록시 서버를 결정한다

WPAD algorithm

  • 적합한 PAC 파일 CURL을 가져오기 위해 다양한 탐색 기술이 사용된다

    • DHCP(Dynamic Host Discovery Protocol)
    • SLP(Service Location Protocol)
    • DNS well-known hostnames
    • DNS SRV records
    • DNS service URLs in TXT records
  • WPAD 클라이언트가 리소스 탐색 요청을 전송하면 DHCP, SLP, DNS well-known hostnames, DNS SRV records, DNS service URLs in TXT recors를 순차적으로 확인한다

  • 모든 탐색 매커니즘을 시도했음에도 PAC 파일이 발견되지 않으면 WPAD 프로토콜은 실패 처리되며 클라이언트는 프록시 서버를 사용하지 않도록 구성된다

  • DNS 탐색은 몇 바퀴에 거쳐 이루어질 수 있다

CURL discovery using DHCP

  • CURL은 DHCP 옵션 코드 252에 포함된다

DNS A record lookup

QNAME=wpad.TGTDOM., QCLASS=IN, QTYPE=A
  • DNS alias “wpad”를 사용해서 프록시를 자동 탐색한다

Retrieving the PAC file

Accept: application/x-ns-proxy-autoconfig
  • PAC 파일에 대해 GET 요청을 전송할 때 Accept 헤더에 적절한 CFILE 포맷 정보를 포함해야 한다
  • CURL의 결과로 리디렉션 응답이 오는 경우 클라이언트는 최종 destination까지 리디렉션해야 한다

When to execute WPAD

  • 웹 클라이언트를 시작할 때 : 최초로 인스턴스를 시작할 때 WPAD가 사용되며 이후에 생성되는 인스턴스는 설정을 상속 받는다.
  • 클라이언트 호스트의 IP 주소가 바뀔 때마다
  • 기존에 다운로드 했던 PAC 파일이 만료되었을 때
  • 현재 구성된 PAC 파일을 따르면 실패가 발생할 때

WPAD Spoofing

  • 악성 사용자가 third-level domain을 선점하고 wpad 프록시 서버를 만들면 수많은 브라우저가 악성 프록시 서버에 도달하게 된다
  • IE 5.01 이후로는 third-level domain까지 탐색하지 않도록 막음

Timeouts

  • 각각의 탐색 단계를 10초로 제한하는 것이 합리적 (타임아웃은 구현마다 상이할 수 있음)
profile
틈틈이 두 페이지씩 원서 읽기

0개의 댓글