Протокол TCP/IP или как работает Интернет
В основе работы глобальной сети
Интернет лежит стек (т.е. набор) протоколов TCP/IP. Не
пугайтесь этих терминов — это всего лишь набор правил обмена
информацией, кстати, вам хорошо известных, хоть вы об этом и
не подозреваете. Да, да. Все новое — это хорошо забытое
старое.
Есть две формы обучения человека чему-либо:
1. через формальное запоминание набора способов решения той
или иной задачи (современное школьное образование);
2. через понимание сути задач, явлений, закономерностей.
Мы пойдем вторым путем, ибо понимание основных простых
принципов работы Интернета откроет перед вами возможность
чувствовать себя в Интернете, как рыба в воде — быстро и с
пониманием решать возникающие проблемы, грамотно и уверенно
общаться с тех поддержкой и т.д. и т.п.
Забегая вперед, сразу скажу, что принципы работы Интернет
протоколов TCP/IP по сути своей очень просты и похожи на
работу обычной нашей совковой почты.
Давайте вспомним, как работает обычная (бумажная) почта. Вы
пишете письмо, кладете его в конверт, запечатываете, на
обратной стороне пишете адрес отправителя и адрес
получателя, а потом относите в ближайшее почтовое отделение.
Далее письмо проходит через цепочку почтовых отделений до
ближайшего почтового отделения получателя, откуда оно
почтальоном доставляется до дома по указанному адресу
получателя и опускается в почтовый ящик квартиры получателя.
Все. Письмо доставлено. Если получатель письма захочет вам
ответить, то в его письме адрес получателя и адрес
отправителя поменяются местами, и письмо пойдет по той же
цепочке в обратном направлении.
Обратная сторона бумажного письма будет выглядеть примерно
так:
Адрес отправителя:
От кого: Василия Пупкина.Откуда: Москва, ул. Большой
коммунистический тупик, д. 8, кв. 25
Адрес получателя:
Кому: Башмачкину Акакию Акакиевичу.Куда: Санкт-Петербург,
переулок Пирогова, д. 105, кв. 110.Теперь рассмотрим
взаимодействие компьютеров и приложений в сети Интернет.
Аналогия с обычной почтой будет практически полной.
Каждый компьютер (узел, хост) в Интернете также имеет свой
уникальный адрес, который называется IP, например:
195.34.32.116. IP адрес состоит из четырех десятичных чисел
(от 0 до 255 каждое), разделенных точкой. Но знать только IP
адрес компьютера недостаточно, т.к. на компьютере может
одновременно работать сразу несколько приложений (почтовый
сервер, веб-сервер и пр.). Также как недостаточно знать
только адрес дома для доставки письма — надо еще знать номер
квартиры в этом доме. Аналогично каждое приложение (сервис,
серверная программа) имеет такой номер, который называется
номером порта. Например, почтовый сервис привязан к порту 25
(еще говорят: «слушает» порт, принимает на него сообщения),
веб-сервис привязан к порту 80 и т.д.
Таким образом, имеем следующую аналогию:
адрес дома, номер квартиры ~ IP адрес компьютера, номер
порта.
В компьютерных сетях аналогом бумажного письма в конверте
является пакет, который содержит передаваемые данные и
адресную информацию — адрес отправителя и адрес получателя,
например:
Адрес отправителя (Source address):
IP: 82.37.56.124
Port: 2049
Адрес получателя (Destination address):
IP: 195.34.32.116
Port: 53
Данные пакета:
...
Комбинация: IP адрес и номер порта называется также
сокетом.
В данном примере мы посылаем пакет на сокет
195.34.32.116:53, т.е. пакет пойдет на компьютер, имеющий IP
адрес 195.34.32.116, на порт 53. А порту 53 соответствует
приложение DNS-сервер (о нем ниже), который и примет этот
пакет. Зная адрес отправителя, этот сервер аналогично может
сформировать ответный пакет, который пойдет на сокет
отправителя 82.37.56.124:2049.
Обычно взаимодействие происходит по схеме «клиент-сервер».
Клиент запрашивает какую-либо информацию (например, страницу
сайта), а сервер отвечает. Серверные программы, как правило,
привязаны к общеизвестным номерам портов, например: 25-й
порт «слушает» сервер, занимающийся доставкой почты (по
SMTP-протоколу), 110-й — сервер, обеспечивающий чтение почты
из ваших почтовых ящиков (по POP3 протоколу), 80-й порт
«слушает» веб-сервис, который по вашему клиентскому запросу
выдает запрошенную страницу сайта и пр.
Номер порта на клиенте не фиксирован и назначается
операционной системой динамически. Обычно серверные порты
имеют номера до 1024 (но не всегда), а клиентские после
1024.
Еще раз повторю: IP — это адрес компьютера (узла, хоста) в
сети, а порт — номер приложения, работающего на этом
компьютере.
Но человеку работать с цифровыми IP адресами неудобно,
поэтому был придуман сервис доменных имен — DNS (Domain Name
System), который позволяет IP адресу поставить в
соответствие какое-либо легко запоминающееся имя. Это
позволило, например, для доступа к Яндексу в строке браузера
набирать адрес www.yandex.ru, вместо 82.37.56.124.
Как это работает? Ваш провайдер предоставил вам IP адрес
сервера имен (DNS). На этом компьютере работает приложение
(сервер имен), которое знает все имена в Интернете и
соответствующие им IP адреса. А занимается оно тем, что
«слушает» 53-й порт, принимает на него запросы и выдает
ответы, типа:
Запрос,: какой IP адрес соответствует имени www.yandex.ru?
Ответ: 82.37.56.124.
Теперь суммируем полученные знания на следующем примере.
Рассмотрим, что происходит, когда вы в браузере набираете
адрес (URL) Яндекса www.yandex.ru, нажимаете и в ответ
получаете страницу поиска.
Например, мы имеем:
IP адрес нашего компьютера: 91.76.65.216
Браузер: Internet Explorer (IE),
DNS сервер (предоставленный провайдером): 195.34.32.116 (у
вас может быть другой),
Страница, которую мы хотим открыть: www.yandex.ru.
Поехали. Набираем в адресной строке браузера имя
www.yandex.ru и жмем. В глубинах операционной системы
происходит примерно следующее:
Сначала отправляется запрос (т.е. пакет с запросом) DNS
серверу на сокет 195.34.32.116:53 (порт 53 соответствует
DNS-серверу, т.е. приложению, которое занимается
распознаванием имен), а DNS-сервер возвращает IP-адрес,
соответствующий этому имени.
Диалог примерно следующий:
- Какой IP адрес соответствует имени www.yandex.ru?
- 82.37.56.124.
Далее устанавливается соединение с портом 80 компьютера
82.37.56.12 и посылается пакет с запросом на получение
страницы www.yandex.ru. (Порт 80 соответствует веб-серверу.
В адресной строке браузера порт 80 обычно не пишется, т.к.
используется по умолчанию, но его можно и явно указать после
двоеточия - http://www.yandex.ru:80).
Веб-сервер принимает от нас запрос, обрабатывает его и в
ответных пакетах посылает нам страницу в на языке HTML -
язык разметки, который понимает браузер.
Наш браузер, получив страницу, отображает ее, и в результате
мы видим на экране главную страницу Яндекса.
Зачем это все надо знать?
Предположим, вы заметили странное поведение своего
компьютера. Нажимаем кнопку «Пуск» - «Выполнить» - набираем
cmd - «Ок». В появившейся консоли (черное окно) набираем
команду netstat -an и жмем . Результатом будет список
установленных соединений между сокетами нашего компьютера и
удаленных узлов. Если мы видим в колонке «Внешний адрес»
какие-то "левые" IP адреса, а через двоеточие 25-й порт, то
что это может означать? Помните, что 25-й порт соответствует
почтовому серверу? Это означает то, что ваш компьютер
установил соединение с каким-то почтовым сервером
(серверами) и шлет через него какие-то письма. И если ваш
почтовый клиент (Outlook например) в это время не запущен,
да если еще таких соединений на 25-й порт много, то,
вероятно, в вашем компьютере поселился троян, который
рассылает от вашего имени спам или пересылает номера ваших
кредитных карточек вкупе с паролями злоумышленнику.
Также эти знания необходимы для правильной настройки
файерволла (проще говоря брандмауэра :)). Это такая
системная программа (которая часто поставляется вместе с
антивирусом), предназначенная для фильтрации пакетов -
"своих" и "вражеских". Например, ваш файерволл сообщает вам,
что какой-то хмырь хочет установить соединение с каким-либо
портом вашего компьютера. Что делать — разрешать или
запрещать?
Ну и, наверно, самое главное — эти знания крайне полезны при
общении с техподдержкой.
Приведу несколько портов, с которыми вы, вероятно,
столкнетесь:
135-139 — эти порты используются Windows для доступа к общим
ресурсам компьютера — папкам, принтерам. Не открывайте эти
порты наружу, т.е. в районную локальную сеть и Интернет. Их
следует закрыть файерволлом.
21 — порт FTP сервера.
25 — порт почтового SMTP сервера. Через него ваш почтовый
клиент отправляет письма. IP адрес SMTP сервера и его порт
(по умолчанию 25) следует указать в настройках вашего
почтового клиента.
110 — порт POP3 сервера. Через него ваш почтовый клиент
забирает письма из вашего почтового ящика. IP адрес POP3
сервера и его порт (по умолчанию 110) следует указать в
настройках вашего почтового клиента.
80 — порт WEB-сервера.
3128 — прокси-серверы.
Также приведу несколько специальных IP адресов:
127.0.0.1 — это localhost, адрес локальной системы, т.е.
локальный адрес вашего компьютера.
0.0.0.0 - так обозначаются все IP-адреса.
192.168.xxx.xxx — адреса, которые можно произвольно
использовать в локальных сетях. В Интернете они не
используются. Они уникальны только в рамках одной локальной
сети, но не в рамках Интернета. Адреса из этого диапазона вы
смело можете использовать, например, для организации своей
домашней или офисной сети.
А что такое маска подсети и шлюз по умолчанию (роутер)? -
спросите вы.
(Эти параметры задаются в настройках сетевых подключений
в Windows).
Все просто. Компьютеры объединяются в локальные сети. В
локальной сети компьютеры напрямую «видят» друг друга.
Локальные сети соединены друг с другом через роутеры
(шлюзы). При отправлении пакета, маска подсети используется
для определения — принадлежит ли компьютер-получатель к этой
же локальной сети или нет. Если компьютер-получатель
принадлежит этой же сети, что и компьютер-отправитель, то
пакет передается ему напрямую, в противном случае пакет
отправляется на шлюз по умолчанию, который далее, по
известным ему маршрутам, передает пакет в другую сеть, т.е.
в другое почтовое отделение (по аналогии с советской
почтой).
Напоследок рассмотрим что же означают непонятные слова TCP/IP.
TCP/IP — это название набора сетевых протоколов. На самом
деле передаваемый пакет проходит несколько уровней. (Как на
почте: сначала вы пишете писмо, потом помещаете в конверт с
адресом, затем на почте на нем ставится штамп и т.д.).
IP протокол — это протокол так называемого сетевого уровня.
Задача этого уровня — доставка ip-пакетов от компьютера
отправителя к компьютеру получателю. По-мимо собственно
данных, пакеты этого уровня имеют ip-адрес отправителя и
ip-адрес получателя. Какому порту, т.е. приложению адресован
этот пакет, был ли этот пакет доставлен или был потерян, на
этом уровне неизвестно — это не его задача.
TCP и UDP — это протоколы так называемого транспортного
уровня. Транспортный уровень находится над сетевым. На этом
уровне к пакету добавляется порт отправителя и порт
получателя.
TCP — это протокол с установлением соединения и с
гарантированной доставкой пакетов. Сначала производится
обмен специальными пакетами для установления соединения,
происходит что-то вроде рукопожатия (-Привет. -Привет.
-Поболтаем? -Давай.). Далее по этому соединению туда и
обратно посылаются пакеты (идет беседа), причем с проверкой,
дошел ли пакет до получателя. Если пакет не дошел, то он
посылается повторно («повтори, не расслышал»).
UDP — это протокол без установления соединения и с
негарантированной доставкой пакетов. (Типа: крикнул
что-нибудь, а услышат тебя или нет — неважно).
Над транспортным уровнем находится прикладной уровень. На
этом уровне работают такие протоколы, как http, ftp и пр.
Например, HTTP и FTP — используют надежный протокол TCP, а
DNS-сервер работает через ненадежный протокол UDP.
Как посмотреть текущие соединения?
Текущие соединения можно посмотреть с помощью команды
netstat -an
(параметр n указывает выводить IP адреса вместо доменных
имен).
Запускается эта команда следующим образом:
«Пуск» - «Выполнить» - набираем cmd - «Ок». В появившейся
консоли (черное окно) набираем команду netstat -an и жмем.
Результатом будет список установленных соединений между
сокетами нашего компьютера и удаленных узлов.
Например, получаем:
Активные подключения
Имя Локальный адрес Внешний адрес Состояние
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 91.76.65.216:139 0.0.0.0:0 LISTENING
TCP 91.76.65.216:1719 212.58.226.20:80 ESTABLISHED
TCP 91.76.65.216:1720 212.58.226.20:80 ESTABLISHED
TCP 91.76.65.216:1723 212.58.227.138:80 CLOSE_WAIT
TCP 91.76.65.216:1724 212.58.226.8:80 ESTABLISHED
...
В этом примере 0.0.0.0:135 — означает, что наш компьютер на
всех своих IP адресах слушает (LISTENING) 135-й порт и готов
принимать на него соединения от кого угодно (0.0.0.0:0) по
протоколу TCP.
91.76.65.216:139 — наш компьютер слушает 139-й порт на своем
IP-адресе 91.76.65.216.
Третья строка означает, что сейчас установлено (ESTABLISHED)
соединение между нашей машиной (91.76.65.216:1719) и
удаленной (212.58.226.20:80). Порт 80 означает, что наша
машина обратилась с запросом к веб-серверу (у меня,
действительно, открыты страницы в браузере).
В следующих статьях мы рассмотрим, как применять эти знания,
например, общаясь с тех поддержкой.
http://www.compcentre.ru