문의드립니다. Netty에서 Hop 설정이 따로 있는건지요?
L3, L2 단을 거치면 종단에서 멀티캐스트 data를 받지 못하고 있습니다.
....
DatagramChannelFactory factory = new
OioDatagramChannelFactory(Executors.newCachedThreadPool());
ConnectionlessBootstrap bootStrap = new
ConnectionlessBootstrap(factory);
ChannelPipeline pipeLine = bootStrap.getPipeline();
pipeLine.addLast("stringEncoder", new
StringEncoder(CharsetUtil.UTF_8));
pipeLine.addLast("stringDecoder", new
StringDecoder(CharsetUtil.UTF_8));
pipeLine.addLast("handler", new CaptionMulticastHandler());
bootStrap.setOption("multicast", "true");
...
위에서 옵션이나 추가 설정으로 Hop 설정을 할 수 있나요?
아래는 제가 찾아본 방식인데요.
첫째,
DefaultDatagramChannelConfig defaultConfig = new
DefaultDatagramChannelConfig(new DatagramSocket(5001));
defaultConfig.setTimeToLive(6000); //API를 보게 되면 setTimeToLive(int ttl)
ttl 값은 무엇을 의미하나요? 6000이면 어떤 의미인가요?
이 방식이 Hop 설정에 맞다면 defaultConfig 값을 channel에 설정을 따로 하는 방식(?)이 있나요?
둘째,
bootStrap.setOption("timeToLive", "6000");
와 같이 옵션을 주었는데 방식이 맞는건가요?
감사합니다.
TTL이란 홉을 거치면서 줄어드는 값이라고 보시면 되요. 가령 TTL을 8로 설정했다면, 홉을 거치면서 하나씩 줄어들게 되지
요.
즉, 홉을 하나 거치면 TTL은 7이 되고, 그 다음에 또 홉을 거치면 TTL은 6이 되는 식이지요. 6000 이라면 6000개
의 홉을 지나도록 만드는거니, 이론 상, 거의 모든 사이트로 패킷을 보낸다는 의미나 마찬가지입니다. TTL 설정에 관련된 관례적
인 값들이 있는데, 잘은 기억이 안 나네요.
그러므로, 위에서처럼 6000 이라는 큰 값을 주실 필요는 없습니다. 32나 64 정도로만 줘도 될거예요.
bootStrap.setOption("timeToLive", "32");
bootStrap.setOption("timeToLive", "64");
이렇게만 해도 멀티캐스트를 위한 HOP이 설정됩니다.
제 경우, 두 번째 방식을 통해 멀티캐스트를 설정하여 사용하고 있습니다.