카테고리 없음2008. 3. 13. 15:06

[커버스토리]대중음악 반세기 ‘최우수 아티스트·앨범’ 평가

경향신문|기사입력 2007-08-23 10:24 기사원문보기
김민기
김민기
‘롤링스톤지가 뽑은 1980년대 최우수 앨범 100’ ‘타임지가 뽑은 70년대 최우수 록 앨범’ ‘크림지 기고가들이 뽑은 최우수 록 앨범’ ‘NME 선정 최우수 록 앨범 100’과 같은 매체에서 기획하는 ‘명반선정 특집’들은 내게 좋은 기억으로 남아있다. 10, 20대 당시 가열차게 혁신적인 뮤지션과 감동적인 음반들을 찾아 헤맬 때, 게다가 지금과 같이 인터넷에서 폭넓게 정보를 찾을 수 없었던 때에는 음악전문매체에서 음악평론가들이 중심이 되어서 진행하는 ‘명반선정 특집’은 가뭄의 단비와 같은 존재였다. 그래서 이를 따로 복사해서 가지고 다니면서 음반을 살 정도로 소중하게 생각했고, 아마 동세대 음반 컬렉터들은 비슷한 경험을 공유하고 있을 것이라고 여긴다.

내가 그렇게 그 명반 리스트들을 애지중지 다뤘던 이유는 아주 ‘실용적인 이유’에 근거한다. 다양한 장르의 내가 미처 경험해보지 못한 아티스트들의 음반까지 섭렵하고 싶은 욕구 때문에 들어본 적 없는 음반들도 사려다 보면 누군가의 조언이 필요했다. 또한 현실적으로 정해진 용돈 내에서 음반을 사려다보니 믿을 만한 음악 전문 매체와 평론가들의 추천에 기대는 방법을 택하게 됐다. 이는 감으로만 음반을 샀다가 낭패를 보는 일을 최대한 줄이기 위해서이기도 했지만, 그들이 추천하는 ‘대중음악의 보고’에 대개 만족지수가 높았음을 경험했기 때문이다. 20대 후반, 직장을 다니면서부터는 명반 리스트를 가지고 다니는 일이 없어졌지만, 해외 매체에서 그런 특집을 하면 아직도 집중해서 훑어보는 버릇은 여전하다.

한대수
한대수
영미권이나 일본의 매체에서는 ‘명반선정 특집’을 많은 매체에서 정말로 다양한 방법으로 지속적으로 하는데, 이유는 크게 두 가지이다. 하나는 음악 마니아들이 그 특집 때문에 잡지를 사서 본다는 점이고, 또 하나는 음악 마니아들에게 음반구매 욕구를 자극해서 음악산업을 키우려는 의도 때문이다. 일반적으로 음악 마니아들은 ‘명반선정 특집’과 같은 기사는 절대로 그냥 지나치지 못하고, 하다못해 평소에 음악에 관심이 적은 사람들조차도 이때만큼은 보게 마련이다. 왜냐 하면 자신의 음악적 기호와 지식이 자신이 속해 있는 사회 동아리에서 어느 정도 위치에 있는지 확인해보고 싶은 욕구 때문이다.

“음악에 서열을 매긴다”고 이런 방식의 기획을 좋아하지 않는 사람들이 있지만, 그런 사람들조차 호기심에 ‘명반선정 특집’을 보게 마련이고 그래서 해외 음악매체에서는 수십 년 동안 이런 기획을 줄기차게 하고 있는 것이다. 사실 음악 마니아들에게 이런 기획은 ‘크리스마스 선물’과 비슷하다고 여겨진다. 엄밀히 말해서 음악매체의 비즈니스 산물이라고 하더라도 거기에 염증을 느껴본 적은 없는데, 내 경험상 청년 음악 마니아들에게 실제적인 도움을 주는 것이라고 생각하기 때문이다.

그런데 왜 한국의 매체에서는 ‘한국대중음악을 대상’으로 음악관계자들이 참여하는 방식의 ‘명반선정 작업’이 이다지도 드물고 낯설까? 내 기억이 정확하다면 이번에 경향신문의 도움과 지면을 빌려서 문화기획·대중음악 전문매체 ‘가슴네트워크(gaseum.co.kr)’가 기획·진행하는 ‘가슴네트워크 선정 한국대중음악 100대 명반’ 특집은 공식 매체에서는 두 번째 작업으로 알고 있다.

산울림
산울림

이전에 내가 편집장으로 있었던 대중음악전문지 서브(SUB)의 1998년 12월호에서 ‘한국대중음악사 100대 명반’ 선정 작업을 처음으로 한 이래 물경 9년 만이다. 당시 총 21명의 음악 관계자들이 참여하여 의미 있는 결과를 얻어냈고, 이는 한국대중음악을 ‘앨범과 작가 중심’으로 훑은 첫번째 작업이 아닌가 한다. 이 자료는 후에 본인의 책인 ‘이 땅에서 음악을 한다는 것은’(1999)의 부록에도 실렸고, 본문보다도 부록이 더 많이 회자되는 특이한 경우로 안다.

기본적으로 대중음악에 대한 평가는 발표된 앨범(작품)으로부터 시작되고, 영미권과 일본의 음악매체에서는 매년 연말 ‘올해의 앨범’ 선정과 같은 작업을 한다. 이와 같이 ‘앨범에 순위를 매기는 작업’은 단순히 매체의 상업적인 기획을 넘어서서 대중음악사 기술 측면에서 보면 ‘평가를 통한 기록’으로 매우 중요하다고 할 수 있다. 그리고 여기에는 ‘당대 평가’라는 측면이 있다. 그런데 한국에서는 이러한 경험과 전통이 거의 없다고 볼 수 있고, 아직까지 대중음악에 대한 연구, 평론이 체계적인 방식으로 이루어진 적이 없다. 한국에서 그간 ‘명반선정 작업’이 드물었다면, 그건 대중음악에 대한 ‘비평문화’ 수준을 드러내는 것일 수도 있다. 음악산업이 정상적으로 발전한 나라들은 음악전문매체와 비평문화가 활성화되어 있음을 상기한다면, 한국의 대중음악은 ‘산업화 전 단계’ 수준이다.

그래서 이번에 경향신문과 가슴네트워크가 공동으로 기획한 ‘한국대중음악 100대 명반 선정’ 자료는 단순한 기사 차원을 넘어서서 ‘한국대중음악 사료’로 볼 수도 있다. 또한 이는 선정된 뮤지션들의 앨범이 한국대중음악사에서 어떠한 위치를 점하고 있는지를 파악하는 데 결정적인 자료라고 생각한다. 왜냐 하면 이를 통해서 현재 한국의 중요한 대중음악 작가(아티스트)들은 누구이며, 그들의 음악이 대중음악사에서 어떤 의미를 갖고 있는지를 밝혀주고 있기 때문이다.

이번 연재 특집에서 한 가지 아쉬운 점이 있다면, 지면 한계상 비평적인 텍스트들을 온전히 기획하지 못했고, 음반정보들이 빠지게 된 것이다. 그래서 가슴네트워크에서는 연재가 끝나는 대로 미처 수록하지 못했던 글까지 묶어서 단행본 출간을 할 예정이다. 마지막으로 이번 연재를 통해서 게재될 앨범 이미지들의 다수는 출처가 maniadb.com임을 밝힌다.

〈박준흠|선정위원장·가슴네트워크 대표〉

- 대한민국 희망언론! 경향신문, 구독신청(http://smile.khan.co.kr) -

ⓒ 경향신문 & 경향닷컴(www.khan.co.kr), 무단전재 및 재배포 금지

〈경향닷컴은 한국온라인신문협회(www.kona.or.kr)의 디지털뉴스이용규칙에 따른 저작권을 행사합니다.〉



경향신문 기사목록|기사제공 : 경향신문

관련 링크
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=103&oid=032&aid=0000240436

Posted by theYoungman
engineering/Network Eng.2007. 5. 17. 11:22
-----------------------------------------------------------------------
제목 : ping 에러 메시지 모음과 설명
분류 : Network   글쓴이 : 관리자 글쓴날 : 2003년 10월 16일 오후 04:08



가. Destination Unreachable

- 이 메시지는 여러가지 문제를 나타낼 수 있다. 이 에러 메시지는 라우터가 원격 시스템
으로 가는 경로를 찾지 못한 경우, 목적지 시스템의 특정 포트 번호가 현재 응답할 수 없
는 경우, 그리고 기타 여러 가지 문제가 발생한 경우에 생성된다.

1. Network Unreachable

- 이 에러 메시지는 이 오류를 보고하는 라우터의 라우팅 테이블에서 목적지 네트웍크를 위
한 경로를 찾지 못한 경우에 생성된다.
예) 사용자가 인터넷에서 라우팅될 수 없는 사설 주소에 연결하는 경우에 흔히 나타난다.

또한 오래되거나 손상된 라우팅 테이블을 가진 라우터에 데이터그램을 전송한 경우에도 나
타난다

2. Host Unreachable

- 이 에러 메시지는 IP 데이터그램이 최종 목적지 시스템에 전달되지 않았다는 것을 나타낸
다. 예) 이 에러 메시지는 최종 단계의 라우터가 목적지 시스템에 이르는 방법을 모를는 경
우에 생성된다
Network Unreachable 오류와 마찬가지로 이것은 조언성격의 메시지이며 호스트가 존재하지
않는다는 것을 뜻하지 않는다.

3. Protocol Unreachable

- 이 에러 메시지는 목적지 시스템에서 특정 전송 프로토콜을 사용할 수 없다는 것을 나타
낸다 예) 이 에러 메시지는 사용자가 비표준 전성 프로토콜(XTP와 같은)을 사용하여 그 프
로그램을 지원하지 않는 다른 호스트와 통신하는 경우에 나타난다.

4. Port Unreachable

- 이 에러 메시지는 목적지 시스템에서 특정 목적지 포트 번호가 사용되지 않는다는 것을
나타낸다 이 오류는 거의 대부분 UDP에 의해 생성된다. TCP의 경우 원격 시스템과 연결하는
데 핸드세이킹을 사용하므로 목적지 시스템에서 해당 포트를 사용하고 있는 어플리케이션이
없는 경우 목적지 시스템의 TCP 스택은 TCP reset플래그를 사용하여 연결 요청을 거부한다.
예) 일반적으로 이 오류는 클라이언트 애플리케이션에서 적재되지 않거나 기대한 포트 번호
를 사용하지 않는 서버 어플리케이션에 접속을 시도 하는 경우에 나타낸다.

5. Source Route Failed

- 이 에러 메시지는 라우터에 데이터그램의 Source Route IP Option 필드에 지정된 다음 단
계의 라우터에 패킷을 전달하지 못했다는 것을 나타낸다
예) Source 라우팅은 다음 단계의 라우터가 유효하지 않거나 라우터가 다음 단계의 라우터
에 데이터 그램을 전송하지 못한 경우에 실패한다

6. Destination Network Unknown

- 이 에러 메지시는 목적지 네트웍크가 아예 존재하지 않는다는 것을 나타낸다. 이것은 데
이터 링크 네트웍크에서 목적지 네트웍크가 존재하지 않는다는 명백한 증거를 가졌을 때에
만 전송되며, 실제적으로 네트웍크가 존재하는데도 현재의 라우팅 테이블에서 목적지 네트
웍크로 가는 경로를 찾지 못하는 경우에 전송되는 Network Unreachable 오류와 반대의 의미
를 갖는다
Network Unreachable 에러 메시지에서는 목적지 네트웍크가 존재하지 않을 가능성만을 제안
하지만, Destination Network Unknown 에러 메시지는 목적지 네트웍크가 실제로 존재하지
않는다는 것을 뜻한다.

7. Destination Host Unknown

- 6번과 마찬가지로 이 메시지는 Host에 관한 것임

8. Network Unreachable for Type-of-Service

- 이 에러 메시지는 출발지와 목적지 시스템 사이에 있는 중계 라우터에 의해 다음 단계의
네트웍크에서 IP 데이터그램이 요구하는 서비스 종류 값 또는 기본 서비스 종류를 지원하지
않는 경우에 생성된다.
어떤 장비가 특정한 서비스 종류를 정의하여 IP 패킷을 전송하는데, 그 서비스 종류에 적합
한 경로가 없다면 라우터는 패킷을 거부하고 이 문제를 송신 시스템에 보고한다

9. Host Unreachable for Type-of-Service

- 이 에러 메시지는 목적지 시스템을 위한 마지막 단계의 네트웍크에서 IP데이터그램이 요
구하는 서비스 종류 값 또는 기본 서비스 종류를 지원하지 않을 경우에 마지막 단계의 라우
터에 의해 생성된다, 어떤 장비가 특정 서비스 종류를 정의하여 IP패킷을 전송하는데, 마지
막 단계의 네트웍크에서 그 특정 서비스 종류를 지원하지 않는다면 마지막 단계의 라우터는
패킷을 거부하고 이 문제를 송신 시스템에 보고한다


나. Time Exceeded 에러 메시지

- Time Exceeded 에러 메시지는 포워딩이나 재배열 작업이 너무 오래 걸려 보고하는 장비가
데이터를 소멸시킨다는 것을 나타낸다. 이 메시지는 오류를 더 자세하게 보고하기 위해
ICMP Message Code필드를 사용하여 두 개의 다른 하위 메시지를 제공한다.

1. Time-to-Live Exceeded in Transit

- 이 에러 메시지는 IP 데이터그램이 최종 목적지에 전달되기 이전에 데이터그램의 활성화
시간 (Time-to-Live) 값이 0에 도달하였을 때 사용된다. Time-to-Live필드가 데이터그램이
거칠 수있는 최대 단계의 수를 나타내므로 라우터는 활성화 시간 값이 0인 데이터그램을 전
달하지 못하며, 대신 데이터그램을 소멸시켜야 한다. 대부분의 시스템이 활성화 시간 값을
30이상 으로 설정하기 때문에 이 메시지는 라우팅 루프가 데이터그램의 전달을 방해하고 있
다는 것을 나태내는 경우가 많다
이 메시지는 또 traceroute프로그램에서 송신 시스템과 목적지 시스템 사이의 라우터를 확
인하기 위해서도 사용된다.

2. Fragment Reassembly Time Exceeded

- 이 에러 메시지는 데이터그램이 분열되었으나 목적지 시스템이 주어진 시간(Unix에서는
대부분 60초로 설정되는)안에 모든 조각을 수신하지 못했을 때 사용된다. 일반적으로 이 메
시지는 어떤 조각이 전송 과정에서 분실되었으며, 목적지 시스템은 현재가지 수신한 모든
조각을 소멸시킨다는 의미를 갖는다.


다. Redirect 에러 메시지

- Redirect 에러 메시지는 라우터가 송신 시스템에서 특정 목적지로 가는 데 짧은 경로를
알리고자 할 때마다 사용된다. 일반적으로 이 메시지는 여러 개의 라우터가 존재하는 네트
웍크에서 사용자가 하나의 기본 경로만을 정의한 다음, 기본 라우터 외의 다른 라우터를 통
해 특정 네트워크에 데이터그램을 전송해야 되는경우에 나타난다. 사용자가 '더 나은' 라우
터로 데이터그램을 전송하지 않으면, 기본 라우터는 Redirect에러 메시지를 통해 송신 시스
템에 사용되어야 할 올바른 라우터를 알려준다.

1. Redirect for Destination Network

- 이 메시지는 특정 목적지 네트웍크를 위한 모든 트래픽이 다른 라우터를 통해 전송되어야
할 때 사용된다. 라우팅 테이블이 호스트 엔트리를 포함할 수 있으므로 이 오류는 호스트에
특화된 Redirect가 요구되는 경우에 사용된다.

2. Redirect for Destination Network Based on Type-of-Service

- 이 에러 메시지는 송신 시스템이 어떤 목적지를 위해 특정한 서비스 종류를 요구하고, 목
적지 네트웍크를 위한 트래픽 가운데 그 서비스 종류를 가진 것이 다른 라우터를 통해 전송
되어야 하는 경우에 사용된다

3. Redirect for Destination Host Based on Type-of-Service

- 이 에러 메시지는 송신 시스템이 어떤 시스템을 위해 특정한 서비스 종류를 요구하고, 목
적지를 위한 트래픽 가운데 그 서비스 종류를 갖고 있는 것이 다른 라우터를 통해 전송되어
야 하는 경우에 사용된다.


라. Source Quench 에러 메시지

- Source Quench 에러 메시지는 ICMP 에러 메시지 가운데 가장 단순하다. 송신 시스템이 목
적지 호스트에서 처리하기에 너무 많은 데이터를 전송하면, 목적지 시스템은 송신 시스템에
ICMP Source Quench 에러 메시지를 전송하여 전송 속도를 줄일 것을 요구한다. 송신 시스템
이 전송 속도를 늦추지 않으면 일부 패킷이 혼잡으로 인하여 분실될 가능성이 높다.

Source Quench 에러 메시지는 전화 접속 서버가 LAN과 같이 높은 대역폭을 제공하는 네트웍
크를 전화 접속 클라이언트처럼 낮은 대역폭을 가진 장비에 연결하는 경우에 가장 많이 찾
아 볼 수 있다.
이런 경우, LAN의 고성능 시스템은 전화 접속 서버가 자신의 클라이언트에 전달할 수 있는
양보다 많 은 데이터를 전송할 수 있다. 결국, 전화 접속서버의 전송 버퍼가 차게 되고 송
신 시스템이 속도를 늦추지 않으면 패킷을 분실하기 시작한다. Source Quench는 전화 접속
서버에 혼잡이 발생하였다고 송신 시스템에 알리고 전송속도를 늦출 것을 요구한다.
Source Quench는 집중적인 트래픽의 흐름을 제어하는 데 매우 효율적인 도구이다.


마. Parameter Problem 에러 메시지

- Parameter Problem 에러 메시지는 IP 데이터그램 자체에 문제가 있어 소멸된다는 것을 나
타낸다. Parameter Problem 오류는 항상 IP옵션을 잘못 사용한 겨우에 나타난다. 예를 들어
어떤 장비는 IP해더에 잘못된 Sourec Route 옵션을 사용하여 IP데이터그램을 전송할 수도
있다. 이 오류 때문에 데이터그램의 전달은 실패할 것이며, 오류가 발견되면 중계 게이트웨
이가 또는 수신 시스템에 의해 소멸될 것이다.

이 경우, 문제는 전달할 수 없는 주소가 아닌 잘못된 옵션 때문이므로 Destination
Unreachable : Sourec Route Failed 에러 메시지는 전송되지 않는다.

1. Pointer Indicates the Error

- 이 오류는 데이터그램의 구조에 문제(잘못된 헤더 필드처럼)가 있다는 것을 나타낸다.

Parameter Problem 에러 메시지의 ICMP Message Data 필드는 잘못된 데이터의 위치를 제공
하여, 송신 시스템에서 실패의 원인을 파악할 수 있게 한다.

2. Required Option Is Missig

- 이 오류는 요구된 IP옵션이 정의되지 않았다는 것을 나타내며, 미국 국방 기관에서만 사
용하는 Securiy옵션하고만 사용된다.

3. Bad length

- 이 오류는 IP 데이터그램의 Hearder Length 또는 Total Packet Length 값이 올바르지 않
다는 것을 나타낸다.


출처 : http://coffeenix.net/board_view.php?cata_code=5&bd_code=153&bpage
Posted by theYoungman
engineering/Network Eng.2007. 5. 3. 22:55

Netmanias white papers

More white papers

 

TCP Congestion Control Mechanism

       

분석 및 정리: 김범준

게재일: 09/20/2000

          

연세대학교 네트워크 연구실 박사과정

E-mail: ibrow00@hanmail.net

1. Introduction

         

TCP (Transmission Control Protocol) congestion control mechanism 1988년의 TCP Tahoe[1]이래 1990 TCP Reno[3], 1995 TCP Vegas[4] 이르기까지 다양한 버전으로 구현되었다. TCP congestion control mechanism 기본적인 알고리즘은 Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery 구성되어 같이 작동하도록 되어 있다.  

         

TCP congestion control mechanism 목적은 송신 단말의 전송률을 직접 제어하여 congestion으로 인해 손실된 데이터를 재전송하기 위함이다. TCP OSI reference model 4계층에 속하는 프로토콜로 송신 단말과 수신 단말사이의 노드의 수에 상관없이 종단간 동작한다. TCP 송신 단말과 수신 단말을 끝으로 하는 하나의 roop 형성하여 roop 수신측이 전송하는 Acknowledge 정보와 window 그리고 timeout 기능을 이용하여 congestion control mechanism 구현하고 있다.

2. Slow Start  

            

TCP Tahoe 이전의 TCP 수신 단말이 알려주는 윈도우의 크기 만큼의 segment들을 전송함으로써 연결(connection) 맺고 전송을 시작했다. , 수신 단말이 알려주는 윈도우의 크기가 segment 크기보다 크다면 처음부터 여러 개의 segment 전송하는 것이 가능하였다. 그러나 종단 단말 사이에 congestion 발생하거나 속도가 느린 링크가 존재한다면 중간의 node, 일반적으로 router들은 packet들을 buffering 필요가 생기게 되는데 같은 경우에 도중에 하나의 router라도 buffer 용량이 충분하지 않다면 packet 손실이 발생하게 된다. 손실이 발생하면 손실이 발생했다는 것을 감지하기 위한 지연과 재전송으로 인한 지연이 발생하므로 TCP 처리율(throughput) 급격하게 감소하게 된다. 이것이 “congestion collapse” 의미이다.  

            

“congestion collapse” 해결하기 위해서 “conservation of packets“ 원칙이 나오게 되었다. “conservation of packets“ 원칙은 현재 설정되어 있는 연결이 평형상태에 있다는 , 예를 들어서 하나의 packet 완전히 전송되기 전까지는 새로운 packet 전송하지 않는 상태를 의미한다. 이론적으로 이런 상태에서는 congestion 발생하는 것이 불가능하지만 실제 internet에는 congestion 발생하는데 원인은 다음의 세가지를 생각해 있다.

            

1)       현재 설정된 연결이 평형상태에 이르지 했거나,

2)       송신 단말이 하나의 packet 전송이 종료되기 전에 새로운 packet 전송했거나,

3)       자원의 한계로 인해서 현재의 path에서는 평형상태에 이를 없는 경우

첫번째 원인을 해결하기 위해서 고안된 알고리즘이 Slow Start이다. 그대로 천천히 전송을 시작하여 현재 설정된 연결이 평형 상태에 이르도록 한다는 뜻이다. 송신 단말은 수신 단말로부터의 Ack 전송되지 않은 상태에서는 새로운 segment 전송하는 것이 불가능하고 수신 단말 역시 송신 단말이 전송한 segment 도착하기 전에는 Ack 전송할 없으므로 수신 단말이 전송하는 Ack 설정된 연결의 일종의 시계역할을 한다고 각할 있는데 이것이 “self-clocking” 개념이다. 다음 그림 1 같이 self-clocked 시스템은 가장 전송속도가 느린 링크에 의해서 영향을 받게 된다.

           

그림 1. Self-clocking system

, 같은 데이터 크기를 갖는 segment 전송하는 경우 전송 속도가 느린 링크를 통과할 전송 지연이 가장 크므로 때의 지연 간격으로 Ack 발생하게 되고 따라서 송신 단말은 이상의 전송 속도로 segment들을 전송할 있다고 하더라도 Ack 수신되지 않은 상황에서는 새로운 segment 전송 없게 된다. 이와 같이 self-clocked 시스템은 가장 속도가 느린 링크에 맞추어서 새로운 segment 전송하므로 당연히 안정 상태에 있게 된다. 그런데 clock역할을 하는 Ack 송신 단말이 segment 전송하는 경우에만 발생되므로 처음에 송신 단말이 segment 전송하기 위한 일종의 규칙이 필요한데 이를 위한 것이 바로 Slow Start이다. 다시 말하면 현재 설정된 연결 시스템들을 self-clocking하기 위해서는 수신 단말로부터의 Ack 필요하고, Ack 발생시키기 위해서는 송신 단말은 어떤 방법으로든 segment 전송해야 하는데 이를 위한 것이 Slow Start 것이다.

Slow Start에서는 기존의 TCP cwnd 표현되는 congestion window 추가되었다. 처음 연결이 설정될 또는 congestion 의해서 segment 손실이 발생한 경우 cwnd 값은 1 초기화된다. 그리고 송신 단말은 수신 단말이 알려주는 window cwnd 작은 것의 크기 만큼 전송한다. 수신 단말로부터의 Ack 전송될 때마다 cwnd 값은 1 증가한다. , 송신 단말이 새로운 연결을 설정하고 하나의 segment 전송한 segment 대한 Ack 수신하면  송신 단말인 2개의 segment 전송할 있다. 그리고 만약 두개의 segment 대한 Ack 수신되면 다시 4개의 segment 전송할 있고, 다음에는 8, 16, 지수적으로 증가한다. 이런 식으로 cwnd 계속적으로 증가하다가 임계 값인 ssthresh 이르게 되면 congestion avoidance 동작하게 된다.

그림 2. Slow Start operation

3. Congestion Avoidance  

                 

송신 단말과 수신 단말 사이에 발생하는 packet 유실은 크게 가지의 원인으로 생각해 있다. 하나는 물리적인 오류에 의한 경우이고 다른 하나는 congestion 의해서 buffering되는 과정에서 buffer 공간이 부족한 경우이다. 최근 전송 기술 매체의 발전으로 물리적으로 손실되는 비율은 크게 낮아졌고 따라서 대부분의 packet 손실은 congestion 의한 것으로 생각할 있다. 물론 가정은 상대적으로 높은 전송 오류 확률을 가지는 무선 링크의 경우에는 성립하지 않는다.  

          

Congestion avoidance congestion 발생했다는 것을 알리는 과정과 congestion 발생한 경우 현재의 사용을 감소시키는 과정으로 동작한다. Slow start congestion avoidance 별개의 알고리즘이지만 같이 동작한다. 다음의 예는 두개의 알고리즘이 같이 동작하는 예이다.

1) 새로운 연결을 설정할 cwnd 값을 1 segment 크기로 그리고 ssthresh 값을 65535 설정한다.

2) 송신 단말의 TCP cwnd 수신 단말의 window 크기 작은 만큼 전송한다.

3) Congestion 발생한 경우 현재 window 크기, cwnd 수신 단말의 window 작은 값의 1/2 ssthresh 값을 갱신한다. ssthresh 값은 적어도 1 segment 보다는 커야 한다. 그리고 만약 congestion 원인이 timeout 의한 것이라면 cwnd 값은 1 segment 되어 다시 slow start 상태가 된다.

그림 3. Combined operation of slow start and congestion avoidance

4) Congestion 발생하지 않는 경우에는 cwnd 값은 계속 증가하게 되는데 증가하는 방식은 현재 상태가 slow start인지 congestion avoidance인지에 의해 따라 다르다. 만약 slow start 경우에는 앞에서 설명한 것과 같이 매번 ack 수신될 때마다 cwnd 값을 1 segment 만큼 증가시키고, 만약 cwnd 값이 현재 설정된 ssthresh값과 같아지게 되면 이후에는 congestion avoidance 상태로 들어가게 된다. Congestion avoidance 상태에서는 매번 ack 수신될 때마다 cwnd 1/cwnd만큼 증가시킨다. 이것은 slow start에서의 cwnd 증가가 지수적인데 반해서 선형적인 증가라고 있다. 예를 들어서 현재 cwnd 값이 10이고 따라서 10개의 segment 전송한 후에 10개의 ack 수신했다면 cwnd 값은 원래의 10 10*1/10 더한 값이 되므로 11 된다. , slow start 경우 한번의 round trip time 동안에 수신된 Ack 개수 만큼 cwnd 증가시키는 반면, congestion avoidance 경우 한번의 round trip time 최대 segment 크기 만큼을 증가시킬 있는 것이다.

4. Fast Retransmit  

                

Segment 손실되었다는 사실은 송신 단말의 TCP timeout되는 경우와 수신 단말이  발생시키는 duplicate Ack 수신하는 가지 경우에 의해 있다. duplicate Ack 송신 단말이 여러 개의 segment 전송했는데 수신된 segment 순서가 틀렸을 경우 수신 단말이 발생시키는 Ack이다. 예를 들어서 송신 단말이 1에서 8까지의 segment 한꺼번에 전송했는데 5 segment 수신하지 못한 상태에서 6 segment 수신한 경우에 수신 단말은 5 segment 대한 Ack 발생시키게 되고 이후 7, 8 segment 수신되더라고 5 segment 대한 Ack만을 발생시키게 되는데 이것이 duplicate Ack이다.  

           

그런데 송신 단말의 TCP 어떤 중복 Ack 전달되었을 과연 segment congestion 의해 손실되었는지 아니면 단순히 순서가 바뀌어서 전달되었는지 없으므로 일단은 개의 duplicate Ack 도착하기 까지는 기다리게 된다. 만약 단순히 segment 순서가 뒤바뀐 것이라면 1개에서 2개까지의 duplicate Ack 수신되는 동안 순서가 바뀐 segment 전달되어 새로운 Ack 발생할 가능성이 높다고 있는 반면, retransmit threshold(=duplicate acknowledge threshold) 이상의 duplicate Ack 연속적으로 수신된다면 순서가 바뀐 segment 손실되었을 가능성이 높다고 있다. , retransmit threshold 이상 연속된 duplicate Ack 수신하는 경우 TCP 해당 segment retransmission timer expire되는 것과 상관없이 바로 전송한다. 예를 들어서 retransmit threshold 값이 3이라면 개의 연속된 duplicate Ack 수신되는 경우에 송신 단말은 해당 segment 손실된 것으로 판단하고 retransmit하게 된다.

5. Fast Recovery  

                  

Fast recovery 구현되기 전의 TCP에서는 duplicate Ack 의해 fast retransmit 이후 새로운 segment 전송하기 위해서는 다시 slow start 실행하도록 되어 있었다. 그러나, duplicate Ack 의해서 fast retransmit하는 경우 이미 전송중인 segment들이 존재하고 duplicate Ack 발생한다는 사실은 손실된 segment이외의 다른 segment들은 문제없이 전송되었다는 것을 의미한다. 따라서 새로 slow start 통해서 설정된 연결의 안정한 상태에 도달할 필요 없이 fast retransmit 이후 바로 congestion avoidance 상태에서 전송할 있도록 하자는 것이 fast recovery이다.

Fast recovery 특히 Bandwidth-Delay product 값이 경우에 효율적이다. Bandwidth-Delay product 현재 설정된 연결을 통해서 전송되고 있는 데이터의 양을 의미한다. 예를 들어서 segment 크기가 1Kbyte이고 설정된 연결의 bandwidth 8Mbps, transmission delay 1초라고 했을 bandwidth-delay product 8Mbit 된다. segment 크기는 1Kbyte이므로 현재 설정된 연결을 통해서 전송되고 있는 segment 수는 1000개가 된다. bandwidth-delay product 값은 TCP 성능 아니라 fairness에도 영향을 미친다. 다음 그림은 retransmit threshold 3이고 bandwidth-delay product 15 연결을 통해서 fast retransmit fast recovery하는 과정을 보여준다.

                  

그림 4. Fast recovery

위의 그림에서 1 segment 손실되었다면, 수신 단말은 2, 3 그리고 4 segment 수신될 때마다 한번씩 duplicate Ack 발생시키게 된다. Retransmit threshold 3이므로 4 segment 의해서 발생된 duplicate Ack 의해서 송신 단말은 1 segment 손실되었다는 것을 있게 되고 송신 단말은 즉시 1 segment fast retransmit 의해 timeout 없이 즉시 전송하게 된다. 이때 2, 3, 4 segment 수신 단말의 buffer 저장된다. 송신 단말이 1 segment 손실되었다는 것을 알게 순간에도 12개의 segment 전송 중에 있으므로 segment들에 의해서 Ack 얻을 있으므로 fast retransmit이후에 slow start 실행하지 않고 바로 congestion avoidance 상태에서 전송하는 것이 가능한 것이다. 다음 그림 5 fast retransmit fast recovery 같이 동작하는 것을 보여준다.

1) 번의 연속된 duplicate Ack 받게되면 ssthresh 값을 현재 cwnd/2 설정하고 손실된 segment retransmit한다. 그리고 cwnd값을 ssthresh + 3*segment 설정하는데 이것은 개의 duplicate Ack 수신되는 동안 송신 단말은 전송을 중단하는데 예에서의 retransmit threshold 3이므로 이것을 보상하기 위한 것이다.

그림 5. Combined operation of fast retransmit and fast recovery

2) Retransmit 이후에 duplicate Ack 수신되는 경우 수신될 때마다 cwnd 값을 segment size만큼 증가시킨다.

3) round trip delay retransmit segment 대한 Ack 수신된다면 이것은 buffer 있던 segment 포함한, 첫번째 duplicate Ack 발생시킨 segment retransmit segment사이의 모든 segment들은 정상적으로 전송되었다는 것을 의미한다. 때는 1) 에서 설정한 ssthresh 값으로 다시 congestion avoidance 상태에서 전송을 계속 하게 된다.

참고로 Fast retransmit 4.3BSD TCP Tahoe release에서 구현되었고, retransmit 후에는 다시 slow start 시작하였다. Fast recovery 4.3BSD TCP Reno에서 구현되었고 앞에서 설명한 바와 같이 retransmit 후에 congestion avoidance 상태에서 계속 전송한다. 

6. Reference  

                  

[1] V.Jacobson, “ Congestion Avoidance and Control ”, Proceeding of the SIGCOMM’88 Symposium, Aug. 1988.

[2] W.Stevens, “ TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms”, RFC2001, Jan. 1997

[3] V.Jacobson, “ Modified TCP Congestion Avoidance Algorithm”, end2end-interest mailing list, Apr. 1990.

ftp://ftp.isi.edu/end2end/end2end-interest-1990.mail

[4] L.S. Brakmo and L.L.Peterson. “ TCP Vegas: end to end congestion avoidance on a global internet ”, JSAC, Oct. 1995.

출처 : Tong - rohjy73님의 네트워크통

Posted by theYoungman
engineering/Network Eng.2007. 4. 17. 15:19
Posted by theYoungman
engineering/Network Eng.2007. 4. 12. 10:29

Table of Contents

Cisco Express Forwarding Overview

Cisco Express Forwarding Overview

Cisco Express Forwarding (CEF) is advanced, Layer 3 IP switching technology. CEF optimizes network performance and scalability for networks with large and dynamic traffic patterns, such as the Internet, on networks characterized by intensive Web-based applications, or interactive sessions.

Procedures for configuring CEF or distributed CEF (dCEF) are provided in the "Configuring Cisco Express Forwarding" chapter later in this publication.

This chapter describes CEF. It contains the following sections:

Benefits

CEF offers the following benefits:

  • Improved performance—CEF is less CPU-intensive than fast switching route caching. More CPU processing power can be dedicated to Layer 3 services such as quality of service (QoS) and encryption.

  • Scalability—CEF offers full switching capacity at each line card when distributed CEF (dCEF) mode is active.

  • Resilience—CEF offers unprecedented level of switching consistency and stability in large dynamic networks. In dynamic networks, fast switching cache entries are frequently invalidated due to routing changes. These changes can cause traffic to be process switched using the routing table, rather than fast switched using the route cache. Because the Forwarding Information Base (FIB) lookup table contains all known routes that exist in the routing table, it eliminates route cache maintenance and the fast switch/process switch forwarding scenario. CEF can switch traffic more efficiently than typical demand caching schemes.

Although you can use CEF in any part of a network, it is designed for high-performance, highly resilient Layer 3 IP backbone switching. For example, Figure 7 shows CEF being run on Cisco 12000 series Gigabit Switch Routers (GSRs) at aggregation points at the core of a network where traffic levels are dense and performance is critical.


Figure 7: Cisco Express Forwarding


In a typical high-capacity internet service provider environment, Cisco 12012 GSRs as aggregation devices at the core of the network support links to Cisco 7500 series routers or other feeder devices. CEF in these platforms at the network core provides the performance and scalability needed to respond to continued growth and steadily increasing network traffic. CEF is a distributed switching mechanism that scales linearly with the number of interface cards and bandwidth installed in the router.

Restrictions

  • The Cisco 12000 series Gigabit Switch Routers operate only in distributedCEF mode.

  • Distributed CEF switching cannot be configured on the same VIP card as distributed fast switchin.g

  • Distributed CEF is not supported on Cisco 7200 series routers.

  • If you enable CEF and then create an access list that uses the log keyword, the packets that match the access list are not CEF switched. They are fast switched. Logging disables CEF.

CEF Components

Information conventionally stored in a route cache is stored in several data structures for CEF switching. The data structures provide optimized lookup for efficient packet forwarding. The two main components of CEF operation are the following:

Forwarding Information Base

CEF uses a FIB to make IP destination prefix-based switching decisions. The FIB is conceptually similar to a routing table or information base. It maintains a mirror image of the forwarding information contained in the IP routing table. When routing or topology changes occur in the network, the IP routing table is updated, and those changes are reflected in the FIB. The FIB maintains next-hop address information based on the information in the IP routing table.

Because there is a one-to-one correlation between FIB entries and routing table entries, the FIB contains all known routes and eliminates the need for route cache maintenance that is associated with switching paths such as fast switching and optimum switching.

Adjacency Tables

Nodes in the network are said to be adjacent if they can reach each other with a single hop across a link layer. In addition to the FIB, CEF uses adjacency tables to prepend Layer 2 addressing information. The adjacency table maintains Layer 2 next-hop addresses for all FIB entries.

Adjacency Discovery

The adjacency table is populated as adjacencies are discovered. Each time an adjacency entry is created (such as through the ARP protocol), a link-layer header for that adjacent node is precomputed and stored in the adjacency table. Once a route is determined, it points to a next hop and corresponding adjacency entry. It is subsequently used for encapsulation during CEF switching of packets.

Adjacency Resolution

A route might have several paths to a destination prefix, such as when a router is configured for simultaneous load balancing and redundancy. For each resolved path, a pointer is added for the adjacency corresponding to the next-hop interface for that path. This mechanism is used for load balancing across several paths.

Adjacency Types That Require Special Handling

In addition to adjacencies associated with next-hop interfaces (host-route adjacencies), other types of adjacencies are used to expedite switching when certain exception conditions exist. When the prefix is defined, prefixes requiring exception processing are cached with one of the special adjacencies listed in Table 4.


Table 4: Adjacency Types for Exception Processing

This adjacency type... Receives this processing...

Null adjacency

Packets destined for a Null0 interface are dropped. This can be used as an effective form of access filtering.

Glean adjacency

When a router is connected directly to several hosts, the FIB table on the router maintains a prefix for the subnet rather than for the individual host prefixes. The subnet prefix points to a glean adjacency. When packets need to be forwarded to a specific host, the adjacency database is gleaned for the specific prefix.

Punt adjacency

Features that require special handling or features that are not yet supported in conjunction with CEF switching paths are forwarded to the next switching layer for handling. Features that are not supported are forwarded to the next higher switching level.

Discard adjacency

Packets are discarded.

Drop adjacency

Packets are dropped, but the prefix is checked.

Unresolved Adjacency

When a link-layer header is prepended to packets, FIB requires the prepend to point to an adjacency corresponding to the next hop. If an adjacency was created by FIB and not discovered through a mechanism, such as ARP, the Layer 2 addressing information is not known and the adjacency is considered incomplete. Once the Layer 2 information is known, the packet is forwarded to the route processor, and the adjacency is determined through ARP.

Supported Media

CEF currently supports ATM/AAL5snap, ATM/AAL5mux, ATM/AAL5nlpid, Frame Relay, Ethernet, FDDI, PPP, HDLC, and tunnels.

CEF Operation Modes

CEF can be enabled in one of two modes:

Central CEF Mode

When CEF mode is enabled, the CEF FIB and adjacency tables reside on the route processor, and the route processor performs the express forwarding. You can use CEF mode when line cards are not available for CEF switching or when you need to use features not compatible with distributed CEF switching.

Figure 8 shows the relationship between the routing table, FIB, and adjacency table during CEF mode. The Cisco Catalyst switches forward traffic from workgroup LANs to a Cisco 7500 series router on the enterprise backbone running CEF. The route processor performs the express forwarding.


Figure 8: CEF Mode


Distributed CEF Mode

When dCEF is enabled, line cards, such as VIP line cards or GSR line cards, maintain an identical copy of the FIB and adjacency tables. The line cards perform the express forwarding between port adapters, relieving the RSP of involvement in the switching operation.

dCEF uses an Inter Process Communication (IPC) mechanism to ensure synchronization of FIBs and adjacency tables on the route processor and line cards.

Figure 9 shows the relationship between the route processor and line cards when dCEF mode is active.


Figure 9: dCEF Mode


In this Cisco 12000 series router, the line cards perform the switching. In other routers where you can mix various types of cards in the same router, it is possible that not all of the cards you are using support CEF. When a line card that does not support CEF receives a packet, the line card forwards the packet to the next higher switching layer (the route processor) or forwards the packet to the next hop for processing. This structure allows legacy interface processors to exist in the router with newer interface processors.


Note   The Cisco 12000 series Gigabit Switch Routers operate only dCEF mode; dCEF switching cannot be configured on the same VIP card as distributed fast switching, and dCEF is not supported on Cisco 7200 series routers.


Additional Capabilities

In addition to configuring CEF and dCEF, you can also configure the following features:

  • Distributed CEF switching using access lists

  • Distributed CEF switching of Frame Relay packets

  • Distributed CEF switching during packet fragmentation

  • Load balancing on a per destination-source host pair or per packet basis

  • Network accounting to gather byte and packet statistics

  • Distributed CEF switching across IP tunnels

For information on enabling these features, see the next chapter "Configuring Cisco Express Forwarding."


>

CEF(Cisco Express Forwarding) 작동 원리


CEF(Cisco Express Forwarding)는 오늘날의 기업 및 서비스 제공업체 네트워크에서 일반적으로 발생하는 대량의 단기 트래픽 플로우를 처리하도록 포워딩 확장성과 성능을 향상시킨 Layer 3 기술입니다. 대량의 단기 플로우, 웹 기반의 또는 대화형 트래픽을 처리하는 환경의 요구를 충족하기 위해 CEF는 하드웨어 기반에서 모든 패킷을 포워딩하고 스위치를 통해 전달되는 플로우 수에 전혀 상관없이 포워딩 속도를 유지합니다.


Cisco Catalyst 6500 시리즈에서 CEF Layer 3 포워딩 엔진은 수퍼바이저 엔진의 PFC2 또는 PFC3(하드웨어 기반의 Layer 2 및 3 포워딩, ACL 검사, QoS 폴리스 처리 및 표시, NetFlow 통계 수집을 수행하는 장치와 동일한 장치) 중앙에 위치합니다.


CEF 아키텍처는 Cisco IOS 소프트웨어가 구성된 인터페이스와 라우팅 프로토콜을 정의하기 위해 작성하는 라우팅 테이블을 사용하여 CEF 테이블을 만든 후 이 테이블을 사용자 트래픽이 스위치를 통해 전송되기 전 하드웨어 포워딩 엔진으로 다운로드합니다. CEF 아키텍처는 Layer 3 포워딩 결정을 내리는 데 필요한 유일한 정보인 CEF 테이블에만 라우팅 접두어를 위치시켜 라우팅 프로토콜에 의존하여 경로를 선택합니다. 스위치는 CEF 테이블을 단순 검색하여 스위치를 통과하는 플로우 수에 상관없이 유선 속도로 패킷을 포워딩합니다.


CEF 기반 포워딩 요구 사항: Cisco Catalyst Supervisor Engine 2 또는 Catalyst Supervisor Engine 720이 필요합니다.




aCEF(accelerated Cisco Express Forwarding) 작동 원리


aCEF 기술은 기본-보조 관계로 함께 작동하는 2개의 포워딩 엔진을 사용하여 스위치를 통과하는 고속의 트래픽 플로우를 가속화합니다. 이 때 중앙 CEF 엔진은 Supervisor Engine 720의 PFC3에 있으며, 이보다 규모가 작은 분산 aCEF 엔진은 인터페이스 모듈에 있습니다. 중앙 PFC3은 초기의 포워딩 여부를 결정하며, aCEF 엔진은 결과를 저장하고 후속 패킷 포워딩을 로컬에서 결정합니다. aCEF 포워딩은 다음과 같이 작동합니다.


표준 CEF 포워딩에서와 마찬가지로 중앙 PFC3은 모든 사용자 트래픽이 스위치로 전달되기 전에 필요한 CEF 정보로 로드됩니다. 트래픽이 aCEF720 인터페이스 모듈에 도착하면 aCEF 엔진이 패킷을 검사하고, 특정 패킷 포워딩 정보가 있는지 여부를 확인하기 위해 중앙 PFC3에 질문을 보냅니다.


PFC3은 Layer 2, Layer 3, ACL, QoS를 비롯하여 이 패킷에 대해 하드웨어 기반의 포워딩 결정을 내립니다. aCEF 엔진은 포워딩 결정 결과를 저장하고 패킷 플로우의 내역에 따라 후속 패킷에 대해 포워딩 여부를 로컬에서 결정합니다. aCEF 엔진은 하드웨어 기반의 Layer 2 및 Layer 3 포워딩, ACL, QoS 표시 및 NetFlow를 처리합니다. 중앙 PFC3는 인터페이스 모듈의 aCEF 엔진에서 처리할 수 없는 모든 포워딩 여부를 결정합니다.


aCEF 기반 포워딩 요구 사항: Cisco Catalyst Supervisor Engine 720이 필요합니다.




dCEF(distributed Cisco Express Forwarding) 작동 원리


인터페이스 모듈에 위치한 포워딩 엔진은 dCEF를 사용하여 로컬 및 병렬로 포워딩 결정을 내려 Cisco Catalyst 6500 시리즈가 업계 최고의 포워딩 속도에 도달할 수 있도록 합니다. dCEF를 사용하면 포워딩은 인터페이스 모듈에서 병렬로 발생하며, 시스템 성능은 함께 작동하는 모든 포워딩 엔진을 통합하여 최대 400Mpps까지 증가합니다.


인터페이스 모듈에 위치한 DFC는 중앙 PFCx와 동일한 ASIC 엔진 설계를 사용하여 2개의 포트 간에 직접 또는 스위치 패브릭을 통해 수퍼바이저 엔진과 상관없이 패킷을 포워딩합니다(그림 5). 각 인터페이스 모듈에는 DFC와 함께 전체 포워딩 테이블 및 다음과 같은 dCEF 포워딩 작업이 포함된 전용 포워딩 엔진이 있습니다. 표준 CEF 포워딩에서와 마찬가지로 수퍼바이저 엔진에 위치한 중앙 PFC3과 인터페이스 모듈에 위치한 DFC 엔진은 사용자 트래픽이 스위치에 도착하기 전에 포워딩 테이블에서 파생된 것과 동일한 CEF 정보로 로드됩니다. 패킷이 인터페이스 모듈에 도착하면 DFC 엔진이 패킷을 검사하고 Layer 2, Layer 3, ACL, QoS를 비롯한 CEF 테이블의 정보를 사용하여 해당 패킷에 대해 완전히 하드웨어 기반의 포워딩 결정을 내립니다.


dCEF 엔진은 해당 모듈에서 트래픽에 대해 Layer 2 및 Layer 3 포워딩, ACL, QoS 폴리시 처리 및 표시, NetFlow 등 하드웨어 기반의 포워딩을 모두 처리합니다. DFC가 스위칭을 모두 로컬로 결정하기 때문에 수퍼바이저 엔진은 포워딩을 수행하지 않아도 되므로 라우팅, 관리, 네트워크 서비스 등 기타 소프트웨어 기반 기능을 수행할 수 있습니다.

출처 - 네트워크전문가따라잡기

Posted by theYoungman
engineering/Network Eng.2007. 3. 30. 08:54

Cisco라우터나 스위치의 IOS에 관해서 알아보겠습니다.

예를 들면

             c2500-is-l.113-11c.bin

                화일이름      버젼

IOS 화일이름을 보면 xxxx-yyyy-ww 보통 이런 형식을 가지고 있는데요.


맨처음 xxxx = Platform
다음  yyyy = Feature
마지막 ww = 어디로 부터 IOS가 실행되는가, 또는 압축 유무


Platform

as5200 5200
cpa25 CiscoPro 2500
c1005 1005
c2500 25xx, 3xxx, 5100, AP (11.2 and later only)
c2600 2600 Quake platform
c2800 Catalyst 2820
c2900 2910, 2950
c3620 3620
c3640 3640
c4000 4000 (11.2 and later only)
c4500 4500, 4700
c5rsm Catalyst 5000 RSP platform
c5atm Catalyst 4000 ATM platform
c7000 7000, 7010 (11.2 and later only)
c7200 7200
igs IGS, 25xx, 3xxx, 5100, AP
gs7 gateway server (7000, 7010)
mc3810 Ardent Multiservice Cisco 3810 platform
rsp 75xx
xx 4000



Feature

a - APPN
a2 - ATM
b - Appletalk
boot - used for boot images
c - Comm-server/Remote Access Server(RAS) subset (SNMP, IP, Bridging, IPX,
          AT, Decnet, FR, HDLC, PPP, X.25, ARAP, tn3270, PT, XRemote, LAT)
c - Comm-server Lite(CiscoPro)
c2 - Comm-server/Remote Access Server(RAS) subset
d - Desktop subset (SNMP, IP, Bridging, WAN, Remote Node, Terminal Service,
                   IPX, AT, ARAP)
d2 - reduced Desktop subset (SNMP, IP, IPX, AT, ARAP)
eboot - ethernet boot image for mc3810 platform
f - FRAD subset (SNMP, FR, PPP, SDLLC, STUN)
f2 - modified FRAD subset (EIGRP, Pcbus, Lan Mgr, removed, OSPF added)
g - ISDN subset (SNMP, IP, Bridging, ISDN, PPP, IPX, AT)
g2 - gatekeeper proxy, voice and video
i - IP subset(SNMP, IP, Bridging, WAN, Remote Node, Terminal Service)
i2 - subset similar to IP subset for system controller image(3600)
i3 - reduced IP subset with BGP/MIB, EGP/MIB, NHRP, DIRRESP removed
j - enterprise subset (formerly bpx, includes protocol translation)
    **10.3까지는 사용되지 않음
k - kitchen sink (enterprise for high-end) **10.3이후에는 사용되지 않음
l - IPeXchange IPX, static routing, gateway
m - RMON (11.1 only)
n - IPX
o - FIrewall (Formerly IPeXchange Net Management)
p - Service Provider (IP RIP/IGRP/EIGRP/OSPF/BGP, CLNS, ISIS/IGRP)
p2 - Service Provider w/CIP2 ucode
p3 - AS5200 service provider
p4 - 5800(Nitro) service provider
q - Async
q2 - IPeXchange Async
r - IBM base option (SRB, SDLLC, STUN, DLSW, QLLC) - i, in, d 와 같이 사용
r2 - IBM variant for 1600 images
r3 - IBM variant for Ardent images (3810)
r4 - reduced IBM subset with BSC/MIB, BSTUN/MIB, ASPP/MIB, RSRB/MIB removed
s - source route switch (SNMP, IP, Bridging, SRB) (10.2 and following)
s - (11.2 only) addition to the basic subset (Plus version)


c1000 - (OSPF, PIM, SMRP, NLSP, ATIP, ATAURP, FRSVC, RSVP, NAT)
c1005 - (X.25, full WAN, OPSPF, PIM, NLSP, SMRP, ATIP, ATAURP, FRSVC, RSVP, NAT)
c1600 - (OSPF, IPmulticast, NHRP, NTP, NAT, RSVP, FRSVC)
c2500 - (NAT, RMON, IBM, MMP, VPDN/L2F)
c2600 - (NAT, IBM, MMP, VPDN/L2F, VoIP and ATM)
c3620, 3640 - (NAT, IBM, MMP, VPDN/L2F) in 11.3T added VoIP
c4500 - (NAT, ISL, LANE, IBM, MMP, VPDN/L2F)
c5200 - (PT, v.120, managed modems, RMON, MMP, VPDN/L2F)
c5300 - (MMP, VPDN, NAT, managed modems, RMON, IBM)
c5rsm - (NAT, LANE and VLANS)
c7000 - (ISL, LANE, IBM, MMP, VPDN/L2F)
c7200 - (NAT, ISL, IBM, MMP, VPDN/L2F)
rsp - (NAT, ISL, LANE, IBM, MMP, VPDN/L2F)
t - (11.2)AIP w/ modified Ucode to connect to Teralink 1000 Data
u - IP with VLAN RIP (Network Layer 3 Switching Software, rsrb, srt, srb, sr/tlb)
v - VIP and dual RSP(HSA) support
w - Reserved for WBU
w2 - Reserved for CiscoAdvantage ED train
w3 - Reserved for Distributed Director
x - X.25 in 11.1 and earlier release
y - reduced IP (SNMP, IP RIP/IGRP/EIGRP, Bridging, ISDN< PPP) (C1003/4)
- reduced IP (SNMP, IP RIP/IGRP/EIGRP, Bridging, WAN - X.25) (C1005)
(11.2 - includes X.25) (C1005)
y - IP variant (no Kerberos, Radius, NTP, OSPF, PIM, SMRP, NHRP...) (C1600)
y2 - IP variant (SNMP, IP RIP/IGRP/EIGRP, WAN - X.25, OSPF, PIM) (C1005)
y2 - IP Plus variant (no Kerberos, Radius, NTP...) (C1600)
y3 - IP/X.31
Y4 - reduced IP variant (Cable, Mibs, DHCP, EZHTTP)
z - managed modems
40 - 40 bit encrytion
56 - 50 bit encryption
56i - 56 bit encryption with IPSEC



어디로 부터 IOS가 실행되는가, 또는 압축 유무

f - Flash
m - RAM
r - ROM
l - relocatable
z - zip compressed
x - mzip compressed



출처 - NRC NTSE (http://home.freechal.com/ntse/)

Posted by theYoungman
engineering/Network Eng.2007. 3. 26. 09:01


2. Internet Multicast Today

Internet Multicast Today
by Mark Handley, ACIRI and Jon Crowcroft ,
University College London

When you need to send data to many receivers simultaneously, you have two options: repeated transmission and broadcast. Repeated transmission may be acceptable if the cost is low enough and delivery can be spread out over time, as with junk mail or electronic mailing lists. Otherwise, a broadcast solution is required. With real-time multimedia, repeated delivery is feasible, but only at great expense to the sender, who must invest in large amounts of bandwidth. Similarly, traditional broadcast channels have been very expensive if they cover significant numbers of recipients or large geographic areas. However, the Internet offers an alternative solution: IP multicast effectively turns the Internet into a broadcast channel, but one that anyone can send to without having to spend huge amounts of money on transmitters and government licenses. It provides efficient, timely, and global many-to-many distribution of data, and as such may become the broadcast medium of choice in the future.

The Internet is a datagram network, meaning that anyone can send a packet to a destination without having to reestablish a path. Of course, the boxes along the way must have either precomputed a set of paths, or they must be relatively fast at calculating one as needed, and typically, the former approach is used. However, the sending host need not be aware of or participate in the complex route calculation; nor does it need to take part in a complex signaling or call setup protocol. It simply addresses the packet to the right place, and sends it. This procedure may be a more complex procedure if the sending or receiving systems need more than the default performance that a path or network might offer, but it is the default model.

Adding multicast to the Internet does not alter the basic model. A sending host can still simply send, but now there is a new form of address, the multicast or host group address. Unlike unicast addresses, hosts can dynamically subscribe to multicast addresses and by so doing cause multicast traffic to be delivered to them. Thus the IP multicast service model can be summarized:

  • Senders send to a multicast address
  • Receivers express an interest in a multicast address
  • Routers conspire to deliver traffic from the senders to the receivers
Sending multicast traffic is no different from sending unicast traffic except that the destination address is slightly special. However, to receive multicast traffic, an interested host must tell its local router that it is interested in a particular multicast group address; the host accomplishes this task by using the Internet Group Management Protocol (IGMP).

Point-to-multipoint communication is nothing new. We are all used to the idea of broadcast TV and radio, where a shared medium (the radio frequency [RF] spectrum) is partitioned among users (transmitter or TV/ radio station owners). It is a matter of regulation that there is typically only one unique sender of particular content on any given frequency, although other parts of the RF spectrum are given over to free use for multiparty communication (police radio, citizen band radio, and so on).

The Internet multicast model [3] is very similar. The idea is to convert the mesh wide-area network that is the Internet (whether the public Internet, a private enterprise net, or intranet makes no difference to the model), into a shared resource for senders to send to multiple participants, or groups.

To make this group communication work for large-scale systems in the sense of a large number of recipients for a particular group, or in the sense of a large number of senders to a large number of recipients, or in the sense of a large number of different groups it is necessary, both for senders and for the routing functions to support delivery, to have a system that can be largely independent of the particular recipients at any one time. In other words, just as a TV or radio station does not know who is listening when, an Internet multicast sender does not know who might receive packets it sends. If this scenario sends out alarm bells about security, it shouldn't. A unicast sender has no assurance about who receives its packets either. Assurances about disclosure (privacy) and authenticity of sender/recipient are largely separate matters from simple packet delivery models. Security is a topic of much research and the focus for the recently formed Internet Research Task Force (IRTF) research group, Secure Multicast Group (SMuG).

The Internet multicast model is an extension of the datagram model; it uses the fact that the datagram is a self-contained communications unit that not only conveys data from source to destination, but also conveys the source and destination address information. In other words, in some senses, datagrams signal their own path, both with a source and a destination address in every packet.

By adding a range of addresses dedicated for sending to groups, and providing independence between the address allocation and the rights to send to a group, the analogy between RF spectrum and the Internet multicast space is maintained. Some mechanism, as yet unspecified, is used to dynamically choose which address to send to. Suffice it to say that for now, the idea is that somehow, elsewhere, the address used for a multicast session or group communication activity is chosen so that it does not clash with other uses or users, and is advertised to potential senders and receivers.

Unlike the RF spectrum, an IP packet to be multicast carries a unique source identifier, in that such packets are sent with the normal unicast IP address of the interface of the sending host.

It is also worth noting that an address that is being used to signify a group of entities must surely be a logical address (or in some senses a name) rather than a topological or topographical identifier. We shall see that this means there must be some service that maps such a logical identifier to a specific set of locations in the same way that a local unicast address must be mapped (or bound) to a specific location. In the multicast case, this mapping is distributed. Note also that multicast Internet addresses are in some sense "host group" addresses, in that they indicate a set of hosts to deliver to. In the Internet model, there is a further level of multiplexing, that of transport level ports, and there is room for some overlap of functionality, since a host may receive packets sent to multiple multicast addresses on the same port, or multiple ports on the same multicast address.

This model raises numerous questions about address and group management, such as how these addresses are allocated. The area requiring most change, though, is in the domain of the routing. Somehow the routers must be able to build a distribution tree from the senders to all the receivers for each multicast group. The senders don't know who the receivers are (they just send their data), and the receivers don't know who the senders are (they just ask for traffic destined for the group address), so the routers have to do something without help from the hosts. We will examine this scenario in detail in the section "Multicast Routing."

Roadmap
The functions that provide the Standard Internet Multicast Service can be separated into host and network components. The interface between these components is provided by IP multicast addressing and IGMP group membership functions, as well as standard IP packet transmission and reception. The network functions are principally concerned with multicast routing, while host functions also include higher-layer tasks such as the addition of reliability facilities in a transport-layer protocol. That's the order in which we cover each of these functions in the rest of this article. At the end of the article we list the current status of Internet Engineering Task Force (IETF) specification for the various components.

Host Functions
As we stated above, host functionality is extended through the use of the IGMP protocol. Hosts and routers, which we will look at later, must be able to deal with new forms of addresses. When IP Version 4 addressing was first designed, it was divided into classes as shown in Figure 1.

Figure 1: Internet Address Classes


*Note:Click above for larger view

Originally Class A was intended for large networks, B for midsize networks, and C for small networks. Class D was later allocated for multicast addresses. Since then, classless addressing has been introduced to solve Internet scaling problems, and the rules for Classes A, B, and C no longer hold, but Class D is still reserved for multicast, so all IPv4 multicast addresses start with the high-order 4-bit "nibble": 1110

In other words, from the 2 32 possible addresses, 2 28 are multicast, meaning that there can be up to about 270 million different groups, each with as many senders as can get unicast addresses! This number is many orders of magnitude more than the RF spectrum allows for typical analog frequency allocations.

For a host to support multicast, the host service interface to IP must be extended in three ways:

  • A host must be able to join a group, meaning that it must be able to reprogram its network level, and possibly, consequentially, the lower levels, to be able to receive packets addressed to multicast group addresses.
  • An application that has joined a multicast group and then sends to that group must be able to select whether it wants the host to loop-back the packets it sent so that it receives its own packets.
  • A host should be able to limit the scope with which multicast messages are sent. The Internet Protocol contains a Time-To-Live (TTL) field, used originally to limit the lifetime of packets on the network, both for safety of upper layers, and for prevention of traffic overload during temporary routing loops. It is used in multicast to limit how "far" a packet can go from the source. We will see below how scoping can interact with routing.


When an application tells the host networking software to join a group, the host software checks to see if the host is a member of the group. If not, it makes a note of the fact, and sends out an IGMP membership report message. It also maps the IP address to a lower-level address and reprograms its network interface to accept packets sent to that address. There is a refinement here: a host can join "on an interface;" that is, hosts that have more than one network card can decide which one (or more than one) they wish to receive multicast packets via. The implication of the multicast model is that it is "pervasive," so it is usually necessary to join on only one interface.

Taking a particular example to illustrate the IP-level to link-level mapping process, if a host joins an IP multicast group using an Ethernet interface, there is a mapping from the low 24 bits of the multicast address into the low 24 (out of 48) bits of the Ethernet address. Since this mapping is a many-to-one mapping, there may be multiple IP multicast groups occupying the same Ethernet address on a given wire, though it may be made unlikely by the address allocation scheme. An Ethernet LAN is a shared-medium network, thus local addressing of packets to an Ethernet group means that the packets are received by Ethernet hardware and delivered to the host software of only those hosts with members of the relevant IP group. Therefore, host software is generally saved the burden of filtering out irrelevant packets. Where there is an Ethernet address clash, software can filter the packets efficiently.

Operation of the IGMP protocol can be summarized as follows:

  • When a host first joins a group, it programs its Ethernet interface to accept the relevant traffic, and it sends an IGMP Join message on its local network. This message informs any local routers that there is a receiver for this group now on this subnet.
  • The local routers remember this information, and arrange for traffic destined for this address to be delivered to the subnet.
  • After a while, the routers wonder if there is still any member on the subnet, and send an IGMP query message to the multicast group. If the host is still a member, it replies with a new message unless it hears someone else do so first. Multicast traffic continues to be delivered.
  • Eventually the application finishes, and the host no longer wants the traffic. It reprograms its Ethernet interface to reject the traffic, but the packets are still sent until the router times the group out and sends a query to which no one responds. The router then stops delivering the traffic.


Thus joining a multicast group is quick, but leaving can be slow with IGMP Version 1. IGMP Version 2 reduces the leave latency by introducing a "Leave" message and a set of rules to prevent one receiver from disconnecting others when it leaves. IGMP Version 3 (not yet deployed) introduces the idea of source-specific joining and leaving, whereby a host can subscribe (or reject) traffic from individual senders rather than the group as a whole, at the expense of more complexity and extra state in routers.

Multicast Routing
Given the multicast service model described above, and the restrictions that senders and receivers don't know each others' location or anything about the topology, how do routers conspire to deliver traffic from the senders to the receivers?

We shall assume that if a sender and a receiver did know about each other, they could each send unicast packets to the other. In other words, there is a network with bi-directional paths and an underlying unicast routing mechanism already running. Given this network, there is a spectrum of possible solutions. At one extreme, we can flood data from the sender to all possible receivers and have the routers for networks where there are no receivers prune off their branches of the distribution tree. At the other extreme, we can communicate information in a multicast routing protocol conveying the location of all the receivers to the routers on the paths to all possible senders. Neither method is particularly desirable on a global scale, so the most interesting solutions tend to be hybrid solutions that lie between these extremes.

In the real world, there are many different multicast routing protocols, each with its own advantages and disadvantages. We shall explain each of the common ones briefly, because a working knowledge of their pros and cons helps us understand the practical limits to the uses of multicast.

Flood and Prune Protocols
Flood and Prune Protocols are more correctly known as reverse-path multicast algorithms. When a sender first starts sending, traffic is flooded out through the network. A router may receive the traffic along multiple paths on different interfaces, in which case it rejects any packet that arrives on any interface other than the one it would use to send a unicast packet back to the source. It then sends a copy of each packet out of each interface other than the one back to the source. In this way, each link in the whole network is traversed at most once in each direction, and the data is received by all routers in the network.

So far, this process describes reverse-path broadcast. Many parts of the network will be receiving traffic, even though there are no receivers there. These routers know they have no receivers (otherwise IGMP would have told them) and they can then send prune messages back toward the source to stop unnecessary traffic from flowing. Thus the delivery tree is pruned back to the minimal tree that reaches all the receivers. The final distribution tree is what would be formed by the union of shortest paths from each receiver to the sender, so this type of distribution tree is known as a shortest-path tree (strictly speaking, it's a reverse shortest path tree-typically the routers don't have enough information to build a true forward shortest-path tree).

Two commonly used multicast routing protocols fall in the class: the Distance Vector Multicast Routing Protocol (DVMRP) [4] and Protocol Independent Multicast Dense-Mode (PIM-DM) [5]. The primary difference between these protocols is that DVMRP computes its own routing table to determine the best path back to the source, whereas PIM DenseMode uses the routing table of the underlying unicast routing system, hence the term "Protocol Independent."

It should be fairly obvious that sending traffic everywhere and getting people to tell you what they don't want is not a particularly scalable mechanism. Sites get traffic they don't want (albeit very briefly), and routers not on the delivery tree need to store prune state. For example, if a group has one member in the UK and two in France, routers in Australia still get some of the packets, and they need to hold prune state to prevent more packets from arriving! However, for groups where most places actually do have receivers (receivers are "densely" distributed), this sort of protocol works well. So although these protocols are poor choices for a global scheme, they might be appropriate within some organizations.

MOSPF
Multicast Open Shortest Path first (MOSPF [12]) isn't really a category, but a specific instance of a protocol. MOSPF is the multicast extension to Open Shortest Path First (OSPF [11]), which is a unicast link-state routing protocol.

Link-state routing protocols work by having each router send a routing message periodically listing its neighbors and how far away they are. These routing messages are flooded throughout the entire network, so every router can build up a map of the network. This map is then used to build forwarding tables (using a Dijkstra algorithm) so that the router can decide quickly which is the correct next hop for a particular packet.

Extending this concept to multicast is achieved simply by having each router also list in a routing message the groups for which it has local receivers. Thus given the map and the locations of the receivers, a router can also build a multicast forwarding table for each group.

MOSPF also suffers from poor scaling. With flood-and-prune protocols, data traffic is an implicit message about where there are senders, so routers need to store unwanted state where there are no receivers. With MOSPF, there are explicit messages about where all the receivers are, so routers need to store unwanted state where there are no senders. However, both types of protocol build very efficient distribution trees.

Center-Based Trees
Rather than flooding the data everywhere, or flooding the membership information everywhere, algorithms in the center-based trees category map the multicast group address to a particular unicast address of a router, and they build explicit distribution trees centered around this particular router. Three main problems need to be solved to get this approach to work:

  • How is the mapping from group address to center address performed?
  • How is the center location chosen so that the distribution trees are efficient?
  • How is the tree actually constructed given the center address?




Different protocols have come up with different solutions to these problems. Three center-based tree protocols are worth exploring because they illustrate different approaches: Core-Based Trees (CBT), PIM Sparse-Mode (PIM-SM), and the Border Gateway Multicast Protocol (BGMP). However, we will leave discussion of BGMP until our second article because it is not currently deployed.

Core-Based Trees
Core-Based Trees (CBT [1] ) was the earliest center-based tree protocol, and it is the simplest.

When a receiver joins a multicast group, its local CBT router looks up the multicast address and obtains the address of the Core router for the group. It then sends a Join message for the group toward the Core. At each router on the way to the Core, forwarding state is instantiated for the group, and an acknowledgment is sent back to the previous router. In this way, a multicast tree is built, as shown in Figure 2.

Figure 2:Formation of a CBT Bi-directional shared Tree

*Note:Click above for larger view

If a sender (that is, a group member) sends data to the group, the packets reach its local router, which forwards them to any of its neighbors that are on the multicast tree. Each router that receives a packet forwards it out of all its interfaces that are on the tree except the one the packet came from. The style of tree CBT builds is called a "bi-directional shared tree," because the routing state is "bi-directional"-packets can flow both up the tree toward the Core and down the tree away from the Core, depending on the location of the source, and packets are "shared" by all sources to the group. This scenario is in contrast to "unidirectional shared trees" built by PIM-SM as we shall see later.

IP multicast does not require senders to a group to be members of the group, so it is possible that a sender's local router is not on the tree. In this case, the packet is forwarded to the next hop toward the Core. Eventually the packet will either reach a router that is on the tree, or it will reach the Core, and it is then distributed along the multicast tree.

CBT also allows multiple Core routers to be specified, adding a little redundancy in case the Core becomes unreachable. CBT never properly solved the problem of how to map a group address to the address of a Core. In addition, good Core placement is a difficult problem. Without good Core placement, CBT trees can be quite inefficient, and so CBT is unlikely to be used as a global multicast routing protocol.

However, within a limited domain, CBT is very efficient in terms of the amount of state that routers need to keep. Only routers on the distribution tree for a group keep forwarding state for that group, and no router needs to keep information about any source; thus CBT scales much better than flood-and-prune protocols, especially for sparse groups where only a small proportion of subnetworks have members.

PIM Sparse-Mode
The work on CBT encouraged others to try to improve on its limitations while keeping the good properties of shared trees, and PIM Sparse- Mode [7] was one result. The equivalent of a CBT Core is called a Rendezvous Point (RP) in PIM, but it largely serves the same purpose.

When a sender starts sending, whether it is a member or not, its local router receives the packets and maps the group address to the address of the RP. It then encapsulates each packet in another IP packet (imagine putting one letter inside another, differently addressed, envelope) and sends it unicast directly to the RP.

When a receiver joins the group, its local router initiates a Join message that travels hop-by-hop to the RP instantiating forwarding state for the group. However, this state is unidirectional state-it can be used only by packets flowing from the RP toward the receiver, and not for packets flowing back up the tree toward the RP. Data from senders is de-encapsulated at the RP and flows down the shared tree to all the receivers.

PIM-SM is an improvement on CBT in that discovery of senders and and tree building from senders to receivers are separate functions. Thus PIM-SM unidirectional trees are not particularly good distribution trees, but they do start data flowing to the receivers. Once this data is flowing, the local router of a receiver can then initiate a transfer from the shared tree to a shortest-path tree by sending a source-specific Join message toward the source, as shown in Figure 3. When data starts to arrive along the shortest-path tree, a prune message can be sent back up the shared tree toward the source to avoid getting the traffic twice.

Figure3: Formation of a PIM Sparse-Mode Tree

*Note:Click above for larger view

Unlike other shortest-path tree protocols such as DVMRP and PIM-DM, where prune state exists everywhere there are no receivers, with PIM-SM, source-specific state exists only on the shortest-path tree. Also, low-bandwidth sources such as those sending Real-Time Control Protocol (RTCP) receiver reports do not trigger the transfer to a shortest-path tree, a scenario that further helps scaling by eliminating unnecessary source-specific state.

Because PIM-SM can optimize its distribution trees after formation, it is less critically dependent on the RP location than CBT is on the Core location. Hence the primary requirement for choosing an RP is load balancing. To perform multicast-group-to-RP mapping, PIM-SM redistributes a list of candidates to be RPs to all routers. When a router needs to perform this mapping, it uses a special hash function to hash the group address into the list of candidate RPs to decide the actual RP to join.

Except in rare failure circumstances, all the routers within the domain will perform the same hash, and come up with the same choice of RP. The RP may or may not be in an optimal location, but this situation is offset by the ability to switch to a shortest-path tree.

The dependence on this hash function and the requirement to achieve convergence on a list of candidate RPs does, however, limit the scaling of PIM-SM. As a result, it is also best deployed within a domain, although the size of such a domain may be quite large.

Interdomain Multicast Routing
All the multicast routing schemes described so far suffer from scaling problems of one form or another:

  • DVMRP and PIM-DM initially send data everywhere, and require routers to hold prune state to prevent this flooding from persisting.
  • MOSPF requires all routers to know where all receivers are.
  • PIM-SM needs redistribution of information about the set of RPs. Because traffic needs to flow to the RP, an RP cannot handle too many groups simultaneously, so many RPs are needed globally.


Thus each of these schemes is likely to be best deployed within a domain. How then does interdomain multicast routing take place? Long-term solutions to this problem will be discussed in the second of these articles. In the meantime, the interim solution currently being deployed consists of multiprotocol extensions to the unicast Border Gateway Protocol (BGP) interdomain routing protocol, and a protocol called MSDP to glue PIM-SM domains together.

Multiprotocol BGP
For either technical or policy reasons, not all routers or peerings between Internet Service Providers (ISPs) are multicast capable. This situation complicates the use of PIM-SM for operation between domains because PIM assumes that the route obtained by unicast routing is good for multicast routing (strictly speaking, PIM assumes the reverse unicast path is good for forward-path multicast routing). If, in fact, the reverse unicast path is not good for forward-path multicast, then Join messages will often reach routers that do not support multicast, resulting in a lack of multicast connectivity. How then do we solve this problem?

BGP is the unicast interdomain routing protocol that is very widely used to connect unicast routing domains together. The multiprotocol extensions to BGP allow multiple routing tables to be maintained for different protocols. Thus with the Multiprotocol Extensions for BGP-4 (MBGP) [2], you can build one routing table for unicast-capable routes and one for multicast-capable routes using the same protocol. PIM can then use the multicast-capable routes to forward Join messages and can, therefore, detour around parts of the network that don't support multicast.

Multicast Source Discovery Protocol
In addition to the problem of designing a scalable mechanism for mapping multicast groups to RPs, attempts to use PIM-SM as an interdomain protocol are hindered by ISPs' desire not to be dependent on other ISPs' facilities. For example, consider a multicast group consisting of senders and receivers in two domains, A and B, run by two different ISPs. If the RP is in domain A, and there is some problem in domain A, then senders and receivers in domain B might still be unable to communicate with each other using multicast, even though they are in the same domain, because initial PIM register messages must go via the RP. ISPs do not want to be dependent on other ISPs for connectivity within their own domain, so it appears that using PIM-SM as an interdomain protocol would be unacceptable, even if there were no scalability problems.

The Multicast Source Discovery Protocol (MSDP) [8] is an attempt to work around this problem. It does not provide a long-term scalable solution, but does provide a solution that solves the ISP interdependence problem.

With MSDP, ISPs run PIM-SM within their own domain, and they have their own set of RPs for all groups within that domain. Additionally, the RPs within the domain are interconnected with each other and with RPs in neighboring domains using MSDP control connections to form a loose mesh.

The process is shown in Figure 4. Within domain 1, R1 and R2 send Join messages from group G to RP-1. Similarly, R3 and R4 send Join messages to RP-2. When S starts sending, its packets are encapsulated to RP-2 by its local router in the normal PIM-SM manner. RP-2 decapsulates the packets and forwards them down the group-shared tree within domain 2 to reach R3 and R4. In addition, it sends a Source Active message over the MSDP mesh to all other RPs. RPs like RP-1 that have active joiners for this group then send a source-specific Join back across the interdomain boundary toward S. Traffic is then delivered interdomain following the source-specific state laid down by the Join messages, and it is eventually delivered to R1 and R2.

Figure 4: MSDP in Operation
*Note:Click above for larger view

MSDP uses the normal PIM-SM source-specific join mechanism interdomain following the MBGP multicast routes back to the source, but it sets up only a group-shared tree within each domain, avoiding the need to depend on remote RPs in different domains for the delivery of traffic between local members in a domain.

As an interdomain routing protocol, however, MSDP has many shortcomings. In particular, every RP in every domain must be told about every source that starts sending, and a significant subset of the RPs must cache all this information so that receivers that join late can cause source-specific Joins to be sent by their local RP. Thus MSDP does not scale well if there are a large number of senders worldwide.

In addition, to ensure that the first few packets sent by a source do not get lost, they must be encapsulated and sent alongside the Source Active message to all the RPs that might possibly have receivers. If they are not encapsulated, then sources that send only a few packets every few minutes might never get any data through to receivers because the source-specific state has timed out after each time they send.

In summary, MSDP is not a scalable long-term solution to interdomain multicast routing. However, it does solve a real short-term problem faced by ISPs, and so it is currently seeing significant deployment.

Multicast Address Allocation
A local protocol for requesting multicast addresses from multicast address allocation servers has recently been standardized. This protocol is called Multicast Address Dynamic Client Allocation Protocol , or MAD-CAP [10]. It is a relatively simple request-response protocol loosely modeled after the Dynamic Host Configuration Protocol (DHCP) [6].

MADCAP is intended to be used with interdomain protocols that perform dynamic allocation of parts of the multicast address space between domains, but because these protocols are not yet deployed, they will be discussed in the second of these articles.

As an interim solution for interdomain address allocation, a simple static mechanism has been defined. This mechanism involves embedding the Autonomous System (AS) number of the domain as the middle 16 bits of a multicast address. Thus the domain with AS number 16007 would get multicast addresses in the range 233.64.7.0 to 233.64.7.255 (64 and 7 being the upper and lower bytes, respectively, of 16007). Known as glop addressing , this mechanism is experimental. It may be superseded by a dynamic mechanism in the longer term.

Multicast Scoping
When applications operate in the global Multicast backbone (MBone), it is clear that not all groups should have global scope. Not only is this constraint especially important for performance reasons with flood and prune multicast routing protocols, but it also is true with other routing protocols for application security reasons and because multicast addresses are a scarce resource. Being able to constrain the scope of a session allows the same multicast address to be in use at more than one place as long as the scopes of the sessions do not overlap. This is analogous to the same radio frequency being used by two radio stations operating far apart from one another-each will only be heard locally.

Multicast scoping can currently be performed in two ways, known as TTL Scoping and Administrative Scoping . Currently TTL scoping is most widely used, with only a very few sites making use of administrative scoping.

TTL Scoping
When an IP packet is sent, an IP header field called Time To Live (TTL) is set to a value between zero and 255. Every time a router forwards the packet, it decrements the TTL field in the packet header, and if the value reaches zero, the packet is dropped. The IP specification also states that the TTL should be decremented if a packet is queued for more than a certain amount of time, but this decrement is rarely implemented these days. With unicast, the TTL is normally set to a fixed value by the sending host (64 and 255 are commonly used) and is intended to prevent packets from looping forever.

With IP multicast, the TTL field can be used to constrain how far a multicast packet can travel across the MBone by carefully choosing the value put into packets as they are sent. However, because the relationship between hop count and suitable scope regions is poor at best, the basic TTL mechanism is supplemented by configured thresholds on multicast tunnels and multicast-capable links. Where such a threshold is configured, the router will decrement the TTL, as with unicast packets, but then will drop the packet if the TTL is less than the configured threshold. When these thresholds are chosen consistently at all of the borders to a region, they allow a host within that region to send traffic with a TTL less than the threshold, and to know that the traffic will not escape that region.

An example is the multicast tunnels and links to and from Europe, which are all configured with a TTL threshold of 64. Any site within Europe that wishes to send traffic that does not escape Europe can send with a TTL of less than 64 and be sure that its traffic does not escape. However, there are also likely to be thresholds configured within a particular scope zone-for example, most European countries use a threshold of 48 on international links within Europe, and because TTL is still decremented each time the packet is forwarded, it is good practice to send European traffic with a TTL of 63, a scenario that allows the packet to travel 15 hops before it would fail to cross a European international link.

Administrative Scoping
In some circumstances it is difficult to consistently choose TTL thresholds to perform the desired scoping. In particular, it is impossible to configure overlapping scope regions as shown in Figure 5, and TTL scoping has numerous other problems, so more recently, administrative scoping has been added to the multicast forwarding code in mrouted and in most router implementations.

Figure 5: Overlapping Scope Zones possible with Administrative Scoping

*Note:Click above for larger view

Administrative scoping allows the configuration of a boundary by specifying a range of multicast addresses that will not be forwarded across that boundary in either direction.

Scoping Deployment
Administrative scoping is much more flexible than TTL scoping, but it has many disadvantages. In particular, it is not possible to tell from the address of a packet where it will go unless all the scope zones that the sender is within are known. Also, because administrative boundaries are bi-directional, one scope zone nested within or overlapping another must have totally separate address ranges. This makes address allocation difficult from an administrative point of view, because the ranges ought to be allocated on a top-down basis (largest zone first) in a network where there is no appropriate top-level allocation authority. Finally, it is easy to misconfigure a boundary by omitting or incorrectly configuring one of the routers. With TTL scoping it is likely that in many cases a more distant threshold will perform a similar task, lessening the consequences, but with administrative scoping, there is less likelihood that this scenario will occur.

For these reasons, administrative scoping has been viewed by many network administrators as a specialty solution to difficult configuration problems, rather than as a replacement for TTL scoping, and the Mbone still very much relies on TTL scoping. However, this situation is set to change as a protocol for automatically discovering scope zones (and scope zone misconfigurations) starts to be deployed. This protocol is called the Multicast Zone Announcement Protocol (MZAP) [9], and it will shortly become an IETF Proposed Standard. Eventually the use of configured TTL scopes to restrict traffic will cease to be used as a primary scoping mechanism.

Summary
In this article we have looked at the various routing systems that are used to devise delivery trees over which multimedia data can be sent for the purposes of group communication, and at address allocation and scoping mechanisms for this traffic.

After ten years of experimentation, IP multicast is not currently a ubiquitous service on the public Internet, but significant deployment has taken place on private intranets. The existing multicast routing and address allocation mechanisms work well at the scale of domains. However, as we have seen, there are still significant technical problems concerning scaling to be overcome before multicast can be a ubiquitous interdomain service. In addition to the routing problems, we also still lack deployed congestion control mechanisms for multicast traffic, which are essential if multicast applications are to be safely deployed.

Despite these issues, IP multicast still shows great promise for many applications. Solutions have been devised to many of the remaining problems, although they have not yet been deployed. In the second of these articles, we will look at the proposed solutions for scalable interdomain routing and address allocation. We will also touch on multicast congestion control and the solutions that are currently emerging from the research community.

Document Status
A list of IETF specifications for the protocols discussed in this article is given below. We include the status for each document as of this writing (November 1999). For more information, check the IETF Web pages at www.ietf.org


References

  1. Ballardie, A., "Core Based Trees (CBT version 2) Multicast Routing," RFC 2189, September 1997.
  2. Bates, T., Chandra, R., Katz, D., and Rekhter, Y., "Multiprotocol Extensions for BGP-4," RFC 2283, February 1998.
  3. Deering, S., "Host Extensions for IP Multicasting," RFC 1112, August 1989.
  4. Deering, S., Partridge, C., and Waitzman, D., "Distance Vector Multicast Routing Protocol," RFC 1075, November 1988.
  5. Deering, S., Estrin, D., Farinacci, D., Jacobson, V., Helmy, A., Meyer, D., and Wei, L., "Protocol Independent Multicast Version 2 Dense Mode Specification," Internet Draft, work in progress.
  6. Droms, R., "Dynamic Host Configuration Protocol," RFC 1531, October 1993.
  7. Estrin, D., Farinacci, D., Helmy, A., Thaler, D., Deering, S., Handley, M., Jacobson, V., Liu, C., Sharma, P., and Wei, L., "Protocol Independent Multicast-Sparse Mode (PIM-SM): Protocol Specification," RFC 2362, June 1998.
  8. Farinacci D. et al. "Multicast Source Discovery Protocol (MSDP)," Internet Draft, work in progress, June 1998.
  9. Handley, M., Thaler, D., and Kermode, R., "Multicast-Scope Zone Announcement Protocol (MZAP)," Internet Draft, work in progress.
  10. Hanna, S., Patel, M., and Shah, M., "Multicast Address Dynamic Client Allocation Protocol (MADCAP)," RFC 2730, December 1999.
  11. Moy, J., "OSPF Version 2," RFC 2328, April 1998.
  12. Moy, J., "Multicast Extensions to OSPF," RFC 1584, March 1994.
  13. Miller, C. K., "Reliable Multicast Protocols and Applications," The Internet Protocol Journal , Volume 1, No. 2, September 1998.


JON CROWCROFT is a professor of networked systems in the Department of Computer Science, University College London, where he is responsible for a number of European and U.S. funded research projects in Multimedia Communications. He has been working in these areas for over 18 years. He graduated in Physics from Trinity College, Cambridge University, in 1979, and gained his MSc in Computing in 1981, and PhD in 1993. He is a member of the ACM, the British Computer Society, and is a Fellow of the IEE and a senior member of the IEEE. He is a member of the Internet Architecture Board (IAB) and was general chair for the ACM SIGCOMM from 1995 to 1999. He is also on the editorial team for the ACM/IEEE Transactions on Networks. With Mark Handley, he is the co-author of WWW: Beneath the Surf (UCL Press); he also authored Open Distributed Systems (UCL Press/Artech House), and with Mark Handley and Ian Wakeman, a third book, Internetworking Multimedia (Morgan Kaufmann Publishers), published in October 1999.
E-mail: J.Crowcroft@cs.ucl.ac.uk

MARK HANDLEY received his BSc in Computer Science with Electrical Engineering from University College London in 1988 and his PhD from UCL in 1997. For his PhD he studied multicast-based multimedia conferencing systems, and was technical director of the European Union funded MICE and MERCI multimedia conferencing projects. After two years working for the University of Southern California's Information Sciences Institute,he moved to Berkeley to join the new AT&T Center for Internet Research at ICSI (ACIRI). Most of his work is in the areas of scalable multimedia conferencing systems, reliable multicast protocols, multicast routing and address allocation, and network simulation and visualization. He is co-chair of the IETF Multiparty Multimedia Session Control working group and the IRTF Reliable Multicast Research Group. E-mail: mjh@aciri.org
[This article is based in part on material in Internetworking Multimedia by Jon Crowcroft, Mark Handley, and Ian Wakeman, ISBN 1-55860-584-3, published by Morgan Kaufmann in 1999. Used with permission].

Posted by theYoungman
engineering/System Eng.2007. 3. 9. 09:47


출처 - http://kin.naver.com/knowhow/entry.php?d1id=3&dir_id=3&eid=DV7BINcdSKfXO5Pt8AqguM5pDM4QXkwq&qb=bnNpcyBmaWxlIMb3x9Q=




NSIS 스크립트 예제>

=========================================================================================

;NSIS Modern User Interface
;Eocs (굴단::Nuke팀::헌터)
;Written by Eocs (=Arian2u,4u=SJWannabe=DeadlyAngel)

;★★★--------------------------------
;Include Modern UI
  !include "MUI.nsh" ; ◀ Modern UI 의 헤더파일입니다.

                            ; (Modern UI 는 최근의 윈도에서 사용되는 마법사와 같은 형태의

                            인터페이스를 갖추고 있습니다.)

;★★★--------------------------------
;General

;Name and file
  Name "Nuke UI Ver 0.7 베타" ; ◀ 셋업 실행시 상단에 나타날 프로그램 명칭입니다.
  OutFile "Nuke_Setup.exe" ; ◀ 셋업파일명을 지정해줍니다.

;Get installation folder from registry if available
  InstallDirRegKey HKCU "Software\Nuke UI Beta" "" ; ◀ 레지스트리에 등록합니다.

;★★★--------------------------------
;Interface Settings
  !define MUI_ABORTWARNING

;★★★--------------------------------
;Pages
!insertmacro MUI_PAGE_LICENSE $(myLicenseData) ; ◀ 아래의 A) LicenseData와 맞물려

                                                                            한글 txt 파일을 읽어들입니다.
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES
  !insertmacro MUI_UNPAGE_CONFIRM
  !insertmacro MUI_UNPAGE_INSTFILES

;★★★--------------------------------
;Languages
!define EUL_RUL "를"       ;한글 (을)(를) 처리 ; ◀ 한글 (을)(를)처리를 수정해줍니다.
!insertmacro MUI_LANGUAGE "Korean" ; ◀ 기본 언어를 한글로 설정합니다.

;Reserve Files
  !insertmacro MUI_RESERVEFILE_LANGDLL

LicenseLangString myLicenseData ${LANG_KOREAN} "${NSISDIR}\Docs\Modern UI\License_NukeUI_KR.txt"
LicenseData $(myLicenseData) ; ◀ A) LicenseLangString과 함께 사용하여 라이센스

                                             정보를 한글 파일로 사용할 수 있도록 합니다.

;★★★--------------------------------
;함수 내에서만 실행되는 것들 처리
Function .onInit         ;onInit
;WOW가 설치된 경로 가져오기
ReadRegStr $INSTDIR HKEY_LOCAL_MACHINE "SOFTWARE\Blizzard Entertainment\World of Warcraft" "InstallPath" ; ◀ 레지스트리의 값을 읽어서 $INSTDIR에 저장합니다.
;중복실행 방지
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "NukeUI_Beta_0.7") i .r1 ?e'
  Pop $R0
  StrCmp $R0 0 +3
  MessageBox MB_OK|MB_ICONEXCLAMATION "NukeUI 0.7 설치를 위한 인스톨러가 이미 실행중입니다. - Eocs (굴단::Nuke팀::헌터) -" ; ◀ Mutex를 만들어 중복실행을 방지합니다.
  Abort
FunctionEnd

;★★★--------------------------------
;Default installation folder
InstallDir $INSTDIR ; ◀ 기본 설정 경로를 지정합니다.

;★★★--------------------------------
;Installer Sections - 필수 애드온 (UnitFrame 관련, Raid 관련, Sct, SpellAllert 등...)
Section "!필수(공통) 기능" GR_COMMON ; ◀ !가 들어간 Section의 문자열은 굵게 나타납니다.
SectionIn RO ; ◀ 필수 선택으로 Read Only

  ; Write the installation path into the registry
  WriteRegStr HKLM SOFTWARE\NukeUI "Install_Dir" "$INSTDIR" ; ◀ 인스톨 경로를 레지스트리에

                                                                                          등록합니다.

  ; Write the uninstall keys for Windows

  ; ◀ 아래의 4줄은 Uninstall 정보를 레지스트리에 등록합니다.
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "DisplayName" "Nuke UI Ver 0.7 베타"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "UninstallString" '"$INSTDIR\Uninstall_NukeUI.exe"'
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "NoModify" 1
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "NoRepair" 1
WriteUninstaller "$INSTDIR\Uninstall_NukeUI.exe"

;Start Menu Shortcuts ; ◀ 프로그램 그룹에 등록하고, 언인스톨의 바로가기 아이콘을 만듭니다.
  CreateDirectory "$SMPROGRAMS\Nuke UI Ver 0.7 베타"
  CreateShortCut "$SMPROGRAMS\Nuke UI Ver 0.7 베타\Nuke UI 언인스톨(제거).lnk" "$INSTDIR\Uninstall_NukeUI.exe" "" "$INSTDIR\Uninstall_NukeUI.exe" 0

;Remove And Create Directory
  RMDir /r "$INSTDIR\Interface" ; Interface(AddOns) 폴더 삭제 ; ◀ /r 옵션은 하위폴더를 포함
RMDir /r "$INSTDIR\WTF" ; WTF(Account) 폴더 삭제
CreateDirectory "$INSTDIR\Interface"  ; Interface(AddOns) 폴더 생
CreateDirectory "$INSTDIR\WTF"    ; WTF(Account) 폴더 생성

;필수(공통) 애드온 설치
SetOutPath "$INSTDIR\Interface\AddOns\!ImprovedErrorFrame"
File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\!ImprovedErrorFrame\" ; ◀ /r 옵션으로 모두 포함
SetOutPath "$INSTDIR\Interface\AddOns\!StopTheSpam"
;이하 생략 합니다.

;.

;.

;.


;WTF\Account 폴더에 설정 파일 설치
SetOutPath "$INSTDIR\WTF\Account\계정이름입력"
File /r "..\..\..\..\Account(NukeUI 0.7배포)\계정이름입력\"
SectionEnd

;★★★--------------------------------
;Installer Sections - 타이탄 패널과 플러그인
SectionGroup /e "타이탄 패널" GR_TITAN ; ◀ /e 옵션은 Expand입니다. 옵션을 확장시킵니다.
Section "타이탄 기본" SecTitan
 SectionIn RO
 SetOutPath "$INSTDIR\Interface\AddOns\Titan"
 File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\Titan\"
 SetOutPath "$INSTDIR\Interface\AddOns\TitanAmmo"
 File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanAmmo\"
 SetOutPath "$INSTDIR\Interface\AddOns\TitanBag"
 File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanBag\"
 SetOutPath "$INSTDIR\Interface\AddOns\TitanClock"
 File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanClock\"
 ;이하 생략합니다.

  ;.

  ;.

  ;.
SectionEnd
SectionGroup "타이탄 추가" GR_T_PLUGIN
Section "경험치표시" SecTitanXPStatus
  SectionIn RO
  SetOutPath "$INSTDIR\Interface\AddOns\TitanXPStatus"
  File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanXPStatus\"
 SectionEnd
 Section /o "어그로경고" SecTitanAggro
  SetOutPath "$INSTDIR\Interface\AddOns\TitanAggro"
  File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanAggro\"
 SectionEnd
 ;이하 생략합니다.

  ;.

  ;.

  ;.
SectionGroupEnd
SectionGroupEnd ; ◀ SectionGroup내에 여러 Section과 하위 SectionGroup이 있습니다.

;★★★--------------------------------

; 이하 SectionGroup과 Section들 생략합니다.

;.

;.

;.


;★★★--------------------------------
;Descriptions

  ;Language strings ; ◀ 각 섹션그룹과 섹션의 설명(툴팁) 문자열을 지정합니다.
LangString DESC_GR_COMMON ${LANG_KOREAN} "Nuke UI Ver 0.7 베타의 공통 라이브러리 입니다.(필수)"
LangString DESC_GR_TITAN ${LANG_KOREAN} "타이탄 패널입니다. WOW 화면 상하단에 유용한 기능들을 제공합니다. (필수+선택)"
LangString DESC_GR_T_PLUGIN ${LANG_KOREAN} "타이탄 패널용 플러그인 입니다. 컴퓨터 사양을 고려하여 목적에 따라 설치하시기바랍니다. (선택)"
LangString DESC_SecTitanXPStatus ${LANG_KOREAN} "Titan Panel을 경험치바 형식으로 보이게하고 경험치 정보를 표시합니다. (필수)"
LangString DESC_SecTitanAggro ${LANG_KOREAN} "어그로 대상을 탐지하고 알려주는 기능을 제공합니다. (선택)"
  ;이하 생략합니다.

  ;.

  ;.

  ;.


  ;Assign language strings to sections  ; ◀ 지정한 설명(툴팁) 문자열을 나타내도록 합니다.
  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
 !insertmacro MUI_DESCRIPTION_TEXT ${GR_COMMON} $(DESC_GR_COMMON)
 !insertmacro MUI_DESCRIPTION_TEXT ${GR_T_PLUGIN} $(DESC_GR_T_PLUGIN)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecTitan} $(DESC_SecTitan)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecTitanXPStatus} $(DESC_SecTitanXPStatus)
  ;이하 생략합니다.

 ;.

  ;.

 ;.

;★★★--------------------------------
;Uninstaller Section

Section "Uninstall"

  ; Remove registry keys  ; ◀ 레지스트리에서 정보를 삭제합니다.
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI"
  DeleteRegKey HKLM SOFTWARE\NukeUI

  ; Remove files and uninstaller
  Delete $INSTDIR\Uninstall_NukeUI.exe ; ◀ 언인스톨용 exe 삭제

  ; Remove shortcuts
  Delete "$SMPROGRAMS\Nuke UI Ver 0.7 베타\*.*"

  ; Remove directories used for shortcuts
  RMDir "$SMPROGRAMS\Nuke UI Ver 0.7 베타" ; ◀ 시작 프로그램에 등록된 것들 삭제

; Remove WOW Inferace And WTF Folder
  RMDir /r "$INSTDIR\Interface" ; Interface(AddOns) 폴더 삭제 ; ◀ /r 옵션으로 모두 삭제
RMDir /r "$INSTDIR\WTF" ; WTF(Account) 폴더 삭제 ; ◀ /r 옵션으로 모두 삭제

SectionEnd

=========================================================================================

※ 중요하다고 생각되는 부분만 설명 추가로 주석을 달았습니다.

   위 내용만으로 충분히 샘플 스크립트 역할을 하리라고 보는데요 ^^;

   NSIS 설치 후, 제공하는 NSIS Examples Directory 폴더의 내용들과

   http://nsis.sourceforge.net/ 의 자료들을 통해서 많은 부분 알 수 있었습니다.

   http://jgh0721.egloos.com/ 헬마님의 자료도 많은 도움이 되었습니다.

   이 자리를 빌어 감사드립니다. ^^;

   HELP, CHM과 위의 내용들로 기본 부분은 충분히 이해할 수 있으리라 생각합니다.

※ 이상 미흡하지만, WOW 애드온 배포본 제작할 때 NSIS로 스크립트를 작성하면서

   기초적인 NSIS 스크립트에 대한 이해를 돕기위해 작성한 글이었습니다.

Posted by theYoungman
engineering/System Eng.2007. 3. 7. 09:19


출처 : http://www.kipple.pe.kr/doc/nsis/



NSIS : NSIS 소개와 패치/샘플
정보
패치파일
  • 받기 : NSIS2X_PATCH.EXE(245KB) (설치파일)
  • 패치 파일 저작권 정보 : 무료 프로그램/소스 포함(zlib license)
  • 버전 : NSIS 2.x용 한글 패치
  • 날자 : 2006/04/16
  • 주의 : NSIS 2.x를 먼저 설치한후 설치하여야 합니다.
구버전용
  • 받기 : NSIS206P.EXE(235KB) NSIS205P.EXE(238KB) NSIS 2.01용, 2004/10/05(230KB) (설치파일)
    예제 파일
    • 예제 파일 : nsissample.zip(53KB)
    • 예제 파일 저작권 정보 : 무료 프로그램/소스 포함(zlib license)
    • 날자 : 2004/10/05
    • 주의 : NSIS 2.x 와 위의 한글 패치가 설치되어 있어야 합니다.
    관련 페이지
    문서 정보
    • 문서위치 : http://www.kipple.pe.kr/doc/nsis/
    • 2004/10/06 : 최초 작성
    • 2004/10/08 : 질문과답 추가
    • 2005/03/06 : NSIS 2.05 용으로 맞추어서 자잘한 업데이트, AlwaysOnTop 플러그인 추가
    • 2005/04/03 : NSIS 2.06 으로 업데이트
    • 2006/04/16 : NSIS 2.x 모든 버전용으로 업데이트, nsis의 컴파일방법이 복잡해져서 이제 수정된 lang.h 와 makensis.exe는 제공되지 않고, 그냥 수정된 플러그인만 제공됩니다. 따라서 NSIS2.X 전 버전에 설치해서 사용하여도 문제가 없습니다.
    NSIS 소개

    NSIS 는 Nullsoft Scriptable Install System의 약자로, Winamp를 만든 NullSoft에서 Winamp용 설치프로그램을 만들기 위해서 제작되었다가, 나중에 오픈소스 형태(zlib 라이센스)로 공개된 설치프로그램 입니다. 물론 사용에 아무런 제한이 없으며 상업적으로 사용하여도 됩니다.


  • NSIS 를 다른 설치 프로그램과 비교하였을때 눈에 띄는 장점을 정리하자면...

    작은 크기

    설치파일의 오버헤드가 단지 50kb 정도 밖에 나지 않습니다. 단순히 압축 프로그램으로 압축한 파일과 비교하였을때 설치파일의 크기가 50kb 정도만 더 크다는 의미입니다. 프로그램을 배포할때 굳이 크기 때문에 zip 으로 묶어서 배포할 이유가 없어집니다.

    최고의 압축율

    NSIS 는 기본적으로 zip/bzip2/lzma압축 방식을 지원합니다. 여기서 주목할만한 점은 lzma를 지원한다는 것인데, lzma는 7-zip으로 알려진 압축방식으로 현존하는 방식중 최고의 압축율을 자랑하는 압축방식 입니다. 개인적으로 테스트해본 결과 zip 에 비해서 보통 30% 이상 파일의 크기가 줄어들며, winrar 의 solid 압축과 비교해도 더 좋은 압축율을 보여줬습니다. 이런 압축방식을 설치파일에 사용하게 되면 다른 설치프로그램 보다 월등하게 작은 크기의 설치파일을 만들어 낼 수 있습니다.

    스크립트 지원

    그다지 보기 좋지는 않지만, 강력한 자체 스크립트를 지원합니다. 별도의 플러그인을 만들어서 설치 스크립트에서 호출하는 것도 가능합니다. 다른 간단한 GUI 방식의 설치프로그램은 이러한 기능을 지원하지 않습니다.

    다국어 지원

    NSIS 2.0 에서는 다국어 버전을 지원해서 설치파일 하나로 여러가지 언어를 지원하는게 가능합니다만... 꽤 사용하기 복잡합니다.

    기타

    이것 이외에도 홈페이지에는 여러가지 장점이 나열되어 있지만, 작은 크기 만으로도 선택의 이유로 충분할듯 합니다.


    하지만 NSIS 에도 몇가지 단점이 있습니다.

    스크립트를 배워야 한다

    세상에 공짜가 없기때문에 스크립트를 배워야 합니다. HM NIS EDIT 같은 스크립트 생성 및 편집툴을 별도로 쓸 수도 있습니다만, 이것보다는 아래에 소개될 예제 소스를 변경하여서 사용하는 방식을 추천 합니다.
    ( 초기 스크립트 생성은 편한듯 보이지만, 설치파일의 유지보수에 그다지 적합치 않습니다. )

    한글처리의 문제

    NSIS 는 다국어 문제를 거의 완벽하게 지원하지만, 프로그램 설치시 을/를 이라던가 이/가 문제가 발생합니다. 이외에 다이알로그의 LDU 문제로 MODERN UI 사용시 이미지가 늘어져 보이는 문제도 발생합니다. 이 문서에서 제공하는 패치 파일과 샘플 파일은 이에 대한 해결 방법을 제공합니다.

    NSIS 예제 파일

    NSIS 의 예제 파일과 각각의 부분에 대해서 설명합니다. 이 예제 파일은 반드시 위에 있는 NSIS 패치를 설치하여야만 정상적으로 사용이 가능합니다.




    테스트 하기

    예제 파일의 압축을 풀고 __make.bat 파일을 실행하면



    NOTEPADSETUP.EXE 라는 예제 설치 파일이 생성됩니다. 이제 이 설치파일로 메모장을 설치하고, 제거하는걸 테스트 할 수 있습니다.







    기본 설정 : 언어 종속

    다국어 처리를 위해서 분리된 부분이다. 한글로 적는다.







    한글 특화

    한글처리 (을/를, 이/가 문제) 를 위해서 설정하는 부분이다. 자신의 프로그램에 맞게 이/가 를 설정한다. 반드시, 패치가 설치되어 있어야 정상 작동한다.






    기본 설정 : 언어 비종속

    설치에 관련되 화면에 보이지 않는 기본적인 정보를 설정한다. 가급적 영어로 적도록 한다. ( 설치 폴더와 같은 부분들.. )






    파일 복사

    설치시 파일을 복사하는 부분이다. 마찬가지로 Function un.My_Uninstall 부분에는 파일을 삭제하는 코드가 들어가야 한다.






    기타

    나머지는 소스의 주석 참고.

    NSIS 패치

    이 파일은 NSIS 를 좀더 편하게 쓰기 위해서 이것저것 패치한 파일입니다.
    특히 한글의 을/를,이/가 처리를 위해서 일부 파일이 수정되었고, 이 문서의 예제 파일은 이 문제를 해결하기위한 방법을 보여줍니다.
    패치파일을 설치하면, 기존에 설치된 NSIS 를 자동으로 패치하며, 패치파일의 소스는 NSIS\_patch_ 폴더에 같이 복사됩니다.
    다음은 패치되는 내용을 정리한 것입니다.

    advsplash.c

    • advsplash.c : 밀레니엄 계열에서 이상작동 버그 수정
    • advsplash.dll : 수정된후 컴파일된 플러그인

    lang.h

    • ※2006/04/16 수정, 이제 수정된 lang.h makensis.exe 는 제공되지 않음.
    • lang.h : exehead 에 있는 파일. 설치 파일 손상시 오류 메시지를 영어 + 한글로 나오도록 수정
    • makensis.exe : 수정된후 컴파일된 실행 파일



    NSISAutoSetupPlugin

    • NSISAutoSetupPlugin\ : /A 옵션으로 자동으로 설치될수 있도록 해주는 플러그인
    • NSISAutoSetupPlugin.dll : 컴파일된 플러그인

    win-k.bmp

    • win-k.bmp : "${NSISDIR}\Contrib\Graphics\header\win-k.bmp" 에 위치, 기존의 win.bmp 는 한글 윈도우에서 늘어나 보이므로, 대신 이 파일을 사용하면 늘어나 보이지 않는다.
    • 이런 방식으로 사용한다.

    !define MUI_HEADERIMAGE ; HEADER 비트맵 보일까 말까 여부.
    !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\header\win-k.bmp"



    레지스트리 변경

    • .nsi 파일을 더블클릭하면 메모장으로 편집되는 대신 makensis 로 바로 컴파일 되도록 수정
    • 컴파일후 /PAUSE 옵션으로 화면에 결과를 볼수 있도록 수정
    • NSIS가 있는 폴더를 PATH 환경변수에 추가해서 makensis 를 바로 실행 가능하도록 수정

    한글 문제 해결

    • 한글 문제를 해결하기 위해서 Korean-eul.nlf, Korean-rul.nlf 가 추가되었고, Korean.nsh 가 수정되었음.
    • 사용법은 이 문서의 "한글 특화" 부분 참고

    질문과 답

    실행중인 프로그램 종료시키기

    새버전의 프로그램을 설치할때나, 프로그램을 제거할때 기존의 프로그램이 실행중이면 이 프로그램을 종료할 필요가 생깁니다. 이때 프로그램을 죽이거나(Kill) 종료(Close) 시킬수가 있는데, 이 문서의 예제에서는 다음과 같은 방법을 사용합니다.

    ; 함수 선언부
    ;
    ;----------------------------------------------------------------------------------------
    ; 프로그램의 클래스를 이용하여서 프로그램이 실행중인지 체크하고, 종료시킨다.
    ; 호출전 Push 로 꼭 함수 이름을 보내줘야 한다.
    Function CheckAndCloseApp 
    Pop    $R0                    ; GET WINDOW CLASS NAME
    loop1: 
       FindWindow $R1 "$R0"
       IntCmp $R1 0 done1
       SendMessage $R1 16 0 0 ; WM_CLOSE
       SendMessage $R1 2 0 0  ; WM_DESTROY
       Sleep 3000
       FindWindow $R1 "$R0"
       IntCmp $R1 0 done1
       MessageBox MB_OK "$(TXT_NAME)${I_KA} $(TXT_STILLRUN_EXIT_PROGRAM)"
       goto loop1
    done1:
    FunctionEnd
    --------------------------------------------------------------------------------
    ; 사용할때는 
    Push "Notepad"
    Call CheckAndCloseApp 

    이 방법은 윈도우의 클래스(Class) 명을 가지고 윈도우의 핸들을 찾아서 종료메시지(WM_CLOSE) 를 보내는 방식을 사용한다.
    윈도우의 클래스는 윈도우의 속성과 관련된 부분이다. 예를 들자면 버튼 윈도우의 클래스명은 "Button" 이다. 어떠한 프로그램의 클래스명을 알고 싶다면 SPY++ 라는 프로그램으로 확인이 가능하다. 메모장의 클래스 이름은 스파이로 확인한 결과 "Notepad" 이였다.

    만일 프로그램이 MFC 로 작성되어서 윈도우의 클래스가 Afx:xxxx 와 같이 매번 바뀐다면 FindWindow 함수에서 클래스명 대신 타이틀을 이용해서 검색하는것도 가능하다. (하지만 타이틀도 매번 바뀐다면? OTL)

    OS 의 종류에 따라서 다른 프로그램 설치하기

    레지스트리의 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion 항목을 검사해서 NT계열(NT/2000/XP/2003) 계열인지 아닌지(95/98/ME) 확인이 가능하다.
    다음은 꿀뷰에서 유니코드 버전과 아스키 버전을 설치할때 사용하고 있는 스크립트의 예제 이다.


    ReadRegStr $R0 HKLM  "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
    IfErrors NotNT
    File /oname=HoneyView.exe HoneyViewU.exe 
    goto NEXT
    NotNT:
    File HoneyView.exe
    NEXT:

    Posted by theYoungman
    engineering/System Eng.2007. 3. 6. 19:40
    출처 : http://www.cipher.pe.kr/tt/cipher/107



    NSIS 로 인스톨러를 만들면 각각의 페이지를 만드는 것이다. 각 페이지가 모여서 전체적인 인스톨 프로그램을 구성하게 된다. 주로 많이 접하는 페이지가 라이센스 동의에 대한 페이지나 인스톨할 디렉토리 선택등을 알 수 있다. 물론 사용자 구성/작성 페이지를 추가 할 수도 있다. 스크립트를 사용해서 이런 페이지의 순서를 변경할 수도 있으며, 특정한 정보를 제공할때 한 페이지에만 머무르도록 할 수도 있다.

    페이지에 관련된 기본적인 명령어는 Page, UninstPage 이다. 첫번째 명령어는 페이지를 인스톨 프로그램에 추가하는 것이고, 두번째는 언인스톨 프로그램에 페이지를 추가하는 것이다. 또 다른 명령어로는 PageEx 가 있다. Ex가 의미하는바가 Extension을 의미하는 것이므로 Page 명령어 보다 더 자세하게 셋팅을 할 경우 사용하는 명령어 이다.

    1. 페이지 순서

    페이지 순서는 스크립트에서 Page, UninstPage, PageEx 가 나타나는 순서대로 페이지가 실제로 보여지게 된다. 예를 들어

    1. Page license
    2. Page components
    3. Page directory
    4. Page instfiles
    5. UninstPage uninstConfirm
    6. UnistPage instfiles


    위의 코드를 이해해 보자면, 인스톨 프로그램에서 제일 먼저 라이센스 관련된 페이지, 컴포넌트 선택하는 페이지, 인스톨 디렉토리 선택 페이지, 마지막으로 인스톨 로그를 보여주는 페이지를 보여 주라는 얘기이다. 그리고 언인스톨 프로그램에서 처음에는 언인스톨 할건지 확인하는 페이지를 보여 주고, 마지막으로 언인스톨 되는 파일에 대한 로그를 보여 주라는 얘기이다.

    NSIS 스크립트에서 예전 버전과의 호환성 때문에 Page 명령어가 없을 경우 license, components, directory, instfiles등이 자동으로 포함된다. 물론 각 페이지를 만들기 위한 정보가 제공될 경우 이다. license의 경우 LicenseText와 LicenseData가 지정되어 있어야 하며, directory 페이지의 경우 DirText가 지정되어 있어야 하는 등을 말한다.

    2. 페이지 옵션

    각 페이지는 페이지를 포함하기 위한 각각의 정보를 필요로 한다.

    License page

    1. LicenseText [text [button_text] ]

    - text에 적히는 내용이 페이지 위쪽에 라이센스 아이콘 옆에 적히는 글이다. [button_text] 의 경우 라이센스 동의 시에 누르는 "I Agree" 대신에 쓰여질 글을 적는 부분이다.
    1. LicenseData (txt|rtf)

    - 라이센스에 사용할 파일을 표시한다. 이 데이타가 없는 경우 라이센스 페이지는 표시되지 않는다. 만약 각 언어마다 다른 라이센스 파일을 추가 하고자 할때는 LicenseLangString 을 이용한다. LicenseLangString은 다중 언어 설명에서 더 자세하게 설명하겠다.
    1. LicenseForceSelection (checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | <b>off</b>)

    - 라이센스에 동의하겠다는 라디오 버튼이나 체크 박스를 표시하여서 선택하지 않으면 "next" 버튼을 활성화 시키지 않는 옵션이다.

    단순히 설명만 보면 잘 모를 수도 있으니 아래와 같은 스크립트를 작성하여서 컴파일하여 실행시켜 보자. 아래 그림과 같이 창이 나오게 된다. Page에 대한 내용을 적어 주지 않아도 디폴트로 라이센스 페이지가 가장 먼저 나오므로 아래와 같이 된다. 아래 코드를 보면 위에 설명한 내용이 어떤 내용을 말하는지 이해가 될것이다. LicenseForceSelection 에서 "위 라이센스에 동의 합니다"와 같이 사용자가 글을 직접 쓸 수도 있고, "" 라고 쓰면 디폴트 값이 쓰여지게 된다. 하나 생각할 것은 license.dat 파일에서 http로 주소를 적으면 자동으로 하이퍼링크가 걸려서 라이센스 파일에서 보여 준다는 것이다.

    1. # set the name of the installer
    2. outfile "pages.exe"
    3. # set license data file
    4. LicenseText "라이센스 동의해 주세요~~~ " "동의"
    5. LicenseData ".\license.txt"
    6. LicenseForceSelection checkbox "위 라이센스에 동의 합니다."
    7. # create a default section.
    8. section
    9. sectionEnd

    사용자 삽입 이미지



    Component selection page
    1. ComponentText [text [subtext] [subtext2]]

    - 컴포넌트 페이지에 쓰여지는 디폴트 글을 바꾸는 옵션이다.
      text : 인스톨 아이콘 옆에 쓰여지는 글 이다. 일종의 제목 글로 생각하면 되겠다.
      subtext : 인스톨 타입 선택 옆에 쓰여지는 글이다.
      subtext2 : 인스톨 타입 아래에 쓰여지는 글이다.
    여기에 쓰이는 텍스트는 변수 형태로 미리 써서 포함 시킬 수도 있다. 이해 하기가 어려우니 위에 쓴 코드를 확장해서 아래와 같이 만들어서 사용해 보자. 컴포넌트는 Section의 개념이 포함되므로 일단 여기서는 어떻게 쓰는지만 보고 Section의 내용을 보고 전체적으로 다시 만들어 보자.

    1. # set the name of the installer
    2. outfile "pages.exe"
    3. LicenseText "라이센스 동의해 주세요~~~ " "동의"
    4. # set license data file
    5. LicenseData ".\license.txt"
    6. LicenseForceSelection checkbox "위 라이센스에 동의 합니다."
    7. ComponentText "필요한 컴포넌트를 인스톨 합니다." \
    8.               "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
    9. # create a default section.
    10. section
    11. sectionEnd
    12. section "Component1"
    13.         MessageBox MB_OK "You select component1"
    14. SectionEnd
    15. Section "Component2"
    16.         MessageBox MB_OK "You select component2"
    17. SectionEnd

    사용자 삽입 이미지

    위의 코드와 실행했을때 나오는 화면을 보면 각각이 어떤 역활을 하는지 충분히 이해 할 수 있을 것이다.


    Directory selection page

    1. DirText [text] [subtext] [browse_button_text] [browse_dlg_text]

    - 인스톨할 디렉토리를 선택하는 페이지를 포함할 경우 그 디렉토를 셋팅하는 페이지에 대한 옵션을 줄 수 있다.
      text : 인스톨 아이콘 옆에 쓰여지는 제목이라고 볼 수 있다.
      subtext : 디렉토리 선택 페이지에 보여지는 글이다.
      browse_button_text : 다른 디렉토리를 선택할때 클릭하는 버튼에 적히는 텍스트 이다.
      browse_dlg_text : 다른 디렉토리를 선택하기 위해 버튼을 클릭한 후 나온 다이얼로그에 적히는 글이다.
    디폴트 값을 이용하고자 할 경우에는 "" 로 자리를 차지하면 되겠다. 글을 보면 좀 이해하기가 힘들겠지만, 코드와 함께 실행된 화면을 보면 이해할 거라고 생각한다.

    1. # set the name of the installer
    2. outfile "pages.exe"
    3. LicenseText "라이센스 동의해 주세요~~~ " "동의"
    4. # set license data file
    5. LicenseData ".\license.txt"
    6. LicenseForceSelection checkbox "위 라이센스에 동의 합니다."
    7. ComponentText "필요한 컴포넌트를 인스톨 합니다." \
    8.               "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
    9. DirText "인스톨 할 디렉토리 선택 창입니다." "본 프로그램을 인스톨 할 디렉토리를 선택해 주십시오." \
    10.         "클릭해줘!" "디렉토리 선택하는 다이얼로그 설명입니다."
    11. # create a default section.
    12. section
    13. sectionEnd
    14. section "Component1"
    15.         MessageBox MB_OK "You select component1"
    16. SectionEnd
    17. Section "Component2"
    18.         MessageBox MB_OK "You select component2"
    19. SectionEnd


    위 스크립트를 컴파일하고 실행한 후, 라이센스를 동의하고 컴포넌트 선택하고 나면 아래와 같이 디렉토리 선택하는 윈도우가 나오고, "클릭해줘!" 라는 버튼을 클릭하면 실제로 디렉토리를 선택할 수 있는 창이 나온다. 위 코드에서 사용한 문자열과 실제로 어떻게 화면에 출력되는지 확인을 해보면 되겠다.
    사용자 삽입 이미지


    1. DirVar user_var

    - 일반적으로 디렉토리를 선택할 경우에 $INSTDIR에 그 값이 저장된다. 만약 사용자가 선택한 폴더와 디폴트 폴더 모두 사용하고자 하면 이 명령어를 써서 사용자가 선택한 변수에 선택한 디렉토리를 저장할 수 있게 된다. 이 명령어는 반드시 PageEx 내에서만 사용해야 한다. 예제는 밑에 있는 한 가지 옵션을 더 보고 동시에 셋팅한 예제를 보겠다.

    1. DirVerify auto|leave

    - 이 명령어는 기본적으로 사용하지 않아도 auto로 셋팅되어 있다. 이 옵션은 인스톨 할 디렉토리가 제대로 되어 있지 않던가, 디스크에 프로그램을 인스톨 할 여유 공간이 없을 경우 next 버튼이 활성화되지 않게 된다. 하지만 이 명령어를 사용해서 leave로 하게 되면 이러한 체크에 상관없이 항상 next 버튼이 활성화 되게 된다. 일반적으로는 사용할 필요가 없는 그런 옵션이다.

    아래 예제 코드를 살펴 보자. 이제 코드가 좀 복잡해 진것 처럼 보이지만, 앞의 코드를 약간 수정한 내용이다. 먼저 봐야 할 부분이 19째 줄부터 보면 PageEx~PageExEnd 가 있다. DirVar의 기능을 보여 주기 전에 먼저 보여 줄것이 있어서 코드 자체를 주석 처리해 놓았다. 6번째 줄을 보면 InstallDir 명령어가 있는데, 이 명령어는 $INSTDIR에 문자열을 포함시키는 역할을 한다. 디폴트로 여기로 인스톨 하겠다는 디렉토리를 정하는 명령어 이다. 아래의 코드를 실행 시키면 인스톨 디렉토리를 선택하는 부분에 6번째 줄에 있는 디렉토리로 디폴트 값이 저장되게 된다. 디렉토리 페이지에서 이 디폴트 값을 보여 주는 역할을 한다. 아래 그림과 같이 나오게 된다. PageEx 명령어를 쓰게 되면 디폴트로 license 페이지부터 보여 주던 것을 더 이상 보여 주지 않고 directory 페이지만 보여 주므로 명시적으로 라이센스부터 끝까지 페이지를 보여 주기 위해서 17번째 줄에서 22번째 줄까지 직접 page 를 삽입했다. 앞에서 봤듯이 이 페이지의 순서는 적혀 있는 순서이므로 나중에 순서를 바꾸어서 한번 테스트 해보기 바란다.
    1. # set the name of the installer
    2. outfile "pages.exe"
    3. Var ANOTHER_DIR
    4. InstallDir "$PROGRAMFILES\testing"
    5. LicenseText "라이센스 동의해 주세요~~~ " "동의"
    6. # set license data file
    7. LicenseData ".\license.txt"
    8. LicenseForceSelection checkbox "위 라이센스에 동의 합니다."
    9. ComponentText "필요한 컴포넌트를 인스톨 합니다." \
    10.               "내부적인 소제목입니다." "인스톨 하는 설명을 자세하게 여기에 씁니다."
    11. DirText "인스톨 할 디렉토리 선택 창입니다." "본 프로그램을 인스톨 할 디렉토리를 선택해 주십시오." \
    12.         "클릭해줘!" "디렉토리 선택하는 다이얼로그 설명입니다."
    13. Page License
    14. Page Components
    15. PageEx directory
    16. #       DirVar $ANOTHER_DIR
    17. PageExEnd
    18. Page instfiles
    19. # create a default section.
    20. section
    21. MessageBox MB_OK "$INSTDIR" # , $ANOTHER_DIR"
    22. sectionEnd
    23. section "Component1"
    24.         MessageBox MB_OK "You select component1"
    25. SectionEnd
    26. Section "Component2"
    27.         MessageBox MB_OK "You select component2"
    28. SectionEnd


    사용자 삽입 이미지


    DirVar 의 기능을 보기 위해서 먼저 아래 코드에서 20번째줄에 있는 주석 표시를 지우고, 28번째 줄을 [code type=nsis]MessageBox MB_OK "$INSTDIR, $ANOTHER_DIR"[/CODE] 로 변경해 보자. 실행시키면 directory 페이지에 디폴트 값이 나오지 않는 것을 알 수 있을 것이다. 그리고 디렉토리를 아무거나 선택해 보면 창에 적히는 것이 선택한 디렉토리\testing 으로 나오는 것을 알 수 있을 것이다. 그리고 "Install" 버튼을 클릭해 보면 아래 그림과 같이 $INSTDIR과 $ANOTHER_DIR 모두 다른 값을 가짐을 알 수 있다.
    사용자 삽입 이미지

    여기서 문제는 디렉토리 페이지에 디폴트 값이 표시 되지 않는 것인데, 이는 DirVar로 선택한 $ANOTHER_DIR가 초기 값을 아무것도 안 가지기 때문이다. 여기에 디폴트 값을 뭔가 주면 되겠다. 어떻게 하면 되는지 한번 고민해 보기 바란다. 간단하게 $ANOTHER_DIR의 초기화를 PageEx~PageExEnd 안에 두면 되지 않겠느냐고 생각할 수도 있지만, PageEx~PageExEnd 안에는 StrCpy 명령어를 쓸 수 없다.

    1. function .onInit
    2.        StrCpy $ANOTHER_DIR "$WINDIR"
    3. functionEnd


    위 코드를 그 위에 있는 코드 23번째줄에 삽입하고 실행하면 원하는 데로 되는 것을 알 수 있을 것이다. function에 대해서는 아직 배우지 않았으므로 여기서는 .onInit 에서 필요한 초기화를 해주면 된다는 것만 알고 넘어 가자.

    1. DetailsButtonText [text]

    DetailsButtonText는 위에 전체 코드 중에서 22번째 줄에 있는 Page instfiles 대신에 아래 코드로 변경하고 컴파일을 하면 아래 창 처럼 버튼에 적히는 글의 내용이 달라 진다.
    1. CompletedText [text]

    CompletedText는 인스톨이 끝났을 경우 "Completed" 라는 것 말고 다른 말을 적을 때 사용한다.

    1. PageEx instfiles
    2.        DetailsButtonText "자세히 보여줘~~"
    3.        CompletedText "끝났당~~"
    4. PageExEnd

    사용자 삽입 이미지

    위에 있는 DetailsButtonText와 CompletedText는 모두 언인스톨 창에서도 사용할 수 있다. 또 한 DirVar도 마찬가지로 언인스톨시에 사용할 수 있다.

    페이지 옵션으로 마지막으로 남은것은 UninstallText가 남아 있다. 이 옵션은 나중에 언인스톨러를 공부할 때 실제로 보도록 하겠다.
    Posted by theYoungman