Протокол Интернет (IP) является подсистемой доставки семейства протоколов TCP/IP. Протокол Интернет — это ненадежный, не ориентированный на соединение протокол, пользующийся датаграммами для доставки информации в сети TCP/IP. Датаграмма протокола IP называется IP-датаграммой. Все приложения TCP/IP передают информацию, упаковав ее предварительно в IP-датаграмму. IP-датаграмма состоит из заголовка и собственно данных.
Термины «IP-датаграмма» и «IP-пакет» являются синонимами. Независимо от того, какие и сколько сообщений переносится, датаграмма представляет собой «самодостаточный» блок данных, в отличие от потока байтов. Термин «датаграмма» характеризует тип службы доставки. Любой протокол использует либо датаграммы, либо поток байтов. Тип датаграммы, например IP или UDP, определяет ее формат и содержимое.
Более общий термин «пакет» обозначает просто блок данных. Термин «пакет» относится к данным, а термин «датаграмма» — к службе доставки.
Следуя сквозь сетевые уровни, блок данных изменяет свое название. Как правило, данные называются по названию сетевого модуля, через который они в данный момент проходят. Как только данные выходят из одного модуля и попадают в следующий, они меняют имя на новое.
IP-адреса. Маска сети | Информатика ЕГЭ
Данные, проходящие между прикладным и транспортным уровнями, называются прикладными сообщениями. TCP и UDP пользуются потоковой и датаграммной службами доставки соответственно. Блок данных протокола TCP называется сегментом, а протокола UDP — датаграммой. Название соответствует блоку данных на пути между транспортным и сетевым уровнями. На рис.
2.7 показано, как изменяется название блока данных на пути сквозь стек протоколов TCP/IP.
Сегмент TCP иногда называется транспортным сообщением. В рамках Интернет термин «сообщение» всегда относится к данным определенного протокола или процесса виртуального соединения, или потока байтов. Сегменты TCP и датаграммы UDP превращаются в IP-пакеты на пути между модулем IP и уровнем соединения. Сеть TCP/IP инкапсулирует все сегменты TCP и датаграммы UDP в датаграммы IP, перемещая данные между сетевым уровнем и уровнем соединения. Все поступающие на уровень соединения данные называются IP-датаграммами или IP-пакетами.
Если применяется сеть технологии Ethernet, программное обеспечение инкапсулирует проходящие из уровня соединения на физический уровень данные в формат кадров Ethernet. В дальнейшем эти данные называются либо «кадр данных», либо «кадр Ethernet».
Вся информация в сетях TCP/IP инкапсулируется в формат IP-датаграмм. Процесс инкапсуляции создает IP-датаграмму, состоящую из IP-заголовка и данных. Размер IP-заголовка всегда кратен 32-битному слову, даже если для этого он должен дополниться нулями до нужной величины. Размер IP-заголовка равен всего лишь 20 байтам. IP-заголовок всегда имеет такую длину, за исключением специальных случаев.
Источник: libraryno.ru
Перевод IP адреса в двоичную и десятеричную формы
Бит — это единица компьютерной информации. Дискретная. Может принимать ровно два значения: ноль и единица.
Байт = 8 бит. Другими словами, байт состоит из восьми ячеек, каждая из которых может принимать ровно два разных значения: нулик или единичку. По основам комбинаторики такая конструкция может принимать 2 8 =256 значений. То есть, одним байтом можно закодировать 256 разных значений, от 0 до 255 включительно. При этом 0=[00000000], а 255=[11111111] (в угловых скобках — значение каждого из 8 бит в байте).
0 | 00000000 |
1 | 00000001 |
2 | 00000010 |
3 | 00000011 |
. | . |
254 | 11111110 |
255 | 11111111 |
Число10 — это число в привычном нам десятичном представлении. Иногда ещё говорят, что оно имеет основание 10.
Число2 — число в двоичном представлении, с основанием 2.
В IP-адресе (IPv4) — 4 байта, то есть 32 бита. В привычном нам написании типа 192.168.0.1 через точки указаны значения каждого байта в десятичной системе. Именно поэтому каждое из чисел в IP может принимать значения от 0 до 255 включительно, не больше и не меньше.
IP-адрес может быть записан одним десятичным числом. Например, рассмотрим адрес 192.168.0.1. Мы уже знаем, что каждое число, разделённое точками — это 1 байт, то есть 8 бит в компьютерном представлении. 192=[11000000], 168=[10101000], 0=[00000000], 1=[00000001]. Это означает, что весь данный IP-адрес в компьютере выглядит как 192.168.0.1=[11000000101010000000000000000001].
Если теперь перевести двоичное число в угловых скобках в десятичную систему, но не блоками по 8 бит, а всё сразу, то получим число 3232235521. То есть, IP-адрес 192.168.0.1 можно записать одним десятичным числом 3232235521.
Тип INT (целое число) в компьютере состоит тоже из четырёх байт (как правило). Причём он может быть как знаковым (включать в себя отрицательные числа), так и беззнаковым (только положительные числа).
В первом случае за знак числа отвечает первый из 32 бит, оставшийся 31 бит задаёт число по модулю. То есть, INT может принимать значения от -2 31 до 2 31 -1.
Во втором случае (UNSIGNED INT) используются все 32 бита и число может быть только положительным, от 0 до 2 32 -1 включительно.
Здесь речь идёт именно о беззнаковом целом, UNSIGNED INT.
Для многих является откровением, что вместо ping 192.168.0.1 можно написать ping 3232235521 и всё будет работать.
Более того, ip-адрес — это изначально четырёхбайтовая структура, не привязанная к какому-либо представлению. Привычное нам представление из четырёх чисел, разделённых точками, сделано для более удобного восприятия человеком.
Маска подсети — это конструкция из 4 байт, которая служит для операций над IP-адресом. Эти операции не так очевидны в привычном нам десятичном представлении, но ст́оит записать адрес и маску в двоичном виде, как всё становится на свои места. Например, рассмотрим IP-адрес 192.168.0.1 с маской 255.255.255.0.
Для удобства разделим пробелами байты в двоичном представлении адресов.
192.168.0 .1 = [11000000 10101000 00000000 00000001] 255.255.255.0 = [11111111 11111111 11111111 00000000]
Дальше применяются побитовые логические операции И, ИЛИ и НЕ, и на этом надо остановиться подробнее.
Допустим, у нас есть два бита (b): b1 и b2. К битам могут быть применены следующие логические операции:
Логическая операция И ( b2 равен 1 только в том случае, когда b1 = b2 = 1, в противном случае результат равен 0. Другими словами, результат логической операции И равен 1 только в том случае, когда И первый, И второй операнды равны 1.
Логическая операция ИЛИ (|). Результат операции b = b1 | b2 равен 1 в том случае, когда ИЛИ b1 = 1, ИЛИ b2 = 1, в противном случае результат равен 0. Другими словами, результат логической операции ИЛИ равен 1 в том случае, когда хотя бы один из операндов равен 1.
Логическая операция НЕ (!) — унарная, в отличии от бинарных операций И и ИЛИ. Это означает то, что она действует только на один-единственный элемент. Логическая операция НЕ меняет значение бита на противоположное, то есть, если b = 0, то !b = 1 и наоборот, если b = 1 то !b = 0.
Побитовые операции применяются к каждому биту в цепочке.
Вернёмся к IP-адресам.
В IP-адресе и маске по 32 бита. Для того, чтобы определить подсеть, над маской и адресом применяется побитовая операция И:
11000000 10101000 00000000 00000001 ( = 192.168.0.1 ) 11000000 10101000 00000000 00000001 ( = 192.168.0.1 ) = 00000000 00000000 00000000 00000001 ( = 0.0.0.1 )
То есть, в подсети 192.168.0.0 адрес нашего компьютера — 1.
Как выяснилось, для идентификации компьютера в сети важен не только его адрес, но и маска.
Для того, чтобы понять какие адреса могут быть во всей подсети — нужен её адрес и маска. Например, в подсети 192.168.0.0 с маской 255.255.255.0 могут существовать адреса в диапазоне от 192.168.0.1 до 192.168.0.255. Маска — обязательное значение для описания подсети.
В укороченной записи наша подсеть описывается как 192.168.0.0/24. Откуда берётся число 24 в конце?
Вернёмся к двоичному представлению маски и IP-адреса.
192.168.0 .1 = [11000000 10101000 00000000 00000001] 255.255.255.0 = [11111111 11111111 11111111 00000000]
24 — это количество единиц в начале маски (3 байта по 8 бит, 3 × 8 = 24). Укороченная запись возможна только тогда, когда маска выглядит как [блок_единиц][блок_нулей].
Например, подсеть 192.168.4.0/23 — это подсеть 192.168.4.0 с маской 255.255.254.0, в которой IP-адреса компьютеров могут принимать значения от 192.168.4.1 до 192.168.5.255 включительно.
255.255.254.0 = [11111111 11111111 11111110 00000000] 192.168.4 .1 = [11000000 10101000 00000100 00000001] 192.168.5 .255 = [11000000 10101000 00000101 11111111]
Первые 23 бита определяют подсеть, последние 9 бит — адреса компьютеров в подсети.
Обычно людям непонятно откуда берётся пятёрка в третьем байте IP-адреса (вместо четвёрки). При написании в двоичном представлении — это очевидно.
Источник: www.it-simple.ru
Основные протоколы передачи данных
Протоколы — это правила в интернете, по которым устройства с разными операционными системами и программным обеспечением обмениваются данными. С их помощью, например, пользователь Safari на MacBook получает сообщение, отправленное через Chrome на Android.
Чтобы обмениваться данными было удобнее, задачи по их отправке и получению разделены. Создана архитектура «клиент-сервер», где клиент отправляет запрос, а сервер принимает его и возвращает ответ.
Сервер — это специальная программа, или мощный компьютер, его ещё называют хост-системой. Клиент — любое устройство для работы с сайтом, например, ноутбук, смартфон или бортовой компьютер в автомобиле.
Веб-приложение — это клиент-серверное приложение, в котором клиентом выступает браузер. Допустим, на сервере хранится HTML-страница с кодом. Браузер получает файл и показывает этот код как привычную страницу сайта.
Какие бывают протоколы
Протоколы определяют правила выполнения конкретных задач. Но фронтендерам необязательно знать все существующие протоколы — достаточно разбираться в основных.
Хочется разобраться в протоколах?
У нас появился курс «Протоколы и сети». Он научит вас понимать принципы передачи данных и защищать свой код от атак.
Internet Protocol — IP
IP отвечает за поиск компьютеров в сети по их IP-адресам. Ещё он предоставляет стратегию маршрутизации, то есть составляет оптимальный маршрут для передачи данных.
Данные в интернете передаются IP-пакетами. У каждого пакета есть заголовок и данные. В заголовке находятся IP-адреса источника и пункта назначения. Данные — это само содержимое, например, часть веб-страницы.
Работу IP можно сравнить с почтовым отделением: протокол направляет IP-пакеты по интернету так же, как почта рассылает письма по всему миру. При доставке почта использует пункты передачи: письмо из отделения сначала попадает на поезд, потом на грузовик и в конце вручается адресату. В интернете тоже есть «пункты передачи» — их называют маршрутизаторами. Цель маршрутизатора — отправить пакет в пункт назначения по самому короткому пути. Если всё идёт хорошо, пакет прибывает на ближайший к получателю маршрутизатор, который точно знает, куда его отправить. Но бывает и так, что какой-то из маршрутизаторов на пути взломан или вышел из строя, и тогда выбирается другой путь:
DNS
Уникальный IP-адрес есть у каждого домена. Он записывается в виде четырёх чисел от нуля до 255 — например, 74.125.20.113. Введите этот адрес в браузерную строку и посмотрите, на какой сайт вы попали.
Подсмотреть ответ
DNS связывает IP-адрес с понятным для людей доменным именем, например, 178.79.181.169 превращается в htmlacademy.ru:
Принцип работы DNS похож на поиск и вызов контактов в телефоне. Вряд ли кто-то помнит 1317а друзей — да это и необязательно, ведь они хранятся в списке контактов. Когда мы хотим кому-то позвонить, то просто находим нужное имя и нажимаем кнопку вызова — в этот момент начинается соединение, но не по имени, а по 1317у телефона.
DNS-сервер — это и есть «список всех контактов», то есть IP-адресов, которые там хранятся. Каждому IP-адресу присвоен домен. И когда мы вводим в строке браузера имя домена, то происходит запрос к DNS-серверу — запрашивается IP-адрес.
SSL/TLS
SSL — криптографический протокол шифрования запросов и ответов, он нужен для безопасного перемещения данных по интернету, а TLS — его продвинутая версия. SSL уже почти не используют, но это название было таким популярным, что его до сих пор употребляют, а любой SSL-сертификат у хостинг-компаний — TLS-сертификат.
TCP и UDP
Оба протокола отвечают за передачу данных и работают поверх IP, но с небольшой разницей. TCP доставляет данные без потерь, поэтому его используют для передачи фотографий, сообщений и другой важной информации. А вот UDP не гарантирует доставку, но зато он гораздо быстрее. Его используют, когда скорость важнее надёжности, например, при передаче аудиосообщений или видеотрансляциях.
HTTP и HTTPS
HTTP и HTTPS предназначены для передачи данных и в итоге пользователи могут просматривать веб-страницы. На самом деле HTTPS — это не отдельный протокол, а расширение HTTP. Он безопаснее, так как использует SSL/TLS для шифрования обычных запросов и ответов.
HTTP
HTTP — один из самых используемых протоколов в интернете, поэтому посмотрим подробнее, как он работает.
Протокол работает в формате запрос-ответ с двумя участниками общения:
- клиент — формирует запросы и обрабатывает ответы;
- сервер — обрабатывает запросы и формирует ответы.
Клиент делает запрос на сервер для передачи каждого ресурса: файлов HTML, CSS, JavaScript, изображений или видеофайлов. Затем сервер отвечает на запрос, отправляя ресурс.
Представим, что мы создали HTML со следующей разметкой:
Главная страница
Это простой HTML-файл, в котором подключены два ресурса: стилевой файл style.css и изображение logo.svg. Браузер запросит три ресурса: index.html, style.css и logo.svg.
Для каждого запроса и ответа открывается своё TCP-соединение. При каждом соединении происходит трёхстороннее «рукопожатие»: клиент и сервер трижды обмениваются пустыми пакетами данных, чтобы удостовериться в существовании друг друга и готовности к работе с данными:
Запрос-ответ выглядит так:
Трёхстороннее «рукопожатие» нужно проводить в каждом TCP-соединении, так как HTTP не запоминает состояния, поэтому ни клиент, ни сервер не могут сохранять информацию между различными запросами. HTTP — один из самых ранних протоколов, и при его создании никто не ожидал, что на веб-странице придётся загружать так много ресурсов.
Такое «рукопожатие» делает загрузку страницы медленнее. Чтобы решить проблему, разработчикам приходится сокращать количество загружаемых ресурсов, например, использовать спрайты или разделять файлы по разным доменам — этот метод называется domain sharding. Такие манипуляции уменьшают количество TCP-соединений, хотя и создают свои трудности.
HTTP/2
HTTP/2 — улучшенная версия HTTP. По данным Can I Use, его поддерживают большинство браузеров.
Главное нововведение этого протокола — одно TCP-соединение на разные запросы, или мультиплексирование:
Как выглядит запрос-ответ в HTTP/2:
Ещё в HTTP/2 появился push-сервер, то есть сервер может отправлять больше ответов на один клиентский запрос. Например, если клиент запрашивает файлы index.html, style.css и logo.svg, то сервер отправит сразу три файла. Без push-сервера клиенту нужно запрашивать каждый файл отдельно
Поэтому многие оптимизации под HTTP при переходе на HTTP/2 уже не нужны. Например, можно отказаться от разделения ресурсов по доменам.
HTTP/3
HTTP/3 — третья версия HTTP, основанная на QUIC — протоколе, который предполагает быстрое подключение к интернету через UDP.
Главное преимущество HTTP/3 — сокращение задержки при установке соединения. QUIC достаточно одного «рукопожатия», чтобы установить безопасный сеанс. А ещё HTTP/3 работает поверх UDP, поэтому скорость доставки данных быстрее, чем у HTTP и HTTP/2 поверх TCP.
Протокол уже получил статус предложенного стандарта, то есть браузеры почти завершили работу над поддержкой протокола. Но пока поддержки недостаточно, чтобы переводить сайт с HTTP/2 на HTTP/3.
WebSockets
В этом протоколе соединение устанавливается гораздо быстрее, чем в HTTP — здесь отправляется «рукопожатие» сразу со всей необходимой информацией для передачи данных. Канал при этом остаётся открытым, пока кто-то из сторон не прервёт его. Это означает, что запросы и ответы будут происходить практически мгновенно. А если сервер получит новые данные, он отправит их клиенту без запроса.
Протокол WebSockets используют там, где важна скорость доставки данных, например, в чатах и мессенджерах, играх, онлайн-трансляциях. Он, скорее всего, не пригодится при разработке простых веб-приложений, небольших CMS или при использовании REST API, где достаточно HTTP-запросов GET, POST, PUT и DELETE.
Зачем разбираться в протоколах и сетях
Протоколы — это то, с чем вы уже работали, но, возможно, даже не подозревали. Зная принципы их работы, вы сможете глубже разобраться в связи фронтенда и бэкенда, а ещё поймёте, какие оптимизации проводить в веб-приложении, как лучше передавать данные или как защитить сайт от взлома.
Выбор технологии для приложения
Знание протоколов даёт понимание, какие технологии использовать для определённых задач. Какой протокол выбрать для онлайн-чата с большим количеством пользователей, а какой — для загрузки фотографии пользователя в профиль.
Защита данных
Если знать уязвимости на пути передачи данных, можно предусмотреть и смягчить последствия атак на веб-приложение. Например, создать стратегию защиты данных банковских карт на стороне клиента и на стороне сервера.
Оптимизация приложения под протоколы
Зная особенности протоколов, можно ускорить веб-приложение и не тратить время на ненужную оптимизацию. А ещё появляется понимание, что менять при переходе на другой протокол.
Например, чтобы оптимизировать приложение под HTTP/1, нужно уменьшить количество TCP-соединений. Для этого разработчики сокращают количество файлов: все стили объединяют в styles.css, а все скрипты — в scripts.js. Для HTTP/2 такая оптимизация не нужна, поэтому можно разделить общие CSS и JS-файлы на отдельные и подключать на страницу только необходимые.
Спрайты — оптимизация для протокола HTTP. Их минус в том, что для каждой страницы загружается спрайт с иконками всего веб-приложения, даже если на странице используется всего несколько иконок. Для HTTP/2 можно загружать только те изображения, которые нужны пользователю. При этом необязательно полностью избавляться от спрайтов — можно создать спрайты для компонентов и использовать необходимые на конкретной странице.
Если приложение оптимизировано к HTTP/2, то для перехода на HTTP/3 ничего не нужно делать: все оптимизации подойдут и для HTTP/3.
Прохождение собеседований
Знание протоколов и сетей повышает ценность фронтендера и влияет на его зарплату. Чтобы успешно пройти собеседование на мидла в крупные компании, полезно знать TCP/IP, HTTP/HTTPS, DNS и WebSocket. Ещё нужно хотя бы на базовом уровне знать про безопасность: XSS-атаки и CORS — а разобраться в этой теме без знания протоколов не получится.
При разработке приложений полезно знать, как работает веб и по каким принципам передаются данные. Понимание протоколов позволяет шире смотреть на свою работу, а также знать, куда движется сфера IT и какие технологии будут востребованы в будущем. А ещё эти знания пригодятся при собеседовании на позицию мидла или сеньора.
Материалы по теме
- Как защитить приложение от хакеров
- Чем отличаются HTTP-методы GET и POST
- Протокол HTTP и работа с заголовками
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Источник: htmlacademy.ru