ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.03.2025

Просмотров: 1168

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Список вопросов на экзамен

Часть 1. Сети. 3

Часть 2. Сокеты. 26

Часть 1. Сети.

255.255.255.0 - Маска для сети класса с.

1.2. Модель osi. Физический уровень.

1.3. Модель osi. Канальный уровень.

1.4. Модель osi. Сетевой уровень.

1.5. Модель osi. Транспортный уровень.

1.6. Модель osi. Сеансовый уровень.

1.7. Модель osi. Уровень представления.

1.8. Модель osi. Прикладной уровень.

1.9. Адресация в ip-сетях.

1.10. Протоколы arp и rarp. Их место в стеке протоколов ip.

1.11. Маршрутизация в ip-сетях.

1.12. Структуризация ip-сетей с помощью масок.

255.255.255.0 - Маска для сети класса с.

1.13. Протокол tcp. Его место в стеке протоколов tcp/ip.

1.14. Протокол udp. Его место в стеке протоколов tcp/ip.

1.15. Протоколы надёжной доставки пакетов. Концепция квитирования.

1.16. Маршрутизаторы. Их место в сетевой модели osi.

1.17. Понятие маршрута. Принципы построения таблиц маршрутизации.

1.18. Понятие топологии сети. Средства объединения сетей с произвольной топологией.

1.19. Понятие стека сетевых протоколов. Стек протоколов tcp/ip.

1.20. Понятие сетевого интерфейса. Модель сетевого интерфейса для ip-сети.

Часть 2. Сокеты.

2.1. Технология клиент-сервер.

2.2. Событийная модель соединения сокетов.

2.3. Особенности программирования сетевого приложения.

2.4. Этапы организации соединения сокетов.

2.5. Организация сетевого соединения со стороны клиента.

2.10. Сокеты, как средство межпрограммного взаимодействия.

2.11. Сокеты. Их место в сетевой модели osi.

2.12. Сокеты. Их место в стеке протоколов ip.

2.13. Сокеты в ос Windows. Технология Windows Sockets.

2.14. Средства библиотеки mfc для работы с сокетами.

2.16. Передача данных через сокет.

2.17. Приём данных через сокет.

2.18. Способы закрытия сетевого соединения между сокетами.

2.19. Типы сокетов. Область их применения.

2.20. Понятие номера порта для протоколов транспортного уровня сетевой модели osi.

Источники:

http://helpsite.narod.ru/vc/mfc/268.htm

2.15. Организация работы с сокетами средствами языка C++.

Програмирование сокетов идет поэтапно:

1.Создание сокета

2.Привязка сокета к локальным именам

3.Установка связи

4.Передача данных

5.Закрытие сокета

Для работы с сокетами средствами языка C++ можно создать объект классаCAsyncSocketи использовать его члены. См. предыдущий билет.


2.16. Передача данных через сокет.

// функция реакции на возможность передачи

void CProtocol::OnSend(int ErrCode)

{

CAsyncSocket::OnSend(ErrCode);

m_SendDataSize = 0;

while (m_SendDataSize < m_SendMemory.GetSize()) // пока есть данные для отправки

{

int n = Send(((BYTE*)m_SendMemory.GetAddr() + m_SendDataSize), m_SendMemory.GetSize()-m_SendDataSize); // запись в буфер сетевухи

// Анализ ошибок

if (n == SOCKET_ERROR)

{

ErrCode = GetLastError();

if (ErrCode != WSAEWOULDBLOCK)

{

CString s;

s.Format("Ошибка при передаче! Код ошибки %u", ErrCode);

MessageBox(0,s,"Сообщение",MB_OK);

Close();

}

}

else m_SendDataSize+= n;

}

m_SendMemory.Alloc(0);

m_SendDataSize = 0;

}

// функция посылки данных

void CProtocol::SendPacket(const void* p, DWORD size)

{

m_SendMemory.AddToMemory(&size, sizeof(DWORD)); // добавление размера данных

m_SendMemory.AddToMemory((BYTE*)p, size); // и свмих данных

OnSend(0);

}

2.17. Приём данных через сокет.

// получение данных

void CProtocol::OnReceive(int ErrCode)

{

CAsyncSocket::OnReceive(ErrCode);

if (m_IsReceiveSize) // Прием размера данных

{

int n = Receive((BYTE*)&m_ReceiveSize+m_ReceiveDataSize, sizeof(DWORD)-m_ReceiveDataSize);

// Анализ ошибок

if (n == SOCKET_ERROR)

{

ErrCode = GetLastError();

if (ErrCode != WSAEWOULDBLOCK)

{

CString s;

s.Format("Ошибка при приеме длины! Код ошибки %u", ErrCode);

MessageBox(0,s,"Сообщение",MB_OK);

Close();

}

}

else

// Анализ принятых данных

{

m_ReceiveDataSize+= n;

if (m_ReceiveDataSize == sizeof(DWORD)) // при приеме длины полностью

{

m_IsReceiveSize = false;

m_ReceiveData.Alloc(m_ReceiveSize);

m_ReceiveDataSize = 0;

}

}

}

else

// Прием самих данных

{

int n = Receive((BYTE*)m_ReceiveData.GetAddr()+m_ReceiveDataSize, m_ReceiveSize-m_ReceiveDataSize);

// Анализ ошибок

if (n == SOCKET_ERROR)

{

ErrCode = GetLastError();

if (ErrCode != WSAEWOULDBLOCK)

{

CString s;

s.Format("Ошибка при приеме собщения! Код ошибки %u", ErrCode);

MessageBox(0,s,"Сообщение",MB_OK);

Close();

}

}

else

// Анализ принятых данных

{

m_ReceiveDataSize+= n;

if (m_ReceiveDataSize == m_ReceiveSize) // при завершении приема пакета

{

m_ReceiveDataSize = 0;

m_IsReceiveSize = true;

//AfxMessageBox("Принят пакет!");

OnReceivePacket();

}

}

}

}

2.18. Способы закрытия сетевого соединения между сокетами.

Как оказалось, их 3:

  1. Соединение разрывается по инициативе самого сокета; Функция Close();

  2. Соединение разрывается при получении команды от удаленного сокета о разрыве соединения; Событие OnClose();

  3. Соединение разрывается при обрыве линии связи.

2.19. Типы сокетов. Область их применения.

Сокетом (от англ. socket - гнездо, розетка) называется специальный объект, создаваемый для отправки и получения данных через сеть. Этот объект создаётся внутри библиотеки сокетов, а программист, использующий эту библиотеку, получает уникальный номер (дескриптор) этого сокета. Конкретное значение этого дескриптора не несёт для программиста никакой полезной информации и может быть использовано только для того, чтобы при вызове функции из библиотеки сокетов указать, с каким сокетом требуется выполнить операцию.


Чтобы две программы могли общаться друг с другом через сеть, каждая из них должна создать сокет. Каждый сокет обладает двумя основными характеристиками: протоколом и адресом, к которым он привязан. Протокол задаётся при создании сокета и не может быть изменён впоследствии. Адрес сокета задаётся позже, но обязательно до того, как через сокет пойдут данные. В некоторых случаях привязка сокета к адресу может быть неявной.

После организации соединения сокетов любое чтение или запись через файловый дескриптор одного из них будут на самом деле передавать данные между ним и парным ему сокетом другого приложения.

Сокеты, независимо от вида, деляться на три типа: потоковые, сырые(windows их не "держит") и дейтаграммные. Потоковые сокеты работают с установкой соединения, обеспечивая надежную идентификацию обеих сторон и гарантируют целостность и успешность доставки данных, опираются на протокол TCP. Дейтаграммные сокеты работают без установки соединения и не обеспечивают ни идентификации отправителя, ни контроля успешности доставки данных, зато они быстрее потоковых, опираються на протокол UDP. Сырые сокеты, они предоставляют возможность ручного формирования TCP\IP пакетов.

Источник:

http://tehnofil.ru/?id=91


2.20. Понятие номера порта для протоколов транспортного уровня сетевой модели osi.

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

Пакеты, поступающие на транспортный уровень, организуются операционной системой в виде множества очередей к точкам входа различных прикладных процессов. В терминологии TCP/IP такие системные очереди называются портами. Таким образом, адресом назначения, который используется на транспортном уровне, является идентификатор (номер) порта прикладного сервиса. Номер порта, задаваемый транспортным уровнем, в совокупности с номером сети и номером компьютера, задаваемыми сетевым уровнем, однозначно определяют прикладной процесс в сети.

Назначение номеров портов прикладным процессам осуществляется либо централизовано, если эти процессы представляют собой популярные общедоступные сервисы, типа сервиса удаленного доступа к файлам TFTP (Trivial FTP) или сервиса удаленного управления telnet, либо локально для тех сервисов, которые еще не стали столь распространенными, чтобы за ними закреплять стандартные (зарезервированные) номера.

Локальное присвоение номера порта заключается в том, что разработчик некоторого приложения просто связывает с ним любой доступный, произвольно выбранный числовой идентификатор, обращая внимание на то, чтобы он не входил в число зарезервированных номеров портов. В дальнейшем все удаленные запросы к данному приложению от других приложений должны адресоваться с указанием назначенного ему номера порта.