NAT를 통한 로컬과 호스팅 서버간의 통신
오픈소스 사물인터넷 프로젝트인 leshan 과 wakaama를 이용해 테스트중 로컬에서는 문제가 없으나
호스팅 서버를 사용해 테스트하자 문제가 발생했습니다
(leshan = 오픈소스 사물인터넷 서버와 이를 조작할수 있는 웹페이지 제공 https://github.com/eclipse/leshan)
(wakaama = 오픈소스 사물인터넷 클라이언트 장비 https://github.com/eclipse/wakaama)
먼저 로컬내에서의 테스트환경입니다.
ubuntu(leshan server) <---> 실제 장비client, ubuntu(client)
그리고 호스팅 후의 테스트 환경입니다
ubuntu(client), 실제 장비 ---------공유기------------ hosting ubuntu(leshan)
모든 연결은 UDP로 연결 됐고 호스팅서버는 vm ubuntu이미지를 사용합니다.
공유기에는 테스트에 사용한 장비외에도 기타 많은 장비들이 붙어있습니다.
local의 ubuntu 는 vm이며 네트워크는 브릿지 모드를 사용했습니다.
위와같은 환경에서 테스트중 로컬에서는 발생하지않던 아래 문제가 호스팅서버를 이용해 테스트하자 나타납니다.
hosting 서버에서 내리는 명령(udp를 통해 장비까지 도달해야 할 명령) 이 수초 뒤에 도착하거나 도착하지 않습니다
빈도가 매우 자주 일어나며 한번 명령이 도착하지 않는 현상이 나타나면 수분~15분 정도 지속 됩니다.
client는 server에게 지속적으로 자신이 살아있음을 의미하는 update신호를 보내야 하는데(보내지 않으면 sever는 client목록에서 삭제)
위와같이 서버가 client에게 명령을 전달하지 못하는 현상 와중에도 update신호는 잘 받고 처리합니다.(client의 last updatetime이 갱신됨)
물론 빠른시간내에 정상적으로 작동할 때도 있습니다.
udp 쏠때는 udp+ip+mac 헤더 포함해서
udp 쏠때는 udp+ip+mac 헤더 포함해서 mtu 안 넘기는 크기로 나눠 쏘는게 좋습니다.
mtu 넘는길이로 쏘면 ip, mac 레벨 내려가면서 분할되서 날라가는데 분할된 패킷 여러개중 하나만 망가져도 전체가 없는것처럼 됩니다. 언제나 전송 한다는 보장도 없고
update같은 단순 신호는 얼마 안 필요하니 그닥 문제가 되지는 않겠지만.
Written By the Black Knight of Destruction
댓글 달기