Протокол tcp/ip
Содержание:
- The Network Interface Layer
- Форматы протоколов
- accept()¶
- Обзор протокола POP
- 2015: Операторы связи выявили проблемы с решениями на основе TCP/IP в сетях 4G
- Модель OSI
- Практика¶
- Сетевой (межсетевой) уровень
- Что такое таблицы маршрутизации
- Что такое маска адреса (подсеть)
- Сетевые протоколы TCP/IP, NWLink IPX/SPX, NetBEUI
- Назначение протокола TCP/IP
- Уровни
- Реализации
The Network Interface Layer
Network Interface Layer is this layer of the four-layer TCP/IP model. This layer is also called a network access layer. It helps you to defines details of how data should be sent using the network.
It also includes how bits should optically be signaled by hardware devices which directly interfaces with a network medium, like coaxial, optical, coaxial, fiber, or twisted-pair cables.
A network layer is a combination of the data line and defined in the article of OSI reference model. This layer defines how the data should be sent physically through the network. This layer is responsible for the transmission of the data between two devices on the same network.
Форматы протоколов
Теперь поговорим о том, что такое IP-протокол. Как мы уже отмечали, этот межсетевой протокол в стеке используется для определения адресации сетевого уровня. Существует два основных формата протокола, которые применяется для IP адресов:
- IPv4. Представляет собой 32-битное число. Представление адресов в такой форме достаточно удобное – оно представляет собой 4 группы десятичных чисел (но строго от 0 до 255), которые разделяются точками. Например: 188.227.9.194.
- IPv6. Такой формат подразумевает использование 128-битного числа. Адреса формируются в виде 8 групп, в каждой из которых имеется 4 шестнадцатеричные цифры. Разделяются группы двоеточием. Например: 2001:0058:0db8:0074:1c60:2c18:1025:2b5f.
accept()¶
См.также
- http://unixhelp.ed.ac.uk/CGI/man-cgi?accept+2
Используется для принятия запроса на установление соединения от удаленного хоста. Принимает следующие аргументы:
- sockfd — дескриптор слушающего сокета на принятие соединения.
- cliaddr — указатель на структуру sockaddr, для принятия информации об адресе клиента.
- addrlen — указатель на socklen_t, определяющее размер структуры, содержащей клиентский адрес и переданной в accept(). Когда accept() возвращает некоторое значение, socklen_t указывает сколько байт структуры cliaddr использовано в данный момент.
Примечание
Функция возвращает дескриптор сокета, связанный с принятым соединением, или −1 в случае возникновения ошибки.
Пример на Си
#include <sys/types.h> #include <sys/socket.h> int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
Пример на Python
Обзор протокола POP
POP3 (Post Office Protocol Version 3) – это сетевой протокол, используемый почтовым клиентом для получения сообщений электронной почты с сервера. Обычно используется в паре с протоколом SMTP.
По умолчанию использует TCP-порт 110. Существуют реализации POP3-серверов, поддерживающие TLS и SSL.
После установки соединения протокол РОР3 проходит три последовательных состояния:
- авторизация клиент проходит процедуру аутентификации;
- транзакция клиент получает информацию о состоянии почтового ящика, принимает и удаляет почту;
- обновление сервер удаляет выбранные письма и закрывает соединение.
Не смотря на то, что протокол РОР3 действительно поддерживает возможность получения одного или нескольких писем и оставления их на сервере, большинство программ обработки электронной почты просто скачивают все письма и опустошают почтовый ящик на сервере.
Так как при использовании POP сообщения электронной почты загружаются клиентом и удаляются с сервера, это означает, что они не хранятся централизованно. Так как протокол POP не сохраняет сообщения, его нецелесообразно использовать компаниям малого бизнеса, которым необходимо решение для централизованного резервного копирования.
2015: Операторы связи выявили проблемы с решениями на основе TCP/IP в сетях 4G
В 2015 году несколько операторов мобильной связи выявили проблемы с технологиями на основе TCP/IP, применяемыми в 4G. Сложности связаны с неэффективным использованием спектра в результате добавления функций мобильности, безопасности, качества обслуживания и других к протоколу, который никогда для них не разрабатывался. Последующие исправления и обходные пути, предназначенные для решения этих проблем, сами стали приводят к увеличению затрат, задержкам и большему энергопотреблению. Поэтому TCP/IP был признан не оптимальным для более продвинутых услуг 5G.
Группа по протоколам следующего поколения (ISG NGP) проанализировала проблемы и предложила альтернативные решения. По результатам работы были определены требования к технологиям-кандидатам, которые заключались в сильном уменьшении размеров заголовков, времени обработки пакетов и задержки на сети, но, кроме этого, в совместимости с текущими сетями TCP/IP, SDN и MPLS.
Модель OSI
Эталонная модель OSI являет собой 7-уровневую сетевую иерархию созданную международной организацией по стандартам (ISO). Представленная модель на рис.1 имеет 2 различных модели:
- горизонтальная модель на основе протоколов, реализующую взаимодействие процессов и ПО на разных машинах
- вертикальную модель на основе услуг, реализуемых соседними уровнями друг другу на одной машине
В вертикальной — соседние уровни меняются информацией с помощью интерфейсов API. Горизонтальная модель требует общий протокол для обмена информацией на одном уровне.
Рисунок — 1
Модель OSI описывает только системные методы взаимодействия, реализуемые ОС, ПО и тд. Модель не включает методы взаимодействия конечных пользователей. В идеальных условиях приложения должны обращаться к верхнему уровню модели OSI, однако на практике многие протоколы и программы имеют методы обращения к нижним уровням.
Физический уровень
На физическом уровне данные представлены в виде электрических или оптических сигналов, соответствующие 1 и 0 бинарного потока. Параметры среды передачи определяются на физическом уровне:
- тип разъемов и кабелей
- разводка контактов в разъемах
- схема кодирования сигналов 0 и 1
Самые распространенные виды спецификаций на этом уровне:
- EIA-RS-232-C, CCITT V.24/V.28 — параметры несбалансированного последовательного интерфейса
- EIA-RS-422/449, CCITT V.10 — параметры сбалансированного последовательного интерфейса
- IEEE 802.3 — Ethernet
- IEEE 802.5 — Token ring
На физическом уровне нельзя вникнуть в смысл данных, так как она представлена в виде битов.
Канальный уровень
На этом канале реализована транспортировка и прием кадров данных. Уровень реализует запросы сетевого уровня и использует физический уровень для приема и передачи. Спецификации IEEE 802.x делят этот уровень на два подуровня управление логическим каналом (LLC) и управление доступом к среде (MAC). Самые распространенные протоколы на этом уровне:
- Протокол последовательной передачи HDLC
- IEEE 802.2 LLC и MAC
- Ethernet
- Token Ring
- FDDI
- х 25
- Frame Relay
Также на этом уровне реализуется обнаружение и исправление ошибок при передаче. На канальном уровне пакет помещается в поле данных кадра — инкапсуляция. Обнаружение ошибок возможно с помощью разных методов. К примеру реализация фиксированных границ кадра, или контрольной суммой.
Сетевой уровень
На этом уровне происходит деление пользователей сети на группы. Здесь реализуется маршрутизация пакетов на основе MAC-адресов. Сетевой уровень реализует прозрачную передачу пакетов на транспортный уровень. На этом уровне стираются границы сетей разных технологий. Маршрутизаторы работают на этом уровне. Пример работы сетевого уровня показан на рис.2 Самые частые протоколы:
- ПIP
- IPX
- X 25
- CLNP
Рисунок — 2
Транспортный уровень
На этом уровне потоки информации делятся на пакеты для передачи их на сетевом уровне. Самые распространенные протоколы этого уровня:
- TCP — протокол управления передачей
- NCP
- SPX
- TP4
Сеансовый уровень
На этом уровне происходит организация сеансов обмена информацией между оконечными машинами. На этом уровне идет определение активной стороны и реализуется синхронизация сеанса. На практике многие протоколы других уровней включают функцию сеансового уровня.
Уровень представления
На этом уровне происходит обмен данными между ПО на разных ОС. На этом уровне реализовано преобразование информации (кодирование, сжатие и тд) для передачи потока информации на транспортный уровень. Протоколы уровня используются и те, что используют высшие уровни модели OSI.
Прикладной уровень
Прикладной уровень реализует доступ приложения в сеть. Уровень управляет переносом файлов и управление сетью. Используемые протоколы:
- FTP/TFTP — протокол передачи файлов
- X 400 — электронная почта
- Telnet
- smtp
- CMIP — управление информацией
- SNMP — управление сетью
- NFS — сетевая файловая система
- FTAM — метод доступа для переноса файлов
Практика¶
1. Напишите функции для передачи данных с помощью модели TCP/IP от клиента сети.
Каждая функция должна имитировать работу одного из уровней передачи данных.
Используйте заготовку кода ниже:
''' 4 уровень, функция application() - отвечает за формат данных, их шифрование input функции - данные, которые хотим отправить по сети, протокол данных ('SMTP','HTTP','FTP') output: данные + информация про формат данных и шифрование ''' def application (data, protocol): ... ''' 3 уровень, функция transport() - отвечает за способ передачи данных и их транспортировку input: результат работы функции application(), протокол транспортировки данных ('TCP', 'UDP') output: данные + информация про транспортировку''' def transport(data, protocol): ... ''' 2 уровень, функция internet() - отвечает за маршрутизацию в сети. Она ищет кому и как доставить данные input: результат работы функции transport() output: данные + информация про адресата и маршрут доставки''' def internet(data): ... '''1 уровень, функция network_interface - отвечает за соединение с сетью input: результат работы функции internet(), информация о соединении output: кортеж из 2 значений: 1. данные, преобразованные в бинарный формат 2. информация о типе соединения (1 - 'Ethernet', 2 -'Wi-Fi', другие числа - "No connection")''' def network_interface (data, connection): ... data = '01101' print (data) data_app = application(data,'SMTP') print ('application level - ', data_app) data_transport = transport (data_app,'TCP') print ('transport level - ', data_transport) data_ip = internet (data_transport) print ('internet level - ', data_ip) data_from_network = network_interface (data_ip,'Wi-Fi') print ('network_interface level - ', data_from_network)
2. Напишите функции для получения данных из сети клиентом с помощью модели TCP/IP.
Каждая функция должна имитировать работу одного из уровней передачи данных.
Используйте заготовку кода ниже, учтите потери данных:
'''1 уровень, функция network_interface - отвечает за соединение с сетью передаём в функцию 2 аргумента: 1 аргумент, data - это данные в виде бинарного числа 2 аргумент, connection - это тип соединения (1 - 'Ethernet', 2 -'Wi-Fi', другие числа - "No connection") возвращаем: - если удалось установить соединение - то кортеж из 2 значений: данные в виде строки из нулей и единиц и тип соединения - если не удалось установить соединение, то строку "No connection"''' def network_interface(data, connection): ... ''' 2 уровень, функция internet() - отвечает за маршрутизацию в сети. Она ищет кому и как доставить данные передаём в функцию результат работы функции network_interface() возвращаем данные в виде строки, если данные переданы в кортеже и адресованы нам, иначе - передаём None''' def internet(data): ... ''' 3 уровень, функция transport() - отвечает за способ передачи данных и их транспортировку передаём в функцию результат работы функции internet() возвращаем: - если c предыдущего уровня получены данные, то формируем кортеж из 2 значений: данные, протокол передачи - None - если данные не получены''' def transport(data): ... ''' 4 уровень, функция application() - отвечает за формат данных, их расшифровку передаём в функцию результат работы функции transport() возвращаем: ''' def application (data): ... data = 0b110110111 print (bin(data)) data_from_network = network_interface (data,1) print ('network_interface level - ', data_from_network) data_ip = internet (data_from_network) print ('internet level - ', data_ip) data_transport = transport (data_ip) print ('transport level - ', data_transport) data_app = application(data_transport) print ('application level - ', data_app)
Сетевой (межсетевой) уровень
Основным протоколом этого уровня является протокол IP, который доставляет блоки данных (дейтаграммы) от одного IP-адреса к другому. IP-адрес является уникальным 32-х битным идентификатором компьютера, точнее его сетевого интерфейса. Данные для дейтаграммы передаются IP модулю транспортным уровнем. IP модуль добавляет к этим данным заголовок, содержащий IP-адрес отправителя и получателя, и другую служебную информацию.
Таким образом, сформированная дейтаграмма передается на уровень доступа к среде передачи, для отправки по каналу передачи данных.
Не все компьютеры могут непосредственно связаться друг с другом, часто чтобы передать дейтаграмму по назначению требуется направить ее через один или несколько промежуточных компьютеров по тому или ному маршруту. Задача определения маршрута для каждой дейтаграммы решается протоколом IP.
Когда модуль IP получает дейтаграмму с нижнего уровня, он проверяет IP адрес назначения, если дейтаграмма адресована данному компьютеру, то данные из нее передаются на обработку модулю вышестоящего уровня, если же адрес назначения дейтаграммы чужой, то модуль IP может принять два решения:
- Уничтожит дейтаграмму;
- Отправить ее дальше к месту назначения, определив маршрут следования, так поступают промежуточные станции – маршрутизаторы.
Также может потребоваться на границе сетей, с различными характеристиками, разбить дейтаграмму на фрагменты, а потом собрать их в единое целое на компьютере получателя. Это также задача протокола IP.
Также протокол IP может отправлять сообщения – уведомления с помощью протокола ICMP, например, в случае уничтожения дейтаграммы. Более никаких средств контроля корректности данных, подтверждения или доставки, предварительного соединения в протоколе нет, эти задачи возложены на транспортный уровень.
Что такое таблицы маршрутизации
И вот мы плавно добрались и до них. И так.. Что же за таблицы такие.
Организация или пользователь может иметь несколько точек подключения к Интернету (например, резервные каналы на случай, если у первого провайдера что-то выйдет из строя, а интернет таки очень нужен) или содержать в своей структуре несколько IP-сетей. В этом случае, чтобы система знала каким путем (через какой шлюз) посылать ту или иную информацию, используются таблицы маршрутизации. В таблицах маршрутизации для каждого шлюза указываются те подсети Интернета, для которых через них должна передаваться информация. При этом для нескольких шлюзов можно задать одинаковые диапазоны, но с разной стоимостью передачи данных: например, информация, будет пересылаться по каналу, имеющему самую низкую стоимость, а в случае выхода его из строя по тем или иным причинам, автоматически будет использоваться следующее доступное наиболее дешевое соединение.
Что такое маска адреса (подсеть)
Понятие подсети введено, чтобы можно было выделить часть IP-адресов одной организации, часть другой и тд. Подсеть представляет собой диапазон IP-адресов, которые считаются принадлежащими одной локальной сети. При работе в локальной сети информация пересылается непосредственно получателю. Если данные предназначены компьютеры с IP-адресом, не принадлежащим локальной сети, то к ним применяются специальные правила для вычисления маршрута для пересылки из одной сети в другую.
Маска — это параметр, который сообщает программному обеспечению о том, сколько компьютеров объединено в данную группу (подсеть). Маска адреса имеет такую же структуру как и сам IP-адрес: это набор из четырех групп чисел, каждое из которых может быть в диапазоне от 0 до 255. При этом, чем меньше значение маски, тем больше компьютеров объединено в данную подсеть. Для сетей небольших компаний маска обычно имеет вид 255.255.255.x (например, 255.255.255.224). Маска сети присваивается компьютеру одновременно с IP-адресом. Так, например, сеть 192.168.0.0 с маской 255.255.255.0 может содержать в себе компьютеры с адресами от 192.168.0.1 до 192.168.254. А сеть 192.168.0.0 с маской 255.255.255.128 допускает адреса от 192.168.0.1 до 192.168.0.127. Думаю, смысл понятен. Как правило сети с небольшим возможным числом компьютеров используются провайдерами с целью экономии IP-адресов. Например, клиенту, может быть назначен адрес с маской 255.255.255.252. Такая подсеть содержит в себе только два компьютера.
После того как компьютер получил IP-адрес и ему стало известно значение маски подсети, программа может начать работу в данной локальной подсети. Однако же, чтобы обмениваться информацией с другими компьютерами в глобальной сети, необходимо знать правила, куда пересылать информацию для внешней сети. Для этого служит такая характеристика как адрес шлюза (Gateway).
Сетевые протоколы TCP/IP, NWLink IPX/SPX, NetBEUI
Давайте начнем с того, что вообще такое сетевой протокол и с чем его едят.Сетевой протокол — это набор программно реализованных правил общения между компьютерами. Этакий язык, на котором компьютеры разговаривают друг с другом и передают информацию. Ранее компьютеры были, так сказать, многоязычны и в старых версиях Windows использовался целый набор протоколов, — TCP/IP, NWLink IPX/SPX, NetBEUI. Ныне же пришли к общей договоренности, и стандартом стало использование исключительно протокола TCP/IP, а посему речь далее пойдет именно о нем.
Когда говорят о TCP/IP, то обычно подразумевают под этим именем множество различных.. правил или, скажем, стандартов, которые прописаны с использованием (или под использование) этого протокола. Так, например, есть правила, по которым осуществляется обмен сообщениями между почтовыми серверами и есть правила, по которым конечный пользователь получает в свой ящик письма. Имеются правила для проведения видео-конференций и правила для организации «телефонных» переговоров по Интернету. Фактически, это даже не то чтобы правила.. Скорее этакая грамматика, что ли. Ну знаете, в английском одна структура построения диалогов, в французском другая.. Вот и в TCP/IP нечто подобное, т.е. некая связка различных грамматических правил представляет собой как раз цельный протокол TCP/IP или, точнее говоря, стек протоколов TCP/IP.
Назначение протокола TCP/IP
Процесс передачи данных между устройствами требует, чтобы оба компьютера использовали одинаковый протокол.
Каждый протокол применяет свои способы борьбы с ошибками, которые могут возникнуть при передаче данных, однако принципиальная схема исправления одна и та же. Как мы уже отметили, передаваемый файл разбивается на отдельные пакеты, которые передаются на конечное устройства и соединяются в определенной последовательности. Каждый пакет дополнительно содержит контрольный байт, который позволяет убедиться в отсутствии ошибок. Если компьютер обнаруживает ошибку при передаче данных, то пакет запрашивается заново.
Такая процедура уменьшает объем информации, которую можно передавать в единицу времени, однако позволяет добиться надежности передачи.
Модель TCP/IP считается наиболее совершенной, так как позволяет настроить взаимодействие компьютеров и подключить к ним различные сетевые устройства. По сути основное назначение TCP/IP заключается в обеспечении трафика для крупных сетей и поддержание функционирования всего Интернета.
Уровни
Уровень 1. Физический. Включает физические аспекты передачи двоичной информации по линии связи. Детально описывает, например, напряжения, частоты, природу передающей среды. Этому уровню вменяется в обязанность поддержание связи и приём-передача битового потока. Безошибочность желательна, но не требуется.
Уровень 2. Канальный. Обеспечивает безошибочную передачу блоков данных первый через уровень, который при передаче может искажать данные. Этот уровень должен определять начало и конец кадра в битовом потоке, формировать из данных, передаваемых физическим уровнем, кадры или последовательности кадров, включать процедуру проверки наличия ошибок и их исправления. Этот уровень (и только он) оперирует такими элементами, как битовые последовательности, методы кодирования, маркеры. Он несёт ответственность за правильную передачу данных (пакетов) на участках между непосредственно связанными элементами сети. Обеспечивает управление доступом к среде передачи.
Уровень 3. Сетевой. Этот уровень пользуется возможностями, предоставляемыми вторым уровнем, для обеспечения связи любых двух точек в сети. Этот уровень осуществляет проводку сообщений по сети, которая может иметь много линий связи, или по множеству совместно работающих сетей, что требует маршрутизации, т.е. определения пути, по которому следует пересылать данные. Маршрутизация производится на этом же уровне. Выполняет обработку адресов, а также мультиплексирование и демультиплексирование. Основной функцией программного обеспечения на этом уровне является выборка информации из источника, преобразование её в пакеты и правильная передача в точку назначения.
Уровень 4. Транспортный. Регламентирует пересылку данных между процессами, выполняемыми на компьютерах сети. Завершает организацию передачи данных: контролирует на сквозной основе поток данных, проходящий по маршруту, определённому третьим уровнем: правильность передачи блоков данных, правильность доставки в нужный пункт назначения, их комплектность, сохранность, порядок следования. Собирает информацию из блоков в её прежний вид. Или же оперирует с дейтаграммами, то есть ожидает отклика-подтверждения приёма из пункта назначения, проверяет правильность доставки и адресации, повторяет посылку дейтаграммы, если не пришёл отклик.
Уровень 5. Сеансовый. Координирует взаимодействие связывающихся процессов: устанавливает связь, взаимодействует, восстанавливает аварийно оконченные сеансы. Он координирует не компьютеры и устройства, а процессы в сети, поддерживает их взаимодействие. То есть управляет сеансами связи между процессами прикладного уровня. Этот же уровень ответственен за картографию сети. Фактически он преобразовывает адреса, удобные для людей, в реальные сетевые адреса, например, в Internet это соответствует преобразованию региональных (доменных) компьютерных имён в числовые адреса глобальной, и наоборот.
Уровень 6. Представления данных. Этот уровень имеет дело с синтаксисом и семантикой передаваемой информации. Здесь устанавливается взаимопонимание двух сообщающихся компьютеров относительно того, как они представляют и понимают по получении передаваемую информацию. На данном этапе решаются такие задачи, как перекодировка текстовой информации и изображений, сжатие и распаковка, поддержка сетевых файловых систем (NFS), абстрактных структур данных.
Уровень 7. Прикладной. Обеспечивает интерфейс между пользователем и сетью, делает доступными для человека всевозможные услуги. На этом уровне реализуется, по крайней мере, пять прикладных служб: передача файлов, удалённый терминальный доступ, электронная передача сообщений, справочная служба и управление сетью. В конкретной реализации определяется пользователем согласно его необходимости и требованиям.
Реализации
Набор Интернет-протоколов не предполагает наличия какой-либо конкретной аппаратной или программной среды. Для этого требуется только наличие аппаратного и программного уровня, способного отправлять и получать пакеты в компьютерной сети. В результате пакет был реализован практически на каждой вычислительной платформе. Минимальная реализация TCP / IP включает в себя следующее: Интернет-протокол (IP), протокол разрешения адресов (ARP), протокол управляющих сообщений Интернета (ICMP), протокол управления передачей (TCP), протокол дейтаграмм пользователя (UDP) и управление группами Интернета. Протокол (IGMP). В дополнение к IP, ICMP, TCP, UDP, Интернет-протокол версии 6 требует Neighbor Discovery Protocol (NDP), ICMPv6 и Multicast Listener Discovery (MLD) и часто сопровождается интегрированным уровнем безопасности IPSec .
Прикладных программистов обычно интересуют только интерфейсы на прикладном уровне, а часто и на транспортном уровне, в то время как нижележащие уровни представляют собой услуги, предоставляемые стеком TCP / IP в операционной системе. Большинство реализаций IP доступны программистам через сокеты и API .
Уникальные реализации включают облегченный TCP / IP , стек с открытым исходным кодом , разработанный для встроенных систем , и KA9Q NOS , стек и связанные протоколы для любительских систем пакетной радиосвязи и персональных компьютеров, подключенных через последовательные линии.
Прошивка микроконтроллера в сетевом адаптере обычно решает проблемы со связью, поддерживаемые программным обеспечением драйвера в операционной системе. Непрограммируемая аналоговая и цифровая электроника обычно отвечает за физические компоненты ниже канального уровня, обычно используя набор микросхем интегральной схемы для конкретного приложения (ASIC) для каждого сетевого интерфейса или другого физического стандарта. Высокопроизводительные маршрутизаторы в значительной степени основаны на быстрой непрограммируемой цифровой электронике, выполняющей переключение на уровне каналов.