Skocz do zawartości
jugan1

Programowanie sieciowe

Pomocna odpowiedź

Witam,

Mam pytanie związane z programowaniem sieciowym. Najlepiej jeśli ktoś odpowiedziałby pod kątem c++/pythona, ale podejrzewam, że odpowiedź i tak będzie niezależna od języka programowania.

Cel: wysłać wiadomość pomiędzy 2 komputerami.

Są tutaj 2 możliwości:

a) oba komputery są w tej samej podsieci

b) oba komputery są w różnych podsieciach

 

I tutaj zaczyna się właściwa część:

Wydaje mi się ( do weryfikacji ), że jeżeli mam możliwość a) to wystarczy podać adres innego komputera w tej samej podsieci np. 192.168.0.49 w kodzie i już mogę wysyłać na ten komputer komunikaty ( oczywiście o ile będzie napisany kod dla wysyłającego jak i odbierającego ). Co jednak w przypadku, gdy chciałbym wysłać wiadomość z komputera A do komputera B, który jest w innej podsieci? Komputer B ma 2 adresy - jeden w swojej podsieci oraz drugi, który jest adresem routera, który jest w tej podsieci. Załóżmy, że będą to adresy odpowiednio: 192.168.0.49 oraz 50.50.50.50. Jeżeli zatem podam w kodzie adres pierwszy to moja wiadomość nie zostanie wysłana do komputera B tylko do jakiegoś komputera z podsieci komputera A. Jednak, gdy podam adres 50.50.50.50 to dojdzie wiadomość do routera (?). Co on z tym zrobi? Przekaże wszystkim pc w podsieci? Czy kompletnie nic? Musiałbym teoretycznie podać 2 adresy komputera B, ale nie widziałem nigdzie takiego przypadku w internecie.

 

Pozdrawiam i bardzo dziękuję za odpowiedzi!

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

To nie jest takie proste. To nie komputery przesyłają między sobą informacje lecz oprogramowanie na nich działające. To jest wbrew pozorom proces wieloetapowy, a wspominane IP to jeden z takich etapów obsługiwany przez protokół IP. Jego najważniejszym zadaniem jest adresowanie urządzeń w sieciach komputerowych. Jednak  adres IP określa tylko urządzenie (sieć w powiązaniu z maską), protokół IP nie zawiera informacji o tym jakie programy wymieniają się danymi. Ta informacja zawarta jest np. w protokole TCP lub UDP i  jest nią numer tzw. portu. Urządzenia w sieciach komunikują się z wykorzystaniem IP i numerów portów.

2 godziny temu, jugan1 napisał:

Co on z tym zrobi? Przekaże wszystkim pc w podsieci? Czy kompletnie nic? Musiałbym teoretycznie podać 2 adresy komputera B, ale nie widziałem nigdzie takiego przypadku w internecie.

Wracając do tematu. Do routera dotrze więc informacja o adresie IP (routera) i numerze portu. W konfiguracji routera należy więc użyć mechanizmu,  który umożliwi przekierowanie danych do urządzenia "za routerem". To tzw. PORT FORWARDING. Podstawowy model komunikacji w sieciach to komunikacja typu KLIENT<->SERWER i jeśli ten serwer nie posiada publicznego IP i jest wewnątrz innego LAN to wspomniane przekierowanie portów na routerze należy aktywować..

Jeśli zaś urządzenie pełniące funkcję serwera (nadrzędną) posiada publiczne IP to nie ma sobie co zawracać tym głowy. Za prawidłową komunikację będzie odpowiedzialna usługa NAT działająca na routerze sieci LAN. Od strony programowej musisz znać nazwy domenowe urządzeń lub ich adresy IP,  rodzaj używanego protokołu do transportu danych TCP lub UDP wraz z numerem portu, na którym urządzenie pełniące nadrzędną funkcję w parze KLIENT<->SERWER nasłuchuje połączeń

W sieci jest dużo informacji o tym jak one działają - np. pasja-informatyki.pl - poczytaj

Zobacz także tutaj -  zobacz.

Pozdrawiam,

Edytowano przez Belferek
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Przede wszystkim bardzo dziękuję za odpowiedź!

Oczywiście o portach wiem. 

Może napiszę jak rozumiem Twoją odpowiedź ( jeśli jest coś źle to proszę o poprawę ) oraz zadam dodatkowe pytania:

Jeżeli komputer A wysyła wiadomość do komputera B, który jest w innej podsieci to wystarczy podać adres routera podsieci w której jest komputer B. Na routerze musi być włączone przekierowywanie danych.

Czy ogólnie w Polsce routery mają włączone przekierowywanie danych? Czy wysyłając coś z mojego komputera do komputera znajomego z drugiego końca Polski mogę liczyć na to, że przekierowywanie będzie włączone?

Załóżmy, że komputer A wysyła wiadomość do komputera B w innej podsieci. Przekierowywanie danych jest włączone na routerze. Jednak w tej samej podsieci do której należy komputer B jest jeszcze komputer C, który też czeka na wiadomość na danym porcie. Czy wysyłając wiadomość z komputera A oba komputery (B, C ) otrzymają wiadomość? Czy router wyśle do wszystkich tą wiadomość?

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
19 minut temu, jugan1 napisał:

Jeżeli komputer A wysyła wiadomość do komputera B, który jest w innej podsieci to wystarczy podać adres routera podsieci w której jest komputer B. Na routerze musi być włączone przekierowywanie danych.

To za mało - koniecznie trzeba znać numer portu i rodzaj protokołu (TCP lub UDP) za pomocą których będą transmitowane dane. Nie mówimy o przekierowaniu danych lecz przekierowaniu portów (port forwarding). Ten router obsługujący sieć w której pracuje komputer B na podstawie właśnie numeru portu przekieruje komunikację do wnętrza LAN - do komputera B.

 

19 minut temu, jugan1 napisał:

Czy ogólnie w Polsce routery mają włączone przekierowywanie danych?

Generalnie nie. W przypadku własnego routera masz dostęp do jego panelu konfiguracyjnego. W przypadku urządzeń dostępowych dostawców internetowych to już może być różnie.

 

19 minut temu, jugan1 napisał:

Jednak w tej samej podsieci do której należy komputer B jest jeszcze komputer C, który też czeka na wiadomość na danym porcie. Czy wysyłając wiadomość z komputera A oba komputery (B, C ) otrzymają wiadomość? Czy router wyśle do wszystkich tą wiadomość?

To działa tak, że w konfiguracji przypisujesz przekierowanie na 1 IP w sieci LAN. Na rysunku masz pokazane jak np. u siebie przekierowałem port 8081 dla protokołów UDP i TCP do lokalnego urządzenia 10.0.0.100

Pozdrawiam,

Clipboard 1.jpg

Edytowano przez Belferek
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

No to załóżmy, że chciałbym wysłać wiadomość z komputera A na komputer B w innej podsieci. Chciałbym to wszystko wykonać na porcie 6666 przez tcp. Zatem jeśli dostawca internetu nie ustawi przekazywania wiadomości do komputera B na porcie 6666 dla tcp to wiadomość nie dojdzie? To musiałbym zadzwonić do dostawcy, aby to włączył?

Udostępnij ten post


Link to post
Share on other sites

I tu mogą się pojawić problemy, a dodatkowo musisz pamiętać, że i IP na 99,99% też nie będzie stałe lecz zmienne.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

W takim razie jak mogę się połączyć z takim komputerem B w innej podsieci? Powiedzmy, że na komputerze byłby jakiś serwer. Chciałbym wysłać do niego jakieś żądanie.

Udostępnij ten post


Link to post
Share on other sites

No przecież widzisz sam, że najlepiej byłoby korzystać z usług ISP, którzy nie ograniczają użytkownikowi możliwości przekierowywania portów do wnętrza swoich LAN i dają możliwość użycia kilku publicznych IP lub stwarzają możliwość użycia swojego, a nie ich routera.

Można także pomyśleć o pośredniku czyli np. A<->C<->B , można pomyśleć o publicznych IP dla A i B....itd.

Poszukaj na tym forum wiele było wątków dot. komunikacji w sieci więc po co się tu rozpisywać.

Pozdrawiam,

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Najprościej będzie użyć ipv6 - wtedy oba komputery będą się widzieć bez konieczności jakichkolwiek pośredników.

Problemem może być jedynie ISP, który nie oferuje ipv6 a jednocześnie nie pozwala na skonfigurowanie tunelu (np. ten, od którego mam net) 😞

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...