Все интернет-протоколы, которые мы обсуждаем в нашей книге, оформлены в виде RFC-документов, содержащих их формальную спецификацию. Они публикуются на веб-сайте http://www.rfc-editor.org/, финансируемом организацией Internet Society (http://www.internetsociety.org/). Документы, описывающие интернет-стандарты, разрабатываются под эгидой организации Internet Engineering Task Force (IETF, www.ietf.org). Она представляет собой сообщество сетевых архитекторов, операторов, поставщиков услуг и исследователей, заинтересованных в развитии и стабильной работе Интернета. Членом IETF может стать любой человек, которому близка эта тематика.
Непосредственное отношение к материалу, рассматриваемому в данной книге, имеют следующие RFC-документы (их перевод можно найти на сайте rfc2.ru):
• RFC 791,
• RFC 950,
• RFC 793,
• RFC 768,
• RFC 1122,
RFC 1122 дополняет (и исправляет) ряд более старых документов, описывающие протоколы семейства TCP/IP. Это один из двух RFC-документов, которые часто встречаются под названием «RFC-требования к узлам». Второй имеет номер 1123 и посвящен прикладным протоколам, таким как telnet, FTP и SMTP.
TCP/IP представляет собой многоуровневый пакет сетевых протоколов. На самом нижнем его уровне находится протокол IP, передающий данные в виде датаграмм. IP не поддерживает соединения; это значит, что для передачи каждой отдельной датаграммы может выбираться особый сетевой маршрут. Протокол IP является ненадежным: он не дает никаких гарантий относительно порядка, в котором будут получены датаграммы, отсутствия дубликатов и даже просто успешной передачи данных. Если вам требуется надежность, то она должны быть предоставлена протоколом более высокого уровня (например, TCP) или самим приложением.
Оригинальной версией протокола IP является IPv4. В начале 1990-х была разработана новая версия, IPv6. Наиболее заметная ее особенность заключается в использовании 128 бит для представления сетевых адресов (вместо 32, как IPv4). Это позволяет подключать к глобальной сети Интернет значительно большее количество компьютеров. На сегодняшний день IPv4 остается наиболее распространенной версией протокола IP, хотя ожидается, что в ближайшие годы будет вытеснена IPv6.
Поверх IP функционируют различные протоколы транспортного уровня, наиболее востребованными из которых являются UDP и TCP. Первый передает датаграммы и является ненадежным. Второй гарантирует надежность, поддерживает соединения и основывается на байтовых потоках. Протокол TCP берет на себя все нюансы, связанные с установкой и разрывом соединения. Прежде чем передавать данные по IP, он упаковывает их в сегменты, каждый из которых получает уникальный порядковый номер; это позволяет подтверждать их доставку и собирать в правильном порядке на стороне получателя. Кроме того, TCP управляет потоком данных и обеспечивает контроль над перегрузкой, не давая быстрому отправителю полностью загрузить медленного получателя или переполнить сеть.
Ознакомьтесь с источниками, приведенными в разделе 55.14.
55. Сокеты: домены сети Интернет
Познакомившись с основными принципами работы сокетов и протоколов семейства TCP/IP, можно готовы приступить к написанию сетевых программ на основе доменов IPv4 (AF_INET) и IPv6 (AF_INET6).
Как отмечалось в главе 54, идентификатор сокета в интернет-домене состоит из IP-адреса и номера порта. Компьютеры работают с данной информацией в двоичном виде, однако люди предпочитают иметь дело с именами, а не с числами. Поэтому в настоящей главе будут описаны методики, позволяющие идентифицировать сетевые узлы и их порты с помощью имен. Мы также рассмотрим библиотечные функции для получения IP-адреса(-ов) заданного узла и номер порта, связанный с определенной службой. В рамках этой темы познакомимся с системой доменных имен (англ. Domain Name System, DNS), которая представляет собой распределенную базу данных, связывающую сетевые имена компьютеров с их IP-адресами и наоборот.
Потоковые сокеты интернет-домена реализованы поверх протокола TCP. Они предоставляют надежный двунаправленный канал данных на основе байтового потока.
Датаграммные сокеты интернет-домена реализованы поверх протокола UDP. Они похожи на сокеты домена UNIX, но имеют следующие особенности: