Чи HTTP використовує UDP?


103

Це може бути дурним питанням:

  • Чи HTTP коли-небудь використовує протокол User Datagram?

Наприклад:

Якщо хтось передає MP3 або відео за допомогою HTTP, чи використовує він внутрішньо UDP для транспорту?


Що ви маєте на увазі під "павутиною"? Ви маєте на увазі використання браузера? Або через публічний Інтернет?
benc

Що я хотів запитати, це сказати, що є mp3, розміщений на URL-адресі, щось на зразок someserver / somemusic.mp3 . Якщо це передається на будь-який клієнт - браузер, пристрій тощо, як це передає http. Якщо я правильно розумію відповіді нижче, це делеговано RTP.
Сеш

Порт 80 UDP також зарезервований для HTTP, що мені здається кумедним, оскільки я ніколи не бачив, щоб він використовувався, і я не міг уявити собі корисного для нього використання.
Джошуа

1
Це зарезервовано, оскільки комітет IANA має більш гнучку уяву, яку ви робите. ;-) Вони уявляють, що це просто може бути корисним для цього. Крім того, якщо не резервувати порт 80 для UDP / HTTP, це дозволить відкрити ще якийсь інший протокол UDP, який просто спричинить плутанину, коли йдеться про порт 80.
Джессі Чісгольм,

Відповіді:


42

Як правило, ні.

Потокова передача рідко використовується через сам HTTP, а HTTP рідко працює над UDP. Дивіться, однак, RTP .

Щось як ваш приклад (у коментарі), ви не показуєте протокол для ресурсу. Якби цей протокол був HTTP, я б не називав доступ "потоковим"; навіть якщо це в якомусь сенсі цього слова, оскільки він посилає (можливо, великий) ресурс серійно по мережі. Зазвичай ресурс буде зберігатися на локальному диску перед відтворенням, тому мережева передача - це не те, що зазвичай означає "потокове передавання".

Як зазначають коментатори, проте, звичайно, можна реально протікати по HTTP, і це роблять деякі.


16
Очевидно неправильно, в HTTP немає нічого, що не перешкоджає потоковому передачі, воно просто не настільки ефективно, як би виділений протокол. HTTP Dyanmic Streaming за допомогою фрагментів: adobe.com/products/httpdynamicstreaming HTTP Pseudo-Streaming: longtailvideo.com/support/jw-player/jw-player-for-flash-v5/…
Steve-o

14
ютуб потоки через http.
ніс

6
@ snowcrash09 Я навіть не можу його видалити самостійно, оскільки це прийнято. Це дивно. Я переписав це, сподіваюся, зараз це менш ображає.
розмотувати

1
Будучи педантичним щодо HTTP та потокового потоку назад у темні епохи відео QuickTime, там server push, де HTTP-з'єднання надсилає MJPEG (кілька зображень JPEG) кожен як окрему частину MIME багаточастинної відповіді на HTTP-запит. Кожне зображення JPEG надходить та замінює попереднє на дисплеї. Але ви праві @unwind, сьогодні це рідко робиться, оскільки RTP / RTSP працює краще.
Джессі Чизгольм

3
@nos Youtube не транслюється. Браузер завантажує файл у кеш і починає відтворювати його з файлу до повного завантаження. Хоча це імітує потокове, це не так.
SimonStiph

113

Від RFC 2616 :

Зв'язок HTTP зазвичай відбувається через TCP / IP-з'єднання. Типовим портом є TCP 80, але можна використовувати інші порти. Це не перешкоджає впровадженню HTTP поверх будь-якого іншого протоколу в Інтернеті чи інших мережах. HTTP передбачає лише надійний транспорт; будь-який протокол, що забезпечує такі гарантії, може бути використаний; відображення структури запиту та відповіді HTTP / 1.1 на одиниці транспортних даних відповідного протоколу виходить за межі цієї специфікації.

Тож, хоча це прямо не сказано, UDP не використовується, оскільки це не "надійний транспорт".

EDIT - останнім часом протокол QUIC (що більш суворо є псевдоперевезенням або протоколом сеансового рівня) використовує UDP для перенесення HTTP / 2.0 трафіку, і значна частина трафіку Google вже використовує цей протокол. В даний час прогресує до стандартизації як HTTP / 3 .


Чи є веб-сервери, які можна налаштувати на прийняття з'єднань, які не є TCP?
Spidey

1
Тут є модифікація apache pel.cis.udel.edu, щоб використовувати протокол SCTP замість TCP.
ніс

@nos Yup, і Google також має SPDY. Обидва є надійними транспортними механізмами.
Альнітак

5
@Alnitak SPDY - це протокол рівня додатків, а не протокол транспортного рівня.
Ходьба по Вікі

@WalkingWiki ви, звичайно, правильні - у цьому контексті SPDY замінює HTTP, а не TCP.
Альнітак

36

Можливо, трохи дрібниць, але UPnP використовуватиме форматування HTTP-повідомлень через UDP для виявлення пристроїв.


4
Якщо конкретніше, частина UPnP, яка використовує UDP та HTTP-подібні повідомлення, називається SSDP (Simple Service Discovery Protocol). Структура повідомлення однакова, але METHODнабір різна. Після цього UPnP використовує інші протоколи (і зазвичай TCP) для решти того, що робить.
Джессі Чисгольм

20

Так, HTTP, як протокол програми, може передаватися через транспортний протокол UDP. Ось деякі сервіси, які використовують UDP та базовий протокол для передачі даних HTTP та передачі їх кінцевому користувачеві:

  • Метод транспорту XDPP в Jingle Raw UDP
  • Число для служб, які використовують протокол передачі даних на основі UDT --- UDP, який є набором протоколу UDP.
  • Протокол транспортного рівня безпеки (TLS), що інкапсулює HTTP, а також згадані вище протоколи XMPP та інші додатки, має реалізацію, яка використовує UDP у своєму транспортному шарі; ця реалізація називається Datagram Transport Layer Security (DTLS).
  • Push-повідомлення в GNUTella - це HTTP-запити, що надсилаються через транспорт UDP.

Ця стаття містить більш детальну інформацію про потокове передавання через UDP та його надійний суперсет, RUDP: Надійний UDP (RUDP): Наступний великий протокол потокового передачі?


1
Ще одне питання: чи підтримують основні веб-браузери веб-сторінки HTTP через UDP?
користувач2284570

так, оскільки HTTP знаходиться в рівні програми, а UDP - у транспортному шарі. браузери не пишуть пакети TCP або UDP. Також не пишуть IP-пакети. З ними обробляються ОС та драйвери. Шар Ethernet настільки низький, що він може знаходитися в чіпі, близькому до MAC в цей момент.
Ян Беллаванс

@yanbellavance це абсолютно невірно. У той час як браузери і веб - сервери дійсно не створюють сирі TCP кадрів (ні ті , UDP для цієї речовини) , вони дійсно повинні вибрати транспорт для використання, а також для нормального HTTP , який завжди TCP. Однак новіший псевдопротокол QUIC використовує UDP.
Альнітак

18

Звичайно, це не обов'язково потрібно передавати через TCP. Я впровадив HTTP поверх UDP для використання в індустрії супутникового телебачення.


6

Можливо, якась зміна на цю тему з QUIC

QUIC (Quick UDP Internet Connections, вимовляється швидкий) - це експериментальний мережевий протокол експериментального рівня, розроблений Google та впроваджений у 2013 році. QUIC підтримує набір мультиплексованих з'єднань між двома кінцевими точками через User Datagram Protocol (UDP) і був розроблений для забезпечення захисту безпеки еквівалент TLS / SSL, поряд із зменшеною затримкою з'єднання та транспорту та оцінкою пропускної здатності в кожному напрямку, щоб уникнути перевантажень. Основна мета QUIC - оптимізувати веб-додатки, орієнтовані на з'єднання, які зараз використовують TCP.


4

Якщо ви передаєте mp3 або відео, які не обов'язково перебувають через HTTP, насправді я здивувався б, якби це було. Можливо, це буде ще один протокол через TCP, але я не бачу жодної причини, через яку ви не можете передавати протокол через UDP.

Якщо ви повинні взяти до уваги, що немає впевненості, що ваші дані надійдуть на інший кінець, але я можу вважати, що ви знаєте про UDP.

Щоб відповісти на ваше запитання, Ні, HTTP НЕ використовує UDP. Щодо того, про що ви говорите, хоча, потокове передавання mp3 / відео МОЖЕ відбуватися через UDP, і, на мою думку, ніколи не повинно відбуватися через HTTP.


1
"потокове передавання" через HTTP прийнято називати (що я вважаю найбільш точно) "псевдострімінг" - регульована швидкість передачі бітів даних по HTTP. Як і в нашому світі, маркетингові типи зловживали номенклатурою, залишаючи людей, орієнтованих на деталі, як ми, що розуміються на конкретних характеристиках.
Стю Томпсон

4

Теоретично так, можна використовувати UDP для http, але це може бути проблематично. Скажімо, наприклад, у своєму прикладі передається mp3 або відео, виникне проблема замовлення, і деякі біти можуть пропасти, оскільки UDP не орієнтований на з'єднання, немає механізму повторної передачі.


1
Ну зазначив: UDP is not connection oriented there is no retransmit mechanism.
ivanleoncz

4

Я думаю, що в деяких відповідях пропускається важливий момент. Вибір між UDP та TCP не повинен базуватися на типі даних (наприклад, аудіо чи відео) або на тому, чи програма починає відтворювати їх до завершення передачі ("потокове передавання"), а чи в реальному часі . Дані в режимі реального часу залежать від затримки (за визначенням), тому їх часто найкраще надсилати через RTP / UDP (протокол реального часу через UDP).

Затримка не є проблемою із збереженими даними з файлу, навіть якщо це аудіо та / або відео, тому, ймовірно, найкраще надсилатись через TCP, щоб будь-які втрати пакетів могли бути виправлені. Відправник може читати заздалегідь і підтримувати мережеву трубку повною, а приймач також може використовувати багато буферизації відтворення, щоб її не перервало випадкова повторна передача TCP або миттєве сповільнення мережі. Обмежувальний випадок, коли весь запис передається перед початком відтворення. Це виключає будь-який ризик зупинки відтворення, але часто недоцільно.

Проблема з TCP для даних у режимі реального часу - це не повторна передача, а надмірна буферизація, оскільки TCP намагається використовувати трубу максимально ефективно, без урахування затримок. UDP зберігає межі пакетів додатків і не має внутрішнього сховища, тому не вносить ніяких затримок.


3

Відповідь: Так

Причина: Дивіться модель OSI.

Пояснення:

HTTP - це протокол рівня додатків, який може бути інкапсульований протоколом, що використовує UDP, забезпечуючи, мабуть, швидший надійний зв’язок, ніж TCP. Демон сервера та клієнт, очевидно, повинні підтримувати цей новий протокол. Протокол Quake 2 доводить, що UDP може використовуватися через TCP, щоб забезпечити основу для структурованої системи зв'язку, яка забезпечує управління потоком (наприклад, ідентифікатори блоку).


1
Ви не можете перемогти TCP вручну без більшої інформації, ніж ви повинні мати на цьому рівні.
Джошуа

1
"UDP може використовуватися через TCP". Вони обоє протоколи транспортного шару, тож це той чи інший.
опіят


2

http over udp використовується деякими реалізаціями торрент-трекера (і підтримкою всіх основних клієнтів)


4
Будь ласка, додайте посилання на підтримку ваших тверджень.
Макс Леске

1
Як я читав, протокол Torrent UDP Tracker є двійковим і НЕ відформатований як HTTP. xbtt.sourceforge.net/udp_tracker_protocol.html
Jesse Chisholm


1

UDP - найкращий протокол для потокового передачі, оскільки він не вимагає відсутніх пакетів, таких як TCP. І якщо це не вимагає, потік набагато швидший і без буферизації.

Навіть затримка потоку менше, ніж TCP. Це тому, що TCP (як набагато більш безпечний протокол) висуває вимоги до відсутніх пакетів, замінюючи існуючі.

Таким чином, TCP - протокол надто розширений, щоб використовувати його для потокового передачі.


3
це не відповідає на питання, однак це може бути міркуванням для відповіді.
Хоукен

2
re: "кращий протокол для потокової передачі", враховуючи, що "швидкість окремих фрагментів даних" це важливіше, ніж "всі дані, що проходять через". Якщо ваш потік не може легко відновитись після пропущених фрагментів, то краще перейти з TCP. З цієї причини багато протоколів відеобезпеки вибирають TCP - надійність важливіша, ніж швидкість сировини.
Jesse Chisholm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.