2013-11-21 7 views
0

내 Android 앱 중 하나에서 Bonjour 지원을 위해 JmDNS를 사용하고 있습니다. 시작시 NetworkInterface의 각 InetAddress에 대해 하나의 JmDNS 인스턴스를 만듭니다.Bonjour에 어떤 IPv6 주소를 사용해야합니까?

이 지금까지 잘 작동했다
for(InetAddress addr : addresses) { 
    JmDNS jmdns = JmDNS.create(addr, "SomeName"); 
} 

보고, V4와 V6 주소 모두에 대해이 작업을 수행하여, 나는 다른 클라이언트에서 (예를 들어, iOS에서) 제대로 모든 것을 볼 수 있어요 : 그래서 코드를 같이 보입니다.

그러나 IPv6에서는 하나의 네트워크 어댑터를 실제로 여러 개의 v6 주소와 연결할 수 있습니다. 예를 들어, 베타 테스터 중 한 명이 다음 네트워크 설정으로 "버그 보고서"를 보냈습니다. (누출 정보를 막기 위해 숫자를 변경했습니다. 의미가 바뀌지 않기를 바랍니다.)

- ip: /fe80::b4a:8eff:fe91:b1bb%mlan0 
isLoopBack: false 
isLinkLocal: true 
isAnyLocal: false 
isSiteLocal: false 

- ip: /1234:d000:1234:d1:b4a:8eff:fe91:b1bb 
isLoopBack: false 
isLinkLocal: false 
isAnyLocal: false 
isSiteLocal: false 

- ip: /10.0.1.5 
isLoopBack: false 
isLinkLocal: false 
isAnyLocal: false 
isSiteLocal: true 

출력을 보면 두 IPv6 주소가 실제로 매우 비슷하며 하나는 링크 로컬이고 다른 하나는 그렇지 않은 것으로 보입니다. article on Wikipedia을 읽으면 IPv6에서 모든 인터페이스에 실제로 링크 로컬 주소가 있어야한다는 사실을 알게되었습니다.

그러나 실제로 JmDNS 등록에 실제로 어느 것이 사용되는지에 관해 나는 혼란 스럽습니다. [X @ 123456789 종류 : TYPE_SRV 지수 (33), 클래스 : CLASS_IN 지수 1, 이름 : something._tcp

이 들어오는 자신에서 충돌 프로브를 얻었다 : 나는 모두를 등록하면, 내가 말할 로그의 일정한 흐름을 얻을 .노동 조합 지부. ttl : '3599/3600'서버 : 'SomeName.local.:5000']

그래서 어떤 것들을 사용해야합니까? 그리고 그룹에서 등록 할 주소를 결정하기위한 몇 가지 일반적인 규칙이 있습니까?

답변

1

대답은 4 비트입니다.

루프백은 Bonjour에 좋지 않으므로 루프백을 제거하십시오. Bonjour는 Bonjour가 현지화되었으므로 지역 주소를 원하지만 하나 이상의 이더넷이있는 경우 아마 모든 것을 원할 것입니다. 따라서 sitelocal 주소가있는 경우이를 가져오고 그렇지 않으면 linklocal 주소를 사용하는 것이 좋습니다. linklocal이 거기에 있음을 보장합니다.

주소를 얻었 으면 preferred_lft (새 연결의 수명, 기존 연결에 유효한 valid_lft도 있음)에 유의하고 해당 기간 이후에 다시 등록 할 타이머를 설정하십시오.

+0

올바르게 이해한다면이 경우 제 1 및 제 3 주소를 등록하고 제 2 주소는 무시해야한다고 말하고있는 것입니다. 그 맞습니까? – yydl

+0

@yydl 어쨌든 링크 된 장치에 대해서만 이야기하고 있으므로 링크 로컬 IPv6 주소 만 사용하거나 필요로 할 것입니다. –