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초로 제한하는 것이 합리적 (타임아웃은 구현마다 상이할 수 있음)