Сеть - это очень обширная тема, содержащая несколько частей, которые требуется осознать, чтобы понять как работает сеть в целом. Нельзя сказать, что описание ведется от простого к сложному, сама проблема связи компьютеров требует разделения на несколько уровней.
Если вы почувствуете, что вам сейчас не по силам одолеть весь раздел за раз, то обязательно прочтите "Обзор архитектуры TCP/IP" и переходите к разделу "Настройка сети". Но не забывайте фундаментальные знания важны и обязательны. На понимании этого раздела основывается часть последующего изложение. Возвращайтесь к этому разделу, если не понимаете что-то из дальнейшего.
TCP/IP — это семейство сетевых протоколов, широко используемых в большинстве операционных систем. Данное семейство определяет основной язык общения в среде Internet. Ключевыми протоколами в нем являются IP (Internet Protocol — межсетевой протокол) и TCP (Transmission Control Protocol — протокол управления передачей).
После того как семейство протоколов TCP/IP было реализовано и внедрено, Международная организация по стандартизации (International Organization for Standardization, ISO) предложила собственную семиуровневую сетевую модель, названную OSI (Open System Interconnection — взаимодействие открытых систем). Она так никогда и не приобрела широкой популярности из-за своей сложности и неэффективности. Некоторые даже считают, что к семи уровням OSI нужно добавить еще два: финансовый и политический.
ISO и OSI не одно и тоже (прочитайте еще раз предыдущий параграф). Уделяю особое внимание потому что в некоторых статьях встречаются ошибки.
На рисунке показано, как TCP/IP согласуется с моделью OSI. Этот рисунок также иллюстрирует уровневое строение TCP/IP и показывает взаимосвязи между основными протоколами. При переносе блока данных из сетевой прикладной программы в плату сетевого адаптера он последовательно проходит через ряд модулей TCP/IP. При этом на каждом шаге он доукомплектовывается информацией, необходимой для эквивалентного модуля TCP/IP на другом конце цепочки. К тому моменту, когда данные попадают в сетевую плату, они представляют собой стандартный кадр Ethernet, если сеть основана именно на Ethernet. Программное обеспечение TCP/IP на приемном конце принимает этот кадр и воссоздает исходные данные для принимающей программы путем прохождения данных в обратном порядке по набору модулей TCP/IP.
OSI TCP/IP _____________________________ __________________________ | Уровень прикладных программ | | | |_____________________________| | _________ _________ | _____________________________ | |Сетевая | |Сетевая | | Уровень | Уровень представления | | |программа| |программа| | прикладных |_____________________________| | |_________| |_________| | программ _____________________________ | | | Уровень сеанса | | | |_____________________________| |__________________________| | | _____________________________ _____|_____________|______ | Транспортный уровень | | TCP UDP | Транспортный |_____________________________| |_____|_____________|______| уровень | | _____________________________ _____|_____________|______ | Сетевой уровень | | | | | Сетевой |_____________________________| | ----> IP <--- | уровень |__________________________| _________ _____________________________ _______| Сетевая |________ | Уровень звена данных | | ARP<->| плата |<->RARP | Уровень |_____________________________| |_______|_________|________| звена | данных _____________________________ | | Физический уровень | _____________|______________ Физический |_____________________________| Кабельные соединения сети уровень
Протокол TCP ориентирован на установление соединений. TCP-соединение напоминает телефонный разговор: информация, выдаваемая на одном конце, принимается на другом, и наоборот. Соединение удерживается даже в том случае, когда оба абонента молчат. Так как надежность передачи данных гарантируется на транспортном уровне, на прикладном уровне эти детали игнорируются.
Протокол UDP ориентирован на доставку одиночных пакетов, которые называются датаграммами (datagram), без установления соединения. Этот процесс напоминает отправку письма. Доставка пакетов не гарантируется, и нет средств управления трафиком. За надежность передачи данных, при использовании датаграмм отвечает прикладной уровень.
Для иллюстрации роли, которую TCP/IP играет в вычислительных сетях в реальном мире, рассмотрим, что происходит, когда Web-браузер использует HTTP (HyperText Transfer Protocol) для запроса и получения страницы HTML-данных из Web-сервера, подключенного к Internet. Для формирования виртуального подключения к серверу используется абстракцию программного обеспечения высокого уровня, называемую гнездом (socket). А чтобы извлечь страницу Web, он посылает на сервер команду GET HTTP, записывая ее в socket. Программное обеспечение socket`а, в свою очередь, применяет TCP для пересылки битов и байтов, составляющих команду GET на Web-сервер. TCP сегментирует данные и передает отдельные сегменты модулю IP, который пересылает сегменты в дейтаграммах на Web-сервер.
Если браузер и сервер работают на компьютерах, подключенных к различным физическим сетям (как это обычно бывает), пакеты передаются от сети к сети до тех пор, пока не достигнут той, к которой физически подключен сервер. В конце концов пакеты достигают пункта своего назначения и вновь собираются таким образом, чтобы Web-сервер, который считывает цепочки данных из своего гнезда, получал непрерывный поток данных. Для браузера и сервера данные, записанные в гнездо на одном конце, как по волшебству, "всплывают" на другом конце. Но между этими событиями происходят все виды сложных взаимодействий для создания иллюзии непрерывной передачи данных между вычислительными сетями.
Управление аппаратными устройствами осуществляется на канальном уровне архитектуры TCP/IP, а протоколы более высоких уровней не знают о том, как именно используются аппаратные средства.
Данные передаются по сети в форме пакетов. Каждый пакет состоит из заголовка и полезного содержимого (сообщения). Основные данные заголовка включают сведения о том, откуда прибыл пакет и куда он направляется. Полезное содержимое — это данные, подлежащие пересылке.
Имя базового блока передачи данных зависит от уровня протокола. На канальном уровне это кадр или фрейм, в протоколе IP — пакет, а в протоколе TCP — сегмент. Мы будем придерживаться универсального термина "пакет".
Когда пакет передается вниз по стеку протоколов, готовясь к отправке, каждый протокол добавляет в него свой собственный заголовок. Законченный пакет одного протокола становится полезным содержимым пакета, генерируемого следующим протоколом. Эта операция известна как инкапсуляция. На принимающей машине инкапсулированные кадры восстанавливаются в обратном порядке.
Например, дейтаграмма, передаваемая по сети Ethernet, упакована в трех различных "конвертах". В среде Ethernet она "вкладывается" в простой физический кадр, заголовок которого содержит сведения об аппаратных адресах отправителя и ближайшего получателя, длине кадра и его контрольной сумме (CRC). Полезным содержимым Ethernet-кадра является IP-пакет.
Полезное содержимое IP-пакета — UDP-пакет, и, наконец, полезное содержимое UDP-пакета состоит собственно из передаваемых данных.
Подобно письмам и сообщениям электронной почты, сетевые пакеты могут достичь пункта назначения только при наличии правильного адреса. В TCP/IP используется сочетание нескольких схем адресации:
Сетевая плата имеет МАС-адрес канального уровня, который отличает ее от других сетевых плат данной физической сети. IP-адрес, определяет ее положение в сети Internet.
Аппаратные адреса Ethernet должны быть постоянными и неизменными. В Linux можно менять аппаратный адрес любого сетевого интерфейса, но лучше этого не делать.
На следующем, более высоком уровне используется Internet-адресация (которую чаще называют IP-адресацией). Каждому сетевому интерфейсу присваивается четырехбайтовый IP-адрес. Эти адреса глобально уникальны и аппаратно независимы.
Соответствие между IP-адресами и аппаратными адресами реализуется на канальном уровне модели TCP/IP.
Поскольку IP-адреса представляют собой длинные, на первый взгляд случайные, числа, то запомнить их трудно. UNIX-системы позволяют связывать текстовые имена с IP-адресами.
Существует несколько способов осуществления подобной привязки: с помощью статического файла (/etc/hosts), баз данных NIS и NIS+ и, наконец, DNS — глобальной системы доменных имен. Помните, что имя компьютера — это просто удобное представление IP-адреса. Низкоуровневое сетевое программное обеспечение его не понимает.
IP-адрес имеет в длину четыре байта и состоит из двух частей: сетевой и машинной. Первая часть обозначает логическую сеть, к которой относится адрес, а вторая идентифицирует конкретный компьютер в сети. Для указания границы двух частей используется сетевая маска.
Неправильно думать, что IP адрес принадлежит компьютеру (хосту), он принадлежит сетевому интерфейсу (например, сетевой карте), который установлен в компьютере.
По соглашению, для удобства, IP-адреса записываются в виде группы десятичных чисел (по одному на каждый байт), разделенных точками. Например, 128.138.240.1.
Если первым байтом адреса является число 127, оно обозначает интерфейс обратной связи — фиктивную сеть, не имеющую реального аппаратного интерфейса и состоящую только из локальной машины. Адрес 127.0.0.1 всегда ссылается на текущую машину; ее символическое имя — localhost.
IP-адрес и другие параметры сетевого интерфейса задаются командой ifconfig.
Исторически IP-адреса группировались в классы, определявшиеся на основании первых битов самого левого байта. Современные маршрутизаторы используют явные сетевые маски для задания сетевой части адреса. Тем не менее, традиционные классы все еще используются по умолчанию, если не предоставлена явная маска.
Класс | Первый байт | Формат | Комментарии |
A | 1 — 126 | С.М.М.М | Самые ранние сети или адреса, зарезервированные для Министерства обороны США |
В | 128—191 | С.С.М.М | Крупные организации, обычно с подсетями; адреса данного класса почти полностью заняты |
С | 192—223 | С.С.С.М | Небольшие организации; адреса данного класса получить легко, они выделяются целыми блоками |
D | 224—239 |   | Групповые адреса, не назначаются на постоянной основе |
Е | 240—254 |   | Экспериментальные адреса |
Конфигурация вида С.С.М.С раньше допускалась, хотя и не была распространена. Сегодня подобный формат адреса недопустим.
Первый и последний адреса подсети не могут использоваться для назначения сетевым интерфейсам. Первый является адресом самой сети, а последний широковещательным адресом. Например, адресом сети является 192.168.1.0, а широковещательным адресом 192.168.1.255 (Если сеть класса "C").
Граница между сетевой и машинной частями адреса не обязательно приходится на границу байта. Это определяется сетевой маской, которая указывает какие биты принадлежат адресу сети, а какие адресу сетевого интерфейса.
Если бит сетевой маски равен "1", то соответствующий бит адреса принадлежит адресу сети.
Если бит сетевой маски равен "0", то соответствующий бит адреса принадлежит адресу сетевого интерфейса.
Например, рассмотрим IP-адрес компьютера (сетевой карты) 192.168.1.116 с сетевой маской 255.255.255.0:
двоичный вид | десятичный вид | |
ip: | 11000000.10101000.00000001.01110100 | 192.168.1.116 |
маска: | 11111111.11111111.11111111.0 | 255.255.255.0 |
сеть вида: | СССССССС.СССССССС.СССССССС.ММММММММ |   |
адрес сети: | 11000000.10101000.00000001.0 | 192.168.1.0 |
широковещательный адрес: | 11000000.10101000.00000001.11111111 | 192.168.1.255 |
Видим, что сеть вида С.С.С.М, то есть класса "С". Первый адрес 192.168.1.0 - адрес сети, последний 192.168.1.255 - широковещательный адрес. Диапазон IP адресов 1 - 254. Здесь все понятно и без двоичного представления.
Теперь изменим сетевую маску на 255.255.255.192 (внимательно смотрим на последний байт).
двоичный вид | десятичный вид | |
ip: | 11000000.10101000.00000001.01110100 | 192.168.1.116 |
маска: | 11111111.11111111.11111111.11000000 | 255.255.255.192 |
сеть вида: | СССССССС.СССССССС.СССССССС.ССММММММ |   |
адрес сети: | 11000000.10101000.00000001.01000000 | 192.168.1.64 |
широковещательный адрес: | 11000000.10101000.00000001.01111111 | 192.168.1.127 |
А вот здесь не сразу все видно. Нужно внимательно смотреть на двоичный вид. Итак, нам интересен только последний байт. Имеем IP 01110100 и маску 11000000. Все что в маске "1", в ip - сеть, и в пределах этой сети (подсети) неизменна. Отсюда адрес сети 01000000 и широковещательный адрес 01111111.
Возможно задание сетевой маски альтернативным способом. После адреса подсети ставиться прямой слеш и число единичных битов в сетевой маске. Например, запись 192.168.1.0/24 указывает на сеть с адресом 192.168.1.0 и сетевой маской 255.255.255.0.
Существуют диапазоны (подсети) IP-адресов, предназначенных только для частного использования. Эти IP-адреса не должны маршрутизироваться провайдерами Internet. Маршрутизаторы таких провайдеров, при встрече с пакетами от или к этим IP-адресам, считают их мусором и тут же выбрасывают.
Класс | Начало | Конец | Диапазон |
A | 10.0.0.0 | 10.255.255.255 | 10.0.0.0/8 |
B | 172.16.0.0 | 172.31.255.255 | 172.16.0.0/12 |
C | 192.168.0.0 | 192.168.255.255 | 192.168.0.0/16 |
Распространенной ошибкой является мысль о том, что один и тот же IP адрес может существовать в нескольких сетях одновременно. И будто пакеты будут ходить из одной сети в другую к такому же IP. Это не так. IP - это уникальный адрес во всей сети. Однако две изолированные сети могут иметь пересекающийся диапазон IP адресов.
Другая ошибка в наделении сетевых масок (в десятичном виде) какими-то особыми связями с IP адресами или с их количеством. Например. "Если сетевая маска заканчивается на 255, то в сети 254 IP адреса. Значит если сетевая маска заканчивается на 192, то в сети 191 IP адрес." И это не так. Сетевая маска - это как краска, часть битов она красит в цвет адресов сети, а часть в цвет адресов сетевого интерфейса. И имеет смысл только в двоичном виде, но в двоичном виде записывать не удобно.
Internet - это набор IP сетей, точками соприкосновения которых являются маршрутизаторы. Это компьютеры, которые находятся одновременно в нескольких IP сетях (Например, с двумя сетевыми картами). Служат для пересылки пакетов из одной IP сети в другую.
Маршрутизация — это процесс направления пакета по лабиринту сетей, находящихся между отправителем и адресатом. Маршрутизация в TCP/IP происходит подобно тому, как путешественник, первый раз, посетивший незнакомую страну, отыскивает нужный ему дом, задавая вопросы местным жителям. Первый человек, с которым он заговорит, возможно, укажет ему нужный город. Войдя в этот город, путешественник спросит другого прохожего о нужной улице, и тот расскажет, как туда попасть. В конце концов наш путешественник подойдет достаточно близко к конечному пункту своих странствий, чтобы кто-нибудь указал ему дом, который он ищет.
Данные маршрутизации в системе TCP/IP имеют форму правил (маршрутов), например: "Для того чтобы достичь сети А, посылайте пакеты через машину С". Может существовать и стандартный маршрут; он объясняет, что нужно делать с пакетами, предназначенными для отправки в сеть, маршрут к которой не указан явным образом.
Стандартные маршруты так же имеют названия шлюзы. И на рабочих станциях обычно прописан только шлюз в таблице маршрутизации он означает "любые пакеты, относящиеся не к этой подсети посылать на шлюз".
Можно построить несколько IP сетей в одной среде передачи данных (физической сети) и при этом компьютеры в разных IP сетях не смогут "видеть" друг друга без маршрутизатора. Но маршрутизация между двумя физическими сетями с одной IP сетью невозможна, т.к. маршрутизатор, имеющий два сетевых интерфейса в одной IP сети, не сможет решить в какую именно физическую сеть он должен отослать пакет.
Обычно в одной физической сети существует только одна IP сеть.
Данные маршрутизации хранятся в одной из таблиц ядра. Любой элемент подобной таблицы содержит несколько параметров, включая сетевую маску для каждой перечисленной сети. Для направления пакета по конкретному адресу ядро подбирает наиболее подходящий маршрут. Если ни один из маршрутов не подходит, то отправителю возвращается ICMP-сообщение об ошибке "network unreachable" (сеть недоступна).
Таблицу маршрутизации можно просмотреть с помощью команды net-stat -r или route.
Это так называемая статическая маршрутизация. Настраивается один раз, обычно в скриптах инициализации (загрузки), и работает в сетях со статичной топологией.
Существует и динамическая маршрутизация. Она выполняется процессом-демоном, который ведет и модифицирует таблицу маршрутизации. Демоны маршрутизации, "обитающие" на различных машинах, общаются между собой с целью определения топологии сети и решения вопроса о том, как добраться до дальних адресатов.
В принципе, протокол IP не предусматривает средств управления маршрутной информацией, но в нем есть небольшой механизм контроля нарушений — переадресующие ICMP-пакеты. Если маршрутизатор направляет пакет компьютеру, находящемуся в той же сети, из которой этот пакет был получен первоначально, то что-то работает явно неправильно. Поскольку отправитель, маршрутизатор и маршрутизатор следующего уровня находятся в одной сети, то пакет, вероятно, можно послать не через два перехода, а через один. Маршрутизатор делает вывод о том, что таблицы маршрутизации отправителя — неточные или неполные.
В этой ситуации маршрутизатор может уведомить отправителя о данной проблеме с помощью переадресующего ICMP-пакета. Такой пакет, по сути дела, сообщает: "Не нужно посылать мне пакеты для машины ххх; их следует адресовать машине ууу". Протокол ICMP позволяет посылать переадресующие пакеты, как по адресам отдельных компьютеров, так и целым сетям. Во многих реализациях, однако, допускается создание пакетов только первого типа.
Несмотря на то что идентификация IP-пакетов осуществляется при помощи IP-адресов, для фактической 'передачи данных через канальный уровень должны применяться аппаратные адреса. Определением того, какой аппаратный адрес связан с данным IP-адресом, занимается протокол ARP (Address Resolution Protocol — протокол преобразования адресов). Его можно применять в сетях любых типов, которые поддерживают широковещательный режим, но чаще всего этот протокол рассматривают в контексте сети Ethernet.
Когда компьютер А хочет послать пакет компьютеру Б, расположенному в том же самом Ethernet-сегменте, он использует протокол ARP для отыскания аппаратного адреса Б. Если Б не находится в той же сети, А с помощью протокола ARP выясняет аппаратный адрес маршрутизатора следующего уровня, которому будут посылаться пакеты, адресованные Б. Так как в ARP применяются широковещательные пакеты, которые не могут выйти за пределы локальной сети", этот протокол позволяет находить только адреса компьютеров, непосредственно подключенных к той же самой сети.
Протокол ARP функционирует путем широковещательной рассылки пакета примерно следующего содержания: "Знает ли кто-нибудь аппаратный адрес для 128.138.116.4?" Машина, которую разыскивают, узнает свой адрес и посылает ответ: "Это я, мой Ethernet-адрес — 8:0:20:0:fb:6a".
Исходный запрос содержит IP-адрес и Ethernet-адрес запрашивающей стороны, благодаря чему разыскиваемая машина может ответить, не выдавая собственный ARP-запрос. Таким образом, оба компьютера узнают адреса друг друга всего за один сеанс обмена пакетами. Другие компьютеры, "слышавшие" исходное широковещательное сообщение, посланное инициатором запроса, тоже могут записать информацию о его адресах.
В Linux имеется команда агр, которую можно применять для изучения и обработки содержимого кэша ARP. Она обычно используется для добавления и удаления записей. Команда агр -а отображает содержимое кэша.
Если два компьютера в сети имеют одинаковый IP-адрес, то на одном из них запись в ARP-таблице будет правильной, а на другом — нет. С помощью команды агр можно найти машину-нарушитель.
IP-адреса идентифицируют компьютеры, точнее, сетевые интерфейсы компьютера; они недостаточно конкретны для адресации отдельных процессов и сервисов. Протоколы TCP и UDP расширяют концепцию IP-адресов, вводя понятие порта. Порт в данном случае представляет собой двухбайтовое число, добавляемое к IP-адресу и указывающее конкретный канал взаимодействия. Все стандартные сервисы UNIX, в частности электронная почта, FTP, связываются с "известными" портами, которые определены в файле /etc/services.
Для того чтобы предотвратить попытки сторонних процессов замаскироваться под стандартные сервисы, UNIX-системы ограничивают доступ к портам с номерами до 1024 только для пользователя root.
Научно-техническая деятельность сообщества пользователей Internet находит отражение в серии документов, известных как RFC (Requests For Comments — запросы на комментарии). Стандарты протоколов, предлагаемые технические изменения, а также информационные бюллетени в итоге находят свое отражение в документах RFC. Иногда они действительно имеют вид комментариев, но чаще выпускаются в виде пояснений к существующим методикам и технологиям.
RARP (Reverse Address Resolution Protocol, протокол обратного преобразования адресов): преобразует физические сетевые адреса в IP-адреса.
ICMP (Internet Control Message Protocol, протокол управляющих сообщений Internet): позволяет IP-маршрутизаторам посылать сообщения об ошибках и управляющую информацию другим IP-маршрутизаторам и главным компьютерам сети. ICMP-сообщения "путешествуют" в виде полей данных IP-дейтаграмм и обязательно должны реализовываться во всех вариантах IP.
IGMP (Internet Group Management Protocol, протокол управления группами Internet): позволяет IP-дейтаграммам распространяться в циркулярном режиме (multicast) среди компьютеров, которые принадлежат к соответствующим группам.
IP (Internet Protocol, протокол Internet): низкоуровневый протокол, который направляет пакеты данных по отдельным сетям, связанным вместе с помощью маршрутизаторов для формирования Internet или интрасети. Данные "путешествуют" в форме пакетов, называемых IP-дейтаграммами.
TCP (Transmission Control Protocol, протокол управления передачей): протокол ориентирован на работу с подключениями и передает данные в виде потоков байтов. Данные пересылаются пакетами - TCP-сегментами, - которые состоят из заголовков TCP и данных. TCP - "надежный" протокол, потому что в нем используются контрольные суммы для проверки целостности данных и отправка подтверждений, чтобы гарантировать, что переданные данные приняты без искажений.
UDP (User Datagram Protocol, протокол пользовательских дейтаграмм): протокол, не зависящий от подключений, который передает данные пакетами, называемыми UDP-дейтаграммами. UDP - "ненадежный" протокол, поскольку отправитель не получает информацию, показывающую, была ли в действительности принята дейтаграмма.
SMTP (Simple Mail Transfer Protocol, простой протокол обмена электронной почтой): определяет формат сообщений, которые SMTP-клиент, работающий на одном компьютере, может использовать для пересылки электронной почты на SMTP-сервер, запущенный на другом компьютере.
FTP (File Transfer Protocol, протокол передачи файлов): позволяет передавать файлы с одного компьютера на другой с использованием TCP-соединений. В родственном ему, но менее распространенном протоколе передачи файлов - Trivial File Transfer Protocol (TFTP) - для пересылки файлов применяется UDP, а не TCP.
http://www.mgul.ac.ru/~t-alex/Linux/IP-Subnetworking-HOWTO/IP-Subnetworking-HOWTO.html Robert Hart, hartr@interweft.com.au Русский перевод Ilgiz Kalmetev ilgiz@mail.rb.ru v1.0, 31 March 1997 IP Sub-networking Mini-Howto
http://www.citforum.ru/internet/services/index.shtml АДМИНИСТРИРОВАНИЕ СЕТИ И СЕРВИСОВ INTERNET УЧЕБНОЕ ПОСОБИЕ
http://www.xspider.net.ru/tcpip/tcp00.html TCP/IP КРУПНЫМ ПЛАНОМ
http://www.codenet.ru/webmast/tcpip.php Руководство по TCP/IP для начинающих