"Мобильная" разработка. [Как работает интернет и схема работы клиент-серверных приложений]
Tags: tutorial, beginners, webdev, programming
Published: 2023-08-13 19:48:13

Для написания практически любого программного обеспечения очень важно понимать, как вообще работает Интернет.

## Как работает интернет

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

### IP: Интернет-протокол

![IP usage](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8bqpjyof4mueyumrm8ns.png)

**IP (Internet Protocol)** – это основной протокол, который регулирует передачу данных в сети Интернет. Все устройства, подключённые к Интернету, имеют уникальный IP-адрес, состоящий или из четырёх чисел, разделённых точками (127.0.0.1 в четвёртой версии протокола - IPv4), или из более сложной комбинации (2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF в шестой версии - IPv6). IP-адрес позволяет определить местоположение устройства в глобальной сети и гарантировать доставку данных непосредственно к этому устройству.

### DNS

![domain exmaple](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4w7ak8d6vxquw40n3xd.png)

Когда мы вводим имя веб-сайта в адресной строке браузера (например, "google.com"), система именования доменов (DNS) переводит это имя в IP-адрес. Это необходимо для того чтобы узнать, к какому именно серверу следует обратиться.

### TCP/IP и UDP: основные протоколы передачи данных

![tcp-udp](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cqu2sg5oj04zku6usoaf.png)

Когда речь заходит о передаче данных в интернете, наиболее важными и часто используемыми протоколами являются TCP/IP и UDP.

**TCP (Transmission Control Protocol)** - это надёжный, ориентированный на соединение протокол, который гарантирует доставку пакетов данных и их правильный порядок. TCP разбивает данные на пакеты, отправляет их, а затем ждёт подтверждение получения от получателя. Если пакет был потерян или поврежден, TCP будет повторно отправлять его. Благодаря этому механизму TCP гарантирует надежность и целостность передачи данных.

**IP (Internet Protocol)**, со своей стороны, занимается маршрутизацией и доставкой пакетов данных между отправителем и получателем. Каждый пакет содержит IP-адреса отправителя и получателя, которые необходимы, чтобы пакет достиг нужного адресата.

**UDP (User Datagram Protocol)** - это ещё один важный протокол передачи данных с иным принципом действия. В отличие от TCP, UDP не гарантирует доставку или порядок пакетов. Тем не менее, он быстрее и требует меньше ресурсов при передаче, так как не устанавливает постоянное соединение и не ожидает подтверждений о доставке. Из-за этой особенности UDP часто используется в приложениях, где скорость важнее надежности, например, в потоковой передаче видео или голоса.

Таким образом, в зависимости от требований к надёжности и скорости передачи разработчики могут выбирать между TCP и UDP для своих приложений.

### HTTP: Протокол передачи гипертекста

![http headers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rm2r1luforrsyle6b2lh.png)

**HTTP (HyperText Transfer Protocol)** является основой веба. Этот протокол определяет, как запросы и ответы должны быть сформированы и переданы между браузерами и веб-серверами. Когда вы вводите URL в браузере, он отправляет HTTP-запрос к соответствующему серверу, который, в свою очередь, возвращает HTTP-ответ, обычно в виде веб-страницы.

Все HTTP-запросы и ответы содержат заголовки, которые сообщают дополнительную информацию, такую как тип содержимого, статус ответа и другие метаданные. HTTP также может быть использован и для других форм передачи данных, а не только для одного HTML.

### HTTPS: Защищенный протокол передачи гипертекста

**HTTPS (HyperText Transfer Protocol Secure)** - это расширение стандартного HTTP, обеспечивающее шифрование данных между браузером пользователя и веб-сервером. Основное преимущество использования HTTPS - обеспечение конфиденциальности и целостности данных пользователей.

В основе работы HTTPS лежит технология SSL (Secure Sockets Layer) или её более новый вариант TLS (Transport Layer Security). Эти протоколы используют асимметричное и симметричное шифрование для защиты данных во время их передачи.

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

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

### URL/URI: Универсальные указатели ресурсов

![URL](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/su4jh6e74hz5f1i39lij.png)

**URL (Uniform Resource Locator)** и **URI (Uniform Resource Identifier)** часто используются как синонимы, хотя между ними есть небольшие различия. В основном URI является общим термином, который может идентифицировать любой ресурс, в то время как URL является подмножеством URI и указывает, как получить доступ к ресурсу.

Простым языком, URL - это сам веб-адрес, который вы вводите в браузер. Он состоит из нескольких частей: протокол (например, "http"), доменное имя (например, "example.com") и, возможно, путь к конкретному ресурсу на этом сайте (например, "/page1.html").

Важность URL заключается в том, что он предоставляет ясную и структурированную информацию о том, где находится определенный ресурс в сети Интернет и как получить к нему доступ.

## Другие протоколы верхнего уровня

- **FTP (File Transfer Protocol)**: этот протокол используется для передачи файлов между компьютерами в сети. FTP может работать в "активном" или "пассивном" режимах, которые определяют, как устанавливается соединение.
- **SMTP (Simple Mail Transfer Protocol)**: SMTP используется для отправки электронной почты. Когда вы отправляете письмо, ваш почтовый клиент использует SMTP, чтобы передать его почтовому серверу.
- **POP3 (Post Office Protocol, version 3) и IMAP (Internet Message Access Protocol)**: это протоколы, которые используются почтовыми клиентами для получения сообщений с почтовых серверов. IMAP позволяет нескольким устройствам синхронизировать состояние почтового ящика, тогда как POP3 просто загружает письма на локальное устройство.
- **DNS (Domain Name System)**: хотя DNS часто не рассматривается как протокол верхнего уровня в строгом смысле, его функции жизненно важны для работы Интернета. DNS преобразует человеко-читаемые доменные имена (например, "example.com") в IP-адреса, которые компьютеры используют для идентификации друг друга в сети.
- **SSH (Secure Shell)**: протокол для безопасного удаленного управления системами и передачи данных. SSH шифрует своё соединение, чтобы предотвратить перехват или подмену передаваемых данных.
- **Telnet**: Это старый протокол для удаленного управления системами, предшественник SSH. Сегодня его использование считается небезопасным, так как данные передаются в открытом виде без шифрования.

Эти протоколы представляют лишь малую часть множества протоколов, использующихся в сети Интернет. Однако именно они играют ключевую роль в повседневной работе многих интернет-сервисов.

## Клиент-серверные приложения

![client-server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gbbb2fdu9wt62l79i04y.png)

С течением времени и по мере развития информационных технологий общепринятым способом организации и взаимодействия IT-систем стала клиент-серверная архитектура. В её основе лежит простая, но мощная концепция: разделение задач между поставщиком ресурсов (сервером) и его потребителем (клиентом). Подобное разделение позволяет создавать гибкие, масштабируемые и эффективные системы. В мире, где число устройств и приложений, подключённых к Интернету, растёт с каждым днем, понимание принципов работы клиент-серверных приложений становится ключевым для любого IT-специалиста, а потому необходимо сейчас и нам.

### Что такое клиент-серверное приложение?

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

### Преимущества клиент-серверной архитектуры 

- **Распределение ресурсов:** серверы могут быть оптимизированы для выполнения определенных задач, в то время как клиенты могут быть настроены на максимальную производительность пользовательского интерфейса.
- **Масштабируемость:** добавление новых клиентов или усиление серверной части не требует изменений во всей системе.
- **Централизованное управление:** серверные компоненты могут легко обновляться и поддерживаться, что позволяет проводить обновления без какого-либо воздействия на клиентов.

### Как работают клиент-серверные приложения?

1. **Запрос:** клиент отправляет запрос на сервер. Это может быть запрос на получение данных, обновление информации или выполнение какой-либо операции.
2. **Обработка:** сервер получает запрос, обрабатывает его - например, извлекает данные из базы данных или выполняет какую-либо логику. 
3. **Ответ:** после обработки запроса сервер отправляет ответ обратно клиенту. Клиент интерпретирует этот ответ и предоставляет соответствующую информацию пользователю или выполняет соответствующее действие.

### Примеры клиент-серверных приложений

- **Веб-приложения:** ваш браузер действует как клиент, запрашивая веб-страницы и ресурсы с веб-серверов.
- **Электронная почта:** приложения электронной почты получают и отправляют сообщения через серверы электронной почты.
- **Базы данных:** клиентские приложения часто запрашивают данные у серверов баз данных.

*Обязательно подписывайтесь на мой аккаунт dev.to и Telegram канал, скоро будет ещё больше контента:* https://t.me/MainArthur