Linux에서 Multicast통신의 IGMP version을 강제로 선택
- 작성자
- 고친과정
2007년 6월 2일 : 처음씀
1.1. 문제해결
Multicast 는 IGMP 를 사용합니다.
최근 Linux kernel 은 IGMP v3 를 지원하게 되어 있습니다.
문제는 아직까지도 Router 들이 IGMP v2 까지만 지원하는 경우가 있습니다.
그러나 Linux kernel 은 똑똑하게도 IGMP v3 를 시도해보고 안되면 일정시간 (약 10초 정도) 경과후 IGMP v3 -> IGMP v2 -> IGMP v1 순으로 버젼을 낮추어가면서 적응하도록 되어 있습니다.
그런데 문제는 부팅후 이 경과시간이 초과되어야 IGMP v2 이하버젼에서 수신이 가능해진다는 점입니다.
Router를 바꿔달라고 이야기 하고 싶습니다.
하지만 고가장비를 그렇게 쉽게 바꿀수는 없는것이죠.
Linux는 그러한것을 sysctl 을 통해서 강제시킬수 있게 되어 있습니다.
만약 IGMP v2 로 즉시 강제하고자 한다면 다음과 같이 할수 있습니다. (기본값은 0으로 순차적응입니다.)
예를 들자면 무조건 모든 Interface 에 대해서 적용하고 싶을때는
설정시점 이후에 올라오는 Interface 에 대해서만 적용하고 싶을때는
"eth0" 만 적용하고 싶을때는
이런식으로 강제할수 있습니다. 이렇게 함으로써 버젼적응시간이 필요없고 바로 해당 버젼으로 시도하게 되어 부팅후 곧바로 Multicast 수신이 가능해지게 됩니다.
최근 Linux kernel 은 IGMP v3 를 지원하게 되어 있습니다.
문제는 아직까지도 Router 들이 IGMP v2 까지만 지원하는 경우가 있습니다.
그러나 Linux kernel 은 똑똑하게도 IGMP v3 를 시도해보고 안되면 일정시간 (약 10초 정도) 경과후 IGMP v3 -> IGMP v2 -> IGMP v1 순으로 버젼을 낮추어가면서 적응하도록 되어 있습니다.
그런데 문제는 부팅후 이 경과시간이 초과되어야 IGMP v2 이하버젼에서 수신이 가능해진다는 점입니다.
Router를 바꿔달라고 이야기 하고 싶습니다.
하지만 고가장비를 그렇게 쉽게 바꿀수는 없는것이죠.
Linux는 그러한것을 sysctl 을 통해서 강제시킬수 있게 되어 있습니다.
만약 IGMP v2 로 즉시 강제하고자 한다면 다음과 같이 할수 있습니다. (기본값은 0으로 순차적응입니다.)
bash# echo 2 > /proc/sys/net/ipv4/conf/<INTERFACE>/force_igmp_version
예를 들자면 무조건 모든 Interface 에 대해서 적용하고 싶을때는
bash# echo 2 > /proc/sys/net/ipv4/conf/all/force_igmp_version
설정시점 이후에 올라오는 Interface 에 대해서만 적용하고 싶을때는
bash# echo 2 > /proc/sys/net/ipv4/conf/default/force_igmp_version
"eth0" 만 적용하고 싶을때는
bash# echo 2 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version
이런식으로 강제할수 있습니다. 이렇게 함으로써 버젼적응시간이 필요없고 바로 해당 버젼으로 시도하게 되어 부팅후 곧바로 Multicast 수신이 가능해지게 됩니다.