2012-08-08 5 views
1

부스트 C++를 사용하여 P2P 애플리케이션을 구현했습니다. UDP는 패킷 순서 또는 패킷 전달을 보장하지 않으므로 다음과 같이 생각합니다.UDP 패킷 배열

하나의 요청에 대해 수신 된 모든 UDP 패킷을 링크 목록에 넣고 올바르게 정렬하여 시퀀스와 누락 된 패킷 강력한 방법으로 식별 할 수 있습니다. 링크 목록은 struct를 사용하여 만듭니다. 또는
나는 벡터에 넣고 별도의 스레드에서 벡터에 패킷을 정렬 생각.

어느 것이 가장 좋은 방법입니까? 또는 윈도우 슬라이딩 이외의 다른 최상의 방법을 사용할 수 있습니까?

+1

왜 TCP를 사용하지 않는가? – Dani

+0

@dani TCP 구멍 펀칭은 모든 NAT에서 작동하지 않습니다. 그래서 UDP를 사용하는 것은 안전합니다. – Navin

+0

그리고 어떻게 UDP가 그것을 해결합니까? – Dani

답변

4

자신의 컨테이너 또는 정렬을 구현하는 대신 표준 라이브러리에 이미있는 것을 사용하지 않는 이유는 무엇입니까?

예를 들어 std::map을 키로 사용할 수 있습니다. 자동으로 키순으로 정렬됩니다.

또는 std::priority_queue을 사용하여 시퀀스 번호를 확인하는 자체 비교 기능을 사용할 수 있습니다.

또한 UPnP NAT traversal을 조사해야합니다.

+0

이것은 좋은 것입니다. 내가 그것을 시도한 후에 악이 대답으로 받아 들인다. 고맙습니다. – Navin

0

정확한 순서를 확인하고 누락 된 패킷 또는 중복을 탐지하려면 일련 번호 또는 이와 유사한 방법을 사용해야합니다. 패킷을 송신 측의 링크 된 목록에 넣을 때 수신 측에서 올바른 순서를 어떻게 확인할 수 있습니까? 빠진 패킷과 누락 된 패킷을 찾아내는 예제 솔루션은 TCP 프로토콜을 참조하십시오.

일반적으로 UDP는 패킷 손실 또는 재정렬이 허용 될 때 사용됩니다. UDP에 대해서도이 두 속성을 보장하려면 직접 작업해야합니다.

+0

의 UDP 및 TCP percantage의 아래쪽에 실제로 시퀀스 번호가있는 수신기 쪽의 링크 목록을 찾을 수 있습니다. 링크 목록에서 시퀀스 순서가 잘못되었다고 판단되면 패킷을 요구합니다. 어쨌든 나는 내가 추측하는 길을 알아 냈다. 어쨌든 – Navin

+0

, 감사합니다. – Navin