2011-02-16 4 views
0

정보 견고성을 향상시키는 무선 ad hoc 네트워크에 참여하는 모바일 장치에 응용 프로그램을 배포하려고합니다. 기본 작업은 매우 간단합니다 : 노드 S (소스)에서 노드 D (대상)로 데이터를 전송하십시오 (더 큰 크기 일 수 있음). 여기 내 샘플 토폴로지 : 단순히 TCP를 사용하여TCP와 비슷하게 애드혹 네트워크에서 응용 프로그램 계층 오버레이가 발생합니다.

--- N1 --- 
/ |  \ 
/ |  \ 
S ----- N2 ----- N4 ----- D 
    \  | /
    \ | /
    --- N3 --- 

, 나는 괜찮아 D.에 N2와 N4 이상 S에서 신뢰할 수있는 통신 채널을 설정할 수 있습니다.

내 문제는 다음과 같습니다. N1과 N3이 S, N2 및 N4에서 보낸 메시지를 수신 할 수 있기를 원하지만 안정적으로받을 필요가 없습니다. 패킷의 흐름이라고 생각할 수 있습니다. 예를 들어 S는 패킷을 D에 보내려고하지만이 패킷은 N [1-4]에도 유용 할 수 있으므로 저장해야합니다.

모든 노드에서 무차별 WiFi 모드를 사용하면 물론 가능하지만 잔인합니다. 모든 노드에서 모든 패킷을 구문 분석하여 저장할 수 있는지 확인해야하기 때문입니다.

간단한 해결책은 UDP 패킷을 전송하는 것이다 :

  1. S는 시간 (time-to-live) N2 (1)의 추가적인 정보와 UDP 브로드 캐스트 패킷을 전송한다.
  2. N1, N2 및 N3은 패킷을 수신하고 저장할 수 있지만 N2 만이 정보를 N4에 다시 보냅니다.
  3. 이 동작은 D가 패키지를 가져올 때까지 반복됩니다.

그러나 그렇다면 패킷 순서, 혼잡 제어 및 안정적인 통신 측면에서 어떻게 TCP를 다시 구현해야합니까? 이는 나쁘다.

제 질문은 다음과 같습니다.이 동작을 지원하는 프로토콜에 대해 알고 있습니까?

답변

0

나는 당신이하는 말을 다했으며, 그것을 할 수있는 몇 가지 방법이 있습니다. 리눅스를 사용하는 것이 가장 쉽고, 실제로 이것을 구현 한 유일한 플랫폼입니다.

리눅스에서 이것을 수행하는 방법은 두 가지가 있습니다. 1. iptables 및 NQUEUE를 사용하고 수신 된 패킷을 원하는대로 처리하는 응용 프로그램 프로세스에 전달합니다. iptables 규칙을 사용하여 IP dst N2, N4 등과 같은 관심있는 패킷 만 전달하십시오. 2. libpcap을 사용하고 프로그램과이 라이브러리를 연결하고 관심있는 패킷을 캡처하도록 캡처 필터를 구성하십시오

+0

기본적으로 낮은 OSI 레이어에서이 작업을 수행하는 것이 좋습니다.하지만 모든 패킷을 읽어야합니다 (iptables 또는 libpcap 이상). 내가 찾고있는 것은 OSI 응용 프로그램 수준의 솔루션입니다. 즉, 하위 계층은 그대로 유지할 수 있습니다. 최종 프로그램은 루트가 될 필요없이 사용자 공간 프로그램으로 실행될 수 있어야합니다 ... – mreichelt

+0

내가 제안하는 것은 사용자 공간 앱이지만, sudo를하지 않는 한 루트를 사용해야합니다. 그러나 앱을 두 개를 루트와 비 루트로 분리 할 수 ​​있습니다. 응용 프로그램을 응용 프로그램 계층 응용 프로그램으로 만들고 무차별 모드를 사용하지 않으려합니다. 반면에 특정 노드 만 네트워크 레이어 작업 인 특정 패킷 만 수신하게하려고합니다. 당신이 요구하는 것은 항상 여러 계층에서 작동하는 메커니즘이 될 것이므로 당신은 자신을 모순합니다. 당신이하고 싶은 일을 할 수있는 도구가 있다면, 어떻게 진행할 지 결정해야합니다. – Andy

+0

나는이 접근법을 올바른 답으로 표시하려고합니다. 왜냐하면 처음에 생각한 것처럼 접근법이 실현 가능성이 낮다고 생각하기 때문이며 Andy는 패키지를 과장하기 위해 필요한 것이 무엇인지 지적했습니다.나는 하위 계층을 건드릴 필요없이 실현 가능하다고 생각하지만 애플리케이션이 모든 노드에서 실행되어야 할 필요가있다. – mreichelt