Problemy z łączeniem się na serwery w sieciach LAN.
pon, 17 czerwiec 2002 20:08:05 | Autor: Rozz
Poniższy tekst ma charakter techniczny i dotyczy rozwiązania problemu niemożności dołączenia się na zewnętrzny serwer q3 przez kilku graczy z sieci lokalnej, podłączonej do internetu zbiorczym serwerem NAT (Network Address Translation). Sprawa w ogóle nie dotyczy graczy łączących się z zewnętrznego IP, czyli np. z sdi czy modemu. Cały ten tekst można streścić jednym zdaniem - jeśli łączysz się z LAN’a i nie możesz wejść na serwer, bo ktoś z twojego LAN’a już na nim gra to musisz połączyć się na innym lokalnym porcie niż 27960. Radzę jednak przeczytać od początku, zwłaszcza jeśli nagle znikają nam favorites i stoimy podejrzanie długo na Awaiting Challenge.
Mówimy o LAN’ie, czyli sieci lokalnej - sieci komputerów podłączonych do internetu jednym zbiorczym serwerem, zwanym NAT. W sieci znajdują się komputery mające różne adresy IP, np. 10.66.1.3, 10.66.1.4, itd. Te adresy IP nie są jednak widoczne w internecie. W internecie każdy komputer z sieci wewnętrznej jest identyfikowany adresem zewnętrznym, adresem serwera NAT, np. 62.63.64.65. Oznacza to, że jakakolwiek (z wyj. IRC, gdzie istnieje możliwość identyfikacji użytkownika) zalogowana aktywność użytkownikana zewnątrz sieci nie może być bezpośrednio skojarzona z konkretnym komputerem z sieci LAN, ponieważ jedyny adres IP jaki zostanie zalogowany to adres zewnętrzny serwera NAT, a nie komputera wewnątrz sieci. Prowadzi do wielu problemów, np. niemożności przesyłania plików przez gg czy niemożności postawienia serwera ftp na swoim komputerze. Prowadzi to również do problemów przy łączeniu się na serwery q3. Żeby to zrozumieć trzeba poznać podstawy działania protokołów internetowych. Najczęściej wykorzystywanym protokołem jest TCP. Protokół ten wykorzystuje tzw. porty, przez które odbywa się komunikacja z wybranymi usługami. Każda usługa korzysta z jednego lub więcej z góry określonych portów zdalnych oraz zwykle dynamicznie zmieniającego się portu lokalnego. Zrozumienie różnicy między portem lokalnym a zdalnym jest kluczowe dla problemu. Przykładowo jeśli łączymy się ze stroną www, to komunikacja ta odbywa się na zdalnym porcie 80. Ten port jest otwierany na serwerze na którym znajduje się usługa, czyli w tym przypadku strona www. Natomiast port lokalny jest otwierany na naszym komputerze (możemy to sprawdzić sami wybierając z menu Start Uruchom i wpisując netstat). Port lokalny w przypadku większości usług zmienia się dynamicznie - jest wybierany automatycznie bez naszej wiedzy i możliwości ingerencji. W przypadku omawianej strony www może to być port 1034, 1078 itd. Po zakończeniu komunikacji port lokalny zostaje automatycznie zamknięty i za jakiś czas może zostać ponownie otwarty w przypadku innej usługi czy następnego połączenia. Inne znane zdalne porty dla typowych usług to np. 21 dla usługi ftp, 23 dla telnetu, 25 dla poczty wysyłanej, 110 dla poczty odbieranej, 6669 dla IRC, 27960 dla quake3. Podkreślam jeszcze raz, ze są to porty zdalne, czyli otwierane na serwerze docelowym, na które nie mamy wpływu. O wyborze portu zdalnego decyduje administrator ograniczany przez możliwości techniczne. Sami wiemy, że w przypadku q3 używa się różnych portów zdalnych, np. 27961 czy nawet 30000, ale to nie ma dla klienta żadnego znaczenia oprócz konieczności posiadania informacji o numerze portu. Quake3 używa protokołu UDP, który w działaniu jest bardzo podobny do TCP - również opiera się na komunikacji między portem zdalnym i lokalnym. Różnica między quake3 a innymi usługami polega na tym, że port lokalny q3 nie zmienia się dynamicznie jak inne, ale jest domyślnie określony również na 27960. Zbieżność z domyślnym portem zdalnym można powiedzieć jest przypadkowa, ale dla naszych rozważań nie ma to większego znaczenia. Właśnie fakt statyczności portu lokalnego jest przyczyną niemożności połączenia się z serwerem q3 drugiego gracza zza serwera NAT. Jeżeli łączymy się z serwerem q3, np. 111.111.111.111:27960 lub 112.112.112.112:27962, to na naszym komputerze zostaje otwarty port lokalny 27960, przez który q3 łączy się z zdalnym portem 27960 na serwerze 111.111.111.111 lub 27962 na 112.112.112.112. Wszystko jest w porządku jeśli łączymy się z zewnętrznego IP, np. z sdi. Natomiast jeśli znajdujemy się w sieci lokalnej, to też jest wszystko w porządku o ile jako jedyni z całej sieci w danym momencie gramy na zewnętrznym serwerze q3. Pamiętamy, że komputer zza serwera NAT jest identyfikowany na zewnątrz jako IP serwera NAT, a nie IP komputera wewnątrz sieci. Tak więc jeśli drugi gracz z sieci LAN będzie się chciał dołączyć na dowolny internetowy serwer q3 w czasie, kiedy inny użytkownik sieci już gra na internecie napotka problemy, których nie będzie umiał wyjaśnić - znikną wszystkie lub niektóre serwery favorites, próba połączenia się przez konsolę zakończy się oczekiwaniem Awaiting Challenge, pojawią się problemy z cdkeyem. Dzieje się tak właśnie dlatego, że obydwa komputery z sieci LAN nie dość że są identyfikowane tym samym IP (serwera NAT), to jeszcze łączą się na tych samych portach lokalnych! Winna temu jest statyczność portu lokalnego q3, która nie pozwala serwerowi q3 odróżnić dwóch komputerów ani po IP ani po porcie i dlatego powoduje owe konflikty dla drugiego w kolejności komputera. Gracz który połączy się pierwszy nie napotka żadnych problemów. Dopiero drugi i kolejni.
Taka sytuacja nie musi być jednak regułą - w niektórych sieciach ten problem nie musi wcale wystąpić - może to zależeć od konfiguracji sieci, serwera NAT, także od rodzaju serwera q3 (dedicated 1 czy 2). Każdy kto łączy się z sieci lokalnej powinien jednak zwrócić na to zjawisko uwagę.
Rozwiązanie tego problemu jest na szczęście bardzo proste - trzeba połączyć się na innym porcie lokalnym niż pierwszy gracz. Quake3 jak wiemy umożliwia zmianę portu przy pomocy komendy net_port, toteż do naszej linii poleceń (nie do configa), czyli do bata lub skrótu musimy dopisać linię +set net_port #####. Jaki wybrać port? Nie ma to większego znaczenia. Musi on być po prostu różny od 27960, tak aby serwer q3 mógł zidentyfikować nasz komputer na podstawie innego portu niż kolegi. Możemy ustawić na przykład 27770 czy 27666 (nie musi być pięciocyfrowy, ale pozostańmy na granicy 27 tysięcy). Wtedy obojętnie jaka ilość graczy z sieci będzie grała na serwerach q3, zawsze uda się nam połączyć z dowolnym serwerem, ponieważ konflikt portów zostanie zlikwidowany.
ALI_87 | 2004-12-05 18:22:56
ja mam problem własnie z wchodzeniem na servery na necie :( zainstalowałem juz wszystkie możliwe bajery, przinstalowywałem q3 i nadal nic, jak daje na multiplayer i zakładke internet to nie znajduje mi ani jednego servera !!! prosze pomóżvie ktoś z tym !!! najlepiej to odezwijcie sie na gg 7330479 bo tutaj to rzadko wchodze. Bede dozgonnie wdzięczny !!!!!!!!!!!
#702118
Zaloguj się by dodać komentarz.