Gniazda

0

Witam

Mam pytanko odnośnie gniazd, a dokładniej odnośnie tego skąd OS lub JVM wie do którego gniazda przesyłać dane po stronie server. Już tłumaczę o co chodzi. Mam sobie gniazdo serwera które metodą accept() przyjmuje połączenia od klientów. SUPER. Metoda accept() zawsze tworzy nowe gniazdo. Powiedzmy że podłączyło się do mnie dwóch klientów. Czyli po stronie serwera otrzymałem dwa nowe gniazda. Okazuje się że te gniazda mają ten sam port lokalny (powiedzmy że mój serwer nasłuchuje na porcie 4444). Czyli oba gniazda port lokalny mają ustawiony na 4444, oczywiście oba gniazda połączone są z różnymi klientami. Moje pytanie jest proste. Skąd OS lub JVM wie do którego gniazda przesłać dane pochodzące od któregoś z klientów ? Klient wysyłając dane wysyła je pod adres ip i port (powiedzmy że ip serwera to 127.0.0.1 port 4444). Czyli jeden i drugi klient wysyła w to samo miejsce , a jednak jedno gniazdo dostaje informacje zawsze od tego samego klienta a drugie zawsze od drugiego. Czy dodatkowo wysyłane są dane rozróżniające gniazda ?

Bardzo proszę o odpowiedz.
Pozdrawiam

0

wysyła przecież adres ip

0

Jaki adres ip.

Mam aplikacje serwera na hoście x.x.x.x i porcie y. Na serwerze mam dwa gniazda po zaakceptowaniu dwóch klientów (pierwsze gniazdo połączone jest z pierwszym klientem a drugie z drugim). Każde z tych gniazd ma port lokalny y.

Mam gdzieś dwóch klientów którzy nadają do serwera.
Pierwszy klient wysyła tekst "aaa" na adres x.x.x.x i na port y.
Drugi klient wysyła tekst "bbb" na adres x.x.x.x i na port y.

Jakimś "cudem" te dwie wiadomości są dostarczone odpowiednio "aaa" do gniazda pierwszego i "bbb" do gniazda drugiego w serwerze.
Więc pytam skąd OS lub JVM wie co do którego gniazda wysłać (po stronie serwera). Czy dodatkowo w wysyłanej wiadomości jest informacja o gnieździe ?

0

A takim "cudem" że serwer nasłuchuje stale na jednym gnieździe, a gdy podłącza się jakiś klient, tworzone jest nowe gniazdo do obsługi tego klienta po to zeby na pierwszym gnieździe serwer mógł dalej prowadzić nasłuch, w segmencie tcp jest tylko informacja o porcie, więc wydaje mi się że to serwer wiążę danego klienta z gniazdem.

0

i to po jego adresie ip.

0

Po ip ?

A jak z jednego ip połączy się dwóch klientów ?

0

To nic się nie stanie. Zresztą jak masz w domu router i łaczysz się z internetem z dwóch komputerów to przecież serwer odsyłający zawartość strony też śle wszytko na jeden adres.
Do poczytania zasady działania TCP/IP ze szczególnym uwzględnieniem warstwy transportowej i sieciowej. Podpowiem, że chodzi o budowę ramki danych.

0
Koziołek napisał(a)

To nic się nie stanie. Zresztą jak masz w domu router i łaczysz się z internetem z dwóch komputerów to przecież serwer odsyłający zawartość strony też śle wszytko na jeden adres.
Do poczytania zasady działania TCP/IP ze szczególnym uwzględnieniem warstwy transportowej i sieciowej. Podpowiem, że chodzi o budowę ramki danych.

Wiem jak działa TCP/IP od strony przełączników, routerów, adresów IP, portów itd.

Ja chciałem się dowiedzieć co jednoznacznie identyfikuje gniazdo w aplikacji servera. Wiadomo server przeważnie obsługuje kilka gniazd których adres lokalny jest zawsze taki sam (zakładam że gniazda powstały od tego samego gniazda nasłuchującego przy pomocy metody accept). Wiadomo w warstwie transportowej mamy porty, które jednoznacznie identyfikują aplikacje dla której system powinien dostarczyć dane - tu wszystko jest jasne. Tyle że te dostarczane dane są rozsyłane później na poszczególne gniazda - i tu była moja nie wiedza - nie wiedziałem co sprawia że jedne dane idą do jednego gniazda a drugi do drugiego - nie wiedziałem bo skupiłem się tylko na porcie lokalnym tych gniazd (a ten port jest taki sam we wszystkich zaakceptowanych gniazdach serwera). Zapomniałem że dane zawierają dodatkowo adres nadawcy - adres odbiorcy jest zawsze taki sam i jest to adres aplikacji serwera.

Czyli wyszło na to że gniazdo jest identyfikowane w aplikacji serwera przez 4 a dokładniej przez 5 wartości.

adres lokalny - w każdym gnieździe taki sam
port lokalny - w każdym gnieździe taki sam
adres docelowy - tu może być różnie
port docelowy - tu też może być różnie
i dodatkowo rodzaj transmisji TCP lub UDP.

Najważniejsze jest to że każde gniazdo ma inną niepowtarzalną kombinację tych wartości.

Te wartości są zawsze przesyłane wraz z danymi i dzięki temu wiadomo co do jakiego gniazda dać.

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