Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Система имен доменов DNS (Domain Name System) позволяет обращаться к компьютерам не только по IP адресам, но и по индивидуальным именам. Например, IP адрес 192.102.249.3 задает имя cerfnet.com Когда сеть была молодой, существовало простое пространство имен, достаточно было загрузить файл hosts.txt, поддерживаемый NIC (сетевой информационный центр). Если файла нет, то требовалось указывать IP адрес. Nic изменяла файл. Это возможно только в маленькой сети.
В Internet применяется иерархическое пространство имен. Определенное имя DNS обозначает компьютер. Каждое имя называется меткой.
Домен сфера деятельности, выполнение каких-либо функций. Здесь ftp сервер FTP, Microsoft организация, com коммерческая.
DNS хорошо организованная распределенная база данных.
Три типа доменов первого уровня:
Firm |
Фирмы |
Rec |
Отдых |
Store |
Торговые фирмы |
Info |
Информация |
Web |
Объекты Web |
nom |
прочие |
Arts |
искусство |
Имена образуются конкатенацией: хост. поддомен. домен kernal.generic.edu.
Информационный центр InterNIC обслуживает домены высшего уровня (дает имена). Организации обслуживают свою зону (дают имена нижнего уровня).
Сервер доменов (сервер DNS) программа, преобразующая имена доменов в IP адрес. Чтобы соединиться с каким-либо компьютером, сначала обращаются к серверу DNS. Серверы DNS организованы иерархически, Дерево DNS включает несколько уровней :
DNS состоит из
Все серверы DNS дублированы с точки зрения надежности. Первичный сервер (работающий) передает всю информацию вторичному (дублирующему) один раз за несколько часов.
Клиент обращается к своему серверу DNS. Если адрес находится в зоне этого сервера, то клиент получает адрес. Если домен находится вне зоны, то выполняется преобразование адресов:
Поле |
Содержание |
Пример |
SOA |
Ответственный за домен сервер. Самый доступный источник информации. |
Ns1.nougle.com |
NS |
Серверы имен узла или домена. Перечислены все серверы имен домена/. |
Ns1.nougle.com Ns2.nougle.com Ns3.nougle.com |
А |
IP адрес |
H1.nougle.com 128.1.1.1 H2.nougle.com 128.1.15.1 Aliases Nt1.nougle.com H1.nougle.com |
MX |
Узел обмена почтовой информацией. Сервер обмена почтой для домена ing.nougle.com с приоритетом 5 (9). |
Ing.nougle.com 5 mail1.nougle.com Ing.nougle.com 9 mail2.nougle.com |
PTR |
Доменное имя узла |
|
CNAME |
Каноническое имя узла. Узел определяется альтернативным доменным именем |
|
TXT |
Простой текст |
|
SRV |
Запись о расположении службы |
|
RP |
Ответственное лицо |
В больших динамичных сетях включена поддержка DHCP Dynamic Host Configuration Protocol. Адрес компьютеру дается автоматически это
Например, на 100 компьютеров можно использовать 50 адресов. Работа с DHCP возможна при наличии сервера WinNT.
При конфигурации TCP/IP
WINS автоматически отслеживает изменения при динамическом выделении IP адресов. Кроме того позволяет использовать имена NetBIOS. Например, одинаково преобразуются имена:
One имя NetBIOS, доменное имя One.Comp.com,
Two- имя TCP/IP, доменное имя Two.Comp.com
Средства WINS предоставляет сервер Windows NT. Если сервера нет, или временно не работает, то можно использовать файл Lmhosts.sam.
При установке Windows дается имя NetBIOS.
При статическом выделении адреса надо указать
При динамическом выделении адресов сервером DHCP
Указать IP адреса маршрутизаторов (шлюзов). Умалчиваемый шлюз недоступен.
Статическое выделение адреса TCP/IP |
Динамическое выделение адреса DHCP |
IP адрес хоста |
- |
Доменное имя компьютера |
Доменное имя компьютера |
Имена серверов DNS |
Имена серверов WINS |
IP адреса маршрутизаторов |
IP адреса маршрутизаторов |
DHCP имеет несколько режимов:
Освобождения IP адреса:
При использовании DNS, если сервер временно не доступен, для распознавания имен используем файл ASCII hosts.sam из папки Windows. Файл содержит таблицу узлов:
При использовании DHCP, если сервер временно не доступен, для распознавания имен используем файл ASCII Lmhosts.sam из папки Windows. Можно преобразовывать имена NetBIOS. Файл содержит таблицу узлов, содержит ключевые слова:
#PRE предварительно загружаемые имена (при загрузке Windows),
#DOM- указание удаленного компьютера имен доменов,
#include включение файла на другом компьютере к распознаванию.
102.54.94.96 my
102.54.95.98 boss
102.54.94.99 server #pre #dom:tiger сервер в домене tiger
#include c:\mydir\Lmhosts мой собственный файл
#include \\source\dir\Lmhosts альтернативный источник
WinSock имеет функции преобразователи, которые являются клиентами сети Интернет. Эти функции открывают коммуникационной канал и посылают запрос серверу домена. gethostbyname();
gethostbyaddr();
Функция преобразования DNS имени в IP адрес
Struct hostent FAR * PASCAL FAR
gethostbyname(const char FAR* name);
lpHostEnt=gethostbyname(“cerfnet.com”);
Возвращаемое значение lpHostEnt указатель на структуру PHOSTENT. Содержание структуры:
{
char FAR* h_name; //официальное имя хоста
char FAR* FAR*h_aliases; //массив псевдонимов
short h_addrtype; // тип возвращаемого адреса константа AF_INET
short h_length; //длина адреса константа AF_INET_LENGTH
char FAR* FAR* h_addr_list;
//список адресов хоста порядок сетевой
#define h_addr h_addr_list[0]
}
Содержание структуры сохраняется только до следующего вызова gethostbyname(). Если функция выполнена успешно, то получим адрес в виде десятичного сточкой:
LPSTR szIPAddr;
szIPAddr=inet_ntoa(*(LPIN_ADDR)*(lpHostEnt->h_add_list));
h_add_list указывает на список IP адресов сетевого компьютера (по числу интерфейсов). Первый адрес преобразуется к десятичному с точкой.
Char FAR* PASCAL FAR inet_ntoa(struct in_addr in)
Структура содержит адрес в двух формах 4 байта и 2*2 байта. Возвращает указатель на строку, содержащую IP адрес «десятичное с точкой».
Преобразуем IP адрес в формате десятичное с точкой в 32 разрядный адрес:
DWORD dwIPAddr;
DwIPAddr=inet_addr(“129.79.28.27”);
Получаем адрес в переменной 32-х разрядной dwIPAddr. По этому адресу получим имя компьютера:
LpHostEnt = gethostbyaddr ((lpstr)&dwIPAddr, AF_INET_LENGTH,PF_INET);
Результат получаем в поле h_name структуры hostent:
LpHostEnt->h_name;
Выводы:
В UNIX строка текста заканчивается переводом каретки (CR), в ДОС CR+LF. В других системах переводом строки (LF). Прервать программу в разных система Ctrl^C или Esc. Устранение несоответствия это функция уровня представления, которую выполняет протокол виртуального терминала TELNET.
Виртуальный терминал NVT (RFC 854) - это воображаемое устройство, выполняющее соглашение о работе компьютерного терминала. В спецификации NVT указано, какими символами нужно кодировать.
Формат NVT. Для кодирования используется ASCII код, на 1 символ затрачивает 7 битов можно кодировать 128 символов. Для командные символов используем восьмой бит. Всего кодируют 95 символов и 33 управляющих символов, из которых NVT использует только 8: NUL,BEL,CR,LF,BS,HT,VT,FF.
Позволяет получить информацию о пользователях. Запросы Finger выполняются в формате NVT:
Программа Finger содержит:
Начало работы. Инициализация сокета:
#define WINSOCK_VERSION 0x0101
WSADATA wsaData;
WSAStartup(WINSOCK_VERSION,&wsaData);
lpHostEnt=gethostbyname(“cerfnet.com”);
lpHostEnt указатель на структуру, содержащую сведения о компьютере.
2. Создаем сокет:
hSocket = socket (PF_INET, SOCK_STREAM, DEFAULT_PROTOCOL)
DEFAULT_PROTOCOL- протокол по умолчанию.
3.Получение информации о сетевой службе:
LpServEnt=getservbyname(“Finger”,NULL);
“Finger”- указатель на имя службы. NULL указатель на протокол по умолчанию.
Функция обращается к базе данных по сетевым службам, в которой хранится информация о Finger, Ftp, Mail, Telnet. Файл SERVNET содержит данные о сервисе. Структура servent содержит данные о сетевой службе.
struct servent
{ char FAR* s_name; // название службы
char FAR* FAR* s_aliases;// список псевдонимов
short s_port; // номер порта протокола (79)
char FAR* s_proto; //транспортный протокол, работающий с этой службой
}
Функция getservbyname() исследует базу данных с информацией о сервисе:
Имя сервиса |
Протокол, порт |
Псевдоним |
Echo |
7/tcp |
- |
Echo |
7/udp |
- |
Smtp |
25/tcp |
|
Time |
37/tcp |
Timserver |
Time |
37/udp |
Timserver |
ftp |
21/tcp |
|
Finger |
79/tcp |
Если получаем информацию о службе echo с использованием функции:
Getservbyname(“echo”,NULL);
То заполняем структуру Servent:
s_name[]=”echo”;
s_aliases=NULL;
s_port=7;
s_proto[]=”tcp”;
4. Соединяем сокет
Структура адреса сокета:
SOCKADDR_IN sockAddr;
sockAddr_in
{short sin_family; // тип адреса сокета AF_INET
u_short sin_port; // номер порта
struct in_addr sin_addr;// IP адрес удал.компьютера
char sin_zero[8]; // не используется
};
Для обращения к удаленному компьютеру нужен его адрес. В структуре sin_addr содержится объединение union, служащее для IP адреса 4*8 2*16 бит.
Формируем структуру адреса сокета:
sockAddr.sin_family=AF_INET;
sockAddr.sin_port=iFingerPort;
sockAddr.sin_addr=*((LPIN_ADDR)*lpHpstEnt->h_addr_list);
Соединяем сокет:
hconnect = connect(hSocket,(PSOCADDR) & sockAddr, sizeof(sockAddr));
Чтобы соединить сокет, вызываем функцию connect() с аргументом дескриптор сокета и адрес сокета.
Чтобы получить дескриптор сокета, вызываем socket(),указывая тип протокола tcp или udp.
Для создания сокета следует заполнить структуру данных, указав порт протокола и IP адрес удаленного компьютера.
Чтобы получить номер порта, вызаваем getservbyname(), указывая наименование сетевой службы и протокол.
Чтобы получить IP адрес, вызываем функцию для DNS gethostbyname().
5.Посылаем запрос Finger
Используем функцию send():
nCharSend = send(nSocket, szFingerQuery, lstrlen (szFingerQuery), send_flags);
SzFingerQuery[100] буфер для хранения запроса Finger
lstrlen (szFingerQuery)-
send_flags=0 - флаги функции send могут быть MSG_DONTROUTE нельзя маршрутизировать, MSG_OOB данные вне диапазона.
Для запроса обо всех пользователях нужно передать пустую строку.
Запрос нужно записать в буфер SzFingerQuery. Чтобы сформировать его в NVT нужно добавить CRFL (\n):
wsprintf(szFingerQuery,”%s\n”,FINGER_QUERY);
nCharSend = send(nSocket, szFingerQuery, lstrlen (szFingerQuery), send_flags);
Функция возвращает количество переданных байтов. Текст сообщения находится в FINGER_QUERY имя пользователя.
6. Получаем ответное сообщение
Данные принимаем в цикле:
Do
{ nCharRecv = recv(nSocket, (LPSTR)&szFingerInfo[n], sizeof(szFingerInfo)-n, RECV_FLAGS);
n+=nCharRecv;
}
while(nCharRecv>0);
Корневой домен
ARPA
mil
int
gov
edu
com
et
org
ae
ru
zw
microsoft
star
sun
win
nets
proto
Host1
Host2
Host3
Сервер корневого домена
Сервер informika.ru
Сервер indiana.edu
Сервер dec.com
Программа-клиент
Программа-сервер
Клиент определитель имен
Сервер имен
IBM.com
Сервер имен
корневой
Сервер имен
DHCP клиент
DHCP сервер В
DHCP сервер А
DHCPDISCOVER FFFFFF
IP? Срок?
DHCPOFFER B
DHCPOFFER A
DHCPREQUEST к А
IP? Срок?