Серверы в Интернете, так же, как и клиенты, идентифицируются адресами IP или по именам хостов (называемых также именами DNS). Обычно имя хоста, такое как
www.wrox.com
или
www.microsoft.com
, является понятным для пользователя и вводится в окне браузера Web. Адрес IP, с другой стороны, является идентификатором, который компьютеры используют для идентификации друг друга, и реально используется для обеспечения того, чтобы запросы и ответы Web направлялись на соответствующие машины.
Адрес IP является просто 32-битовым целым числом, которое обычно представляют в так называемом десятичном формате с точками как набор из четырех чисел — каждое между 0 и 255. Компьютер может иметь даже более одного адреса IP. Например, IP 100.100.100.31 при общении с другими компьютерами в Интернете через модем и адрес 10.0.0.1 при общении через свою сетевую карту с другими компьютерами в локальной сети. Следовательно, если другие компьютеры в локальной сети хотят послать сообщение этому компьютеру, они должны обращаться по адресу 10.0.0.1, в то время как компьютеры в Интернете должны обращаться к нему по адресу 100.100.100.31. Адреса обычно динамически присваиваются компьютеру каждый раз либо при загрузке (для компьютеров с постоянным соединением с интранет), либо при установлении связи (для компьютеров, соединенных с провайдером Интернета через модем или аналогичное устройство). Динамически присваиваемые адреса IP передаются компьютеру по мере необходимости из пула адресов, поддерживаемых его провайдером Интернета.
Люди редко вводят адреса IP непосредственно, а используют более понятные имена DNS, такие как
www.wrox.com
. Поэтому необходимо при отправке сетевого запроса сначала транслировать имя DNS в адрес IP, что выполняет один из нескольких серверов DNS.
Это организовано следующим образом: некая машина, соединенная с локальным компьютером (что означает либо выделенную машину в локальной сети, либо при модемном соединении машину в корпоративной сети, с которой происходит соединение), будет определена сервером DNS. Эта машина хранит огромную таблицу, отображающую имена DNS в адреса IP для всех известных ему компьютеров, и также содержит адреса IP других серверов DNS, имеющие возможность найти адреса, о которых она не знает. Каждый сетевой компьютер должен знать адрес IP по крайней мере одного локального сервера DNS (это один из элементов данных, которые необходимо предоставить при настройке сетевой конфигурации на компьютере). Когда посылается запрос, компьютер сначала запрашивает сервер DNS, чтобы он сообщил адрес IP, соответствующий введенному адресу домена. Затем, с помощью правильного адреса IP, направляется запрос. Обычно это происходит неявно и поэтому прозрачно, например при перемещении в Интернете.
Классы .NET для адресов IP
.NET предоставляет ряд классов, которые могут помочь в процессе поиска адресов IP и при получении информации о компьютерах-хостах.
IPAddress
Класс
IPAddress
представляет адрес IP, который доступен как свойство
Address
и может быть преобразован в десятичный формат с точками с помощью
ToString
.
IPAddress
реализует также статический метод
Parse
, эффективно выполняя обратное преобразование в
ToString
— из десятичной строки с точками в (целочисленный) адрес IP.
string ipString = ipAddress.ToString; // ipString будет присвоен
// текст "234.45.54.2"
IPAddress
предоставляет также ряд константных статических полей, которые возвращают известные специальные адреса IP, имеющие специальные значения.
//следующая строка задает обратную петлю как "127.0.0.1"
// адрес обратной петли указывает локальный хост
string loopback = IPAddress.Loopback.ToString;
// следующая строка задает адрес широковещания как "255.255.255.255"
// адрес широковещания используется для отправки сообщения
// всем машинам в локальной сети
String broadcast = IPAddress.Broadcast.ToString;
IPHostEntry
Класс
IPHostEntry
инкапсулирует информацию, связанную с определенным хостом (компьютером). Он делает доступным имя хоста с помощью свойства
HostName
(которое возвращает строку) и все адреса IP с помощью свойства
AddressList
, которое возвращает массив объектов
IPAddress
. Класс
IPHostEntry
будет показан в действии в примере
DNSResolver
ниже.
DNS
Класс
DNS
является классом, который может общаться с используемым по умолчанию сервером DNS, чтобы извлечь адреса IP. Двумя важными (статическими) методами здесь являются
Resolve
, использующий сервер DNS для получения данных хоста с заданным именем хоста, и
GetHostByAddress
, который также посылает назад эти данные, но в этот раз с помощью адреса. Оба метода возвращают объект
тем, что инкапсулирует возможность реально общаться с серверами для получения информации. Классы
IPAddress
и
IPHostEntry
, напротив, мало чем отличаются от структур данных, которые имеют подходящие свойства, позволяющие получить доступ к содержащимся в них данным.
Пример: DnsLookup
Связанные с DNS и IP классы будут проиллюстрированы с помощью примера, который ищет имена DNS. Этот снимок экрана показывает
DnsLookup
в действии.
Пример просто предлагает пользователю ввести имя DNS в основное текстовое поле. Когда пользователь нажимает кнопку
Resolve
, пример использует метод
Dns.Resolve
для извлечения ссылки
IPHostEntry
и выводит имя хоста и адреса IP. Отметим, что выведенное имя хоста может в некоторых случаях отличаться от введенного имени. Это происходит, если одно имя DNS (
www.microsoft.com
) действует просто как прокси для другого имени DNS (