본문 바로가기
Programming

pimv2

by homecafe 2009. 10. 19.

 pimv2

  pimv2  
Author: seyon    
Date: 2003-12-09 오후 7:56:31 from '211.38.3.65' of '211.38.3.65'

PIM-SM RFC2362

2. Overview

라우터는 downstream group member를 가지는 neighbor router들로부터 explicit Join/Prune메세지를 받는다
data packet을 forward한 router는 멀티캐스트 그룹 G를 언급하고
이들 인터페이스로부터 명시적으로 join을 받는다. 여기에 언급된 모든 라우터는 특별한 다른말이 없으면
PIM-SM을 처리할수있는것을 가정한다.

DR은 active member를 가지는 각 그룹에 대해 정기적으로 RP에 Join/Prune을 보낸다. RP를 향한 path를
따라서 각 라우터는 group에 대해서 wildcard state를 생성하고 Join/Prune메세지를 RP쪽으로 보낸다.
우리는 분배 트리를 표현하는 라우터가 유지하는 state를 참조하여 routing entry를 사용한다.
route entry는 source address, group address, incoming interface(패킷을 받아들인), outgoing interface(
패킷을 내보낸), timers, flag bit등을 포함한다. wildcard route entry의 incoming
interface point는 RP를 향한다. outgoing interface point는 (RP로 Join/Prune message를 보내는) 이웃의
downstream router를 가리킨다. 이 state는 shared, RP-centered한 모든 그룹에 도달하는
분배트리를 생성한다. data source가 먼저 group에 보내면, its DR은 RP에
source의 데이터 패킷을 encapsulate하여 Register messages를 unicast한다.
만약 data rate가 높다면 RP는 source-specific Join/Prune메세지를 source에 되돌려줄수도있고,
source의 data pacekt은 forwarding state로 바뀌고 RP로 unencapsulated되어 도달하게 될것이다.
encapsulated되건 native로 도착하건간에 RP는 source의 decapsulted data packet을 RP-centered한 분배트리에
group member쪽으로 내려준다. 만약 data rate가 보장된다면 local receiver를 가진 개ㅕㅅㄷㄱsms
srouce-specific, shortest path, distribution tree로 join하고 shared RP-centered tree로 보내지 않도록
prune한다. low data rate source에 대해서는 RP나 last-hop router나 source-specific한
shortest path tree에 join할필요가 없고 data packet은 shared한 RP-tree로 전달될것이다.

다음은 SM operation에 대해서 자세히 설명하고 특히 contol message와 이들이 발생시키는 action에대해서 설명할것이다.

2.1 Local hosts joining a group

multicast group G에 join하기위해서 host는 자신의 멤버쉽 information을 IGMP를 통해 전달한다.
이 시점에서 이러한 host를 group G의 R(receiver)혹은 member라부른다

Note: 여기에 언급하는 모든 용어는 Section3에서 완성됨.

| ----- ----- -------
Host -+- | A |----------------| B |-----------------| C | RP
| ----- ----- -------
-----> -----------> ----------->
IGMP report (*,G) join (*,G) join

Fig. 1 Example: how a receiver joins, and sets up shared tree

DR이 IGMP가 가리키는 membership G를 받으면, DR은 관련 RP를 찾는다. DR은
group에 대한 wildcard multicast route entry를 생성한다. (*, G) entry로
여기서 언급함; 만약 특정 source에 대해서 specific match가 없으면
packet은 이 entry를 따라서 forwarding될것이다.

RP address는 route entry에서 특별한 field에 포함되고, 정기적인 upstream
Join/Prune message에서 포함된다. outgoing interface는 새로운 멤버를 가리키는
IGMP membership에 포함된다. incoming interface는 RP로 unicast packet을 보내는
interface로 설정된다.

만약 group에 직접적으로 연결된 멤버가 더이상 없으면 IGMP는 DR에 notify한다.
만약 DR이 local member도 downstream receiver도 없으면 (*, G) state는 삭제된다.

2.2 RP-rooted shared tree 설정

(*, G) state에 의해 trigger된다, DR은 join list와 WC-bit와 RP-tree bit가 1로 설정된 RP address가 들어있는join/prune 메세지를 생성한다.
The WC-bit는 매치되는 어떤 소스를 가리키고 더이상 매치되는것이 없을때 이 entry를 따라 forward된다.
RPT-bit는 이 join이 shared, RP-tree로 보내진다는것을 가리킨다. prune list는
empty로 남아있다. RPT-bit가 1로 설정되면 join은 shared RP-tree와 연관되었다는것을 가리키고
그러므로 Join/Prune message는 RP-tree를 따라 전달된다. WC-bit가 1로 설정될때
address가 RP이고 downstream receiver는 이 path를 통해서 모든 소스로부터
패킷을 받기를 기대한다는것을 가리킨다.
RPT-bit라는 용어는 RPT-bit flag와 관련된 route entry와 Join/Prune message에서
각 encoded address에 포함된 RPT-bit둘다를 언급할때 사용된다.

각 upstream router는 RPT-bit와 WC-bit set을 가진 Join/Prune을 받았을때
(*,G)에 대한 multicast route entry를 생성 혹은 update한다.
Join/Prune message가 도착한 인터페이스는 (*,G)에 대한 outgoing interface리스트에
추가된다. 이 엔트리에 기초하여 receiver와 RP사이의 각 upstream router (RP를 포함한)는
join/Prune 메세지를 join list에 보낸다? packet payload는 Multicast-Address G,
와 Join=RP, WC-bit, RPT-bit Prune=NULL을 포함한다.

2.3 group에 보내는 Host

host가 group에 multicast data packet을 보내기 시작하면, 초기에 그것의 DR은
RP-tree로 분배하기위해 각 packet을 RP에 보내야한다. Sender의 DR은 초기에
각 data packet을 Register message로 encapsulate하고 그 그룹의 RP로 unicast한다.
RP는 각 Register message를 decapsulate하고 동봉된 data packet을 shared RP-tree의
downstream member로 natively하게 forward한다.

-------- |
|Source| | ----- ----- ---- ------ | ----------
|Host |--+---| A |---| B |--|RP|----| C |-----+---| Receiver|
-------- | ----- ----- ---- ------ | | Host |
-------> ----------> ------------> -----------
Data packet Register forward
decapsulated
data packet

Fig. 2 Example: a host sending to a group

만약 source의 data rate가 SPT의 사용을 보장하면, RP는 source에 specific한
새로운 멀티캐스트 route entry를 생성하고, 앞으로 (S,G) state라 언급하고,
source로 Join/Prune message를 정기적으로 보낸다. over time에 대한 노트,
언제 switch할것인가에 대한 rule은 global coordination없이 수정될수 있다.
만약 RP가 SPT로 전홚면, source와 RP사이의 router는 (S,G) state를 생성,
유지하고 (S,G) message를 source쪽으로 upstream으로 보낸다.
source의 DR은 RP로부터 Register-Stop메세지를 받을때 data packet을 Registers메세지로
encapsulating하는것을 멈춰야한다. RP가 group혹은 특정 source에 대해서 downstream receiver가
없거나 RP가 이미 (S,G) tree에 join되어있어서 data packet을 native하게 받을때에
RP는 Registers메세지에 대해서 Register-Stop message를 발생시킨다. 각 source의
DR은 (S,G)마다 Register-Suppression-timer를 유지한다. 이 타이머는
Register-Stop message에의해 시작되고, expire될때까지 source의 DR은 Register
message로 encapsulate된 data packet을 보내는것을 resume한다.

2.4 RP-tree에서 SP tree로 전환

member에 직접 연결된 router는 먼저 공유트리에 join한다. 공유트리에 대한 source
로부터 packet을 받은후에 router는 spt로 전환할수 있다. 추천하는 policy는
특정 소스에서 충분한 source를 받은후에 spt로 전환을 initate하는것이다.
이러한 정책을 실현하기위해 router는 source specific한 multicast route entry가
없는 source로부터 data packet을 모니터할수 있어햐 하고 , 정해놓은 threshold를
초과하는 data rate일때 initate할수 있어야 한다. 그림에서 router 'A'가 (S,G) state를
initate한다.

First Hop Router for Source
----- -------
| D |-------| Host|
/ ----- -------
Source tree / / \
<-------------------/ / \
/ \
------ | ----- ----- - -----
|Host|--+-| A |----------------| B |---------------| C | RP
------ | ----- ----- -----
Receiver| <---------------------------------------
Shared tree

(S,G) 엔트리가 activate되면 (그리고 정기적으로 state가 유지되는동안)
Join/Prune메세지는 source쪽으로 upstream을 보낸다. payload는 Multicast-Address=G
, Join=S, Prune=NULL. (S,G)엔트리가 생성되면, outgoing interface리스트는
(*,G)에서 복사된다, 예를들어 모든 local shared tree branch가
새로운 shortest path tree에 복사된다. 이런 방법으로 data packet이
S로부터 도달하면 이 entry에 매칭되고 모든 receiver는 이 path를
따라서 source의 packet을 계속 받을것이다. (더 복잡한 시나리오에서는
, router의 다른 entry를 고려해야 한다. Section 3에 기술된것처럼.)
(S,G) state는 각 SP트리를 initate하고 maintain하는 책임이있는
last-hop라우터에서 유지되어야만 한다. (*,G)와 (S,G)가 overlap되더라도,
두 state는 source-specific한 Join/Prune Message를 trigger할필요가 있다.
(S,G) state는 source로부터 도착한 data packet에의해 alive를 유지해야한다.

timer(Entry-timer)는 (S,G) entry에 설정되고, 이 타이머는 (S,G)에 대한 data packet이
적어도 한개의 oif로 forward되거나 Registers가 보내질때마다 restart된다. Entry-timer
가 expire되면 state는 삭제된다. last-hop router는 궁극적인 end-system 목적지에
packet을 전달하는 router이다. 이것은 group membership이 있는지 응답으로 적절한
distribution tree에 join혹은 prune하는지를 monitor하는 라우터이다. 일반적으로
last-hop router는 LAN에서 DR router이다. 그러나 나중에 다양한 조건에서
같은 LAN에 연결된 parallel router가 DR을 대신 넘겨 받을수 있다.

오직 RP와 local member를 가진 라우터만이 SP-tree로 전환을 initiate할수 있다
중간 라우터는 할수 없다. consequently, last hop router가 (S,G) state 소스에서
받아서 생성하고 반면에 중간 라우터는 join list에서 S를 가지는 down stream
으로부터 join/prune메세지에 대한 응답으로 (S,G) state를 생성한다.

(S,G) entry는 SPT-bit를 clear로 초기화한다, S가 아직 완전히 setup되지 않은
shortest path tree branch를 가리키는, router는 여전히 (*,G)로 도착함을 가리키는
S로부터 패킷을 받아들인다. 각 pim 멀티캐스트 entry는 도착하기를 기대하는
iif와 관련되어있다.

(S,G) entry를 가진 라우터와 SPT=bit가 clear되어 (S,G) entry에서 새로운 S로부터 i
패킷을 받기 시작한다. iif는 (*,G)의 iif와 다르고, (RP-tree)를 통해
받기를 원하지 않는다는것을 가리킨다. join/prune 메세지는 S를 포함하는
prune메세지를 RP쪽으로 보낸다, RPT-bit가 Source를 포함하는 RP트리의
branch로 보내지 말아야 한다는것을 가리킴. 만약 router가 S,G state를 가지면
(RPT-bit가 설정되어있건 아니건 간에) (S,G) oif list로부터 도착한 interface
는 삭제한다. 만약 (*,G) state만 가지고 있으면 RPT=flag가 1로 설정된 entry
를 생성한다. for brevitiy 우리가 (S,G) RPT-bit entry로 RPT-bit flag를 1로
설정한 (S,G)엔트리를 참조함. 이 노테이션구분은 RPT=bit설정에 따라 (S,G)
entry에 다른 액션을 가지는 가리키는데 유용하다. 라우터가 특정 S,G에 대한
1개이상의 active한 (S,G) 엔터리를 가질수 없음을 언제나 기억하라; RPT-bit플래그가
설정되어있건 아니건간에. 다른말로하면, 라우터는 (S,G)와 같은 S와 G를 동시에
가지는 (S,G) RPT-bit 엔트리를 가질수 없다. Join/Prune 메세지 페이로드는
Multicast-Address=G, Join=NULL, Prune=S,RPT-bit를 포함한다.

새로운 receiver가 source-specific prune state가 설정된 RP-tree에 join할수 있다.
(예를들어 downstream receiver가 SP-tree로 전환되었기때문에). 이런경우 prune state
는 새로운 receiver가 모든 source 데이터 패킷을 새로운 receiver로 가져오는
upstream을 모두제거해야만한다. 그러므로, (*,G) Join이 어느 (Si, G)RPT-bit
entrye를 가지는 라우터에 도착하면, (다시말하면, source-specific rune을 RP
쪽으로 라우터가 보내도록 하는 entry), 이들 entry는 새로운 멤버로 모든
소스의 패킷을 내려받도록 하기위해 router의 upstream을 update해야만한다.
이를 이루기위해, 각 라우터는 (S,G)RPT-bit entry가 존재하는 모든 (*,G) Join/Prune
메세지를 update하여받는다. 라우터는 또한 같은 RPT-bit 설정 upstream을 update하고
모든 active한 source의 패킷을 당겨받도록 (*,G) Join/Prune 메세지 upstream을
trigger할수도 있다. 만약 도착한(*,G) Join이 prune list에 존재한다면,
응답하는 (S,G)RPT-bit entry는 변하지 않은채 남는다. (즉 RPT-bit는
oif를 추가하지 않은채 존재한다)

2.5 분배트리 유지의 steady state ( router state)

steady state에서 각 라우터는 join/prune 메세지를 정기적으로 활성화된 pim route entry에
보낸다. join/prune메세지는 corresponding entry에서 가리키는 neighbor로 보낸다.
이러한 메세지들은 state, topology, membership change등을 capture하기위해 정기적
으로 보낸다. Join/Prune 메세지는 새로운 source에 대한 새로운 route entry가 생성된
각 시간을 event-triggered basis에 보낸다. (damping function이 적용될수도있다.
예를들어 새로운 join 정보를 mergin하는데 허용되는 짧은시간)
Join/Prune 메세지는 명백한 지식의 어떤 형식을 도출하지않는다. router는
정기적인 refresh 메커니즘을 이용하여 lost packet을 recover한다.

2.6 RP 정보를 얻기
RP정보를 얻기위해 모든 PIM domain안에있는 라우터는 bootstrap메세지를 collect해야한다.
bootstrap 메세지는 domain내에서 hop by hop으로 전달된다. domain의 bootstrap router는
bootstrap message를 시작하는 책임이 있다. bootstrap message는 필요할때, RP정보가
steady state에서 분배될때 dynamic한 BSR election을 수행하는데 사용된다.

이 문맥에서 domain은 PMBR(PIM 멀티캐스트 border router)에 의해 정의된
공통된 경계 내에서 동작하도록 설정되어있는 모든 인접한 PIM router의 집합이다.
PMBR은 internet의 나머지에 각 PIM domain에 연결되어있다.

Router는 Bootstrap Message에서 RP mapping된 적절한 Group을 얻기위해 가능한 RP들의
집합(RP-Set이라 불리는) 을 사용한다. 다음 paragraph는 이 메커니즘을 요약한다.
자세한것은 Section 3.6과 Appendix 6.2.
한 작은 router들의 집합 (도메인 내의)은 candidate BSR과 (비록 간단한 election
메커니즘이기는 하지만) single BSR로 구성된다. 일련의 도메인 내의 라우터들은
또한 candidate RP들(C-RP)로서 설정된다. 전형적으로 이들은 C-BSR로서 설정된 같은
라우터들이 될것이다. Candidate RP들은 정기적으로 Candidate-RP-Advertisement
메세지 (C-RP-Advs)를 도메인의 BSR로 unicast한다. C-RP를 advertising의 주소 뿐아니라
optional group address와 mask length field (candidacy를 advertise하는 group
의 prefix를 가리키는)도 포함한다. BSR은 이러한 Candidate-RP들 (RP-Set)을 포함하고,
대응하는 group prefix에 따라서 Bootstrap message에서 정기적으로 생성한다.
Bootstrap message는 domain을 통해 hop-by-hop으로 분배된다.

Router들은 BSR에의해 생성된 Bootstrap message를 받아서 저장한다. DR이 IGMP로부터
직접적으로 연결된 호스트로부터 (혹은 호스트로부터온 packet)에 대한 IGMP를 indicationㅇㅡㄹ
얻는다. entry가 없는 group에 대해서는 DR은 group을 포함하는 Group-prefix로 부터
C-RP중 하나의 group address를 map하는 hash function을 사용한다. DR은 그다음
Join/Prune message를 RP쪽으로 보낸다. (혹은 Registers로 unicast한다.)

Bootstrap message는 그가운데 포함된 RP의 살아있음을 가리킨다. 만약 RP가 메세지에 포함되어
있으면, 라우터에서 up으로 tag된다. 반면에 RP가 메세지에 있지 않으면 hash algorithm이
동작하는 RP 리스트에서 삭제한다. 대부분의 라우터는 새로운 bootstrap message를
받을때까지 최근에 받은 bootstrap message의 내용을 계속해서 사용한다.

만약 PIM domain이 partition되어있으면, old BSR로부터 분리된 이 area에서 자기들의
BSR을 뽑을것이고, patition내에 도달가능한 RP를 포함하는 RP-Set을 분배할것이다.
partition이 heal되면 다른 election은 자동적으로 발생하고 BSR중의 하나는 Bootstrap
message를 계속 보낼것이다. 파티션에서 기대하는 혹은 healing하는 시간동안,
패킷 전달상에서 약간의 붕괴가 발생할수 있다. 이 시간은 지역의 round-trip time의
순서가 될수도, bootstrap router의 timeout value가 될수도있다.

2.7 DVMRP같은 dense mode protocol과의 상호연관성

2.8 멀태캐스트 data packet 처리
data패킷은 다른 멀티캐스트 스킴과 유사한 방법으로 처리된다. 라우터는 데이터패킷의
처음 소스와 group address에서 longest match를 수행한다. (S,G) entry가 먼저 존재하면
매치한다. 그다음은 (*,G)entry에 매치되고 어느것도 매치되지 않으면 다음처럼 (*,*,RP)에
매칭을 시도한다. router는 G를 hash하여 group G에 대한 RP를 identify하고, 이와관련된
RP address를 가지는 (*,*,RP) entry를 찾는다. 만약 위에 존재하는것이 없으면
apcket은 drop된다. 만약 state가 매치되면, router는 인터페이스를
route entry에 매치된 iif로 도착한 packet이 도착한 패킷의 인터페이스와 비교한다.
만약 iif check가 실패하면 패킷은 drop된다. 그렇지 않으면 packet은 outgoing interface
리스트에 있는 모든 인터페이스로 forward된다.

shared에서 spt로 전환할때 계속적으로 packet을 전달하기위해서 몇가지 action이 필요하다.
특히 (S,G)에 매치되면, incoming packet은 다음에 따라 forward된다.
1. SPT-bit가 set되면
1. incoming if가 (S,G)의 iif와 매칭되면 packet은 (S,G)의 oif로 forward된다.
2. 만약 다르면, packet은 discard된다.
2. SPT-bit가 clear되면
1. iif가 (S,G) iif와 매칭되면, packet은 (S,G)의 oif로 foward된다.
게다가 SPT bit가 이 entry에 set된다. 만약 iif가 (*,G)나 (*,*,RP) entry와
다르면.
2. if iif가 (S,G) iif 매치와 다르면, iif는 (*,G)나 (*,*,RP) 에 대해서 test한다.
만약 iif가 이들중 하나와 같으면 packet은 matching되는 entry에 forward된다.
3. 그렇지 않으면 iif가 G에 대해서 어떤 entry와도 매치되지 않으면 packet은
discard된다.

Data packet은 절대 prune을 발생시키지 않는다. 그러나 data packet은 trigger prume
을 하는 행동을 trigger할수 있다. 예를 들어 Figure 3의 router B가
step 3에서 SP-tree로 전환을 결정하면, (S,G) entry에 SPT-bit를 0으로 생성한다.
S로부터 data패킷이 B의 2번 인터페이스로 들어오면, (*,G)에 대한 iif가 (S,G)와 다르지만
B는 SPT-bt를 1로 설정하고, 이것은 RP쪽으로 prune메세지를 보내도록 trigger한다.

2.9 multi-access network에 대한 작동

이 섹션은 multi-access 네트웍에서 PIM의 동작에 필요한 부가적인 프로토콜 매커니즘을
기술한다. DR(Desinated Router) election, parallel path resolve를 위한
Assert message, multi-access network에서 redundant join을 suppress하기위한
Join/Prune-Suppression-Timer .

DR election:

multi-access network에 multiple router가 연결되어있을때, 그중에 하나를
특정시점에 DR로 동작하도록 뽑아야한다. DR은 Join/Prune과 RP로 Register
메세지를 보내는것을 시작하는 책임을 진다.

간단한 DR 선거 메커니즘은 SM과 traditional IP multicast routing둘다 사용된다.
neighboring router는 서로에게 정기적으로 Hello 메세지를 전송한다. largest
network layer 주소를 가진 sender가 DR역할을 가정한다. 각 multi-access랜에
연결된 각 라우터는 router status의 변화에 적응하기위해 정기적으로 hello를 보낸다.


source로의 Parallel path 혹은 RP-Assert process:

만약 라우터가


2.11 Inter-Domin Multicast PIM-SM