Internet Group Management Protocol (IGMP)
인터넷 전송 방식 인터넷 전송 방식 유니캐스팅(Unicasting): 하나의 송신자가 다른 하나의 수신자로 데이터를 전송하는 방식. 점대점 통신(one-to-one) 브로드 캐스팅(Broadcasting): 하나의 송신자가 같은 서브네트웍 상의 모든 수신자에게 데이터를 전송하는 방식. 멀티캐스팅(Multicasting): 동일한 메시지를 하나이상의 수신자에게 동시에 보내는 방식(one-to-many). VOD, 인터넷 화상 회의 등의 응용에서 사용.
IGMP IGMP : Internet Group Management Protocol 멀티캐스팅을 지원하는 호스트와 라우터에 의해 사용 IP 계층의 일부 IGMP 메시지 : IP 데이터그램으로 전송 호스트들 , 이웃 라우터들 간에 운용되는 프로토콜로 멀티캐스트 그룹 Membership 유지를 위해 사용.
IP 계층 IGMP는 OSI 참조 모델에서 Network layer 의 일부
Encapsulation 고정 길이 메시지 IP 데이터그램의 프로토콜 필드값 = 2 IP datagram IGMP 메시지는 프로토콜 필드값 2를 갖는 ip데이터그램으로 지정 필드2 => IGMP 메시지 고정 길이 메시지 IP 데이터그램의 프로토콜 필드값 = 2
IGMP Message IGMP 메시지의 필드 형식 Ver - 프로토콜의 현재 버전. 8바이트 Ver - 프로토콜의 현재 버전. Type - 1 : 멀티캐스트 라우터가 보낸 Query. - 2 : 호스트가 보낸 Report. Checksum - 8바이트 메시지에 대해 계산. Group address - 클래스 D IP 주소. - Query 과정에서 그룹 주소는 0으로 설정. - Report 과정에서 그룹 주소는 보고되는 그룹 주소. Unused - IGMPv2에서 사용하게 된다. v1에서는 0값으로 무시하게 된다 Max Resp Time -> unused가 v2에서 바뀐부분
IGMP Report와 Query IGMP 메시지 유형 Report : 호스트에서 라우터로 전송.
IGMP Report와 Query 멀티캐스트 라우터 호스트 IGMP Report, TTL=1, 목적지 IP 주소 = 그룹 주소 발신지 IP 주소 = 호스트의 IP 주소 IGMP Query, TTL=1, IGMP 그룹 주소 = 0 목적지 IP 주소 = 224.0.0.1 발신지 IP 주소 = 라우터의 IP 주소 메시지가 IP 데이터그램에 캡슐화 될 때 TTL 값은 1이 되어야 한다. 이것은 IGMP의 범위가 LAN 이기 때문. 호스트에서 멀티캐스트라우터에게 전송하는 igmp report는 멀티캐스트 주소를 목적지 주소로 하여~~~~로 멀티캐스트 됩니다 반대의 경우인 igmp query 는 앞에서 말한것처럼 그룹주소를 0으로 채우고 목적지주소를 224.0.0.l1 로 채우고 멀티캐스트 됩니다. 224.0.0.1은 모든 호스트 그룹 어드레스라고 불리우며 물리네트워크 상의 멀티캐스트가 가능한 모든 호스트와 라우터를 의미합니다.
ALL-Hosts Group 224.0.0.1 (address) 물리 네트워크상의 멀티캐스트가 가능한 모든 호스트와 라우터 각 호스트는 인터페이스가 초기화될 때, 모든 호스트 그룹을 멀티캐스트가 가능한 인터페이스상의 멀티캐스트 그룹에 참여시킴
TTL(Time-To-Live) TTL 0 : 같은 호스트로 제한 TTL 1 : 동일한 서브넷으로 제한 (default) TTL k : 멀티캐스트 라우터에 의해 전송 확장 링 탐색(expanding ring search) - TTL을 1씩 증가 (1,2,3, …) 특별한 범위의 주소 224.0.0.0~224.0.0.255 : 하나의 홉보다 먼 멀티캐스트가 필요치 않는 응용에 할당 첫번쨰 멀티캐스트 데이터그램은 TTL1로 전송 응답이 없으면 다음에는 2로 설정해서 시도… 3.4.5… 이러한 방법으로 홉의 수를 이용하여 가장 가까운 서버의 위치를 알 수 있다. 이들 주소중 하나의 주소를 갖는 데이터그램은 ttl에 관계없이 목적지로 전송되지 않는다 TTL은…
멀티캐스트 그룹 참여 멀티캐스트의 기본 - 호스트의 특정 인터페이스의 멀티캐스트 그룹에 프로세스가 참여 특정 인터페이스에서 멀티캐스트 구성원(프로세스) 구성은 동적 프로세스가 특정 인터페이스의 멀티캐스트 그룹에 참여 or 떠남 - 멀티캐스팅을 지원하는 호스트의 인터페이스 기능 요구 호스트는 “인터페이스”와 “그룹 주소”에 의해 그룹을 정의 - 호스트 -> 자신의 프로세스가 속한 모든 그룹의 테이블 그룹에 속한 프로세스 수의 레퍼런스 카운트 호스트는 적어도 하나 이상의 프로세스가 속하는 모든 그룹의 테이블과 그룹에 속한 프로세스 수의 레퍼런스 카운트를 보유해야 한다.
IGMP의 4가지 규칙 멤버쉽 연속(Membership continuation) 그룹 탈퇴(Leaving the group) 2. 호스트는 프로세스가 그룹을 떠날 때와 마지막 프로세스가 그룹을 때날 때, 보고를 보내지 않는다. 3. 멀티캐스트 라우터는 정기적으로 IGMP 조회를 보낸다.--------. 라우터는 그룹에 속하는 프로세스가 존재하는 인터페이스에만 데이터그램 전송 4. 호스트는 자신의 프로세스가 속하는 각 그룹에 대해 IGMP 보고를 보냄으로써 IGMP 조회에 응답한다. 그룹 가입(Joining the group) 새 그룹에 가입하고자 하는 프로세스는 호스트에 요청을 보낸다. 호스트는 프로세스의 이름과 요청된 그룹의 이름을 자신의 리스트에 올린다. 호스트는 이것이 이 그룹에 대한 첫 번째 요청일 때만 멀티캐스트 라우터에 IGMP 보고를 보낸다. 그룹 멤버쉽 모니터링(Monitoring the group) 멀티캐스트 라우터는 LAN 내의 호스트들이 그룹 멤버쉽을 계속 유지하기를 원하는지 감시할 책임이 있다. 라우터는 주기적으로 LAN 상의 모든 시스템에 멀티캐스트 주소 224.0.0.1로 질의 메시지를 보낸다. 라우터는 각 그룹 당 한 개의 응답이 오기를 기대한다. 멤버쉽 연속(Membership continuation) 적어도 한 개의 프로세스가 멤버쉽을 계속 유지하기를 원하는 그룹에 대해 각 그룹 당 한 개의 보고를 보내야 한다. 그룹 탈퇴(Leaving the group) 호스트가 질의를 받고 그 그룹에 관심 있는 프로세스가 더 없음을 알게 되면 이 그룹에 대해서는 응답 메시지를 보내지 않는다. 특정 그룹에 대해 보고를 보내는 호스트가 LAN 상에 하나도 없다면 타임아웃 이후 이 그룹은 라우터의 멀티캐스트 주소 리스트에서 삭제된다.
IP 주소를 물리 주소로 변환 물리 네트워크가 멀티 캐스팅을 지원하는 경우. 물리 네트워크가 멀티 캐스팅을 지원하는 경우 대부분의 LAN은 물리 멀티캐스트 주소를 지원한다. 이더넷의 물리주소(MAC 주소)는 6 옥텟(48비트) 길이이다. 이더넷 주소의 처음 25 비트는 0000 0001 0000 0000 0101 1110 0이고, TCP/IP 프로토콜을 위한 물리 멀티캐스트 주소임을 정의한다. 나머지 23비트는 그룹을 정의하기 위하여 사용될 수 있다. IP 멀티캐스트 주소를 이더넷 주소로 변화하기 위하여 멀티캐스트 라우터는 D클래스 IP주소에서 하위 23비트를 추출하여 이더넷의 멀티캐스트 물리 주소에 삽입한다. Internet assigned numbers authority 에 의해 잘 알려진 주소로 할당되어진 00:00:5e라는 이더넷 주소 블록을 가지고 있다.
IP 주소를 물리 주소로 변환 물리 멀티캐스트를 지원하지 않는 경우 물리 멀티캐스트를 지원하지 않는 경우. tunneling 대부분의 WAN은 물리 멀티캐스트를 지원하지 않는다. 이러한 네트워크를 통하여 멀티캐스트 패킷을 전달하려면 터널링(tunneling) 과정을 사용해야 한다. 터널링에서 멀티캐스트 패킷은 유니캐스트 패킷에 캡슐화 되어 전달되고 네트워크의 다른 쪽 끝에서 역 캡슐화 된 뒤 다시 멀티캐스트 패킷으로 나타난다
Operation of IGMP in a Single Network LAN에 연결된 멀티캐스트 라우터는 적어도 한 개의 멤버가 있는 그룹의 멀티캐스트 주소 목록을 가지고 있다. 라우터가 이 리스트 중 하나와 부합되는 목적지 주소를 갖는 패킷을 받으면 이 IP멀티 캐스트 주소를 물리적인 주소로 변환 한다.
IGMP 구조 그룹테이블 타이머의 집합 그룹 가입 모듈 그룹 탈퇴 모듈 입력모듈 출력모듈
IGMP 구조 상태(State) FREE DELAYING IDLE 인터페이스 번호(Interface No.) 그룹주소(Group Address) 참조계수(Reference Count) 그룹테이블 그룹테이블(Group Table) 내의 엔트리들은 멀티캐스트 주소에 관한 정보를 지님. 이 멀티캐스트 주소는 적어도 하나의 프로세스를 멤버로 가지고 있다. 테이블은 상태(state), 인터페이스 번호(interface number), 그룹 주소(group address), 참조계수(reference count)등의 네 필드로 구성. 상태(State) : 엔트리의 상태를 나타냄. FREE – 새로운 엔트리로 사용가능. DELAYING – 타이머가 완료될 때 이 엔트리를 위한 보고가 보내져야 한다는 것. IDLE – 이 엔트리를 위한 타이머가 없다는 것. 인터페이스 번호(Interface No.) : 멀티캐스트 패킷이 송수신되는 인터페이스를 정의. 그룹주소(Group Address) : 그룹을 정의하는 멀티캐스트 주소. 참조계수(Reference Count) : 이 그룹에 아직 관심이 있는 프로세스의 수이다. 이 값이 0이 되면 엔트리는 테이블로부터 삭제되고 상태는 FREE로 변화.
IGMP 구조 타이머 DELAYING 상태에 있는 각 엔트리는 보고를 전송하는 것을 관장하는 타이머를 가짐. 쓸모없는 트래픽을 줄이기 위해 각 타이머는 임의로 선택된 만료시간을 가짐. 만료 시간이 다 되면 신호가 출력 모듈에 전달되고 출력 모듈은 보고 패킷을 전송. 타이머 DELAYING 상태의 각 엔트리는 Report를 전송하는 것을 관장하는 타이머를 가짐.
IGMP 구조 그룹 가입 모듈 그룹에 가입하고자 하는 프로세스는 이 모듈을 시작. 만약 발견이 되면 이 그룹에 프로세스가 하나 더 가입했다는 사실을 보이기 위해 참조 계수를 하나 증가. 발견되지 않으면 모듈은 새로운 엔트리를 하나 생성하고 참조 계수를 1로 설정. 두 경우 모두 모듈은 엔트리의 상태를 DELAYING로 바꾸고 타이머를 시작하여 타이머가 완료되면 이 엔트리를 위한 보고를 전송. 그룹 가입 모듈 그룹에 가입하고자 하는 프로세스는 이 모듈을 시작. 모듈은 그룹 테이블을 탐색하여 같은 멀티캐스트 주소를 가진 엔트리를 검색.
IGMP 구조 그룹 탈퇴 모듈 그룹을 탈퇴하고자 하는 프로세스는 이 모듈을 호출. 찾으면 모듈은 참조 계수를 감소시킨다. 계수가 0이면 상태를 FREE로 갱신하고 대응하는 타이머를 취소한다. 그룹 탈퇴 모듈 그룹을 탈퇴하고자 하는 프로세스는 이 모듈을 호출. 그룹 테이블을 탐색하여 같은 멀티캐스트 주소를 가진 엔트리를 검색.
IGMP 구조 입력 모듈 입력 모듈은 IGMP 메시지에 의해 시작. 만약 메시지가 Query이면 모듈은 테이블 내에서 IDLE 상태의 엔트리의 타이머를 시작하고 이 엔트리들의 상태를 DELAYING으로 변경. 모듈은 0과 최대 지연 시간 사이의 난수를 발생하고 이 난수를 완료 시간으로 가지는 타이머를 생성. Report이면 모듈은 테이블에 상응하는 엔트리가 있는지 검사. 엔트리가 DELAYING이면, 네트워크 상의 다른 호스트가 이 엔트리를 위한 Report 를 이미 하였다는 것. 모듈은 타이머를 취소하고 상태를 IDLE로 변경.
IGMP 구조 출력모듈 출력 모듈은 만료 시간이 다 된 타이머에 의해 호출. 대응하는 엔트리를 찾아 상태가 DELAYING이면 Report를 생성하여 송신한 후 상태를 IDLE로 변경.
IGMP 상태도 Non-Member Delaying Member Idle Member Leave group Join group (send report, start timer) leave group (stop timer) query received (start timer) report received timer expired (send report)
IGMP v2 Type 0x11수정 Type 0x17추가 Type 0x16추가 - General query - 멀티캐스트데이터를 받기를 원하는 클라이언트가 있는지 학습 - Group-Specific Query – 특정한 멀티캐스팅 그룹 어드레스로 전송되는 데이터를 계속 받기를 원하는 호스트가 있는지 학습 Type 0x17추가 - Leave message - 전체 라우터 그룹(224.0.0.2)로 전송 Type 0x16추가 - IGMPv2를 위한 report v1의 unused필드 => Max Response Time필드 - 보고해야 할 한계 시간을 설정 해지를 빠르게 수행하기 위함 - 기본값 10초 그룹지정 query가 가능해짐. V1의 ver과 type가 하나의 필드로 합쳐졌음.4+4 Type 1 = Membership Query Leave message 추가 - 전체 라우터 그룹(224.0.0.2)로 전송 type 7 라우터는 Leave message 를 받으면 그룹을 지정하여 남은 그룹에게 질의 (v1에서는 0이었지만 v2에서는 그룹지정이 가능하다 ) 메세지 타입 0x6 추가, Version 2 Membership Report로써 호스트가 v2라우터를 발견했을때 전송 (호스트는 Max Resp Time가 0인 것을 보고 v1라우터라는 것을 알아냄) 라우터는 Leave message 를 받으면 Specific Query 보내고 응답이 없으면 해당 그룹에서 삭제를 하게된다. Specific Query의 주기는 기존 General Query 의 전송 주기보다 짧다. V1의 unused필드는 Max Resp Time필드로 Query에서만 의미 있음. 보고해야 할 한계 시간을 설정 해지를 빠르게 수행하기위함 기본값 10초
IGMP ver3 IGMPv2 IGMPv3 호스트는 멀티 그룹으로 전송하는 모든 메시지를 수신. Report message는 하나의 멀티캐스트 그룹만을 포함. 호스트는 그룹이나 송신자의 질의에 응답. IGMPv3 호스트는 특정 송신자의 패킷을 수신. Report message는 멀티캐스트 그룹을 여러개 포함. 호스트는 특정 그룹이나 특정 송신자의 질의에 응답.
IGMP Snooping 라우터와 호스트 사이에 있는 스위치가 IGMP Message를 들을 수 있게 하는 기능. Report 주어진 multicast group에 대하여 multicast group에 host의 port 번호를 더하는 역할을 수행. Leave host의 port를 제거. 한마디로 switch가 host와 router간의 대화내용을 듣는 것이다. 그 결과 switch는 multicast traffic을 필요로 하는 client에게만 전달할 것이다. - 이 대화 내용은 mutlicast network에 보내진 IGMP packet들이며 구성은 Layer3 packet들로 되어져 있다. - Switch안에서 IGMP snooping이 enable되면 host와 switch 혹은 multicast router간의 IGMP packet을 분석한다. -. - 이기능이 disable 라면 Mutlicast를 이해 못하는 switch는 broadcast multicast traffic을 LAN상의 모든 포트(IP 멀티케스트 트래픽을 브로드케스트 트래픽과 같은 방법으로 취급합)에 뿌리지만, enable switch는 해당 traffic을 관심있어 하는 client에게만 전달 할 것이다. - 그림의 상황에서 snooping가 enable이면 지나친 트래픽을 발생시키며 스위치에 연결된 호스트의 성능을 저하시킵니다. 각 호스트에 수신된 모든 프레임은 호스트가 처리해야 하는 인터럽트를 발생시킵니다. 네트웍이 더욱 커질수록 불필요한(필요이상의) 멀티케스트 트래픽 영향은 더욱 커집니다. 다이어그램과 같이 스위치에 IGMP snooping을 선택하므로서, 그룹 수신기(리시버)인 호스트들은 멀티케스트 트래픽을 수신하게 됩니다. 스위치가 라우터로 부터 멀티 클라이언트들의 존재를 배울 수 있게 하는 프로토콜 snooping보다 강력하지만 cisco전용이다.