#wcf #networking #tcp #osi
#wcf #сеть #tcp #osi
Вопрос:
У меня была дискуссия с моим менеджером, он сказал, что tcp быстрее, чем http, потому что tcp работает на уровне ниже, чем http.
Затем я вспоминаю о модели OSI, которую я изучал в университете, поэтому я думаю, что он имел в виду, потому что http работает на прикладном уровне, но tcp работает на транспортном уровне (который на 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-цилиндровый двигатель». 😉