Domeny Koordynatowe
Geo-Coord-Domains
To potencjalna domena pozwalająca nadawać krótkie nazwy hostom na podstawie ich położenia geograficznego.
It's a potential scheme for domains that assigns short names to hosts based on their geographical location.
Budowa
Structure
Przykład nazwy dla mojego komputera to: `munchkin.uJId.g`. Domena składa się z trzech części:
For my computer, geo-coord-domain is: `munchkin.uJId.g`. Domain is constructed from three parts:
- `munchkin`
- to nazwa hosta.
- is the hostname.
- `uJId`
- contains encoded (dedicated format using base64) geographical coordinates: 51,75 19,56
- zawiera zakodowane (specjalny format binarny w base64) współrzędne geograficzne: 51,75 19,56
- `g`
- to domena najwyższego poziomu zawierająca domeny koordynatowe.
- is a top-level geo-coord-domain.
Działanie protokołu
Domain resolution
Klient chcący rozwiązać nazwę wykonuje zapytanie do bazy danych przestrzennych wykorzystując odkodowane współrzędne oraz nazwę hosta która ma zostać wyszukana w danym obszarze.
Client resolving a name decodes geographical coordinates and then queries a geographical database for the nearest host with a specified name.
W przypadku sieci kratowych może wysłać komunikat rozgłoszeniowy na odczytane współrzędne. W przypadku sieci IP baza danych przestrzennych może działać na serwerze.
When used in mesh networks, he don't even needs to resolve the address and can send a broadcast directly towards specified coordinates. In IP networks, there is a need for a database running on some known server.
Wynikiem zapytania jest adres IP.
Result of query is going to be host's IP address.
Jeśli w bazie danych znajdzie się wiele adresów (być może nastąpiła próba przejęcia adresu bądź adres opisuje zasoby rozproszone na wielu hostach), zwracane są wszystkie rekordy. Wybór właściwego należy do klienta i może zostać dokonany z wykorzystaniem metod kryptograficznych.
If the database contains multiple addresses (maybe there was attempt to overtake an address or address describes resources located on many different hosts), all records are returned. Choice of the right one belongs to the client and should be performed using cryptograhic signatures.
Routing w sieciach kratowych
Routing in mesh networks
W sieciach kratowych opartych na współrzędnych geograficznych koordynatowe adresy DNS w ogóle nie muszą być rozwiązywane. Odczytane wartości mogą zastać wykorzystane bezpośrednio w routingu wiadomości.
In mesh networks based on geographical coordinates, geo-coord-domains don't need to be resolved at all. Coordinates can be used directly in message routing.
Maskowanie, tunele i roaming
Masking, tunnels and roaming
Możliwe jest tworzenie wirtualnych hostów. Router znajdujący się pod danym adresem może tunelować wiadomości trafiające do wirtualnego hosta pozwalając w ten sposób na roaming urządzeń mobilnych.
It's possible to create virtual hosts. Router placed at right address can tunnel messages to other, mobile host, thus allowing mobile roaming.
Konstrukcja adresu
Address construction
Adres budowany jest przez binarne dzielenie naprzemiennie długości i szerokości geograficznej oraz zapamiętywanie czy szukany punkt posiada większą czy mniejszą daną współrzędną.
Address is built by alternatively, dividing longitude and latitude by choosing whether the desired coordinate is higher or lower than current division.
Z tak, naprzemiennie przetasowanych wartości binarnych tworzy się liczbę, którą koduje się kodem graya. Dzięki temu pobliskie lokalizacje posiadać będą niewiele różniące się adresy.
These alternatively shuffled binary strings create a large number which is then encoded using *gray code*. Thanks to this encoding, nearby locations will have similar addresses.
Gotowy ciąg binarny koduje się za pomocą Base64. Kolejne sześć wartości binarnych odpowiada pojedynczemu znakowi zakodowanego adresu.
Gray-coded number should be encoded using Base64. Every six subsequent binary digits are going to be encoded as one more character.
Kolejne znaki adresu dzielą poprzedni zakres na 64 części.
Every additional character is going to divide previous range into 64 parts.
*Wzorcowa implementacja powyższego algorytmu w języku javascript znajduje się w kodzie źródłowym tej strony.*
*Example (JavaScript) implementation can be found [here](script.js).*