Własny protokoł sieciowy

0

Ktoś miał już doświadczenie w tworzeniu własnego protokołu komunikacji sieciowej?
Nie mam tu na myśli UDP czy TCP, ale samego protokołu, który działa w oparciu o TCP/IP np. protokół gg (głównie na nim się wzoruję).

Zastanawia mnie kilka spraw:

  • czy TCP gwarantuje mi, że pakiet dotrze nieuszkodzony (zakładając, że odebrałem cały) czy lepiej w każdym umieszczać sumę kontrolną?
  • TCP gwarantuje, że pakiety dotrą w prawidłowej kolejności tak?
  • jak rozpoznajecie, jaki aktualnie pakiet odbieracie? Informujecie o tym za pomocą pakietu (info: typ + rozmiar nadchodzącego pakietu) poprzedzającego ten właściwy czy jakoś inaczej?
  • jak wykryć, że połączenie zostało zerwane? recv() powinno zwrócić 0?

Sieć i całą resztę obsługuję w WinAPI + WinSock. Co prawda pod Delphi, ale w przypadku użycia samego WinAPI język nie ma większego znaczenia.
Wykorzystuję gniazda asynchorniczne (nie blokujące).

0
  1. TCP jest właśnie od tego, aby zagwarantować, że odbierzesz swoje dane nienaruszone.
  2. Kolejność może być różna, ale TCP troszczy się o to, żeby je połączyć w dobrej kolejności.
  3. W nagłówku TCP jest kolejny numer pakietu, ale jak budujesz swój protokół NAD tcp to nie musisz sobie zawaracać tym głowy, bo Ciebie powinno interesować tylko kolejne całe wiadomości, a na ile to bedzię podzielone pakietół TCP to już nie Twoj interes.
0

No właśnie na razie nie zawracam sobie głowy kolejnością - po prostu odbieram dane tak długo, aż odbiorę cały pakiet, a potem go analizuję.

A załóżmy, że aplikacja (serwer) wysyła do drugiej aplikacji (klient gui) listę plików z danego katalogu - jak najoptymalniej przesyłać listę - każdy plik jako pojedyńczy pakiet, czy np. w postaci częściowych list - np. po 100 plików w pakiecie? Ma tu znaczenie, czy przekroczę rozmiar jednego pojedyńczego pakietu (chyba 1500 bajtów czy jakoś tak) co spowoduje podzielenie go czy też nie ma wpływu to na wydajność transmisji?

I tak na marginesie - spotkaliście się kiedyś z jakimiś ciekawymi problemami w trakcie pisania jakichś aplikacji sieciowych?

0

Zakładając, że nagłówki w małych pakietach stanowią około X% objętości to jak każdy plik będziesz wysyłać osobno, to będziesz mieć X% danych nie przenoszących konkretnych informacji. Jak wszystko wyślesz naraz to będziesz miał tylko jeden nagłówek i X spadnie Ci blisko 0 - reasumując, im więcej danych naraz tym mniejszy udział nagłówków w tych danych, więc optymalniej.

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