Байланысты: Методичка 1. Введение в Linux. Знакомство и установка
Что нужно знать начинающему пользователю Linux? Компьютеры, работающие в сети, взаимодействуют благодаря IP-адресам. IP-адрес позволяет глобально идентифицировать ЭВМ в сети, где бы компьютер ни находился. Если вы в Москве, ваш компьютер с IP-адресом 1.2.3.4 подключен к Интернету, вы можете установить связь с компьютером, находящимся, скажем, в Лос-Анджелесе, и имеющим IP-адрес 130.140.105.1
IPv4-адрес (как правило, используются адреса IP версии 4, хотя постепенно и осуществляется переход на IPv6) состоит из 4-х чисел (байт), именуемых октетами, и записываемых, как правило, в десятичной системе счисления. Есть специальные IP-адреса (адреса сетей и широковещательные адреса), но большинство IP-адресов служат для идентификации хостов, то есть неких машин (не важно, в роли клиентов или серверов они выступают). Машина, которая предоставляет некие услуги, обычно именуется сервером, машина, которая запрашивает эти услуги, выступает клиентом. Терминология клиент-сервер применяется как к аппаратному обеспечению (ваш ноутбук будет выступать клиентом, а компьютер-сервер в серверной стойке в дата-центре, соответственно, сервером), так и к программному (например, если веб-сервером выступает Apache или Nginx, роль клиента на вашем компьютере будет играть Google Chrome или, например, Mozilla Firefox).
Для подключения к серверу используется IP-адрес. Но на практике часто в качестве адреса сервера используются доменные имена: geekbrains.ru, yandex.ru, google.com, linkedin.com. Доменные имена благодаря распределенной системе DNS преобразуются в IP-адреса. То есть, когда вы в браузере вбиваете имя geekbrains.ru, ваш компьютер, выступая в роли DNS-клиента, обращается к DNS-серверу (предоставленному провайдером или настроенному вами вручную), чтобы узнать, на какой IP-адрес должен подключиться браузер в роли http-клиента. Выяснив, что IP-адрес, соответствующий доменному имени geekbrains.ru — 5.61.239.22, браузер подключится к серверу, обращаясь к машине с IP 5.61.239.22. Сообщения, которыми будут обмениваться клиент и сервер, адресуемые на IP-адреса отправителя и получателя (похоже на телеграммы, не правда ли?), именуются IP-пакетами (и иногда IP-дейтаграммами). IP-пакеты могут проходить несколько маршрутизаторов, компьютеров или устройств, определяющих дальнейший путь в соответствии с таблицами маршрутизации. Это обеспечивается, в частности, тем, что часть IP-адреса составляет адрес сети, а часть — идентификатор хоста. Например, для некоего условного адреса IP 199.20.30.5 — 199.20.30 — компонент, который указывает на сеть, а 5 — на конкретную машину в данной сети.
Не все адреса могут маршрутизироваться. Например, пакет, направленный на адрес 127.0.0.1, никогда не покинет машину. Он будет доставлен другому приложению, находящемуся на данной машине. Стоит отметить, что это тоже нормальный способ использования, например, PHP-скрипт, выполняемый на сервере, может обращаться к приложению MySQL, находящемуся на той же машине, используя адрес 127.0.0.1. Такой адрес называется локальная петля. Для таких целей может использоваться любой IP-адрес, начинающийся с 127.
Есть адреса, которые используются для локальных сетей. Вы можете объединить несколько машин в локальную сеть и использовать адреса из диапазонов таких сетей, например 192.168.1.X или 10.X.X.X — и машины смогут обмениваться между собой информацией. Но нельзя обратиться на машину с адресом 192.168.1.1 из сети Интернет. Более того, и обратное не было бы верным без специальных средств. Если вы посмотрите настройки TCP/IP-соединения, то обнаружите, что, скорее всего, у вас тоже используется адрес из такого диапазона. Но как тогда осуществляется выход в сеть?
Если вы зайдете на сайт вроде myip.ru, то увидите, что адрес, под которым вы видны указанному серверу, не совпадает с вашим собственным IP-адресом, указанном в настройках TCP/IP-соединения. Это означает, что ваш провайдер маскирует адреса, подменяя их своим внешним IP-адресом, запоминая, с какого компьютера был осуществлен какой запрос, и заменяя IP-адрес получателя со своего на ваш при прохождении ответа. Обладая «серым» IP-адресом при использовании механизма трансляции адресов (NAT), вы можете обращаться к другим серверам, но внешние машины не смогут инициировать соединение к вашей машине как к серверу.
Следующий вопрос — как сервисы определяют, какое приложение на какой запрос должно реагировать. Ведь один и тот же сервер может отдавать и веб-страницы, и файлы по протоколу http, и почту по протоколу SMTP. Более того, если вы администрируете сервер, наверняка вам понадобится доступ к нему по протоколу VNC или ssh.
Соответственно, протокол — некий набор правил, который определяет, как то или иное приложение (сервер или клиент) будет взаимодействовать с аналогичным (клиентом или сервером) по сети. Для веб-содержимого используются протоколы HTTP и HTTPS (шифрованный HTTP), для работы с файлами — FTP и FTPS (шифрованный FTP), для администрирования — шифрованный SSH и SFTP (надстройка над SSH, реализующая схожий с FTP доступ к файлам).
Теперь осталось понять, каким образом сервер понимает, какому приложению следует отдать тот или иной пакет. Для этого используются порты. Порт — число от 0 до 65535, которое используется для идентификации приложения. Существует 65535 TCP-портов, служащих для надежных соединений, и 65535 UDP-портов, для которых надежное соединение не требуется. Одно приложение может использовать несколько портов. Например, веб-сервер обычно использует 80 TCP-порт для установки незашифрованного соединения по протоколу HTTP и 443 TCP-порт для установки шифрованного соединения по протоколу HTTPS. Для удаленного администрирования по протоколу SSH (и его составной части SFTP) используется 22 TCP-порт. Соответственно, если вы купите VDS-сервер и будете его администрировать (с помощью клиента ssh в Linux или Mac OS X, либо с помощью PuTTY в Windows) вам понадобится указать: доменное имя (или IP-адрес) вашего сервера, номер порта, по которому запущен сервер ssh (обычно 22), ваши логин и пароль от операционной системы. Кстати, система DNS для преобразования доменных имен в IP-адреса (и не только) использует UDP-порт с номером 53.
Мы рассмотрели упрощенно модель TCP/IP.
Она состоит всего из четырех уровней:
4 уровень — прикладные протоколы (DNS — 53 UDP-порт, HTTP — 80 TCP-порт, HTTPS — 443 TCP-порт, SSH и SFTP — 22 TCP-порт). Реализуют набор правил взаимодействия приложения-клиента и приложения-сервера.
3 уровень — транспортные протоколы (UDP — протоколы без подтверждений, TCP — протоколы с установкой соединения и надежной доставкой). Именно транспортные протоколы в заголовках содержат номера портов, позволяя идентифицировать приложения.
2 уровень — сетевой — протокол IP. Заголовок содержит IP-адреса отправителя и получателя, позволяя идентифицировать машину-отправителя и машину-получателя.
1 уровень — межсетевые протоколы — реализуют доступ к физической среде передачи информации. В качестве примеров можно привести Ethernet и Wi-Fi.
Модель OSI/ISO более сложная, состоит из 7 уровней и не имеет однозначной трактовки применительно к используемым в сети Интернет-протоколам.
Знакомству с моделями TCP/IP и OSI/ISO посвящен курс «Введение в TCP/IP», а использованию сетевых возможностей Linux — «Linux: серверное ПО».