RakNet

Original: http://www.raknet.net/raknet/manual/systemoverview.html

Jenkins Software

Przegląd systemu
Architektura systemu
RakNet ma kod, który dzieli się na trzy kategorie: komunikacji sieciowej, wtyczki, które korzystają z komunikacji sieciowej oraz ogólna funkcjonalność gry.
Komunikacja sieciowa jest przez dwie grupy użytkowników. RakPeerInterface oraz Interfejs TCP. RakPeer Interfejs jest główną klasą, która będzie korzystać z gry i jest oparta na UDP. Zapewnia funkcje, takie jak połączenia, zarządzanie zasilania, kontroli przeciążenia, wykrywanie zdalnego serwera, spośród zespołu wiadomości, statystyki połączeń, latencji i packetloss symulacji, listy zakazu i bezpiecznej łączności.
TCPInterface jest owijką TCP i jest używany do komunikacji z zewnętrznymi systemami opartymi na TCP. Na przykład, klasa EmailSender, służy do zgłaszania awarii ze zdalnych serwerów, interfejsów z TCP. Jest również obsługiwany przez większość modułów wtyczek i jest sugerowane do transferu plików, takich jak z AutoPatcher.
Wtyczki w RakNet to zajęcia, które dołączenia do instancji RakPeer lub PacketizedTCP. Wykorzystuje łańcuch projektowania odpowiedzialność wzorca. Załączone wtyczki aktualizuje się automatycznie, gdy Receive () jest wywoływana na attachee i filtrować wiadomości lub wstrzyknąć do strumienia sieciowego. Funkcjonalność obejmuje określenie hosta w sieci typu peer-to-peer otoczenie, transfery plików, NAT, komunikację głosową, zdalnych wywołań procedur i obiektowe gry replikacji.
Ogólne Gra zawiera funkcjonalność serwera głównego, crash raportowanie, wysyłanie wiadomości e-mail za pośrednictwem serwerów POP Gmaila, a serwer logowania SQL.

RakPeer architektura wewnętrzna
RakPeer.h zapewnia funkcjonalność bazową komunikat UDP, i oczekuje się, że w większości zastosowań użyje RakPeer w przeciwieństwie do TCP. Na początku RakPeer uruchamia dwa wątki – jeden wątek czekać na przychodzących datagramów, a drugi do wykonywania okresowych aktualizacji, takie jak określanie utraconych połączeń lub pingi. Użytkownik określa maksymalną liczbę połączeń i tablicę struktur RemoteSystem jest wewnętrznie przypisane do tej wielkości. Każda próba połączenia lub połączenie jest przypisany do zdalnej strukturze systemu, który zawiera klasę zarządzania kontroli przeciążenia pomiędzy tymi dwoma systemami. Połączenia są identyfikowane przez SystemAddress lub RakNetGuid, z których ostatni jest generowany losowo i niepowtarzalny na przykład z RakPeer.
Połączenia są ustalane za pomocą komunikatów UDP zawierających żądanie połączenia ładunek, i “nieaktywny komunikat” identyfikator. W “nieaktywny komunikat” identyfikator służy do rozróżniania rzeczywistych wiadomości w trybie offline i podłączone wiadomości, które zdarzają się dopasować profil offline wiadomości. żądania połączenia wysyłane są wielokrotnie w krótkim terminie w celu uwzględnienia packetloss, a jeśli jest obsługiwane wykorzystuje malejącą MTU MTU ścieżki detekcji.
Gdy żądania połączenia przybywa, RakPeer transmituje dane wewnętrzne państwowe, takie jak RakNetGUID i kontroli tego połączenia z listą zakazu powtórnego listy połączeń i innych środków bezpieczeństwa. Jeśli połączenie zostało oznaczone jako bezpieczne, bezpiecznego protokołu połączenia aktywuje i dodatkowe dane są wysyłane. Po pomyślnym zakończeniu, użytkownik jest informowany o tym, czy to z ID_CONNECTION_REQUEST_ACCEPTED lub ID_NEW_INCOMING_CONNECTION. warunki niepowodzenia są zwracane w podobny sposób.
Wiadomości wychodzące od użytkownika do podłączonych systemów są kopiowane i wewnętrznie buforowane. Jeśli komunikat wychodzący Plus nagłówku jest większy niż MTU, wiadomość zostanie podzielony wewnętrznie. Okresowej przerwie outgong wiadomości aggreggated do pojedynczego datagramu i wysyłane zgodnie z contraints transmisji kontroli przeciążenia i wielkości MTU. Datagramy, które nie dostać ACK są za złe. NAK są wysyłane na brakujące numery sekwencji datagramów. Wiadomości wysyłane nierzetelnie i nie może zostać wysłany w terminie próg zdefiniowany przez użytkownika zostaną usunięte. Wiadomości są wysyłane w kolejności. ACK nie są zatory kontrolowane. Jednak ponawiać i nowe wysyła się z ponawiać biorąc pierwszeństwo nad nowym wysyła.
Jak stwierdzono, przychodzące datagramy przyjazd na blokowanie wątku recvfrom. Gdy datagram przybywa, datownik jest natychmiast rejestrowane i datagram zostaje ustawiony w kolejce wątku bezpieczny dla wątek przetwarzania zarządzać. Nić przetwarzanie jest sygnalizowany tak, że będzie to albo natychmiast przetwarza wiadomość (jeśli śpi) lub przetworzyć wiadomość w następnym dostępnym czasie.
Przychodzące datagramy są sprawdzane pod względem sekwencji bajtów, która wskazuje, czy nadawca uważało, że był podłączony czy nie. Ponadto, źródłowy adres IP jest zaznaczone. Jeśli wiadomość jest oznaczona jako niepodłączone, a nadawca nie jest podłączony do nas wiadomość jest sprawdzana w stosunku do wąskiego zakresu akceptowanych typów, takich jak żądania połączenia lub wiadomości spośród możliwości zespołu. Jeśli wiadomość jest oznaczona jako podłączony, a nadawca jest podłączony do nas, to jest on przetwarzany przez klasę ReliabilityLayer dla kontroli przeciążenia i innych informacji związanych z komunikacji (ACK, NAK, wysyła ponownie, szyfrowanie, ponowny montaż dużych wiadomości).
Połączone wiadomości są najpierw przetwarzane przez RakPeer. To jest obecnie wykorzystywane wyłącznie do okresowego pingi oraz wykrywanie utraconych połączeń użytkownik nie powinien wysyłać dane w obrębie danego progu. Wszystkie inne komunikaty są przetwarzane przez wtyczki, lub zwrócić się do użytkownika. Wywołanie RakPeer :: Receive () kleszcze funkcjach aktualizacji wszystkie wtyczki ‘jeden raz, i zwraca jedną wiadomość. Wiadomość wrócił do użytkownika są zwracane z RakPeer :: Receive (), jedną wiadomość za połączenie. Konieczne jest, aby zadzwonić Receive () w pętli, aby wszystkie wiadomości, dopóki nie zostaną zwrócone żadne dalsze komunikaty.

Inne systemy
Klasa NetworkIDObject zapewnia zdolność do systemów nawiązać do wspólnych obiektów i jest wykorzystywane przez państwa celem wywołania funkcji zdalnej. Każdy obiekt ma 64-bitowy numer losowy przypisano i mogą być wykorzystywane do wyszukiwania przez wskaźniki mieszania.
Struktura SystemAddress co RakNet używa do reprezentowania systemów zdalnych. To kodowanie binarne adresu IP wraz z portem w tym systemie, wspierając zarówno IPv4 i IPv6.
Klasa BitStream, położony w BitStream.h jest natywnie wspierany przez RakNet. Jest to zarówno klasy użytkownika i klasa wewnętrzna. Jest przede wszystkim używany do zapisywania pojedynczych bitów do strumienia i do automatycznej zamiany endian, które mogą być włączone przez zakomentowanie __BITSTREAM_NATIVE_END w RakNetDefines.h.
Dla wizualnej reprezentacji architektury, patrz diagram UML
Następna strona: Szczegółowy Wdrażanie

Przepustowość napowietrznych

Zamieść 3.6201, wykorzystując nową kontrolę przeciążenia
Za datagramu:
1 bajt dla bitflags
4 bajty dla znacznika czasu, stosowane do obliczania RTT do kontroli zatorów. RakNet wersji 4 nie przekazuje tego pola.
3 bajtów dla numeru sekwencyjnego, używane do wyszukiwania datagramy dla ACK
Za wiadomość:
1 bajt dla bitflags
2 bajty na długość komunikatu
if (SOLIDNIE, RELIABLE_SEQUENCED, RELIABLE_ORDERED)
A. 3 bajtów dla numeru sekwencyjnego, stosowane w celu zapobiegania powrocie do wiadomości powielany użytkowników
if (UNRELIABLE_SEQUENCED, RELIABLE_SEQUENCED, RELIABLE_ORDERED)
A. 3 bajtów numeru sekwencji, stosowane do reorganizacji wiadomości na tym samym kanale, w celu
B. 1 bajt zamawiania kanał
if (komunikat na MTU)
A. 4 bajty liczby podziałów, nie skompresowane w celu zwiększenia wydajności
B. 2 bajty dla identyfikatora, za które podzielona jest
C. 4 bajty dla wskaźnika do liczby podziałów, nie skompresowane w celu zwiększenia wydajności

3.6201 a wcześniej w serii 3.x
Za datagramu:
1 bit bitflags
8 bajtów dla datownik, stosowany do obliczania RTT do kontroli przeciążenia
Za wiadomość:
4 bajty na długość komunikatu
4 bajty dla numeru sekwencji, stosowany w celu zapobiegania powrocie do wiadomości powielany użytkowników
4 bity dla bitflags
if (UNRELIABLE_SEQUENCED, RELIABLE_SEQUENCED, RELIABLE_ORDERED)
A. 4 bajty dla numeru sekwencyjnego, używane do reorganizacji komunikaty w kolejności
B. 5 bitów na kanał zamawiania
if (komunikat na MTU)
A. 4 bajty dla liczby podziałów, ale skompresowany, tak przyzwyczajeni 1-2 bajtów średnio
B. 4 bajty dla identyfikatora, za które podzielona jest
C. 4 bajty dla wskaźnika do liczby podziałów, ale skompresowany, tak przyzwyczajeni 1-2 bajtów średnio
Komunikat jest danych wysyłanych z gry. Wszystkie wiadomości wysłane do RakNet między kleszcze aktualizacji RakNet są zgrupowane w jednym datagramu. Więc jeśli wyślesz tylko 1 wiadomość, to koszt jest jeden datagram + 1 komunikat. Jeśli wyślesz 5 wiadomości, to jest 1 Datagram + 5 wiadomości. Jeśli wyślesz 1 wiadomość, ale to jest 10 razy większy niż MTU, a następnie wysyła datagramy 10, każda zawierająca 1 wiadomość (wiadomość zostanie podzielona)

Comments are closed.