какой пакет прибудет первым при отправке запроса - PullRequest
1 голос
/ 20 октября 2011

Как кто-то упоминал на другом форуме, что интервьюер задал вопрос, приведенный ниже.
Я не знаю точного ответа, но я бы сказал, HTTP-запрос?Любые предложения и объяснения

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

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

Спасибо

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

Нет гарантированного всегда правильного ответа, но есть несколько вероятных возможностей.

Если клиент настроен на DNS через UDP , то первым пакетом будет UDP-датаграмма, содержащая DNS-запрос для разрешения www.google.com на IP-адрес.

Если клиент настроен на DNS через TCP и браузер еще не установил TCP-соединение с DNS-сервером, первый пакет будет частью установления соединения с DNS, и, следовательно, ответ будет таким: SYN пакет первым вышел из шлюза.

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

Наконец, если браузер недавно посещал www.google.com и был создан для выполнения интеллектуального локального кэширования результатов DNS-запросов, то первый пакет будет SYN для установления нового соединения с веб-сервером Google.

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

2 голосов
/ 20 октября 2011

Строго говоря, с полностью чистым списком первым отправленным пакетом будет широковещательный запрос ARP («Кто имеет?») От клиентского ПК, пытающегося обнаружить MAC-адрес своего шлюза по умолчанию (или его DNS-сервера, еслинаходится в той же подсети, что и клиент).

0 голосов
/ 20 октября 2011

Интересно :) Я только что перефразировал это:

Client sends a SYN
Server replies with a SYN,ACK
Client sends an ACK
Client sends an HTTP GET

(как вы упомянули в своих комментариях, первым, очевидно, является поиск DNS)

...