분류없음2014.09.29 21:26

 


오랜만에 포스팅하는 Nexus : NX-OS 시리즈입니다.

 

예전에 포스팅했던, OTV의 Data Plane의 Unicast/Broadcast 부분에 이어서, Multcast에 대한 Data Plane입니다.

휴가 전에 대부분의 내용을 쓰고, 휴가 직전에 포스팅하지 못해서 마지막 부분만 휴가 이후에 올리게 되네요..

무척 오랫만에 올리는 Nexus 정리 포스팅입니다.  ^^;


 

OTV Data Plane – Multicast Traffic

• 특정한 경우에 Remote Site간의 Layer 2 Multicast 통신이 필요한 경우가 있을 수 있다.

• OTV Site 간의 Layer 2 Multicast의 경우에 Multicast가 지원환경과 지원불가 환경으로 나누어서 고려되어야 한다.

 


 

 

OTV Data Plane – Multicast Traffic (Multicast 지원 환경)

• Layer 2 Multicast 트래픽은 OTV overlay를 통해서  전송되며,  Suboptimal한 Head-end 복제를 방지하기 위해

   Multicast가 가능한 Transport Infrastructure가 요구된다.

•Multicast가 가능한 Transport Infrastructure를 통해 Layer 2 Multicast를 전송하는 데 하나의 SSM

  (Source Specific Multicast) Group를 이용한다.

   이 Group은 Site간의 OTV Control Protocol을 전송하기 위한 ASM group과는 독립적으로 사용된다

 

 

 

 Multicast Source 최초 활성화 시

  1. West Side에서 활성화된 Multicast Source가 Group Gs로 Traffic을 전송한다.


   2. Local의 OTV Edge Device는 첫 번째 Multicast Frame을 수신하고, Group Gs와 Transport  Infrastructure에서 사용될 특정
       SSM Gd Group간의 Mapping을 생성한다.


       Layer 2 Multicast Data Stream을 전송하는 데 사용되는 SSM Group의 범위는 Overlay Interface의 설정에 들어가게 된다.

       Ex>  NX-OS(config-if-overlay)# otv data-group 232.1.1.0/28

 

  3. OTV Control Protocol은 모든 Remote OTV Edge Device들의 Gs와 Gd 간의 Mapping을 전달하기 위해 사용된다.
      Mapping 정보는 Multicast Source가 속한 VLAN과 Mapping이 만들어진 OTV Edge Device의 IP address간의 정보로 구성된다.

                                 

 

 

 

 Multicast Source와 동일한 VLAN에 Deploy된 Receiver가 Group Gs에 Join하는 과정

  1.East Side Client가 GS group에 Join 할 수 있도록 IGMP Report를 전송

 

  2.OTV edge device가 IGMP Message를 snoop하고, VLAN A에 속한 Gs Group의 Active receiver이 있음을 확인한다.


  3.OTV Device는 OTV Control Protocol Message를 모든 Remote Edge Device로 전송한다.


  4.West Side의 Remote OTV Edge Device는 GM-Update를 수신하여, OTV Overlay를 통해서 전달될 group Gs에 대한
     OIL(Outgoing Interface List) 를 업데이트 한다.

 

  5.East Side의 OTV Edge Device는 이전에 IP A에 의해서 확인한 West side의 OTV Edge Device로부터 받은 Mapping정보를 찾는다.
      East Edge Device는  (IP A, Gd) SSM Group에 Join하기 위한 IGMPv3 report를 전송한다.

     이를 통해 Transport Infrastructure를 통해서 Multicast Gs를 전송하는데 사용될 수 있는 SSM tree(group Gd)를 만든다.

 

 

 

 

 

 OTV를 통한 Multicast 전송 과정

  1.OTV Edge Device가 Gs Stream를 수신하고, Overlay를 통하여 Gs Group을 수신하고자 하는 Receiver에게 전송하기 위해

    OIL를 확인 후에, Interface를 결정한다.

 

2. Edge device에서 Original Multicast frame을 Encapsulation 한다.  Outer IP header의 Source는 자신의 IP A로 설정되고,

     Destination은 Multicast data를 전송하기 위해 할당된 Gd SSM Group으로 설정된다.

 

3. Multicast Stream Gd는 기존의 Transport Infrastructure를 통해 만들어진 SSM Tree를 통해서, Gs Stream을 수신하고자 하는

     Receiver들이 있는 OTV Remote Site로 전송된다.

 

4. Remote OTV edge Deivce들은 해당 Packet을 수신한다.

 

5. Packet은 De-capsulation 되어서, 각 Site 내의 Receiver들에게 전송된다.

 

 

 

 



OTV Data Plane – Multicast Traffic (Unicast only Transport Infrastructure 환경)

  • Layer 2 Multicast 트래픽은 OTV overlay를 통해서  전송되며,  Suboptimal한 Head-end 복제를 방지하기 위해

      

Unicast Core망을 통한 Multicast Group Gs에 Receiver Join 시

  1. East Site에 있는 Client가 Gs group에 Join하기 위해 IGMP report를 보낸다.

 

  2. OTV Edge Device는 IGMP Message를 확인하여, VLAN 100에서 group Gs에 Active Receiver가 있다는 것을 알게 된다.

 

  3. OTV Edge Device는 OTV control protocol message(GM-Update)를  각 Unicast List에 속해 있는 remote Edge Device로

     전송하여 2번에서 확인된 정보를 전달한다.

 

   4. Remote Edge Device들은 GM-Update Message를 수신하게  되고,  multicast group Gs1의  receiver가  IP B Address로

    확인되는 OTV Device를 통해서 연결되어 있다는 정보와 "Data Group Mapping Table"을 함께 Update 한다.

 

 

 

 

 

 

 Unicast Core망을 통한 Layer 2 Multicast Stream Gs 전송 시

  1. Gs1을 목적지로 하는 Multicast TrafficWest Site의 내부에서 만들어지게 되고, OTV Edge Device“Data Group Mapping Table’에서

      OIFLookup한다. 아래 예시의 ‘Data Group Mapping Table’에서는 해당 Multicast Traffic EastSouthOverlay를 연결된 것을 확인한다.

  2. West SiteOTV Edge Devicehead-end replication을 통해 원래  Layer 2 Multicast Frame을 캡슐화한 2개의 Unicast IP Packet를 생성한다.

      이 때, Outer IP header IPWest SiteIP A로 설정이 되고, Destination IPSouth/EastIPIPB/C로 설정된다.

  3.  Unicast FrameRouting을 통해 Transport Infrastructure를 거쳐서 Remote OTV Device로 전송되게 되어, De-capsulation이 되어

       SiteReceiver들에게 전송된다.  이 때, North Site에는 해당 Multicast TrafficReceiver가 없기 때문에 Data Group Mapping TableNorth Site가 존재하지 않고,  따라서 Frame이 전송되지 않는다.

 

 

 

 

Posted by 네떡지기
프로그래밍/Python2014.04.23 21:39

~위한 파이썬.. 이라는 Title을 가져보려고 하는데.. 잘 될지 모르겠네요.

타이틀을 어찌할지도.. ^^;

오늘부터... 가능하면 이 주제에 대해서도 1주일에 하나씩은 하려고 합니다.

기존에 1회성(?) 스터디 때 사용한 자료가 있어서.. 이번 주까지는 1번 더 올릴 수 있을 듯 싶고..

다음 주부터는.. 공부하고 만들어야 할 듯요.. ^^;

자꾸 더디게 움직이는 듯하여... 스스로를 채찍질하기 위한.. 일종의 프로젝트성. ^^;


 

 

 Indentation

Python에서 Code Block(Scope)을 구분하는 방법

동일한 Code Block 내에서는 동일한 방법(Space, Tab)으로 구분해야 함.

         가독성을 좋게 하기 위해 전체적으로 동일한 방법으로 작성

하위 레벨의 Code Block이 나오기 바로 전에는 ‘ : ’ (콜론)을 사용.

Indent를 지키지 않으면 오류 발생

 

 

 

 

변수

 

별도의 변수 Type이 존재하지 않는다

변수명으로 문자 / 숫자 / ‘_’ 사용가능하며 대소문자를 구분

지정한 값에 따라서 알맞은 변수 Type으로 인식을 하게 된다.

객체 단위로 지정이 되며, 별도의 초기화 없이 바로 사용이 가능하다.

동일 객체인지 id(변수명) 명령을 사용하여 확인할 수 있다. id는 일종의 메모리 참조 값이다.

 

수치형 자료

숫자를 나타내는 자료형

int, long, float, complex 등이 있다

        ※ Python 3.0에서는 long형은 없어지고 int형으로 처리

선언 시에, 사용자가 입력한 값에 따라서 적정한 수치형  Type으로 선언된다

 

 문자열

 

 문자열은 기본적으로 " " 혹은 ' ' 로 묶어주게 된다.

러 줄의 문자열은 ''' (홑따음표) 3개를 앞 뒤로 묶어준다.   

  일반 " " 로 구성된 문자열 내부에 ', ''을 표기하기 위해서는 \를 붙여서 쓴다.  이를 escaping 이라고 부른다.

 문자열 내부에는 다른 변수의 값을 포함하여 출력할 수 있는 데,  변수가 포함될 위치에 %s를 붙인다

    이후, print 시에 %를 쓰고 뒤에 해당 %s에 들어갈 변수명을 입력한다. 이를 Placeholder라고 한다.

    만약 2개 이상의 변수를 포함하고 싶으면, 출력 시 % 뒤에 변수명을 기입할 때 ( )로 묶어준다.

 문자열을 반복하여 입력하거나 출력할 수 있는 데, 단순히 반복할 문자열 뒤에 *와 반복될 수를

     입력하면 된다. 마치 문자열을 필요한 만큼 곱해서 사용하는 것과 같다.

 

 리스트

다수의 객체를 하나의 객체로 관리하는 것.

대괄호 [ ]로 묶어주고, 대괄호 내에서는 ',' 로 각 객체를 구분하게 된다.

대괄호 안의 항목들은 각각의 index position을 가지게 되고, index0부터 시작한다.

index를 사용하여서 필요한 항목을 사용할 수 있으며, 다른 항목으로 변경도 가능하다.

대괄호 안의 index 사용 시에 ':'을 사용하면, index의 구간을 지정할 수도 있다.

     (ex : My_list[3:7]    - My_list3Index부터 6Index까지의 항목을 지정:마지막 전까지 포함)

 

 

 

리스트에 항목을 추가하려고 할 때에는 append / insert / extend 함수를 사용할 수 있다

리스트의 항목을 삭제 시에는 del List_Variable[Index] 으로 삭제가 가능하다.

두 개의 List의 항목을 합치기 위해서는 List 객체를 + 연산을 이용해서 그냥 더해주면 된다.

     마찬가지로 동일한 내용의 List를 반복하려면 * 연산자를 사용하면 된다.

 

 

 세트

 리스트와 유사하게 다른 객체들의 집합으로 이루어진다.

{ }로 묶어서 정의
교집합과 합집합을 구하는 별도의 메서드가 제공된다.

       교집합 : union  /   합집합 : intersection

차집합 / 합집합 / 교집합을 구하는 연산자가 제공된다.

       교집합 : &  /   합집합 : |  /  차집합 : -

 

 튜플

다수의 객체를 하나의 객체로 관리하는 것은 리스트와 동일하지만

   리스트는 초기 생성 후에 수정이 가능하지만, 튜플을 수정을 할 수 없다.

읽기 전용으로 사용되기 때문에 제공하는 메서드가 적지만 속도가 빠르다.  

괄호 ( )로 묶어주고, 괄호 안에서 ','로 각 객체를 구분하게 된다.

 

 

 

 Dictionary /사전 /

다수의 객체를 하나의 객체로 관리하는 것은 리스트와 동일하지만,

   다수의 객체를 하나의 객체로 관리하는 점에서 리스트나 튜플과 동일하지만,

    각 객체의 값에는 특정한 keyMapping되어 있다.

중괄호 { }로 묶어주고, 중괄호 내에서는 ','로 각 객체를 구분하며,

    하나의 객체는 ':'keyValueMapping 시킨다.     [ key : Value ]

    (ex : Mobile_Phone = { 'Samsung' : 'Galaxy' , 'Apple' : 'I-Phone', 'LG' : 'Cyon' }

dict(key={ ,key=} ) 으로 선언할 수도 있다.

맵에 있는 객체를 'key'를 이용해서 가져오거나, 수정하거나, 삭제할 수 있다.

      그러나 List 처럼 + / * 를 통한 연산은 불가능 하다.

 

 

 

 

연산자

In

리스트, 세트, 튜플에서 사용되며, 해당 자료형 내부에 특정한 값이 존재하는지 확인하여 True/FalseReturn.

 

 

Posted by 네떡지기

티스토리 툴바