Collection은 센서 네트워크의 각 노드에서 발생한 데이터들을 PC 호스트 등의 베이스 스테이션으로 전달하는 기능을 수행한다. 이 경우 일반적으로 베이스 스테이션에 연결된 싱크 노드를 루트로 갖는 Collection Tree를 구성하며, 하나의 네트워크에서 이와 같은 트리는 여러 개 생성될 수 있다.
TinyOS에서는 트리를 구성하기 위해 CTP(Collection Tree Protocol)을 사용한다. 네트워크에서 임의의 노드가 자신이 루트라고 알리면 네트워크의 노드들은 루트 노드를 중심으로 라우팅 트리들을 구성한다. 이 때 각 노드들은 루트 노드로 향하는 경로를 설정하기 위해 라우팅 기울기(routing gradient)를 계산한다. 즉, 각 노드는 싱크 노드와의 근접성을 측정하고, 이를 바탕으로 싱크 노드에 최대한 근접하는 링크를 선택하며 점진적으로 경로를 설정해 간다.
CTP는 라우팅 기울기로 ETX(Expected transmissions) 값을 사용한다. 루트 노드의 ETX 값은 0으로 정의하며, 어떤 노드의 ETX 값은 자신의 부모 노드가 갖는 ETX 값과 해당 노드에서 부모 노드로의 링크가 갖는 ETX 값을 더한 값을 갖는다. 이와 같은 상황에서 임의의 노드는 루트 노드로의 경로 설정 시에 가장 낮은 ETX 값을 갖는 링크를 선택하고, 이 링크에 연결된 노드를 부모 노드로 기록하며, 이 과정이 루트 노드를 시작으로 전체 네트워크에 이르기까지 반복된다.
위 그림은 CTP를 구성하는 컴포넌트들을 나타내고 있으며, 이 가운데 CtpP 컴포넌트가 핵심 기능을 제공한다. 특히 CtpP는 한 홉(Hop) 간 ETX 값을 측정하기 위해 LinkEstimatorP 컴포넌트를 포함하며, 이 값을 이용해 다음 라우팅 링크를 결정하기 위해 CtpRoutingEngineP 컴포넌트를 사용한다. 마지막으로 라우팅 링크로의 패킷 전송을 위해 CtpForwardingEngineP 컴포넌트가 사용된다. 보다 상세한 수준의 컴포넌트는 TinyOS에서 제공하는 docs 유틸리티를 활용하여 컴포넌트들의 연결 구조를 파악할 수 있다.
이와 같은 구성으로 CTP가 구현되어 있으며 위에서 설명한 동작방식을 통해 센서 네트워크 내의 임의의 노드가 데이터를 생성하면, 자신의 부모 노드를 향해 데이터를 전달(forwarding)한다. 이를 통해 루트는 자신의 하위에 있는 모든 노드로부터 발생한 데이터를 수집하는 역할을 담당한다.
네트워크가 여러 루트를 가졌을 때, Tree 형태의 forest를 구성하게 된다.
하지만 단순한 Colletcion 프로토콜은 여러 문제에 직면한다. 가령 전달 경로에 루프(loop)가 생기거나, 데이터의 중복 전송 문제 등이 발생할 수 있다. 이 때문에 일반적으로 분산된 트리를 구성하는 알고리즘에 제한을 둔다. 다음은 이와 같은 알고리즘이 해결해야 할 과제들이다.
▪Loop detection
자손 중 하나를 부모 노드로 선택하는 상황 검출
▪Duplicate suppression
네트워크에서 패킷의 중복 전송 원인이 되는 ACK의 손실을 탐지
▪Link estimation
한 홉간의 이웃과의 Link quality를 측정
▪Self-interference
다음 패킷의 경로를 이전 패킷들과 간섭이 생기는 경로로 라우팅하는 것을 방지
댓글 없음:
댓글 쓰기