O HTTP usa UDP?

103

Esta pode ser uma pergunta boba:

  • O HTTP usa o protocolo de datagrama do usuário?

Por exemplo:

Se alguém estiver transmitindo MP3 ou vídeo usando HTTP, ele usa UDP internamente para transporte?

Sesh
fonte
O que você quer dizer com: "a web"? Você quer dizer usar um navegador? Ou pela Internet pública?
benc
O que eu queria perguntar é que há um mp3 hospedado em uma URL algo como someserver / somemusic.mp3 . Se isso for transmitido para qualquer cliente - navegador, dispositivo etc., como o http transfere isso. Se bem entendi as respostas abaixo, isso é delegado à RTP.
Sesh de
A porta 80 UDP também é reservada para HTTP, o que acho engraçado, pois nunca a vi usada, nem poderia imaginar um bom uso para ela.
Joshua
1
É reservado porque o comitê da IANA tem uma imaginação mais flexível do que você. ;-) Eles imaginam que pode haver um bom uso para ele. Além disso, não reservar a porta 80 para UDP / HTTP a deixaria aberta para algum outro protocolo UDP, o que só causaria confusão ao falar da porta 80.
Jesse Chisholm

Respostas:

42

Normalmente, não.

O streaming raramente é usado no próprio HTTP, e o HTTP raramente é executado no UDP. Veja, no entanto, RTP .

Para algo como seu exemplo (no comentário), você não está mostrando um protocolo para o recurso. Se esse protocolo fosse HTTP, eu não chamaria o acesso de "streaming"; mesmo que em algum sentido da palavra seja, já que está enviando um recurso (possivelmente grande) em série pela rede. Normalmente, o recurso é salvo no disco local antes de ser reproduzido, portanto, a transferência de rede não é o que normalmente se entende por "streaming".

Como os comentaristas apontaram, no entanto, certamente é possível realmente transmitir via HTTP, e isso é feito por alguns.

desanuviar
fonte
16
Obviamente errado, não há nada no HTTP que impeça o streaming, apenas não é tão eficiente quanto um protocolo dedicado seria. HTTP Dyanmic Streaming usando chunks: adobe.com/products/httpdynamicstreaming HTTP Pseudo-Streaming: longtailvideo.com/support/jw-player/jw-player-for-flash-v5/…
Steve-o
14
streams do youtube em http.
nos
6
@ snowcrash09 Não consigo nem mesmo deletar, já que é aceito. Isso é estranho. Eu reescrevi, espero que seja menos ofensivo agora.
relaxe
1
Apenas sendo pedante sobre HTTP e streaming - lá atrás na era das trevas do vídeo QuickTime, houve server push, onde a conexão HTTP envia MJPEG (imagens JPEG múltiplas) cada um como uma parte separada de uma resposta MIME multiparte para a solicitação HTTP. Cada imagem JPEG chega e substitui a anterior no visor. Mas você está correto @unwind, isso raramente é feito hoje, já que o RTP / RTSP funciona melhor.
Jesse Chisholm
3
@nos Youtube não está transmitindo. O navegador baixa um arquivo em um cache e começa a reproduzir a partir do arquivo antes de ser completamente baixado. Embora simule o streaming, não é.
SimonStiph
113

De RFC 2616 :

A comunicação HTTP geralmente ocorre por meio de conexões TCP / IP. A porta padrão é TCP 80, mas outras portas podem ser usadas. Isso não impede que o HTTP seja implementado em cima de qualquer outro protocolo na Internet ou em outras redes. HTTP pressupõe apenas um transporte confiável; qualquer protocolo que forneça tais garantias pode ser usado; o mapeamento das estruturas de solicitação e resposta HTTP / 1.1 nas unidades de dados de transporte do protocolo em questão está fora do escopo desta especificação.

Portanto, embora não diga isso explicitamente, o UDP não é usado porque não é um "transporte confiável".

EDIT - mais recentemente, o protocolo QUIC (que é mais estritamente um pseudo-transporte ou um protocolo de camada de sessão) usa UDP para transportar tráfego HTTP / 2.0 e grande parte do tráfego do Google já usa esse protocolo. Atualmente está progredindo em direção à padronização como HTTP / 3 .

Alnitak
fonte
Existe algum servidor da web que pode ser configurado para aceitar conexões que não sejam TCP?
Spidey de
1
Há modificação para apache aqui pel.cis.udel.edu para usar o protocolo SCTP em vez de TCP.
nos
@nos Sim, e o Google também tem SPDY. Ambos são mecanismos de transporte confiáveis , no entanto.
Alnitak
5
@Alnitak SPDY é um protocolo da camada de aplicação, não um protocolo da camada de transporte.
Walking Wiki
@WalkingWiki você está correto, é claro - nesse contexto, o SPDY substitui o HTTP, não o TCP.
Alnitak
36

Talvez seja apenas um pouco de trivialidade, mas o UPnP usará mensagens formatadas em HTTP sobre UDP para descoberta de dispositivos.

Frank Schwieterman
fonte
4
Para ser mais específico, a parte do UPnP que usa mensagens UDP e semelhantes a HTTP é chamada de SSDP (Simple Service Discovery Protocol). A estrutura da mensagem é a mesma, mas o METHODconjunto é diferente. Depois disso, UPnP usa outros protocolos (e geralmente TCP) para o resto do que faz.
Jesse Chisholm
20

Sim, o HTTP, como um protocolo de aplicativo, pode ser transferido pelo protocolo de transporte UDP. Aqui estão alguns dos serviços que usam UDP e um protocolo subjacente para transferir dados HTTP e fazer streaming para o usuário final:

  • Método de transporte Jingle Raw UDP do XMPP
  • Um número para serviços que usam UDT --- Protocolo de transferência de dados baseado em UDP, que é um superconjunto do protocolo UDP.
  • O protocolo TLS (Transport Layer Security) que encapsula HTTP, bem como o XMPP mencionado acima e outros protocolos de aplicativo, tem uma implementação que usa UDP em sua camada de transporte; essa implementação é chamada de Datagram Transport Layer Security (DTLS).
  • Notificações push no GNUTella são solicitações HTTP enviadas pelo transporte UDP.

Este artigo contém mais detalhes sobre streaming sobre UDP e seu superconjunto confiável, o RUDP: UDP confiável (RUDP): o próximo grande protocolo de streaming?

Hadron Exótico
fonte
1
Outra pergunta: os principais navegadores da web suportam páginas da web HTTP sobre UDP?
user2284570
sim porque HTTP está na camada de aplicação e UDP na camada de transporte. navegadores não gravam pacotes TCP ou UDP. Eles também não gravam pacotes IP. Esses são tratados pelo sistema operacional e drivers. A camada Ethernet é tão baixa que pode estar no chip próximo ao MAC neste ponto.
yan bellavance
@yanbellavance isso é completamente incorreto. Enquanto os navegadores e servidores da web, de fato não geram matérias quadros TCP (nem aqueles UDP para que o assunto) que não tem que selecionar o transporte para uso e para HTTP normal que sempre TCP. O pseudo-protocolo QUIC mais recente, entretanto, usa UDP.
Alnitak
18

Claro, não precisa necessariamente ser transmitido por TCP. Implementei HTTP em cima de UDP, para uso na indústria de transmissão de TV via satélite.

jkc
fonte
6

Talvez alguma mudança neste tópico com o QUIC

QUIC (Quick UDP Internet Connections, pronuncia-se rápido) é um protocolo de rede de camada de transporte experimental desenvolvido pelo Google e implementado em 2013. O QUIC oferece suporte a um conjunto de conexões multiplexadas entre dois endpoints por meio do User Datagram Protocol (UDP) e foi projetado para fornecer proteção de segurança equivalente a TLS / SSL, junto com conexão reduzida e latência de transporte e estimativa de largura de banda em cada direção para evitar congestionamento. O objetivo principal do QUIC é otimizar aplicativos da web orientados a conexão que usam TCP atualmente.

Sébastien
fonte
4

Se você estiver transmitindo um mp3 ou vídeo que pode não ser necessariamente por HTTP, na verdade eu ficaria surpreso se fosse. Provavelmente seria outro protocolo sobre TCP, mas não vejo razão para que você não possa transmitir sobre UDP.

Se for você tem que levar em conta que não há certeza de que seus dados chegarão na outra ponta, mas posso supor que você conhece o UDP.

Para responder à sua pergunta, não, o HTTP NÃO usa UDP. No entanto, pelo que você falou, o streaming de mp3 / vídeo PODERIA acontecer por UDP e, na minha opinião, nunca deveria acontecer por HTTP.

Henry B
fonte
1
"streaming" sobre HTTP é comumente chamado (o que considero mais precisamente) "pseudo streaming" - uma taxa de bits regulada de dados sobre HTTP. Como acontece com muitas outras coisas em nosso mundo, os tipos de marketing abusaram da nomenclatura, deixando pessoas orientadas para os detalhes, como nós, apegando-se aos detalhes.
Stu Thompson
4

Em teoria, sim, é possível usar UDP para http, mas isso pode ser problemático. Digamos, por exemplo, que em seu exemplo um mp3 ou um vídeo esteja sendo transmitido, haverá um problema de pedido e alguns bits podem ser perdidos, pois o UDP não é orientado para conexão e não há mecanismo de retransmissão.

HM Manya
fonte
1
Bem mencionados: UDP is not connection oriented there is no retransmit mechanism.
ivanleoncz
4

Acho que algumas das respostas estão perdendo um ponto importante. A escolha entre UDP e TCP não deve ser baseada no tipo de dados (por exemplo, áudio ou vídeo) ou se o aplicativo começa a reproduzi-los antes que a transferência seja concluída ("streaming"), mas sim se é em tempo real . Os dados em tempo real são (por definição) sensíveis a atrasos, portanto, geralmente são mais bem enviados por RTP / UDP (Real Time Protocol over UDP).

O atraso não é um problema com os dados armazenados de um arquivo, mesmo se for áudio e / ou vídeo, portanto, provavelmente é melhor enviar por TCP para que quaisquer perdas de pacote possam ser corrigidas. O remetente pode ler adiante e manter o canal de rede cheio e o receptor também pode usar muitos buffer de playout para que não seja interrompido pela retransmissão TCP ocasional ou desaceleração momentânea da rede. O caso limite é quando toda a gravação é transferida antes do início da reprodução. Isso elimina qualquer risco de travamento da reprodução, mas geralmente não é prático.

O problema com o TCP para dados em tempo real não é a retransmissão, mas sim o buffer excessivo, pois o TCP tenta usar o pipe da maneira mais eficiente possível, sem levar em conta a latência. O UDP preserva os limites do pacote de aplicativos e não tem armazenamento interno, portanto, não introduz latência.

Phil Karn
fonte
3

A resposta: sim

Motivo: Veja o modelo OSI.

Explicação:

HTTP é um protocolo de camada de aplicativo, que pode ser encapsulado com um protocolo que usa UDP, fornecendo uma comunicação confiável mais rápida do que o TCP. O daemon do servidor e o cliente obviamente precisariam oferecer suporte a esse novo protocolo. O protocolo Quake 2 prova que o UDP pode ser usado sobre o TCP para fornecer uma base para um sistema de comunicação estruturado garantindo o controle de fluxo (por exemplo, ids de chunk).

experiente
fonte
1
Você não pode vencer o TCP manualmente sem mais informações do que deveria naquele nível.
Joshua
1
"UDP pode ser usado sobre TCP". Ambos são protocolos da camada de transporte, então é um ou outro.
opiáceo
2

http sobre udp é usado por algumas implementações de torrent tracker (e suportado por todos os clientes principais)

user2946342
fonte
4
Por favor, inclua referências para apoiar suas declarações.
Max Leske
1
Pelo que li, o protocolo Torrent UDP Tracker é binário e NÃO está formatado como HTTP. xbtt.sourceforge.net/udp_tracker_protocol.html
Jesse Chisholm
1

UDP é o melhor protocolo para streaming, porque não exige pacotes ausentes como TCP. E se não fizer demandas, o fluxo é muito mais rápido e sem buffer.

Mesmo o atraso do fluxo é menor que o TCP. Isso ocorre porque o TCP (como um protocolo muito mais seguro) exige pacotes ausentes, sobrescrevendo os existentes.

Portanto, o TCP é um protocolo muito avançado para ser usado para streaming.

Pavel
fonte
3
isso não responde à pergunta, mas poderia ser um raciocínio para uma resposta.
Hawken
2
re: "melhor protocolo para streaming", dado que "a velocidade de blocos de dados individuais" é mais importante do que "todos os dados passando". Se o seu stream não puder se recuperar facilmente de partes ausentes, é melhor usar o TCP. Muitos protocolos de vídeo de segurança escolhem o TCP por esse motivo - a confiabilidade é mais importante do que a velocidade bruta.
Jesse Chisholm