Что такое TCP/IP и зачем они нужны

Что такое TCP/IP и зачем они нужны

medium
Вам может быть интересно:

Рассказ о протоколе, на котором работает весь интернет

В одной из предыдущих статей мы выяснили, что такое как таковой протокол в ИТ и зачем он нужен. Кратко так: 

  • Компьютеры могут общаться между собой.
  • Для этого им нужно договориться о языке общения — это и есть протокол.
  • Протоколы бывают физическими — какие вольты, амперы, радиочастоты и модуляции использовать оборудованию.
  • Протоколы бывают логическими — как понимать сигналы, закодированные в этих вольтах и модуляциях.
  • Существует целый стек протоколов — как многослойный пирог. В фундаменте там вольты и амперы, потом основы языка, потом сложные конструкции языка и на самой верхушке — как должны общаться приложения. Этот стек (или модель) называют OSI — Open Systems Interconnection Model.

Сегодня поговорим о протоколах TCP/IP — именно они отвечают за работу всего интернета и позволяют нам отправлять запросы на сервер в другой стране и получать в ответ гифки, музыку и всё остальное.

Коротко: что такое и зачем нужны TCP/IP

  1. TCP/IP — это названия протоколов, которые лежат в основе интернета. Благодаря им компьютеры обмениваются данными, не мешая друг другу.
  2. Оба протокола отвечают за передачу данных, но IP просто отправляет их в сеть, а TCP ещё следит за тем, чтобы эти данные попали по нужному адресу.
  3. В TCP встроено подтверждение получения, поэтому при хорошей связи данные точно дойдут до получателя.

Что такое TCP/IP

TCP/IP — общее стандартное название двух протоколов, TCP и IP. Они стоят рядом потому, что протокол TCP работает поверх IP, а вместе эти протоколы образуют универсальный стек протоколов передачи данных.

TCP — это протокол управления передачей (Transmission Control Protocol). Его задача — управлять отправкой данных и следить за тем, чтобы они были гарантированно приняты получателем. Именно гарантия получения данных и сделала этот протокол таким востребованным. Про гарантированную доставку расскажем чуть позже.

IP — протокол, который отвечает за адресацию: чтобы нужные данные долетели до нужного компьютера. Его основная задача — логически соединить компьютеры между собой, чтобы можно было отправлять данные от одного к другому. Для этого он выделяет IP-адреса, строит маршруты доставки пакетов, а главное — умеет организовать передачу данных с помощью пакетов. 

Получается так: 

  • IP-протокол знает, ЧТО нужно сделать, чтобы доставить данные от одного компьютера к другому; 
  • а TCP-протокол знает, КАК это сделать и при этом убедиться, что получатель точно получил все свои пакеты.

Кто за что отвечает в связке TCP/IP

Пакетная передача данных

Когда один компьютер хочет передать что-то другому, то он не отправляет байт за байтом по очереди. Вместо этого он отправляет данные мелкими порциями, а получатель собирает из них исходные данные. Этим как раз занимаются протоколы — разбивают всё на части и склеивает заново, потому что каждый пакет пронумерован.

Пакет может быть размером от 1 до 64 килобайт, но в нём всегда есть несколько обязательных полей — по ним протокол понимает, кому какие данные нужно передать.

Протокол IP разбивает исходные данные на пронумерованные пакеты
В каждом пакете: адреса отправителя и получателя, служебная информация, номер пакета и сами данные. Так получатель сможет собрать исходные данные и ответить, что они дошли без потерь

Гарантированная доставка пакетов

Протокол TCP следит за тем, пришли к получателю отправленные данные или нет и нужно ли их отправить заново. Для этого в нём есть механизм подтверждения: после очередной порции данных получатель отправляет сигнал, что данные получены, а отправитель дожидается этого сигнала.

Если сигнала подтверждения нет, то протокол отправляет этот же пакет данных ещё раз — мало ли что. Если подтверждения нет несколько раз подряд, то протокол выдаёт сообщение об ошибке и закрывает соединение.

Тут всё прошло удачно: получатель подтвердил доставку пакетов
Тут получатель не принимает пакеты. Хорошо, что отправитель это вовремя понял

Но если подтверждать получение каждого пакета, то на это будет уходить очень много времени: при скорости сети в 100 мегабит в секунду реальная скорость передачи данных будет около 50 килобит в секунду. А всё потому, что отправитель не будет передавать новые данные, пока не получит подтверждение по предыдущему пакету. В итоге почти всё время сеть будет занята не передачей данных, а подтверждениями и подтверждениями подтверждений. 

Чтобы не было таких задержек, в протоколе предусмотрели кумулятивное и выборочное подтверждение:

  • В кумулятивном получатель подтверждает приём последнего пакета и всех предыдущих.
  • В выборочном — подтверждает диапазон пакетов, которые он получил. Если какого-то пакета нет в подтверждении, отправитель посылает его заново. Это одна из оптимизаций работы протокола, и в TCP таких оптимизаций много — благодаря им у нас шустрый интернет с быстрыми подтверждениями.

По умолчанию используется кумулятивное подтверждение, например, каждых 100 пакетов:

Пример кумулятивного подтверждения отправки 100 пакетов

Уровни TCP/IP

На самом деле связка TCP/IP состоит из четырёх уровней, как слоёный пирог. Каждый из уровней отвечает за что-то своё, а вместе они заняты тем, чтобы точно доставить пакет от отправителя к получателю и убедиться, что по пути ничего не потеряно (а если потеряно — отправить заново).

Обычно TCP/IP разделяют на такие уровни:

  1. Канальный уровень. Он отвечает за физическое соединение устройств друг с другом, проще говоря — за канал связи. Wi-Fi, проводное подключение по кабелю, блютус — вот с чем работает канальный уровень. Алгоритмы как раз на этом уровне следят за тем, чтобы пакеты точно передались по сети на нужное устройство, и если этого не произошло, повторяют отправку.
  2. Межсетевой уровень. Если канальный уровень отвечает за связь между устройствами в одной подсети, то межсетевой — за связь между разными сетями, в том числе и в интернете. Для этого он запрашивает IP-адреса устройств, смотрит, в каких подсетях они находятся и по этим данным строит оптимальный маршрут от одного устройства в сети к другому.
  3. Транспортный уровень. На этом уровне используется канал связи, налаженный на предыдущих двух уровнях. Задача транспортного уровня — передать данные по этому каналу и убедиться, что всё передано без ошибок и в полном объёме. Для этого используется два основных протокола — TCP и UDP. Если коротко, то TCP гарантирует доставку всех пакетов, но передаёт данные не очень быстро, а UDP отправляет всё очень быстро, но ничего не гарантирует ¯\_(ツ)_/¯
  4. Прикладной уровень. Это самый верхний уровень, с которым и работают большинство программ и разработчиков. Он отвечает за связь между приложениями, сервисами и серверами по разным протоколам — HTTPS, FTP, IMAP и остальными. На этом уровне программы пользуются просто стандартами этих протоколов и не беспокоятся за то, как наладить связь с другими устройствами — за это отвечают три предыдущих уровня.

И что с того?

Связка протоколов TCP/IP делает так, чтобы мы могли отправить данные куда-то в интернет и они точно дошли. Всё это происходит быстро, незаметно для нас, где-то в глубинах наших компьютеров и телефонов. 

При этом связка TCP/IP — не единственная, которая бывает. Например, есть ещё UDP/IP, которая чаще используется в онлайн-играх и видеосозвонах — там нет подтверждения получения пакетов, просто данные льются без конца. 

Если вы не инженер или не разработчик сетевых систем, вам не нужно в этом разбираться — вы просто пользуетесь этим каждый день. Но зато теперь вы знаете, как это работает. 

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
medium
[anycomment]
Exit mobile version