-
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
- Ten adapter nie obsłuży dysków HDD PATA 2.5 cala - producent kłamie czy ja jestem głupi ?
- Przedłużacz USB-C działa w połowie
- Fujitsu LIFEBOOK E746
- Alternatywny nośnik do monitoringu zamiast HDD?
- Pendrive, ale dysk
- Dyski HDD SATA 2,5'' >2TB
- Funbox 10 - Czy miał już ktoś styczność z tym sagemowym sprzętem?
- Konwersja dysku z MBR na GPT
- Przenosiny systemu
- soft dla detekcji stanu DMA (on,czy off)
- jak w chrome (forku chrome) wyznaczyc katalog profilu w dowolnym miejscu?
- Dziwnie padający Seagate
- Kwestia UPSa i elektryki tegoż
- Drukowanie bezprzewodowe - jaki interface ?
- Libre Office Krok Po Kroku - Komentarz
Najnowsze wątki
- 2025-01-04 13. Raport Totaliztyczny: Powszechna Deklaracja Praw Człowieka Nie Chroni Przed Wyzyskiem Ani Przed Eksploatacją
- 2025-01-04 Zbieranie danych przez www
- 2025-01-04 reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- 2025-01-04 w Nowym Roku 2025r
- 2025-01-04 Warszawa => Specjalista ds. IT - II Linia Wsparcia <=
- 2025-01-04 Warszawa => Java Developer <=
- 2025-01-04 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-04 Warszawa => System Architect (Java background) <=
- 2025-01-04 Wrocław => Application Security Engineer <=
- 2025-01-04 Chrzanów => Specjalista ds. public relations <=
- 2025-01-04 Katowice => Key Account Manager (ERP) <=
- 2025-01-03 Problem z odczytem karty CF
- 2025-01-03 Jazda z Warszawy do Krakowa teslą
- 2025-01-03 Wrocław => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-03 Warszawa => International Freight Forwarder <=