Готовый перевод Michael J. Donahoo "TCP/IP Sockets in C, 2nd Edition" / Michael J. Donahoo "Программирование TCP/IP сокетов в Си, 2-ое издание": 1.1 Сети, пакеты и протоколы
1.1 Сети, пакеты и протоколы
Компьютерная сеть состоит из устройств, соединенных посредством коммуникационных каналов. Мы называем эти устройства хостами и роутерами. Хосты - это компьютеры, на которых запускаются приложения, такие как Ваш веб-браузер, ваш клиент обмена быстрыми сообщениями или программа для расшаривания файлов. Прикладные программы, запущенные на хосте, и есть реальные "пользователи" сети. Роутеры (также могут называться шлюзами) - это устройства, чья работа - передавать или перенаправлять информацию с одного коммуникационного канала в другой. Они могут запускать программы, но обычно не могут запускать прикладные программы. Для наших целей, коммуникационный канал - это средства передачи последовательностей байтов от одного хоста к другому; он может быть проводным (например Ethernet), беспроводным (например WiFi) или оптическим (например оптическая связь прямого распространения).
Роутеры важны только потому, что непрактично соединять каждый хоcт с другим напрямую. Кроме того, несколько хостов подсоединяются к роутеру, который соединяется с другим роутером, и это позволяет сформировать сеть. Это средство позволяет каждой машине существовать c довольно малым количество коммуникационных каналов; большинству хостов требуется только один. Программы, которые обмениваются информацией через сеть, конечно же, не подсоединены напрямую с роутерами, и в основном остаются в блаженном неведении об их присутствии.
Под информацией мы подразумеваем последовательность байтов, которая создается и передается программами. В контексте компьютерных сетей, эти последовательности байтов обычно называются пакетами. Пакет содержит в себе управляющую информацию, которая необходима сети чтобы делать ее работу, и иногда также включает в себя пользовательские данные. К примеру, эта информация идентифицирует пункт назначения пакета. Роутеры используют такую управляющую информацию для того, чтобы выянить как направить каждый пакет.
Протокол - это соглашение об обмене пакетами поддерживающими связь программами. Он определяет структуру пакетов - к примеру, где в пакете должна находиться информация о пункте назначения пакета, какого размера она должна быть и как ее интерпретировать. Протокол обычно разрабатывается для решения специфических проблем, используя данные средства и возможности. К примеру, HTTP (HyperText Transfer Prоtocоl — протокол передачи гипертекста) решает проблему передачи гипертекстовых объектов между серверами, где они хранятся или генерируются, и веб-браузером, который делает эти объекты визуальными и употребительными для пользователей. Протоколы передачи мгновенных сообщений решают проблему предоставления возможности двум или более пользователям обмениваться короткими текстовыми сообщениями.
Реализация реальной компьютерной сети требует решения большого числа разных проблем. Чтобы сохранить легкую управляемость и модульность, разные протоколы созданы для решения отдельных наборов проблем. TCP/IP - это один из наборов решений, который чаще всего называется "набором протоколов". Произошло так, что этот набор протоколов используется в интернете, но он может быть использован с тем же успехом для построения автономных частных сетей.
Ведущими протоколами в TCP/IP являются интернет-протокол (Internet protocol - IP), протокол управления передачей (Transmission Control Protocol - TCP) и протокол пользовательских дейтаграмм (User Datagram Protocol - UDP). Оказывается практичным организовывать протоколы в слои (уровни); TCP/IP и практически все другие наборы протоколов пошли именно этим путем. Рисунок 1.1. показывает взаимодействия между протоколами, приложениями и Sockets API в хостах и роутерах, а также поток данных из одного приложения (используя TCP) к другому.
Блоки, подписанные TCP и IP показывают реализацию этих протоколов. Такая реализация характерно присуща в операционной системе хосту. Приложения получают доступ к сервисам, предоставляемым UDP и TCP через Sockets API, изображенного в виде пунктирной линии.
Стрелкой показан поток данных из приложения через TCP и IP
осуществляющаяся через сеть и обратно через IP и TCP
осуществляющаяся на другом конце.
Рисунок 1.1: Сеть TCP/IP
В TCP/IP нижний уровень состоит из лежащих в основе каналов связи - к примеру, Ethernet или соединение по Dual-Up модему. Эти каналы используются сетевым уровнем, который занимается проблемой передачи пакетов к месту назначения (то есть то, что делают роутеры). На сетевом уровне в стеке протоколов TCP/IP находится Internet Protocol (IP); он решает проблему создания последовательности каналов связи и маршрутизаторов (роутеров) между любыми двумя хостами, имитируя один канал между хостами (host-to-host).
Internet Protocol обеспечивает дейтаграмный сервис: каждый пакет обработанный и доставленный сетью независим, как письма или посылки, посланные с помощью почтовой службы. Чтобы сделать эту работу, в каждый IP-пакет включен адрес его пункта назначения, как каждое письмо, которое вы отправляете по почте кому-либо. (Мы вскоре поговорим подробнее об адресах.) Несмотря даже на то, что большинство служб доставки гарантируют доставку писем, IP - наилучший протокол - он пытается доставить каждый пакет, но он может (а иногда так и происходит) терять, повторять или дублировать пакеты при передаче по сети.
Уровень выше IP называется транспортным уровнем. Он предлагает выбор между двумя протоколами - TCP и UDP. Каждый из них опирается на услуги, предоставляемые IP, но они по-разному релизуют различные виды транспорта, которые используются протоколами приложений с различными потребностями. TCP и UDP имеют одну общую функцию - адресацию. Напомним, что IP доставляет пакеты на хост; должно быть понятным, точная детализация адреса доставки необходима для получения пакета определенной прикладной программой, вполне возможно одной из многих использующих сеть на этом хосте. TCP и UDP используют адреса, называемые номерами портов, для определения приложений в структуре хоста. Оба этих протокола называют сквозными (end-to-end) транспортными протоколами, потому что они передают данные от одной программы до другой (в товремя как IP только передает данные от одного хоста к другому).
TCP разработан для обнаружения и восстановления в случае потерь, дублирования и других ошибок, которые могут возникнуть в канале передачи данных между хостами, предоставленном IP. TCP обеспечивает надежный канал потока байтов, так что приложения не должны иметь дела с этими проблемами. Это протокол с установлением соединения: прежде чем его использовать для передачи информации, две программы должны первым делом установить TCP-соединение, используя механизм "рукопожатия" (handshake) между реализациями TCP на сообщающихся компьютерах.
Использование TCP во многом похоже на файл ввода/вывода (Input/Output - I/O). В самом деле, файл, записанный одной программой, и читаемый другой - это адекватная модель обмена данными посредством TCP-соединения. UDP, с другой стороны, не пытается исправлять ошибки, которые могут возникать при передаче данных посредством IP; он просто расширяет функционал IP передачи дейтаграм так, что он может работать между прикладными программами, а не между хостами. Таким образом, приложения, использующие UDP должны быть готовы к потерям, переупорядочиванию и так далее.
Переведено на Нотабеноиде
http://notabenoid.org/book/29398/99693
Переводчики: prefer211, IamSadist
Настройки
Готово:
