Как рассчитать расстояние между двумя узлами, используя время, необходимое для отправки пакета? - PullRequest
0 голосов
/ 08 февраля 2020

Допустим, у меня есть два узла, один отправляет пакет другому узлу. Как рассчитать расстояние между ними, используя время? Я почти уверен, что должен использовать формулу расстояние = скорость * время, которой я являюсь. Мой код выглядит следующим образом:

Node1. cc

socket.sendTo(payload, destAddr, destPort);
    auto const result = SEND_TIME_HISTORY.insert(std::make_pair(numSent, simTime().dbl()));
            if (not result.second) {
                result.first->second = simTime().dbl();
            }

То, что в основном происходит при каждой отправке пакета, сохраняет текущий simTime и порядковый номер. внутри карты, так что я уверен, что я вычисляю из правильной последовательности пакетов

Node2. cc

map<int, double> SENT_TIME_HISTORY =
                Node1->returnTimeHistory(); //basicaly retrieve the map
        for (std::map<int, double>::iterator iter = SENT_TIME_HISTORY.begin();
                iter != SENT_TIME_HISTORY.end(); iter++) {

            //iterate through and check if the received sequence number matches the sent sequence number
            if (rcvseq == iter->first){

                //host_currenttime is simTime().dbl() as soon as the packet is received
                timediff = host_currenttime - iter->second; 
                cout << "Time received: " << host_currenttime << "\tTime sent: " << iter->second <<"\tActual time taken" << timediff << endl;
            }
        }
cout << "Calculated distance: " << timediff*299792458 << endl;

В основном вывод - rubbi sh , Прямо сейчас я беру время, необходимое для отправки пакета, умноженное на скорость света, чтобы определить расстояние. Я что-то здесь не так делаю?

Если требуется больше исходного кода, пожалуйста, сообщите мне. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Существует много факторов, которые увеличивают задержку пакета, отправляемого с одного узла на другой, большинство из них не определены c. Таким образом, изложенный выше подход, к сожалению, не принесет удовлетворительных результатов.

Это не означает, однако, что невозможно рассчитать расстояние между двумя узлами с помощью Wi-Fi.

Wi-Fi Alliance, руководящий орган Wi-Fi, имеет программу сертификации под названием «Местоположение Wi-Fi», основанную на стандартной поправке IEEE 802.11m c и определяющую локализацию Wi-Fi. -Fi клиент по Fine Time Measurement (FTM).

На очень высоком уровне точки доступа, которые поддерживают местоположение Wi-Fi, добавляют информацию о времени к своим кадрам управления, которую могут оценить клиенты. Клиенту необходимо «увидеть» как минимум три точки доступа, чтобы рассчитать свою позицию.

Более подробную информацию можно найти здесь: https://www.wi-fi.org/discover-wi-fi/wi-fi-location

0 голосов
/ 08 февраля 2020

Поиск расстояния по времени будет неточным с WiFi из-за того, что он использует Csma Ca (Inet / linklayer / csmaca). Технически это очередь для того, чтобы хост дождался, когда пришло время отправить его на точку доступа, а точка доступа передала сообщение. В этом отчете много написано о влиянии csmaca https://arxiv.org/pdf/1609.04604.pdf

Вам нужно будет создать свой собственный слой ссылок, если вы хотите рассчитать расстояние по скорости.

...