@Mr-Governor
Губернирую

Что из себя представляет интернет соединение?

Как-то в универе я писал псевдо-чат, с использованием вин-сокетов.
Так вот, как мне сказали, после соединения клиент имеет "непрерывное соединение" с сервером.
И когда происходит определенное событие, сервер отправляет сообщение в некий поток.

В моей голове - "непрерывное соединение" представляется как струя воды, которая непрерывно льётся, причем в обе стороны, и когда надо, туда подсовывают песчинку (сообщение).
Но разве физически "интернет соединение" может быть непрерывным?
Задаюсь вопросом: Что подразумевается под словом "непрерывное"?
  • Вопрос задан
  • 593 просмотра
Пригласить эксперта
Ответы на вопрос 5
nowm
@nowm
Самая ближайшая аналогия: вы открываете чат с другом и болтаете минут 20. Несмотря на то, что вы отправляли друг другу много сообщений, все они отправлялись в рамках одного разговора, и вы их считатете связанными. Они были отправлены в рамках этого непрерывного соединения-разговора. «Под капотом» в это время может происходить много разных вещей. Например, чтобы написать сообщение, нужно достать телефон из кармана, разблокировать экран, открыть приложение-чат, выбрать собеседника, кликнуть на поле ввода сообщения, по-очереди нажимать на буквы экранной клавиатуры. Телефон, тоже где-то там под капотом делает много вещей, чтобы обеспечить вам возможность разговора с другом. Но эти детали вас не отвлекают, и вы считаете, что вы просто разговариваете с другом. У вас непрерывное 20-минутное соединение-разговор, даже если вы за эти 20 минут несколько раз доставали телефон и клали обратно.

То же самое можно сказать про непрерывное соединение клиента и сервера. Оно состоит из отдельных сообщений и кучи телодвижений под капотом, но абстрактно воспринимается как одно соединение, потому что все эти мелкие сопутствующие телодвижения не являются существенными. Но, по сути, на самом низком уровне просто происходит периодический обмен сигналами и их обработка. Никакой непрерывности там и в помине нет.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Мой ответ - нет, это не "непрерывный поток" а просто некоторое состояние, которое зафиксировано в узлах сети.
Это состояние меняется с каждым отправленным блоком данных. Сами эти блоки данных кодируются определённым образом и передаются через какой-то физический канал.
На уровне сети - это вполне дискретные сообщения.
На физическом уровне - это непрерывный поток из сигналов, но не обязательно, тк есть IP over Avian carriers
img7.jpg
Смотрим по уровням:
  • Прикладной - тут будет HTTP и прочие прикладные протоколы. Это не совсем интернет, так что пропускаем.
  • Транспортный - TCP и UDP. Так что их тоже пропускаем, тк в "интернете" используются оба.
  • Сетевой - IP и прочие - как раз на этом уровне происходит обмен полезными данными в интернете. Тут нет "непрерывного потока", и как правило общение происходит в виде "фреймов" и "сообщений" с определённым набором полей.
  • Физический - тут всё очень зависит от физической реализации сети


PS: Но при этом, с точки зрения программы на ПК, TCP-соединение может выглядеть как непрерывный поток байт, но это всё зависит от абстракций.
Ответ написан
Комментировать
Vindicar
@Vindicar
Поток (в смысле поток байт) - это не более чем удобная абстракция.
На уровне IP протокола данные маршрутизируются (передаются от узла к узлу) отдельными пакетами, независимо друг от друга.
Протокол UDP оставляет это как есть - каждая датаграмма будет отдельным пакетом. Как следствие, есть ненулевая вероятность, что какие-то датаграммы могут потеряться, или дойти не в том же порядке, в каком были отправлены.
Протокол TCP реализует абстракцию "поток байт". Грубо говоря, помимо передаваемых данных, он вставляет в каждый пакет контрольную сумму и номер. Таким образом получатель может проверить целостность пакета, и собрать пакеты в правильном порядке. Если какого-то пакета нет или он повреждён, получатель может запросить повторную отправку этого пакета. Всё это происходит "под капотом" протокола TCP, так что приложение, которое с ним работает, не обязано об этом думать. С его точки зрения, отправленные другой стороной данные приходят к нему в том же порядке, в котором они были отправлены - либо оно получает явное оповещение об ошибке передачи.
Установка соединения требуется только для того, чтобы "договориться" о нумерации пакетов и других деталях передачи, т.е. задать начальное состояние.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Компьютерные сети
software engineer
В зависимости от протокола и уровня OSI просто резервируются ресурсы для передачи информации.
Например в https устанавливается https сессия (генерируется секрет для сессии, сервер хранит ID сессии, клиент пользуется им для связи с сервером в рамках сессии)
На уровне выше это может быть например зарезервированный порт, чтобы сервер знал куда слать ответ.

Это не непрерывная связь, это грубо говоря выделенный канал между одним и другим приложением, который существует некоторое время.
Ответ написан
В плане TCP/IP (на чём построен интернет) и сокетов (в программном плане, как общаются приложения между собой) примерно так: сервер слушает определённый порт, а клиент отправляет серверу сообщение с указанием IP-адреса и порта. Сервер получает сообщение (т.к. непрерывно прослушивает порт) и определённым образом обрабатывает его. Например, веб-сервер получает от клиента что-то типа "GET https://habr.com/ru/auth/checklogin/"
И отправляет в ответ "200 OK" и далее заголовки всякие и содержимое страницы.
А уже как между приложением клиентом и приложением сервером обрабатываются данные, нужно изучить модель OSI, это как матрёшка - на одном уровни одни данные добавляются к другим, на другом ещё... на другой стороне в обратном порядке каждый компонент их забирает и обрабатывает (маршрутизатор одно, сетевой драйвер другое, сама ОС ещё что-то, веб-сервер другое...). Ну и само функционирование TCP/IP нужно изучить. А это в сотню строк не уместить. Это на 1-2 тысяч страниц.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы