Wątek przeniesiony 2017-01-01 15:33 z C/C++ przez kq.

Komunikacja sieciowa z klientem za routerem.

0

Jak odbywa się komunikacja serwer <-> klient jeżeli klient znajduje się za routerem np domowym?
Przykładowo odpalam LoL'a, serwer widzi tylko i wyłącznie moje publiczne IP i na nie odsyła np aktualizacje pozycji innych graczy.
Skąd router wie że pakiet przychodzący z serwera trzeba przekazać mojemu komputerowi?

0

Poczytaj o NAT.

2

Rozumiem, że chodzi o NAT. Gdy komputer w sieci wewnętrznej łączy się z jakimś serwerem w Internecie, to NAT przerabia pakiet, tak aby wyglądał na pochodzący z samego routera i zapisuje sobie w tablicy, jakie modyfikacje przeprowadził. Odpowiedź jest adresowana nie na komputer z którego wyszedł pakiet, tylko na router. Serwer nawet nie wie o istnieniu komputera w sieci wewnętrznej. Jeśli przychodzący pakiet pasuje do jakiegoś połączenia, zostaje zmodyfikowany zgodnie z danymi zapisanymi w tej tablicy i przekazany do komputera w sieci wewnętrznej, na który miał trafić.

0

Wiem co to NAT, ale nie wiem jak działa, co takiego zrobili twórcy LoLa, SC1 czy innej gry sieciowej że pakiety dochodzą do właściwego komputera mimo że oni wysyłają to na publiczne IP?

0

Nic takiego nie zrobili, bo wszystko robi router - chyba nie bardzo jednak wiesz jak działa NAT.

0

Jak połączysz się z serwerem publicznym, to on na podstawie twojej wiadomości, ma informacje o warstwie sieciowe, w której jest ip, twoje/sieci w której jesteś, no i w warstwie łącza danych jest twój adres MAC, skąd to router wie, o który komputer z sieci chodzi, albo rozgłasza na całą sieć i komputer, którego to interesuje to odczytuje.

0

To w aplikacji jakiego protokołu (UDP,TCP) muszę użyć żeby nie odbić się od routera jak od ściany?
Myślałem że MAC nie wychodzi poza sieć lokalną - jak to jest?

0

Dowolnego — jeśli komunikacja jest już nawiązana, to reszta jest zadaniem routera, który stara się być możliwie przezroczysty. Dopiero jeśli potrzebujesz, by komunikacja była nawiązywana z zewnątrz, to pojawiają się problemy, wymagające zmiany konfiguracji routera (przekierowania portów itd.).

3

NAT/PAT polega na tym, że kiedy wysyłasz pakiet IP, router nie przesyła dalej wiadomości z lokalnym adresem IP jako źródłem, tylko ustawia sam siebie za źródło. Jednocześnie router zapamiętuje sobie że wiadomość wysłana przez port X do serwera Y była nadana przez lokalny host Z na porcie V. Dzięki temu kiedy przychodzi odpowiedź z serwera Y z portu X to router wie że należy ją przekazać dalej do hosta Z na porcie V.

Nie da się podłączyć do hosta za NAT/PAT z zewnątrz, z definicji. Albo ten host musi być widoczny z zewnątrz (np. poprzez forwardowanie jakiegoś portu) albo to ten host musi nawiązać połączenie.

0

ten host musi nawiązać połączenie.
A co gdy program korzysta z UDP - to jest przecież protokół bezpołączeniowy.

1

Polecam poczytac o technice hole punching, z ktorej gry czesto korzystaja zeby "obejsc" NATa.

0

Nie da się podłączyć do hosta za NAT/PAT z zewnątrz, z definicji. Albo ten host musi być widoczny z zewnątrz (np. poprzez forwardowanie jakiegoś portu) albo to ten host musi nawiązać połączenie.

jak użyjesz serwera STUN / TURN to się da

3

Autorowi pytania bardziej chodzi o to, że jak klient LoLa gada z IP wewnętrznego, to jak pakiet z odpowiedzią wraca - bo i słusznie skąd biedny Router ma wiedzieć, że akurat do niego ma on iść ? Ano po maskaradzie zapisuje to sobie do tabeli na jakiś czas po tym to sprząta. Dlatego jest to przezroczyste. Reguły w NAT trzeba ręcznie robić gdy chcesz serwer stawiać - wtedy router przecież nie ma żadnego zapisu w tabeli jakiej maskarady ma dokonać. Dla rozjaśnienia cytat i chyba prościej się nie da :

 Jak działa NAT

Gdy klient w sieci wewnętrznej łączy się z maszyną w Internecie, wysyła pakiety IP zaadresowane do tej maszyny. Pakiety te zawierają wszystkie informacje adresowe, niezbędne aby dotrzeć do celu. NAT zajmuje się następującymi danymi:

Źródłowy adres IP (na przykład, 192.168.1.35)
Źródłowy port TCP lub UDP (na przykład, 2132)
Gdy pakiety przechodzą przez bramkę NAT, są modyfikowane tak aby wydawały się pochodzić z samej bramki (ang. gateway) NAT. Bramka NAT zapamiętuje zmiany, wykonywane na pakietach, w swojej tabeli stanów, aby móc: a) odwrócić zmiany w powracających pakietach oraz b) zapewnić, że powracające pakiety są przepuszczane przez firewall i nie są blokowane. Na przykład, mogą wystąpić następujące zmiany:

Źródłowe IP: zamienione na zewnętrzny adres bramki (na przykład, 24.5.0.5)
Źródłowy port: zamieniony na losowo wybrany, nieużywany port na bramce (na przykład, 53136)
Ani wewnętrzna maszyna, ani host w Internecie nie obawiają się tych translacji. Dla komputera z sieci lokalnej, system realizujący NAT jest po prostu bramką. Dla hosta w Internecie, pakiety wydają się pochodzić wprost z systemu, na którym realizowany jest NAT; nawet nie zdaje sobie sprawy, że wewnętrzne stacje robocze w ogóle istnieją.

Kiedy host w Internecie odpowiada na pakiety wewnętrznej maszyny, są one adresowane do zewnętrznego IP bramki realizującej NAT (24.5.0.5) i na przetłumaczony port (53136). Bramka NAT przeszuka wówczas tabelę stanów, aby sprawdzić, czy powracające pakiety pasują do jakiegoś już nawiązanego połączenia. Niepowtarzalne dopasowanie zostaje dokonane na podstawie kombinacji IP/port, która mówi PF, że datagarmy należą do połączenia zainicjowanego przez wewnętrzną maszynę 192.168.1.35. PF wykona wówczas odwrócone zmiany w stosunku do wychodzących pakietów i przekaże je do maszyny w sieci wewnętrznej.

(http://ftp.tuwien.ac.at/.vhost/www.openbsd.org/xxx/faq/pf/pl/nat.html)

1 użytkowników online, w tym zalogowanych: 0, gości: 1