151 meneos
2391 clics
La próxima versión de HTTP no usará TCP [ENG]
En sus continuos esfuerzos por agilizar las redes web, Google ha estado trabajando en un protocolo de red experimental llamado QUIC: "Quick UDP Internet Connections". QUIC abandona TCP, en su lugar utiliza su protocolo hermano UDP (User Datagram Protocol). [...] La Internet Engineering Task Force (IETF), el grupo de la industria que colabora en el diseño de protocolos de red, ha estado trabajando para crear una versión estandarizada de QUIC, que actualmente se desvía significativamente de la propuesta original de Google.
|
comentarios cerrados
Edito: Me he confundido, he contestado a VPN, en vez de SSL
En un paquete UDP puedes meter lo que quieras, cifrado o no. Incluso podrías montar una mixnet!
Yo propongo algo mejor que usar UDP y es mandar los ceros y unos usando videos de gatitos. Total es lo que busca la gente. ¿Para que tanto protocolo?
Por qué dices eso?
UDP es una auténtica maravilla de velocidad y fiabilidad en las conexiones actuales. Cualquier VPN que se precie va sobre UDP.
#2 UDP es tan viejo como TCP
Más que las diferencias te pediría que contases un poco las similitudes entre ambos, para acabar antes digo.
Pero vamos: es.diffen.com/tecnologia/TCP-vs-UDP
Por ejemplo, si estoy transmitiendo una comunicación telefónica, y un paquete falla, no tengo tiempo de retransmitirlo. Si lo mando de nuevo no me sirve de nada. Es preferible que el que está recibiendo escuche un silencio en lugar del paquete perdido a que el paquete llegue más tarde y suene como un ruido en medio de la conversación.
Cualquier intento de usar UDP para tráfico que no pueda perderse implicará agregar al UDP un método para verificar la llegada de paquetes y reenviarlos cuando no lleguen, cosa que ya tiene implementada el TCP.
Pero bueno, si quieren reinventar la rueda, quién soy yo para decir si no les saldrá mejor...
Jilipolleces que se eliminarían con TCP y ipv6 y eliminando el uso de NAT como elemento de seguridad.
Pero bueno, poco van a rascar con UDP respecto a HTTP2.
Ambos pueden ir cifrados con los metodos X Y Z o no.
a UDP se la suda la fiabilidad... es una de sus característiscas... por eso es rápido... él manda paquetes y ahí acabó su trabajo...
Y lo de que no tiene sentido TCP... no sé por qué lo piensas...
Si no me estoy equivocando, que puede ser, la capa de TCP y UDP, basicamente no se encarga de la seguridad/privacidad en absoluto. Es trabajo de otras capas superiores.
Es como decir que comer con cuchara y comer con tenedor son totalmente diferentes. O que el rojo y el azul son diametralmente opuestos.
Obviamente son diferentes.. pero dependiendo de como uses los cubiertos, o de como combines los colores al final el resultado no necesariamente va a cambiar mucho, por lo tanto puede ser que no importe demasiado.
Obviamente si profundizas hasta dos huevos idénticos tienen diferencias que los hace ser totalmente distintos al ser huevos individuales.
Al final tendran que re-implementar buena parte de lo que hace TCP, supongo que su idea es hacerlo mas eficiente de esta forma, pero habra que verlo para creerlo.
De hecho la noticia implica eso, que va a ir sobre QUIC, que es en parte más parecido a UDP que a TCP, así que no es una locura, se puede implementar las características que te interesen en cualquier capa.
Como nota, esta noticia y otras que han pasado más o menos desapercibidas, como que los navegadores empezarán en breve a usar DNS sobre HTTP, o cómo se ha hecho la implementación de HTTP/2 entre google y chrome.. es curioso como se está implementando todo cada vez más a nivel de aplicación,está claro que estas compañías están poniéndose las pilas y Google tiene una posición privilgiada a nivel de red al tener un porcentaje enorme de las conexiones HTTP tanto en cliente como en servidor, pero no se si esto será positivo a largo plazo, por la centralización, ¿alguien se lo ha planteado? bueno, es una reflexión tanto técnica como filosófica, si alguien quiere comentar adelante.
Una ya ha te la dicho #24, UDP no es fiable, otra cosa es que la conexión sea fiable y no te haga falta corrección de errores, en cuyo caso la fiabilidad que aporta TCP se convierte en una sobrecarga innecesaria.
Por otra parte TCP no sólo es fiabilidad, es muchas cosas más, desde flags que no se pueden implementar en UDP, que te permiten controlar sesiones, aplicar QoS, informar a la aplicación de eventualidades en la transmisión, controlar la cogestión, o adaptar el flujo de dato a las circunstancias del momento, o algo tan simple como reordenar (numerar) los segmentos.
O haces todo eso en alguna otra capa, o usas TCP, a veces no hace falta reinventar la rueda y TCP hace su trabajo bien, y NO es lento, obviamente entre la sobrecarga de alguna función y los ACK .. pero oye, si no lo hace TCP lo tendrá que hacer el protocolo de turno en aplicación, sesión, en enlace (puedes poner x25 chiste de viejuno), pero en algún sitio tendrás que confirmar, comprobar etc.. lo hará ese procolo mejor que TCP? pues a saber. Decir que es más lenta una VPN o una aplicación cualquiera sobre TCP o sobre UDP sin tener más datos es un poco aventurado, y aunque lo sea la diferencia puede no ser tan tan grande.
Otra cosa, hay VPNs "que se precian" que usan TCP, por ejemplo una VPN de OpenVPN te permite elegir TCP o UDP, en otros casos usan UDP pero porque no hay más cojones porque hay que atravesar la mierda de NAT (esto si que es un cáncer), por ejemplo las VPN con IPSec te crees que usan UDP por algo más que porque es necesario en situaciones como las de NAT o firewalls? pues no, ni TCP ni UDP.
Hace años que di redes y ya no me acuerdo.
Vi tu comentario de abajo sobre los números de secuencia, pero la finalidad de estos es evitar inyectar un paquete en una conexión existente y por ejemplo, hacer un reset y joder las conexiones ya establecidas.
Pero vamos no evita el MitM ni lo hace más difícil, ojala pero date cuenta que en ese caso el del medio va a generar nuevos números de secuencia para cada extremo.
Tiene más sentido porque en el navegador se implementan sesión, presentación y aplicación de OSI, así que es todo aplicación y pista, desde el punto de la red para que complicarse más.
Si realmente el rendimiento de esto es mejor que el de TCP y lo hace el mismo dispositivo, pues win-win, que eso no lo se eh, habrá que verlo en la práctica, solo digo que en principio no hay una capa óptima para encargarse de algo siempre y cuando todo el stack tenga sentido, no duplique funciones, se complemente y sea eficiente.
La cabecera de TCP son entre 20 y 60 bytes, de estos solo 8 bytes son secuencia y ACK, que es en lo que os centráis.
La cabecera de UDP son 8 bytes.
Si yo implemento UDP y le sumo un método de verificación en aplicación (que no tiene por qué ser de seq-ack), tengo bastante margen para optimizar como ves si no me interesan el resto de flags y opciones de TCP.
Por lo que vi en las especificaciones de QUIC, también multiplexa conexiones (como HTTP/2) evitando el hol-blocking.
Claro la velocidad importa y los bits que se ahorran, pero no todo es eso, yo decía lo de las cabeceras más para mostrar visualmente que hay mucho más que los acks y los seq que por los bits en si
Ejemplo claro, pero hay muchos más: IPv6, oh que guay, un procolo nuevo y seguro que reemplaza totalmente a IPv4, con muchas funcionalidades y que se pueden aplicar a muchas cosas, pero por ser de capa 3 hay que esperar a que todos los dispositivos intermedios lo implementen a cojones, y en esto los carriers, el middle mile, al que no le interesa invertir más en algo que ya funciona para ellos, frena el desarrollo.
A mi me rechina que el Chrome o el Firefox se encarguen de verificar que el paquete ha sido bien transmitido. Y me rechina tener que meter toda una capa http para verificar si los datos se transmiten correctamente, en lugar de confiarlo a una pila TCP/IP. Eso dificulta la creación de un cliente http/3.
#27 La comprobación de hashes de torrent no es una verificación de comunicación sino una autenticación de contenido. Se usa para distinguir contenidos con el mismo nombre, no que el contenido haya sido transmitido correctamente.
#19 Puedes hacerlo pero... ¿debes hacerlo?
Seguramente habrá diferencia de velocidad? pues seguramente, pero ni creo que sea tan grande ni creo que se pueda generalizar los resultados, estamos hablando de que a 1500 bytes el segmento, la diferencia de tamaño de las cabeceras de TCP y UDP es de un 0,08%, aunque se enviara un ACK por cada segmento, que no es así, sería un 4% de pérdida de throughput total, pero con la ventana deslizante y el piggybacking será infinitamente menos, pero vamos a ponernos en lo peor... yo no llamaría a esa diferencia "alucinante", no por lo menos lo suficientemente grande como para descartar la alternativa sin más información.
Vamos, que no todo es tan absoluto
Solo decía que udp tiene una ventaja oculta a parte de las evidentes y es el control de los routers.
Con udp un webserver puede agujerear los routers y eludir el NAT de los clientes (con la colaboración de ellos), por ejemplo para conseguir que dos clientes de un webserver hablen entre ellos sin necesidad de ningún server intermedio. Esto lo hace ahora mismo google con su standard webrtc para el browser especificamente con su librería ice. Si el udp está capado normalmente ya se necesita un servidor turn intermedio y los costes se disparan.
hombre para audio, vídeo o velocidad sin más (NFS etc.), donde la complejidad asociada a TCP redunda en un coste de eficiencia, pues se puede usar UDP.
Pero fiable UDP...
es rápido eso sí.
Por cierto la vpn que estoy utilizando también usa un método parecido (zerotier una sdn/vpn brutal y la técnica es udp hole punching, al que le molen las redes que se mire la doc de este proyecto que es una delicia), también lo usa como opción a y si no funciona recurre a un relay.
En lo de ipv6 y eliminar nat 100% de acuerdo, pero entonces ya no hablaríamos de usar tcp o udp sino muchos otros protocolos de transporte que hoy en día no tienen cabida por la mierda de nat.