Supongamos que estoy descargando un archivo a través del protocolo HTTP. Los paquetes que contienen los fragmentos del archivo pueden llegar en cualquier orden. Entonces, ¿cómo sabe el descargador qué paquete es el primero en el orden? Estaba mirando los campos de un paquete HTTP.aquíy no encontré ningún campo de "Número de secuencia".
Después de pensar un poco en la pregunta, llegué a la conclusión de que HTTP es un protocolo de capa 7 y depende de los protocolos de las capas subyacentes. TCP, al ser un protocolo de capa 4, proporciona a HTTP este servicio de secuenciar los datos ya que el encabezado TCP tiene un número de secuencia (Lo encontré aquí).
Pero no estoy seguro de si esta teoría es correcta, así que quiero preguntarle a los expertos al respecto. ¿Existe algún otro mecanismo para abordar este problema?
Respuesta1
Entonces, en realidad, si no hay interrupción, el archivo se descarga con una única conexión TCP. Entonces tu descargador ni siquiera sabe que está fragmentado.
Puedes usar Wirehark y vereste ejemplo aquí
Si la conexión se cae o si el administrador de descargas quiere dividir la descarga para poder usar 4 conexiones, por ejemplo, debe configurar elencabezado de RANGO:
GET /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
Range: bytes=0-1023
En este caso, la respuesta sería
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
Respuesta2
Lo adivinaste.De RFC 2616 sección 1.4 Operación general, énfasis añadido:
comunicación HTTPnormalmente se realiza a través de conexiones TCP/IP.El puerto predeterminado es TCP 80 [19], pero se pueden utilizar otros puertos. Esto no impide que HTTP se implemente sobre cualquier otro protocolo en Internet o en otras redes.HTTP sólo supone un transporte fiable;se puede utilizar cualquier protocolo que proporcione tales garantías; el mapeo de las estructuras de solicitud y respuesta HTTP/1.1 en las unidades de datos de transporte del protocolo en cuestión está fuera del alcance de esta especificación.
"transporte confiable" es la jerga de redes para "entrega los datos sin pérdida (a menos que se indique), duplicación/reproducción, alteración o orden incorrecto".
Y de manera similar, HTTPS se ejecuta sobre TLS (anteriormente SSL), que se basa en TCP y proporciona esencialmente el mismo servicio (transporte confiable de flujo de bytes), pero con las propiedades adicionales de confidencialidad e integridad (a menos que se indique un error), incluso contra atacantes inteligentes en lugar de simplemente naturales. errores y fallas. Hay diferencias de rendimiento, pero AFAIK, las únicas diferencias de servicio son que TLS no proporciona el puntero "urgente" de TCP, también conocido como fuera de banda, ni cierre separado por dirección como los estados "medio cerrados" de TCP, y HTTP/HTTPS no. No los necesito.