[uylug-varios] IPv6
etrapani
etrapani at unesco.org.uy
Fri Feb 17 18:10:49 PST 2012
> Es que la idea de 'happy eyeballs' tal como se hablo en el IETF es
> preferir la conexion mas rapida y cachear ese resultado a nivel del
> sistema operativo, o de la aplicacion al menos. Ya no es mas el
> preferir IPv6 siempre, como era antes.
En el draft (miré el histórico, arriba de todo) nunca la opción fue
preferir IPv6 siempre, en todas las versiones hablan de encontrar la
manera óptima. Igual en el último (07) le dan una "pequeña ventaja a
IPv6" al seguir la preferencia del sistema operativo (manifestada en
getaddrinfo()) y la explicación está buena, es para ahorrar tráfico
sobre IPv4, porque es de esperar que cada vez haya menos infraestructura
dedicada a IPv4 y más a IPv6.
En MacOSX si anda IPv6 *y también* IPv4, se queda con el más rápido.
No sé si va en línea con el draft. El ejemplo es que cuando andan los
dos dejan caer IPv4.
Sobre el cacheo, ojo que no es a nivel del sistema operativo, el cache
se hace donde sea que se esté resolviendo el happy eyeballs, que puede
ser exclusivamente de aplicación (tipo Firefox). Lo importante es
cachear en algún lado para no seguir haciendo todo doble.
En una versión más vieja que encontré[1] de algo relacionado se habla
incluso de ¡elegir entre IPv4, IPv6, TCP y SCTP!
> Esto tiene algunas consecuencias muy interesantes a la hora de
> desarrollar aplicaciones web, y me lo encontre cuando estuve
> trabajando en la aplicacion del concurso IPv6.
> Lo que pasa es que ya no es mas deterministico que stack se va a
> usar, lo cual hace que un reload de la pagina pueda venir por un
> stack
> diferente que el usado para la anterior, lo cual altera bastante la
> gestión de sesiones en PHP, Django y otros frameworks web.
El draft dice en esta sección[2] explícitamente que eso no debe
suceder: "While it is tempting to use Happy Eyeballs to maintain
responsiveness, web browsers MUST NOT change their Same Origin Policy
because of Happy Eyeballs, as that would create an additional security
exposure.".
En particular en Rails no he visto a nadie hablar de ese problema con
las sesiones (no digo que no exista, sólo que nunca lo oí mencionar).
> Incluso la
> carga de la *misma* pagina termina a veces trayéndose algunos objetos
> por v4 y otros por v6. Esto probado con Firefox y Chrome en OSX y con
> Chrome en Linux.
Si son objetos del mismo servidor, entonces está muy mal implementado o
no es por el "happy eyeballs". O sea, si lo detectaste, yo creo habría
que reportarlo como bug. Después que se "rompió" IPv6 en Firefox agarré
confianza para eso ;), si querés lo reporto yo. Hay que tener una
versión de navegador y una página donde pase el problema, algo que lo
haga reproducible.
> En algun momento el comportamiento de happy eyeballs
> supongo se va a ir al kernel, que es donde mas sentido tiene que
> esté.
¿En el kernel? No veo que pueda ir ahí. Primero llamás a
getaddrinfo() y después a connect(). Visto desde el kernel, ¿cómo
podrías implementar "happy eyeballs"? Los pasos del algoritmo te quedan
en dos llamadas diferentes. EL draft en las estrategias sugiere que el
kernel recuerde prefijos y direcciones que no conectan. Eso ayudaría a
la aplicación al volver inmediatamente la conexión, pero es eso, una
ayuda, no la implementación.
Para mí, como en MacOSX eso es parte de una biblioteca. Yo entiendo
que adentro del kernel no podés porque connect() ya trae *una* dirección
y las alternativas (ipv4 o ipv6) están en espacio de usuario, las tiene
la aplicación después de la llamada a getaddrinfo. Y además no me suena
mucho a tarea del kernel andar reintentando y buscando alternativas. El
kernel tiene que crear el socket y hacer el connect con la dirección que
el programa le diga,punto. Lo demás va afuera, creo yo.
La única que se me ocurre es agregar alguna metafunción que haga el
"happy eyeballs", pero más que en el kernel iría en libc, ¿no? ¿O me
estoy perdiendo algo?
Eduardo.
[1] http://tools.ietf.org/html/draft-wing-http-new-tech-00#section-1
[2]
http://tools.ietf.org/html/draft-ietf-v6ops-happy-eyeballs-07#section-5.6
More information about the Uylug-varios
mailing list