-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!weretis.net!feeder4.news.weretis.net!proxad.net!feeder1-2.proxad.net!clea
nfeed1-b.proxad.net!nnrp1-1.free.fr!not-for-mail
From: Mateusz Viste <m...@n...pamietam>
Subject: Re: opoznienia na switchu
Newsgroups: pl.comp.pecet
References: <lnXBD.281801$Yn.171243@fx14.ams1> <pr9hgt$qt9$1@node1.news.atman.pl>
<ycYBD.376267$fw.333082@fx04.ams1>
<5bd8511f$0$15495$426a74cc@news.free.fr>
<dC6CD.311522$Yn.48051@fx14.ams1> <prbl8t$he8$1@node2.news.atman.pl>
<dxeCD.339844$2D.171600@fx12.ams1>
<5bd9a7d0$0$14294$426a74cc@news.free.fr>
<5MoCD.457564$0R.28472@fx02.ams1> <5bdaafc6$0$5481$426a74cc@news.free.fr>
<d%PCD.527088$zG.133939@fx23.ams1>
<5bdbfcde$0$21611$426a74cc@news.free.fr> <1...@t...com>
User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Date: 02 Nov 2018 09:37:23 GMT
Lines: 54
Message-ID: <5bdc1ad2$0$15111$426a74cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 02 Nov 2018 10:37:23 CET
NNTP-Posting-Host: 82.64.0.151
X-Trace: 1541151443 news-2.free.fr 15111 82.64.0.151:60158
X-Complaints-To: a...@p...net
Xref: news-archive.icm.edu.pl pl.comp.pecet:1260104
[ ukryj nagłówki ]On Fri, 02 Nov 2018 09:40:09 +0100, Roman Tyczka wrote:
> Widzę, że kolega obcykany w TCP, więc skorzystam z okazji i spytam.
> Na czym od strony TCP polega połączenie P2P, jak je uzyskać? Chodzi mi o
> niskopoziomowy dostęp do socketa, od strony programowej. Załóżmy, że
> chciałbym się pobawić w połączenia P2P i je zakodować na poziomie
> windowsowych socketów. Od czego zacząć, jak ugryźć?
Na tak zadane pytanie naprawdę nie wiem co odpowiedzieć, bo nie rozumiem
co kolega kombinuje. Odpowiem jak umiem.
Połączenie P2P to nic innego jak połączenie między jednym hostem a
drugim, bez udziału dedykowanego serwera. W praktyce jeśli chcemy móc
nawiązać połączenie w sposób niezależny od tego która ze stron jest
inicjatorem, to obie strony muszą posiadać socket otwarty w trybie LISTEN.
Czyli de facto oba hosty są "serwerami". Przykładem takiej implementacji
jest popularne NTP. NTP działa co prawda z UDP, ale przy TCP zasada jest
podobna. W naturze TCP leży pojęcie "serwera" i "klienta", więc dodatkowa
trudność przy TCP polega na ustaleniu kto będzie robił za serwer a kto za
klienta. Tutaj rozwiązania do głowy przychodzą mi (tak na zaraz) trzy:
1. jeśli adresy IP obu hostów są z góry znane, to ew. przyjąć że ten
niższy jest zawsze serwerem, więc niech wyższy się łączy.
2. oba hosty nasłuchują na porcie x, jednocześnie starając się nawiązać
równoległe połączenie z rozmówcą z innego socketu. Jak tylko komuś uda
się nawiązać połączenie, likwiduje swój socket nasłuchujący (a druga
strona zaprzestaje prób połączenia w drugą stronę).
3. oba hosty przechodzą losowo w tryb serwer/klient. Np. pierwsze 5s host
czeka na połączenie z zewnątrz. Jeśli się nie uda, to przechodzi w tryb
klienta i sam próbuje nawiązać połączenie z drugą stroną przez kilka
sekund. Długość okresów klient/serwer wypadałoby losować, coby uniknąć
nieszczęśliwej synchronizacji w której oba hosty zawsze są w tym samym
trybie.
Każda z powyższych metod ma swoje wady i zalety. Wybór zależy głównie od
założeń projektowych.
Od strony programowej nie ma tu nic szczególnego. Logika będzie różna
zależna od wersji 1/2/3, ale "klient" zawsze będzie musiał wykonać kroki
socket() + connect()
...a "serwer" zawsze będzie musiał wykonać kroki socket() + bind() +
listen() + accept()
Jeśli celem jest stworzenie jakiegoś własnego protokołu do wymiany
danych, to wybór UDP wydaje się (hobbystycznie patrząc) ciekawszy.
Pozwoliłby w dużo bardziej elegancki sposób rozwiązać etap nawiązywania
sesji, i pozwoliłby na dużo większą dowolność w implementacji metod
transferu danych.
Całkiem możliwe również że kompletnie nie zrozumiałem pytania, w takim
razie zalecam uściślenie.
Mateusz
Następne wpisy z tego wątku
- 02.11.18 10:59 Roman Tyczka
- 02.11.18 11:11 Marcin Debowski
- 02.11.18 11:25 Mateusz Viste
- 02.11.18 12:03 Mateusz Viste
- 02.11.18 12:41 Roman Tyczka
- 02.11.18 13:20 Mateusz Viste
- 02.11.18 23:33 m
- 03.11.18 01:12 Marcin Debowski
- 03.11.18 01:15 Marcin Debowski
- 03.11.18 02:51 Marcin Debowski
- 03.11.18 03:05 m
- 03.11.18 03:57 Marcin Debowski
- 03.11.18 09:13 Roman Tyczka
- 03.11.18 09:19 Mateusz Viste
- 03.11.18 09:43 nadir
Najnowsze wątki z tej grupy
- VMWare :)
- Co oznacza Wi-Fi? - po prostu nic!
- nowe programy wolniej rysują okna
- Drukara laserowa
- MSI B450 PRO VDH MAX - HDMI+DVI = 2 ekrany?
- Na tej Chmurce uciekły mi 2 posty
- Jakiś Volume
- Zniknął dźwięk na tylnym panelu
- Nowy, "szybki "komputer AsRock nie posiada modułu TPM
- Nowy, "szybki "komputer AsRock nie posiada modułu TPM
- wymiana ekranu w laptopie
- Re: Głośniki
- Re: Głośniki
- Fwd: Re: Głośniki
- Re: Głośniki
Najnowsze wątki
- 2024-05-14 Ustawy o rejestracji obcych agentów (wpływu): fuj Gruzja/Rosja v. cacy USA
- 2024-05-14 VMWare :)
- 2024-05-14 Ulm => Solution Engineer (m/w/d) Data Center Technologies <=
- 2024-05-14 Będziemy się znowu zrzucać na elektryki...
- 2024-05-14 Pompa ciepla Kaisai
- 2024-05-14 Przyłączenie działki do sieci elektrycznej
- 2024-05-14 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2024-05-14 Kraków => SAP WM Consultant / Execution <=
- 2024-05-14 Wrocław => Business Development Manager - obszar bezpieczeństwa IT <
- 2024-05-14 Poznań => Interactive/Experience Designer <=
- 2024-05-14 Poznań => Interactive/Experience Designer <=
- 2024-05-14 Białystok => ERP Implementer <=
- 2024-05-14 Przerabianie na Indonezje
- 2024-05-14 Kielce => UX/UI Designer <=
- 2024-05-14 Warszawa => Sales Representative for Outsourcing Services <=