Почему Tcp быстрее, чем http?

#wcf #networking #tcp #osi

#wcf #сеть #tcp #osi

Вопрос:

У меня была дискуссия с моим менеджером, он сказал, что tcp быстрее, чем http, потому что tcp работает на уровне ниже, чем http.

Затем я вспоминаю о модели OSI, которую я изучал в университете, поэтому я думаю, что он имел в виду, потому что http работает на прикладном уровне, но tcp работает на транспортном уровне (который на 2 уровня ниже), поэтому быстрее…

Итак, мои вопросы:

  1. Работают ли нижние уровни быстрее, чем верхние, потому что при передаче данных между двумя компьютерами требуется меньше уровней для доступа?

  2. Если да, то это означает, что когда мы используем tcp (т.Е. С WCF), обмен данными будет начинаться с транспортных уровней => вплоть до физического уровня => физического уровня другого компьютера => до транспортных уровней? Но я понимаю, что данные все еще должны быть поняты приложением, поэтому оно все равно должно перейти на уровень приложения?

Заранее спасибо.

Комментарии:

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

2. @Sim Я думаю, что теперь я понимаю, что вы имеете в виду: протокол на прикладном уровне предназначен для идентификации партнера по обмену информацией и т. Д., Но транспортный уровень предназначен для передачи данных. Когда HTTP передает данные, используя транспортный уровень, вот почему сравнивать не имеет смысла.

Ответ №1:

Всегда есть уровень выше TCP. Вопрос действительно в том, сколько накладных расходов добавляет материал выше TCP. HTTP является относительно коротким, потому что каждая передача требует большого количества заголовков как в запросе, так и в ответе. Он также имеет тенденцию использоваться в режиме без состояния, при котором каждый запрос / ответ использует отдельный сеанс TCP. Сохранение в режиме ожидания может улучшить сеанс для каждого запроса, но не заголовки.

Комментарии:

1. Значит, независимо от того, какие типы протоколов мы используем для передачи данных, нам все равно потребуется доступ ко всем уровням, от прикладного уровня до физического уровня и обратно к прикладному уровню на другой стороне? Означает ли это, что нет ничего общего с тем, какие слои находятся в протоколе?

2. «Всегда»? Что, если я использую сокеты напрямую?

3. @KingChan когда два приложения обмениваются данными, в памяти приложений всегда будут объекты, представляющие данные (прикладной уровень), которые принимаются в виде электрических сигналов по проводам (физический уровень). Будут затронуты все слои.

4. @JohnSaunders: Я думаю, Марсело означает, что вы используете сокеты по какой-то причине, и эта причина находится на уровне выше TCP

5. Состояние без состояния не подразумевает отдельного соединения. Реализации HTTP идут на многое, чтобы сохранить TCP-соединения.

Ответ №2:

Я отметил тег WCF, поэтому, полагаю, вы сравниваете netTcp, например, с basicHttp. Как указал @Marcelo Cantos, оба диска работают по протоколу TCP.

В то время как BasicHttpBinding использует HTTP для транспортировки, сообщение сначала инкапсулируется в XML (который довольно подробный и требует данных), а затем отправляется через HTTP, используя много данных для заголовков.

Напротив, netTcp использует (проприетарный?) Протокол, Где кодировка сообщений и заголовки специально разработаны для уменьшения использования полосы пропускания.

В обычном сценарии вы не увидите никакой разницы, но при работе с большим количеством запросов или большими объемами данных (особенно двоичных данных, которые должны быть закодированы, чтобы поместиться в XML, что увеличивает его размер), вы можете получить преимущества, используя netTcp.

Ответ №3:

Вы правы: TCP и HTTP — это протоколы, которые работают на разных уровнях.

В общем: для того, чтобы приложения могли использовать сеть, они должны работать на прикладном уровне. Скорость, с которой работает любой данный протокол, зависит от накладных расходов, которые он требует. HTTP обычно работает через TCP, поэтому он требует всех накладных расходов TCP, всех накладных расходов уровней под TCP и всех накладных расходов, которые требует сам HTTP (у него несколько довольно больших заголовков).

По сути, вы сравниваете яблоки с апельсинами при сравнении скоростей TCP и HTTP. Имеет больше смысла сравнивать TCP с UDP с другими протоколами транспортного уровня — и HTTP с FTP с другими протоколами прикладного уровня.

Комментарии:

1. Теперь мне интересно, так что это средние уровни, которые не связаны со скоростью, в основном это то, как на скорость влияет то, как работают протоколы… Итак, чтобы узнать, какой протокол работает быстрее, чем другой, мне нужно знать работу каждого протокола?

2. Как насчет аналогии с автомобилем? Это все равно, что сказать «Honda Element работает медленнее, чем 4-цилиндровый двигатель». 😉