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

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

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

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

  • Чем более низкие уровни работают быстрее, чем верхние уровни, потому что для передачи данных между двумя компьютерами требуется меньшее количество слоев?

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

Спасибо заранее.

Ответ 1

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

Ответ 2

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

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

Вы по существу сравниваете яблоки с апельсинами при сравнении скорости TCP и HTTP. Имеет смысл сравнивать TCP vs UDP и другие протоколы транспортного уровня - и HTTP vs FTP против других протоколов уровня приложения.

Ответ 3

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

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

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

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