Первый пакет, который будет отправлен при просмотре - PullRequest
2 голосов
/ 20 марта 2009

Представьте себе пользователя, сидящего за компьютером, подключенным к Ethernet. У него открыт браузер. Он вводит "www.google.com" в адресной строке и нажимает ввод.

Теперь скажите мне, какой первый пакет появится в Ethernet.

Я нашел этот вопрос здесь: Вопросы для интервью по программированию сокетов и многопоточности

Поскольку я не специалист по сетевым технологиям, я бы хотел услышать ответ (я бы предположил, что это "Это зависит";)).

С помощью такого инструмента, как Wireshark, я, очевидно, могу проверить поведение своих компьютеров. Я хотел бы знать, являются ли пакеты, которые я вижу (например, ARP, DNS, VRRP), одинаковыми в каждой конфигурации Ethernet (зависит ли это от ОС? Драйвера? Даже от браузера :)) и каковы условия в которые они появляются. Находясь на канальном уровне, возможно ли это зависит от физической сети (подключенной к концентратору / коммутатору / маршрутизатору)?

Ответы [ 6 ]

8 голосов
/ 24 марта 2009

Ответы, в которых говорится об использовании ARP для поиска DNS-сервера, обычно неверны.

В частности, разрешение IP-адреса для IP-адресов вне сети никогда не выполняется с использованием ARP, и маршрутизатор не отвечает за ответ на такой запрос ARP.

Маршрутизация вне сети выполняется клиентом , который знает, какие IP-адреса находятся в локальных подсетях, к которым он подключен. Если запрошенный IP-адрес не является локальным, то клиентский компьютер обращается к своей таблице маршрутизации, чтобы выяснить, на какой шлюз отправлять пакет.

Следовательно, в большинстве случаев отправленный первый пакет будет запросом ARP, чтобы найти MAC-адрес шлюза по умолчанию, если он еще не находится в кэше ARP.

Только тогда он сможет отправлять DNS-запрос через шлюз. В этом случае пакет отправляется с IP-адресом DNS-сервера в поле IP-адресата, но с MAC-адресом шлюза в пакете Ethernet.

6 голосов
/ 20 марта 2009

Вы всегда можете скачать wireshark и посмотреть.


Хоть испортишь веселье.

Если предположить, что IP-адрес хоста не кэшируется, а MAC-адрес DNS-сервера не кэшируется, первое, что будет отправлено, будет широковещательное ARP сообщение, пытающееся выяснить MAC-адрес DNS-сервера (на который маршрутизатор будет отвечать своим собственным адресом).

Далее имя хоста будет разрешено с использованием DNS. Затем возвращенный IP-адрес будет разрешен с использованием ARP (снова маршрутизатор ответит своим собственным адресом), и, наконец, сообщение HTTP будет фактически отправлено.

2 голосов
/ 28 мая 2009

На самом деле, это зависит от множества начальных условий, которые вы не указали.

  1. Предполагая, что на ПК установлена ​​операционная система, содержащая локальный преобразователь кэширования DNS (мой делает), первое, что происходит перед отправкой любых пакетов, - это поиск в кеше IP-адреса. Это сложно, поскольку "www.google.com" не является полностью определенным доменным именем, т. Е. В нем отсутствует конечная точка, поэтому распознаватель DNS будет принимать любые записи, уже находящиеся в кеше, которые сначала соответствуют его списку поисковых доменов. Например, если ваш список поиска домена "example.com". а затем "yoyodyne.com." затем кэшированные ресурсы, соответствующие именам "www.google.com.example.com". "Www.google.com.yoyodyne.com." и, наконец, "www.google.com." будет использоваться, если доступно. Также обратите внимание: если веб-браузер является одним из наиболее популярных, и на ПК установлена ​​достаточно текущая операционная система, и хост имеет по крайней мере один сетевой интерфейс с назначенным IPv6-адресом глобальной области (и хост находится в сети где www.google.com имеет записи AAAA в своем горизонте DNS), тогда удаленный адрес сервера может быть IPv6, а не IPv4. Это будет важно позже.

  2. Если удаленный адрес веб-сервера Google был локально кэширован в DNS, а кэш ARP / ND6 содержит запись для адреса IPv4 / IPv6 (соответственно) маршрутизатора по умолчанию, то первый переданный пакет будет быть пакетом TCP SYN, полученным из адреса интерфейса, подключенного к маршрутизатору и предназначенного для кэшированного удаленного адреса IPv4 / IPv6. В качестве альтернативы маршрутизатор по умолчанию может быть доступен через некоторый туннель уровня 2 или уровня 3, и в этом случае пакет SYN будет соответствующим образом инкапсулирован.

  3. Если удаленный адрес веб-сервера Google был , а не локально кэширован, то сначала хост должен будет запросить записи A и / или AAAA в списке поиска домена DNS в последовательности пока не получит положительный ответ. Если первый адрес сервера разрешения DNS в конфигурации преобразователя находится в одном из локальных диапазонов подсети IPv4 или в локально подключенном префиксе IPv6 с битом L = 1, установленным в объявлении маршрутизатора, и кэш ARP / ND6 уже содержит запись для рассматриваемого адреса первым отправляемым хостом пакетом является прямой запрос DNS для записи A или записи AAAA, соответствующей первому полному доменному имени в списке поиска домена. В качестве альтернативы, если первый DNS-сервер не доступен для адресации по ссылке, а маршрутизатор по умолчанию уже имеет запись в кэше ARP / ND6, тогда пакет запроса DNS будет отправлен на маршрутизатор по умолчанию для пересылки на сервер DNS.

  4. В случае, если локальный DNS-сервер, подключенный к сети, или маршрутизатор по умолчанию (соответственно, как это может быть в случае выше) не имеют записи в кэше ARP / ND6, то первый пакет, который будет отправлять хост, будет либо запрос ARP или запрос соседа ICMP6 для соответствующего адреса.

Да, но подождите ... это еще ужаснее. Существуют несколько странные крайние случаи, когда первый пакет, который посылает хост, может быть запросом LLMNR, инициированием IKE, или ... или ... или ... насколько вы действительно заботитесь обо всем этом, buckaroo?

1 голос
/ 20 марта 2009

Если имя хоста отсутствует ни в кеше DNS, ни в файле hosts, первый пакет отправится в DNS.

В противном случае первый пакет будет HTTP GET.

1 голос
/ 20 марта 2009

Ну, что бы вы ни пытались сделать, первое, что происходит, это некоторые данные, связанные с протоколом Ethernet. В частности, адаптеры Ethernet должны решить, доступна ли шина Ethernet (поэтому здесь происходит определенное обнаружение коллизий)

Трудно ответить на ваш вопрос, потому что это во многом зависит от типа сети Ethernet, которую вы используете. Более подробную информацию о передаче Ethernet можно найти здесь и здесь

1 голос
/ 20 марта 2009

Это зависит

Понял. Например. локальный кеш DNS содержит адрес? Если нет, то поиск DNS, вероятно, будет первым делом.

...