Para responder a su pregunta de cómo sabe , tiene que ver con lo que su navegador envía al servidor.
Tiene razón en que el sistema siempre lo resuelve en una dirección IP, pero el navegador envía la URL a la que intentó acceder en el encabezado HTTP.
Aquí hay un encabezado de muestra que encontré en línea, modificado para que parezca que usaste Firefox en Windows y escribiste apple.com
en la barra de direcciones:
GET / HTTP/1.1
Host: apple.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Así es como se vería el encabezado si usara su dirección IP:
GET / HTTP/1.1
Host: 17.142.160.59
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Ambos se enviarían a la misma dirección IP a través de un socket, pero el navegador le dice al servidor a qué accedió.
¿Por qué? Porque los servidores web con la misma dirección IP pueden alojar múltiples sitios y dar diferentes páginas para cada uno. No puede distinguir quién quiere qué página por dirección IP porque todos tienen la misma, pero puede distinguirlos por el encabezado HTTP.