Янв 10 2011

TCP/IP

 

Я всё же решил, на что первое время будет похож сайт. Думаю сделать коллекцию, что называется, HOWTO - готовых рецептов по настройке и эксплуатации того или иного сервиса. А начать придётся с основы основ - модели TCP/IP.
Как всегда в школе или в институте, начнём с определения. Залезем в wikipedia и увидим следущее определение :
Стек протоколов TCP/IP (англ. Transmission Control Protocol/Internet Protocol) — набор сетевых протоколов разных уровней модели сетевого взаимодействия DOD, используемых в сетях. Протоколы работают друг с другом в стеке (англ. stack, стопка) — это означает, что протокол, располагающийся на уровне выше, работает «поверх» нижнего, используя механизмы инкапсуляции. Например, протокол TCP работает поверх протокола IP.
Мдя, первый раз прочитав это определение ничего не понятно. Давайте выделим важные ключевые понятия, которые помогут Вам сосредоточиться на самом Важном.

1. Протоколов. Протокол - это набор формальностей. Нас везде окружают протоколы. Самый простой пример - "протокол" общения. Согласно этому протоколу, мы должны поздороваться с собеседником, если только что его увидели и попрощаться, когда уходит он или уходите Вы. Так принято, таков протокол. Для тех, кто скажет. что фраза на улице "Который час?" не вписывается в данный протокол, приведу другой пример - этикет. Тоже протокол. Язык - это тоде протокол. Протокол передачи информации в виде звуков. И как мы врядли сможем общаться с иностранцем, не зная языка, так и, к примеру, мой любимый браузер Opera не сможет "общаться" с сервером, на котором расположен этот сайт, по протоколу SSH. Opera просто не знает этого иностранного языка.

2. Стек, набор. Протоколов много. Каждый отвечает только за свою часть. Действует принцип инкапсуляции - один протокол работает поверх другого. Например, когда я допишу эту страницу, то весь тект будет отправлен POST-запросом по протоколу HTTP. Этот HTTP-запрос будет упакован в TCP-пакеты. TCP-пакеты будут разбиты на IP-дейтаграммы, которые фреймами попадут по WiFi в виде радиосигнала с моего ноутбука на роутер. Вот на похожем примере и давайте разберём работу TCP/IP.

Что же происходит, когда вы в адресной строке браузера набираете virtual-host.ru и нажимаете Enter? Опустим работу DNS. Браузер устанавливает TCP-соединение с сервером и отсылает ему запрос
GET / HTTP/1.1
HOST: virtual-host.ru
(прочие заголовки)

Да-да, именно такой текст отправляется web-серверу. Сервер ответит что-то вроде :
200 OK
(куча других HTTP-заголовков, которые к делу отношения не имеют)
X-Powered-By: PHP/5.2.17

br /> "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:og="http://ogp.me/ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:sioc="http://rdfs.org/sioc/ns#"
xmlns:sioct="http://rdfs.org/sioc/types#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
(далее идёт HTML. Про HTML Вы уже должны знать)

Особо пытливым советую повторить тоже самое через telnet. Зайдите в свою консоль (*nix) либо откройте коммандную строку Windows и наберите там
telnet virtual-host.ru 80
После чего пишите :
GET / HTTP/1.1
HOST: virtual-host.ru
И два раза нажмите Enter.

После чего откройте в браузере исходный код страницы (ctrl+U) и сравните результаты.

Поздравляю! Мы познакомились с самым верхним уровнем - прикладным. Мы тут увидели программу-клиент - web-браузер Opera, программу-сервер - nginx, протокол HTTP, язык разметки HTML. Вот собственно те программы, которые умеют работать с определенным протоколом, протокол (формальное описание, какими должны быть сообщения, как на них отвечать, формат передачи данных), сами данные - это и есть то, что составляет самый верхний абстрактный уровень TCP/IP - прикладной.

Чтобы можно было как-то сообщения, описанные выше, передавать, нам придётся спуститься на 1 уровень. Как Вы можете догадаться за доставку отвечают протоколы траспортного уровня. Наиболее важные из них - ICMP, TCP и UDP. Сложно сделать аналогию, но представьте, что Вам по почте пришло письмо "Пришли мне Войну и Мир", а посылку отослать Вы не можете, только письмами. И Вы начинаете отправлять Войну и Мир пиьмами по одной странице. Вот теперь Вы представляете работу транспортного уровня. Подробное описание TCP, ICMP и UDP я опубликую позже.

Вернёмся к примеру с постраничной отсылкой произведения русского классика по почте. Система индексов, а также алгоритм следования письма: письмо забирается из почтовго ящика, попадает на почту, далее в сортировочный центр, пересылается на еще один сортировочный центр, потом опять в местное отделение почты, после чего почтальон относит его и кладёт в почтовый ящик получателя - это сетевой уровень. В TCP/IP сетевой уровень основан на работе протокола IP, который отвечает за обеспечение связи между узлами сети и отвечает на такие вопросы как "Где искать другие узлы сети?", "Можно ли с каким-то конкретным узлом сети соединиться?". В соответсвии с протоколо IP каждому узлу в сети присваивается уникальный IP-адрес, по которому он может быть обнаружен другими узлами сети.

Уровень физического протокола

Физический уровень.