Возвращаемся к Интернет-протоколам
Как упоминалось ранее в разделе о стеках протоколов, нетрудно догадаться, что в Интернете используется множество протоколов. Это правда; для функционирования Интернета требуется множество коммуникационных протоколов. К ним относятся протоколы TCP и IP, протоколы маршрутизации, протоколы управления доступом к среде, протоколы прикладного уровня и т.д. В следующих разделах описываются некоторые из наиболее важных и часто используемых протоколов в Интернете. Сначала обсудим протоколы более высокого уровня, а затем протоколы более низкого уровня.
Протоколы приложений: HTTP и всемирная паутина
Одним из наиболее часто используемых сервисов в Интернете является World Wide Web (WWW). Протокол приложения, благодаря которому работает Интернет, — это протокол передачи гипертекста (Hypertext Transfer Protocol - HTTP). Не путать с языком гипертекстовой разметки (Hypertext Markup Language - HTML). HTML — это язык, используемый для написания веб-страниц. HTTP — это протокол, который веб-браузеры и веб-серверы используют для связи друг с другом через Интернет. Это протокол уровня приложения, поскольку он находится поверх уровня TCP в стеке протоколов и используется определенными приложениями для взаимодействия друг с другом. В этом случае приложениями являются веб-браузеры и веб-серверы.
HTTP - это текстовый протокол без постоянного соединения. Клиенты (веб-браузеры) отправляют запросы на веб-серверы для веб-элементов, таких как веб-страницы и изображения. После того, как сервер выполнил запрос, соединение между клиентом и сервером через Интернет отключается. Для каждого запроса необходимо устанавливать новое соединение. Большинство протоколов ориентировано на подключение. Это означает, что два компьютера, взаимодействующие друг с другом, сохраняют открытое соединение через Интернет. Однако HTTP этого не делает. Прежде чем клиент сможет выполнить HTTP-запрос, необходимо установить новое соединение с сервером.
Вот что происходит, когда вы вводите URL-адрес в веб-браузер:
- Если URL-адрес содержит доменное имя, браузер сначала подключается к серверу доменных имен и получает соответствующий IP-адрес для веб-сервера.
- Веб-браузер подключается к веб-серверу и отправляет HTTP-запрос (через стек протоколов) на нужную веб-страницу.
- Веб-сервер получает запрос и проверяет наличие нужной страницы. Если страница существует, веб-сервер отправляет ее. Если сервер не может найти запрошенную страницу, он отправит сообщение об ошибке HTTP 404. (404 означает "Страница не найдена", как, вероятно, знает любой, кто просматривал веб-страницы.)
- Веб-браузер возвращает страницу, и соединение закрывается.
- Затем браузер анализирует страницу и ищет другие элементы страницы, необходимые для заполнения веб-страницы. Обычно это изображения, апплеты (небольшие приложения в HTML документе) и т.д.
- Для каждого необходимого элемента браузер выполняет дополнительные подключения и HTTP-запросы к серверу.
- Когда браузер завершил загрузку всех изображений, апплетов и т.д. страница будет полностью отображена в окне браузера.
* Практика: Используем клиент Telnet для получения веб-страницы с помощью HTTP
Telnet - это служба удаленного терминала, используемая в Интернете. В последнее время его использование сократилось, но это очень полезный инструмент для изучения Интернета. Для начала, нам необходимо включить telnet-клиент. Вы можете включить клиента либо из командной строки, либо с помощью графического интерфейса.
- Запустите команду ниже в командной строке от имени администратора. Введите dism /online /Enable-Feature /FeatureName:TelnetClient . Вот и все, через несколько секунд telnet клиент должен быть готов к работе.
- Щелкните правой кнопкой мыши на кнопку «Пуск» и выберите «Включение или отключение компонентов Windows». Откроется окно «Копоненты Windows», прокрутите вниз и выберите «Клиент Telnet». Нажмите кнопку «ОК», на экране отобразится ход установки клиента telnet. Дождитесь момента применения изменений и закройте окно.
Теперь проверим, сможем ли мы подключиться по протоколу HTTP к веб-серверу, например ab-w.net на 80 порт: просто откроем командную строку или, введем «telnet» и нажмем клавишу «Ввод» на клавиатуре. Появится пустой экран, необходимо ввести запрос «open ab-w.net 80», что равносильно запросу корневой веб-страницы.
Если командная строка или терминал возвращает ошибку, то порт закрыт.
Если окно становится полностью пустым или на экране появляется приглашение сервера, порт открыт.
После удачного подключение и пользования сервисом остается правильно завершить сессию: откройте командную строку, пропишите в ней слово "quit" и нажмите "Enter".
Большинство интернет-протоколов определяются интернет-документами, известными как Рабочее предложение (Request For Comments – RFC). RFC можно найти в нескольких сайтах в Интернете. HTTP версии 1.0 указан ещё в RFC 1945. В 2015 году появился протокол HTTP/2.0, который использует меньшее количество соединений и у которого значительно улучшена производительность.
Несмотря на свою функциональность у HTTP есть один очень важный недостаток ― незащищённость. Данные между пользователями передаются в открытом виде, злоумышленник может вмешаться в передачу данных, перехватить их или изменить. Чтобы защитить данные пользователей, был создан протокол HTTPS.
HTTPS работает благодаря SSL/TLS-сертификату. SSL/TLS-сертификат ― это цифровая подпись сайта. С её помощью подтверждается его подлинность. Перед тем как установить защищённое соединение, браузер запрашивает этот документ и обращается к центру сертификации, чтобы подтвердить легальность документа. Если он действителен, то браузер считает этот сайт безопасным и начинает обмен данными. Вот откуда взялась и что означает S в HTTPS.
Протоколы приложений: SMTP и электронная почта
Еще один широко используемый интернет-сервис – это электронная почта. Электронная почта использует протокол прикладного уровня, называемый Simple Mail Transfer Protocol или SMTP. SMTP также является текстовым протоколом, но в отличие от HTTP, SMTP ориентирован на соединение. SMTP также более сложен, чем HTTP. В SMTP гораздо больше команд и соображений, чем в HTTP.
Когда вы открываете почтовый клиент для чтения электронной почты, обычно происходит следующее:
- Почтовый клиент (Netscape Mail, Lotus Notes, Microsoft Outlook и т. д.) открывает соединение со своим почтовым сервером по умолчанию. IP-адрес или доменное имя почтового сервера обычно настраиваются при установке почтового клиента.
- Почтовый сервер всегда передает первое сообщение, чтобы идентифицировать себя.
- Клиент отправляет команду SMTP HELO, на которую сервер ответит сообщением 250 OK.
- В зависимости от того, проверяет ли клиент почту, отправляет письмо и т. д., на сервер будут отправлены соответствующие SMTP-команды, которые ответят соответственно.
- Эта транзакция запроса/ответа будет продолжаться до тех пор, пока клиент не отправит SMTP-команду QUIT. Затем сервер попрощается, и соединение будет закрыто.
Ниже показан простой «диалог» между SMTP-клиентом и SMTP-сервером. R: обозначает сообщения, отправляемые сервером (получателем), а S: обозначает сообщения, отправляемые клиентом (отправителем).
В этом примере SMTP показано эл. письмо, которое Смит с хоста USC-ISIF отправил Джонсу, Грину и Брауну на хост BBN-UNIX. Здесь мы предполагаем, что хост USC-ISIF напрямую связывается с хостом BBN-UNIX. Письмо получили Джонс и Браун. У Грина нет почтового ящика на хосте BBN-UNIX.
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
S: MAIL FROM:<Smith@USC-ISIF.ARPA>
R: 250 OK
S: RCPT TO:<Jones@BBN-UNIX.ARPA>
R: 250 OK
S: RCPT TO:<Green@BBN-UNIX.ARPA>
R: 550 No such user here
S: RCPT TO:<Brown@BBN-UNIX.ARPA>
R: 250 OK
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Blah blah blah...
S: ...etc. etc. etc.
S: .
R: 250 OK
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
Последнее обновление в RFC 5321 (2008) включает масштабируемое расширение — ESMTP (англ. Extended SMTP). В настоящее время под «протоколом SMTP», как правило, подразумевают и его расширения. Протокол SMTP предназначен для передачи исходящей почты с использованием порта TCP 25.
Протокол управления передачей
Под прикладным уровнем в стеке протоколов находится уровень протокола управления передачей (Transmission Control Protocol – TCP). Когда приложения открывают соединение с другим компьютером в Интернете, сообщения, которые они отправляют (используя специальный протокол прикладного уровня), передаются вниз по стеку на уровень TCP. TCP отвечает за маршрутизацию прикладных протоколов к правильному приложению на конечном компьютере. Для достижения этой цели используются номера портов. Порты можно рассматривать как отдельные каналы на каждом компьютере. Например, вы можете просматривать веб-страницы во время чтения электронной почты. Это связано с тем, что эти два приложения (веб-браузер и почтовый клиент) использовали разные номера портов. Когда пакет поступает на компьютер и проходит свой путь вверх по стеку протоколов, уровень TCP решает, какое приложение получит пакет, основываясь на номере порта.
TCP работает следующим образом:
- Когда уровень TCP получает данные протокола прикладного уровня сверху, он сегментирует их на управляемые "блоки", а затем добавляет заголовок TCP с конкретной информацией TCP к каждому "блоку". Информация, содержащаяся в заголовке TCP, включает номер порта приложения, в которое необходимо отправить данные.
- Когда уровень TCP получает пакет от уровня IP ниже него, уровень TCP удаляет данные заголовка TCP из пакета, при необходимости выполняет некоторую реконструкцию данных, а затем отправляет данные в правильное приложение, используя номер порта, взятый из заголовка TCP.
Так TCP направляет данные, перемещающиеся по стеку протоколов, в нужное приложение.
TCP не является текстовым протоколом. TCP — это ориентированный на соединение, надежный сервис трансляции (стиминга) байтов. Ориентированность на соединение означает, что два приложения, использующие TCP, должны установить соединение, прежде чем обмениваться данными. TCP надежен, потому что для каждого полученного пакета отправителю отправляется подтверждение доставки. TCP также включает в свой заголовок контрольную сумму для проверки полученных данных на наличие ошибок. Заголовок TCP выглядит следующим образом:
Обратите внимание, что в заголовке TCP нет места для IP-адреса. Это связано с тем, что TCP ничего не знает об IP-адресах. Задача TCP состоит в надежной передаче данных прикладного уровня от приложения к приложению. Задача передачи данных с компьютера на компьютер - это задача IP.
*На заметку
Ниже перечислены номера портов для некоторых наиболее часто используемых интернет-сервисов.
FTP - 20/21
Telnet - 23
SMTP - 25
HTTP - 80
HTTPS - 443
Quake III Arena - 27960
Интернет-протокол
В отличие от TCP, IP - это ненадежный протокол без установления соединения. IP не заботится о том, попадет ли пакет в пункт назначения или нет. IP также не знает о соединениях и номерах портов. Задача IP-адреса заключается в отправке и маршрутизации пакетов на другие компьютеры. IP-пакеты являются независимыми объектами и могут поступать не по порядку или вообще не поступать. Задача TCP - убедиться, что пакеты поступают и находятся в правильном порядке. Пожалуй, единственное, что общего у IP с TCP, - это то, как он получает данные и добавляет к данным TCP собственную информацию IP-заголовка. Заголовок IP выглядит следующим образом:
Выше мы видим IP-адреса отправляющего и принимающего компьютеров в заголовке IP. Ниже показано, как выглядит пакет после прохождения через прикладной уровень, уровень TCP и уровень IP. Данные прикладного уровня сегментируются на уровне TCP, добавляется заголовок TCP, пакет переходит на уровень IP, добавляется заголовок IP, а затем пакет передается через Интернет.
Заключение
Теперь вы знаете, как работает Интернет. Но как долго он будет оставаться таким? Предыдущая версия IP (версия 4 - IPv4), позволяла использовать только 232 адреса. В конце концов свободных IP-адресов не осталось. С 1996 года введена в эксплуатацию шестая версия протокола — IPv6, которая позволяет адресовать значительно большее количество узлов, чем IPv4. Адресное пространство IPv6 составляет 2^128. Такое большое адресное пространство было введено ради иерархичности адресов (это упрощает маршрутизацию).
А что потом? Кто знает. Интернет прошел долгий путь с момента его создания в качестве исследовательского проекта министерства обороны. Никто на самом деле не знает, чем станет Интернет. Однако одно можно сказать наверняка. Интернет объединил мир, как никакой другой механизм.