Дизайн протокола передачи данных

Я пишу протокол, чтобы передать гигабайты данных по сети, используя TCP, попытаться самостоятельно учиться немного о программировании на протоколах. Я не уверен в том, как проектировать этот протокол передачи, чтобы передать данные самым быстрым и самым эффективным способом.

Я использую QT на окнах.

В данный момент мой дизайн моего прикладного протокола (часть, чтобы передать данные) следующие:

  1. Сначала стреляет в данные для входа в систему.
  2. Пишет первый пакет данных (в гнездо) 4 килобайтов, и затем ждет сервера, чтобы подтвердить, что у этого есть пакет.
  3. , Когда сервер подтверждает получение пакета данных (сочиняя интервал "1"), пишет следующие 4 килобайта.
  4. , Когда все данные были переданы, посылает md5sum данных, переданных серверу.
  5. , Если сервер подтверждает снова с интервалом 8, передача данных, заканчивает.

В данный момент я не в состоянии получить скорости выше, чем 166KB/sec на том же самом компьютере, передавая более чем 127.0.0.1. Я пытался прочитать другие проекты протокола, но есть едва любая документация относительно протоколов передачи данных, которые можно написать для их применения.

Дизайн протокола то, что я отправил неправильно или страдающий от некоторых серьезных проблем? Протокол должен ждать каждого пакета, который будет подтвержден сервером, или я должен писать его непрерывно?

3
nl ja de
да, TCP - надежный протокол потока. Это гарантирует в предоставлении заказа ваших данных. Данные получены в том же самом заказе, как вы посылаете его. Хорошее понимание TCP поможет вам вся ваша жизнь: en.wikipedia.org/wiki/Transmission_Control_Protocol
добавлено автор Ahmad Mushtaq, источник
TCP уже обращается, признают (ACK), контрольные суммы, и обычно, адаптивные алгоритмы для размеров полезного груза. Так все you' ре, делающее, кажется избыточным. Однако, 166KB/s кажется чрезвычайно медленным на localhost.
добавлено автор Brett Hale, источник
Абсолютно. Стек TCP/IP будет заботиться об отправке, подтверждении, повторении, заказе, и т.д. Вам нужно только беспокойство о возвращаемых значениях от чтение-запись гнезда требования.
добавлено автор Brett Hale, источник
Таким образом, я должен постоянно писать в ГНЕЗДО, не ожидая сервера, чтобы послать подтверждение?
добавлено автор user1066991, источник
Заказ также совпадет с заказом писания? например, Я пишу пакету 1-100 в порядке возрастания, пакеты будут получены в том же самом порядке по возрастанию? TCP гарантирует это?
добавлено автор user1066991, источник

1 ответы

Во-первых, я рекомендовал бы провести некоторое время при чтении о TCP, и о Протокол раздвижного окна.

Я думаю, что есть 2 причины, почему ваше внедрение настолько медленное: во-первых, вы ждете подтверждения каждого пакета - очень медленный, необходимо использовать раздвижное окно. Во-вторых, вы используете вычисление контрольной суммы MD5. Нет ничего неправильно с этим, но TCP уже осуществляет некоторое основное вычисление контрольной суммы, и внедрение MD5, которое вы используете, может быть очень медленным.

И наконец, типичный способ узнать, почему что-то работает очень медленное, состоит в том, чтобы использовать профилирование.

0
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

Qt
Qt
703 участник(ов)

Группа взаимопомощи Qt.Делимся советами и помогаем друг другу. Наш информационный канал @ProQt Полезная информация для начинающих: #newcomer Познавательная информация: #fyi #didyouknow Наши друзья: Чат с/с++ @ProCxx

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest