Материалы к спецкурсу "Компьютерные науки"

E-mail

POP3

Исторически, почтовый ящик e-mail представлял из себя файл, в котором последовательно хранились письма в формате "Шапка", пустая строка, текст письма. Протокол POP3 предназначен для работы именно с таким форматом почтового ящика. В частности, удаление писем из середины файла это трудоёмкая операция, поэтому она откладывается на конец сеанса.

Команды клиента посылаются серверу в виде мнемонических текстовых сокращений с параметрами. Сервер отвечает кодом +OK в случае успешного выполнения или –ERR в случае ошибки. За кодом может идти дополнительная текстовая информация в произвольной форме.

После установления TCP соединения POP3-сервер посылает клиенту положительный отклик:

<<<+OK POP3 server ready

Далее клиент должен передать имя и пароль

>>>USER mike
<<<+OK
>>>PASS mypasswd
<<<+OK

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

>>>LIST
<<<+OK 2 messages (320 octets)
<<<1 120
<<<2 200
<<<.

Получение заголовков сообщения (Если последним параметром указать число N, больше чем ноль то будут выданы N первых строк письма.

>>>TOP 1 0
<<<+OK Message follows
<<<From:bob
<<<To:mike
<<<
<<<.

Чтение сообщения по номеру

>>>RETR 1
<<<+OK Message follows
<<<From:bob
<<<To:mike
<<<...
<<<...
<<< .

Пометка сообщений для удаления (удаление произойдёт при завершении сеанса)

>>>DELE 1
<<<+OK message 1 deleted
>>>DELE 2
<<<-ERR message 2 already deleted

Завершение сеанса и окончательное удаление стёртых писем

>>>QUIT
<<<+OK

SMTP

Минимальный набор SMTP команд: HELO, MAIL, RCPT, DATA и QUIT. Сервер отвечает трехзначной комбинацией цифр, называемой кодом ответа. Вместе с кодом ответа, как правило, передается одна или несколько строк текстовой информации. Первая цифра кода ответа означает, было ли выполнение команды успешно 2, неуспешно 4 и 5 или еще не закончилось 3.

Знаками >>> выделены команды клиента, а знаком <<< сервера. Проверить работу протокола можно командами telnet или netcat

 telnet mxs.mail.ru 25

<<<220  mxs.mail.ru ESMTP ready

Клиент осуществляет подключение к TCP порту 25, после чего ожидает приветственного сообщения с кодом 220 от сервера. Ответ сервера обязательно должен начинаться с полного доменного имени сервера: mxs.mail.ru в данном примере. В остальных командах возвращается необязательный текст в произвольной форме.

>>>HELO client.example.com
<<<250  mxs.mail.ru

Клиент идентифицирует себя посылкой команды HELO. В качестве аргумента указывается имя клиента: client.example.com. На этом этапе могут быть отвергнуты клиенты с именами, отсутсвующими в DNS.

>>>MAIL From:<user@example.com>
<<<250 sender OK

Команда MAIL идентифицирует автора сообщения. На этом этапе сервером может выполняться блокировка нежелательных отправителей.

>>>RCPT To:<user@mail.ru>
<<<250 recipient ОК

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

>>> DATA
<<<354 Enter mail, end with "." on a line by itself
>>>From: "Example user" <user@example.com>
>>>To: Test users
>>>Subject: Do not reply
>>>
>>>Test
>>> .
<<<250 Mail accepted

Клиент отправляет содержимое почтового сообщения с использованием команды DATA. Строка, содержащая только точку, указывает на конец сообщения.

>>>QUIT
<<<221 Bye

Команда, QUIT, прекращает обмен почтой.

Ethernet

MAC адрес

Адрес в Ethernet - 48 разрядное число, уникальное для каждого устройства. Уникальность обеспечивается делением адреса на две части - 24 разряда - номер производителя (назначается/продается централизовано) и 24 разряда - серийный номер изделия (устанавливается на заводе). Распределением блоков адресов занимается IEEE-SA - Registration Authority (https://standards.ieee.org). Номера производителей продаются по цене 2820$ за полный блок 24 разрядных серийных номеров из 16 000 000 изделий (цена в 2018 году) плюс 3260$ просят за сохранение имени покупателя в тайне. Кроме полного блока можно купить и часть блока кратную степени двойки.

Для удобства чтения человеком адреса записываются с помощью шестнадцатеричных цифр (1 цифра= 4 разряда). Формат записи отличается в разных ОС.

Windows 50-15-5D-E0-74-42
Linux 50:15:5D:E0:74:42
Cisco IOS 50155D-E07442

Структура фрейма Ethernet

MAC получателя MAC Отправителя Номер VLAN (не обязательно) Тип пакета Полезные данные Контрольная сумма
6 octets 6 octets (4 octets) 2 octets 46‑1500 octets 4 octets

Физические ограничения общей шины

Если Ethernet используется в топологии общей шины (соединения через HUBы) то максимальное расстояние между устройствами не должно превышать 200 метров. Обычно считают, что расстояние от устройства до HUBа не должно превышать 100 метров.

Для топологии звезда (устройства соединены через Switсh и) такого ограничения нет.

Протокол HTTP

Протокол HTTP используется в World Wide Web (WWW) начиная с 1990 года. Его версия описана 1.0 в RFC 1945, версия 1.1 в RFC 2068/

Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и ответ сервера состоит из строки запроса (ответа), сопровождаемой вспомогательными строками заголовка и тела. Строки заголовка отделяются друг от друга парой символов . Тело отделяется от заголовков пустой строкой. Заголовки могут быть любой длины, и сервер обязан либо обработать длинный заголовок, либо выдать соответствующий код ошибки. Тело запроса (ответа) представляет последовательность байтов, на которую не накладывается никаких ограничений.

GET /index.html HTTP/1.0
Host: www.example.com
User-Agent: Mozilla/4.05 (WinNT; 1)


НТТР/1.0 200 OK
Content-type: text/plain
Date: Fri, 10 Jan 1998 08:17:58 GMT
Server: Apache/1.2.6
Last-modified: Mon, 12 Jun 1997 21:53:08 GMT
Content-length: 14

Hello, world!

Клиент устанавливает связь с сервером по назначенному номеру порта (по умолчанию - 80)., и, не дожидаясь никакой реакции от сервера, посылает запрос, указав HTTP-команду, называемую методом, адрес документа и номер версии HTTP. Например:

В примере используется метод GET, которым с помощью версии 1.0 HTTP запрашивается документ index.html с виртуального сервера www.example.com.

Послав запрос и заголовки, клиент может отправить дополнительные данные. Эти данные используются главным с методом POST для передачи .

Сервер отвечает на запрос клиента следующим образом:

Первая часть строка ответа сервера - строка состояния, содержащая три поля: версию HTTP, числовой код ответа и текстовое описание этого кода.

100-199 Информационный
200-299 Запрос клиента успешен
300-399 Запрос клиента переадресован, необходимы дальнейшие действия
400-499 Запрос клиента является неполным
500-599 Ошибки сервера

После заголовка отправляются затребованные данные. Если запрос клиента удовлетворить нельзя, передается сообщение об ошибке в приемлемом для чтения человеком виде.

HTTP не сохраняет информацию по транзакциям, каждая пара запрос-ответ проводится независимо, даже в рамках одного TCP соединения.

Методы

Метод - это HTTP-команда, с которой начинается первая строка запроса клиента.Реально используются GET, HEAD и POST. При задании имен методов учитывается регистр, поэтому GET и get различаются.

Приведенные ниже методы определены, но практически не используются:

LINK Связывает информацию заголовка с документом на сервере. 
UNLINK Отменяет связь информации заголовка с документом на сервере. 
PUT Помещает тело содержимого запроса по указанному URI. 
DELETE Удаляет данные, находящиеся на сервере по заданному URI. 
OPTIONS Запрашивает информацию о коммуникационных параметрах сервера. Чтобы запросить данные обо всем сервере в целом, вместо URI запроса следует использовать символ *.
TRACE Требует, чтобы тело содержимого запроса было возвращено без изменений. Используется для отладки.

Метод GET

GET - это запрос к серверу, который ничего не изменяет на сервере, например, выполняет считывание записи из БД.

В URL кодируются параметры запроса. Сначала идут позиционные параметры, разделенные знаком '/', а затем, после символа '&' - именованные в виде пар ключ-значение. Пары отделяются друг от друга амперсандом '&'. Например:

GET /journal/search?month=august&date=24 HTTP/1.О

Максимальная длина строки параметров при реализации может быть ограничена как со стороны клиента, так и со стороны сервера.

Хотя позиционные параметры могут выглядеть, как имена каталогов и файлов, реальная интерпретация зависит от реализации на стороне сервера. Например, следующая запись может означать запуск скрипта /cgi-bin/display.pl для вывода файла /text/doc.txt (а может и не означать):

GET /cgi-bin/display.pl/text/doc.txt

Метод POST

Метод POST это запрос к серверу, который изменяет состояние сервера, например вносит запись в БД.

Параметры запроса в методе POST могут передаваться в теле запроса. В этом случае их общая длина ничем не ограничена.

POST /cgi-bin/birthday.pl HTTP/1.0
User-Agent; Mozilla/4.05 (WinNT; 1)
Host: www.ora.com
Content-type: application/x-www-form-urlencoded
Content-Length: 20

nionth=august&date=24

Метод HEAD

Метод HEAD аналогичен методу GET, за исключением того, что сервер ничего не посылает в информационной части ответа. Метод HEAD запрашивает только информацию заголовка о файле или ресурсе. Этот метод используется, когда клиент хочет получить информацию о документе, не получая его. Например, клиента может интересовать:

  • время изменения документа;
  • размер документа;
  • тип документа;
  • тип сервера.

Некоторые заголовки не являются обязательными и могут отсутствовать в ответе сервера.

Авторизация

Если ресурс требует авторизации пользователя, то сервер в ответ на запрос может вернуть код ответа 401 Unauthorized и строку заголовка с указанием области доступа для которой требуется авторизация

WWW-Authenticate: Basic realm="WallyWorld

Чтобы получить права доступа, клиент посылает в последующих запросах идентификатор пользователя и пароль, разделенные символом двоеточия ":". Строка авторизации кодируется в base64.

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ##

В реальной жизни используется тип авторизации Basic и NTLM.

Заголовки запроса

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

GET http://www.ru/index.html HTTP/1.0

Во втором случае передается только путь к документу.

GET /index.htm HTTP/1.0

В этом случае имя и порт хоста, может быть передано в строке заголовка Host:

Host: www.example.com:8001

Наличие имени хоста необходимо для обращений к прокси-серверу, или для обращения к одному из виртуальных хостов размещенных на одном сервере. Если хост, заданный одним из двух способов, не существует, то сервер возвращает ответ 400- Bad Request.

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

User-Agent: - версия пользовательской программы
Accept-Language:
Accept-Charset: Указание на предпочтительный язык документа (если документ существует на нескольких языках) и предпочтительную кодировку для текстовых документов.
Accept-Encoding: Допустимые схемы сжатия передаваемой информации.
Range: Запрос части документа, например для реализации докачки файлов.
If-Modified-Since: Запрос кэшированного документа. Позволяет получать только изменившиеся документы.

Передача данных в ответе сервера

Несколько заголовков используемых в ответе сервера, позволяют точно описать формат и размер передаваемых данных.

Content-Type: Тип сообщения, аналогичен типу содержимого в стандарте MIME и указывается в формате тип/подтип.

Серверы используют типы сообщения в заголовках Content-Type, чтобы сообщить клиенту о том, в каком формате передается прилагаемое содержимое

GET / HTTP/1.0


HTTP/1.0 200 OK
Content-Type: text/html; charset=utf8

<html>
<body>
</body>
</html>

В типе сообщения для текстовых форматов может быть указана использованная кодировка.

Content-Encoding: Для 8 битового протокола HTTP, данный заголовок означает, что данные дополнительно закодированы, например сжаты. Определены три типа кодирования gzip, compress, deflate, что соответствует форматам программ gzip, compress и библиотеки zlib. Например:

Content-Encoding: gzip

Большое значение в реализации протокола HTTP имеет уведомление клиента о размере данных в теле ответа, т.к. в силу 8 битовости протокола тело ответа не может сопровождаться каким либо ограничителем.

Content-Length: Длина тела сообщения. В протоколе HTTP/1.0 это была единственная возможность передать клиенту информацию о размере данных.

Кодирование данных кусками (chunced) было введено в HTTP/1.1. В заголовках ответа должна присутствовать строка

Transfer-Encoding: chunked

А тело сообщения строится по следующим правилам

Длина куска (текстовое представление шестнадцатеричного числа)<CR><LF>
Тело куска<CR><LF>
...
0<CR><LF>

Признаком завершения передачи является кусок нулевой длины.

HTTP/1.1 200 OK
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-modified: Wed, 15 Nov 1995 04:58:08 GMT
Transfer-Encoding: chunked

4
aaaa
2
bb
0

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

Еще одной возможностью для кодирования данных является использование для тела сообщения типа multipart/bytranges – эквивалентного MIME multipart/*

HTTP/1.1 206 Partial content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES

--THIS_STRING_SEPARATES
Content-type: application/pdf
Content-range: bytes 500-999/8000

...the first range...
--THIS_STRING_SEPARATES
Content-type: application/pdf
Content-range: bytes 7000-7999/8000

...the second range
--THIS_STRING_SEPARATES—

Если размер сообщения не указан, не используется кодирование кусками и тип тела сообщения не multipart/bytranges, то клиент определяет конец тела ответа по закрытию TCP соединения.

Успешные ответы

200 OK  Запрос клиента обработан успешно, и ответ сервера содержит затребованные данные. 

Переадресация

301 Moved Permanently   Затребованный URI перенесен на новое место (возможно на другой сайт). Новое местонахождение затребованного документа указывается в заголовке Location. 
302 Moved Temporarily   Затребованный URI перемешен, но лишь временно.
304 Not Modified    Проверка ого, что файл не менялся с запрошенной даты (заголовок lf-Modified-Since в запросе).

Логические ошибки

400 Bad Request Сервер обнаружил в запросе клиента синтаксическую ошибку. 
401 Unauthorized    Требуется пароль.
403 Forbidden       Доступ к документу запрещен
404 Not Found   Документ по указанному URI не существует. 
407 Proxy Authentication Required   Требуется пароль к proxy-серверу.

Ошибки сервера

500 Internal Server Error   При обработке запроса на один из компонентов сервера аварийно завершился. 
501 Not Implemented     Клиент запросил выполнение действия, которое сервер выполнить не может. 
504 Gateway Time-out    proxy-сервер не получил ответа от веб-сервера

Список вопросов

++++++++++++++
Иногда говорят, что коммутаторы осуществляют маршрутизацию на втором уровне. Что такое второй уровень?
++++++++++++++
В Ethernet сеть без использования коммутаторов можно объединить около 100 компьютеров. Почему дальнейшее увеличение числа компьютеров приводит к резкому падению производительности?
++++++++++++++
В Unix Ethernet’овский MAC адрес записывается в формате 1A:12:0F:89:00:A1, а в Windows адрес показывается как 1A-12-0F-89-00-A1. Есть ли разница между этими двумя адресами? Предложите свой способ записи.
++++++++++++++
Для чего предназначен адрес IP 127.0.0.1?
++++++++++++++
Провайдер подключил вас к маршрутизатору, указав настройки протокола IP
Адрес 10.10.0.12
Маска 255.255.255.0
Шлюз по умолчанию 10.10.0.1
У вашего соседа настройки такие же, только адрес 10.10.0.14. В результате интернет работает, а доступа к компьютеру соседа нет. В чем может быть причина. Что изменится, если компьютер будет подключен к коммутатору, а не к маршрутизатору.
++++++++++++++
Как узнать на каком континенте находится сервер с адресом 8.8.8.8?
++++++++++++++
Предположим, что провайдер выдал настройки для домашней точки доступа IP 194.177.0.45 Шлюз 194.177.0.1 Ноутбук получает IP адрес от точки доступа автоматически по протоколу DHCP
Попробуйте понять в какой части сети проблемы, если команда tracert 8.8.8.8 выдает такие сообщения:

Трассировка маршрута к 8.8.8.8 с максимальным числом прыжков 30
1 * * * Превышен интервал ожидания для запроса.
2 * * * Превышен интервал ожидания для запроса.
3 * * * Превышен интервал ожидания для запроса.

++++++++++++++
Предположим, что провайдер выдал настройки для домашней точки доступа IP 194.177.0.45 Шлюз 194.177.0.1 Ноутбук получает IP адрес от точки доступа автоматически по протоколу DHCP
Попробуйте понять в какой части сети проблемы, если команда tracert 8.8.8.8 выдает такие сообщения:

Трассировка маршрута к 8.8.8.8 с максимальным числом прыжков 30
1 1 2 * * * Превышен интервал ожидания для запроса.
3 * * * Превышен интервал ожидания для запроса.

++++++++++++++
Предположим, что провайдер выдал настройки для домашней точки доступа IP 194.177.0.45 Шлюз 194.177.0.1 Ноутбук получает IP адрес от точки доступа автоматически по протоколу DHCP
Попробуйте понять в какой части сети проблемы, если команда tracert 8.8.8.8 выдает такие сообщения:

Трассировка маршрута к 8.8.8.8 с максимальным числом прыжков 30
1 2 3 * * * Превышен интервал ожидания для запроса.

++++++++++++++
Какие данные в пакетах изменяются на маршрутизаторе использующем NAT (выберите несколько):
IP адрес сервера
IP адрес клиента
Номера портов TCP и UDP сервера
Номера портов TCP и UDP КЛИЕНТА
++++++++++++++
Для доступа к удаленному рабочему столу компьютера используется TCP порт 3389. Компьютер при этом выступает в роли сервера
Какие настройки надо искать на домашнем роутере, чтобы обеспечить доступ к рабочему столу из Интернета?
++++++++++++++
Для чего нужен номер порта в протоколах TCP и UDP? Почему номера портов двух протоколов могут на одном компьютере быть назначены разным программам?
++++++++++++++
В чем преимущества имен DNS перед IP адресами?
++++++++++++++
Можно ли в протоколе IP использовать имена DNS?
++++++++++++++
Как на своем компьютере привязать IP адрес к имени DNS?
++++++++++++++
Вы набрали в браузере адрес DNS в домене .РФ, а вас перенаправили на адрес вида - XN--80A0ABHBP.XN--P1AI
Что произошло?
++++++++++++++
Для чего провайдеры устанавливает сервер DNS в своей сети? Какая от этих серверов польза мировому сетевому сообществу?
++++++++++++++
Что можно попробовать изменить в настройках сети если сервер DNS провайдера дал сбой?
++++++++++++++
Какой командой в командной строке можно сделать запрос к серверу DNS?
++++++++++++++
Вы получили письмо, в котором в поле «Кому:» стоит чужой адрес. Что побудило сервер положить это письмо в ваш почтовый ящик?
++++++++++++++
Вы получили от вашего знакомого письмо с подозрительным содержанием. У вас есть опасения, что это подделка. В поле «От:» стоит адрес вашего знакомого, в поле «Кому:» - ваш адрес. Как быстро проверить с какого компьютера и из какого города реально было отправлено письмо.
++++++++++++++
В почтовой программе “Thunderbird” есть кнопка «Ответить», которая позволяет быстро ответить отправителю письма, и отдельная кнопка «Ответить всем». Кто эти все? В каких заголовках письма они могут быть упомянуты.
++++++++++++++
У протокола ftp есть два режима работы:
«стандартный» - когда управляющее соединение устанавливается от клиента к серверу, а соединение передачи данных - от сервера к клиенту
«пассивный» - когда оба соединения устанавливаются со стороны клиента.
При подключении к серверу FTP из домашней или корпоративной сети в большинстве случаев рекомендуется использовать «пассивный» режим. С чем это связано?
++++++++++++++
Почему протокол HTTP и использующие его веб-сервисы способны обеспечить доступ к почте, новостям, мгновенным сообщениям? Определите место веб-сервисов в стандартной семиуровневой модели ISO/OSI. (Примечание. Это вопрос не имеет 100% верного ответа)
++++++++++++++
У одного Веб-сервера в DNS может быть много имен например, www.imm.uran.ru, www-rus.imm.uran.ru, wwwrus.imm.uran.ru. При этом сервер использует всего один IP адрес и один порт – 80. Как серверу удаётся выдавать разное содержимое при обращении к разным именам?
++++++++++++++
Каким образом Прокси-сервер и Веб-сервер могут размещаться на одном IP адресе и одном номере порта?
++++++++++++++
В файле .htaccess в одной из папок на сервере написаны строки

DirectoryIndex index.html
Options Indexes
AddDefaultCharset cp1251

Что покажет сервер если в папке есть файл index.html?
Что покажет сервер если в папке есть файл index.htm?
В какой кодировке должны лежать файлы в этой папке?
++++++++++++++