-
Data: 2018-11-02 10:37:23
Temat: Re: opoznienia na switchu
Od: Mateusz Viste <m...@n...pamietam> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- własny ekran startowy
- Tani, ale szybki i niezawodny modem LTE...
- EPS12V
- Jaka moc wi-fi ?
- Karta dźwiękowa stereo
- Mini pecet
- drukarka potrzebna
- Rok 1973
- CFM (airflow) AMD Wraitha
- 16. Raport Totaliztyczny: Sprzedawanie zaszyfrowanych filmów na płytach Blu-Ray bez kluczy deszyfrujących
- 15. Raport Totaliztyczny: Średniowiecze Po,Zniszczeniu AmigaOS i Plan9
- USB3.x->HDMI/DP ze sterownikami w win11
- Dell ubija / przemianowuje swoje flagowe linie laptopów
- 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
Najnowsze wątki
- 2025-03-15 parking Auchan
- 2025-03-15 Art. 19.1 ustawy o ochronie praw autorskich
- 2025-03-15 przegląd za mną
- 2025-03-15 Na co komu okna
- 2025-03-15 Mój elektryk
- 2025-03-15 Fejk muzyczny czy nie fejk
- 2025-03-15 China-Kraków => Senior PHP Symfony Developer <=
- 2025-03-15 Wrocław => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, Produk
- 2025-03-15 Błonie => Analityk Systemów Informatycznych (TMS SPEED) <=
- 2025-03-15 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-03-15 Warszawa => Java Full Stack Developer (Angular2+ experience) <=
- 2025-03-15 Warszawa => Java Full Stack Developer (Angular2+) <=
- 2025-03-15 KOMU w RP3 pasuje "Rumuńska łatwość gmerania w wyborach" i dlaczego nie PO-Trzaskanym?
- 2025-03-15 China-Kraków => Key Account Manager IT <=
- 2025-03-14 Spalił się autobus :-)