Вот это прямо легко:
Браузер работает на 7 уровне модели OSI. Формируется пакет HTTP GET RFC1616.
Затем пакет спускается на 6 уровень модели и оборачивается в SSL если требуется
Затем пакет опускается на 5 уровень модели и прицепляется к сессии
———- ВСё выше = 5-ый уровень модели TCP/IP ———-
Дальше сформированный пакет опускается на уровень транспорта, где выбирается транспорт = TCP, а так же исходящий и целевой порт. В качестве исходящего выбирается любой >1024 свободный порт. Назначение выбирается по протоколу из файла /etc/services по соответствию, если принудительно не задано точное значение порта.
Дальше пакет спускается на сетевой уровень, где вписывается SourceIP твоей машины, а в качестве DestIP вставляется результат резолвинга типа A с помощью прикладной функции gethostbyname (по порядку /etc/hosts; local cache; NS)
Дальше пакет спускается на канальный уровень, где в качестве MAC источника подставляется MAC соответствующего твоего сетевого интерфейса, а в качестве назначения MAC маршрутизатора в твоём широковещательном домене. Сам MAC вычисляется по IP маршрутизатора протоколом ARP (широковещательный запрос ARP-WHO-HAS)
Дальше пакет уходит в сетевой интерфейс на физический уровень, где попадает на порт коммутатора (находящегося на обратном конце провода).
Коммутатор в свою очередь ищет порт, за которым видит MAC назначения, и направляет пакет туда. Если таковых портов нет - направляет пакет во все порты, кроме того, из которого трафик пришел
Когда пакет попадает на маршрутизатор (устройство видит свой MAC назначения, но не свой IP), устройство поднимает его на сетевой уровень и выполняет описанные выше действия со своей собственной таблицей маршрутизации.
Так будет происходить до тех пор, пока пакет не доберется до устрйоства, имеющего в т.ч. тот же IP адрес, где пакет поднимается на транспортный уровень, порт назначения в котором адресован конкретному приложению (веб серверу). Тот в свою очередь поднимается на прикладной уровень и обрабатывает протокол HTTP.
Ответ происходит в обратном порядке