Web сокеты | Компьютерные сети. Продвинутые темы

Поділитися
Вставка
  • Опубліковано 1 чер 2019
  • Курс "Компьютерные сети" , лекция по Web сокетам.
    Презентация видеолекции - www.asozykin.ru/assets/pdf/ne...
    Web сокеты - это протокол прикладного уровня стека TCP/IP, предназначенный для создания Web приложений реального времени.
    Основное отличие Web сокетов от HTTP заключается в том, что в Web сокетах создается двунаправленное соединение между клиентом и сервером. По этому соединению клиент и сервер могут отправлять данные друг другу в любое время.
    Web сокеты определены в стандарте RFC 6455 "The WebSocket Protocol" - tools.ietf.org/html/rfc6455
    Работа Web сокетов состоит из двух этапов:
    - Установка соединения. В целях поддержки существующей инфраструктуры Web используется подход HTTP со сменой (urgrade) протокола на Web сокеты.
    - Передача данных. Для передачи данных используется постоянное TCP соединение между клиентом и сервером. Данные передаеются в виде кадров (frames), имеющих бинарные заголовки.
    В лекции рассматривается процесс установки соединения Web сокетов, формат кадра Web сокетов и другие темы, относящиеся к работе Web сокетов.
    Видеолекция по протоколу HTTP - • Протокол HTTP | Курс "...
    Видеолекция по протоколу TCP - • Протокол TCP | Курс "К...
    Как можно поддержать курс:
    1. Яндекс Кошелек - money.yandex.ru/to/4100142982...
    2. PayPal - www.paypal.me/asozykin
    Заранее спасибо за помощь!
    Добавляйтесь в друзья в социальных сетях:
    вКонтакте - avsozykin
    Facebook - / asozykin
    Twitter - / andreysozykin
    Мой сайт - www.asozykin.ru
    Мой канал с краткими и понятными объяснениями сложных тем в ИТ и компьютерных науках -
    goo.gl/kW93MA
  • Наука та технологія

КОМЕНТАРІ • 194

  • @skatskau1102
    @skatskau1102 5 років тому +102

    Спасибо. Как всегда локанично, без воды.

    • @AndreySozykin
      @AndreySozykin  5 років тому +7

      Пожалуйста!

    • @user-iu7eq5yx4k
      @user-iu7eq5yx4k 2 роки тому +3

      @@AndreySozykin Даже спустя 2 года очень полезно =)

    • @user-hw9qv9my3l
      @user-hw9qv9my3l Рік тому +1

      лАкОнично, грамотей!

    • @fragman_yt6927
      @fragman_yt6927 Рік тому +1

      ​​@@user-hw9qv9my3lе душни чел противно читать. все равно человеку, который написал коммент все равно на тебя

  • @user-gb9ik8qq9w
    @user-gb9ik8qq9w 3 роки тому +9

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

  • @uberkrestik6816
    @uberkrestik6816 5 років тому +62

    Мне бы таких учителей в школе

    • @AndreySozykin
      @AndreySozykin  5 років тому +13

      В школе такое рано проходить, это университет, первый или даже второй курс.

    • @uberkrestik6816
      @uberkrestik6816 5 років тому +15

      @@AndreySozykin я не про материал, а подачу

    • @digital-music-artist
      @digital-music-artist Рік тому

      @@AndreySozykin у нас даже в универе этого не рассказывали

  • @ikoniukhov
    @ikoniukhov 2 роки тому +2

    Одни из лучших лекций на просторах инета! Спасибо!

  • @digital-music-artist
    @digital-music-artist Рік тому +1

    как раз то видео, когда раз посмотрела и поняла, и запомнила, и не нужно еще искать видео смотреть на эту тему для закрепления. четко понятно становится сразу на примерах

  • @user-pd2bd3wo4s
    @user-pd2bd3wo4s 2 роки тому +3

    Очень понравился структура материала и презентация. Спасибо за труд.

    • @AndreySozykin
      @AndreySozykin  2 роки тому

      Пожалуйста! Рад, что нравится!

  • @aleksandrtrue3058
    @aleksandrtrue3058 2 роки тому +6

    Круто! Спасибо. 12 минут чётко и по сути! Теперь могу поддержать разговор на эту тему

  • @user-kx7to4on6x
    @user-kx7to4on6x 4 роки тому +10

    Андрей, огромное спасибо за видео! Все встало на свои места!

  • @limitless6216
    @limitless6216 2 роки тому +7

    Просто отличная подача! Спасибо и побольше вам здоровья в это непростое время =)

  • @xenonist4502
    @xenonist4502 5 років тому +4

    Как же интересно и хорошо рассказано! Спасибо) А сокеты мне нравятся)

  • @genlala
    @genlala 4 роки тому +7

    Спасибо! Очень просто и понятно изложен материал :)

  • @mikesomebody5404
    @mikesomebody5404 5 років тому +5

    Спасибо! Ждал когда Вы освятите эту тему)

    • @AndreySozykin
      @AndreySozykin  5 років тому +12

      Да, тема востребованная. Но освЯщением я не занимаюсь :-)

    • @mikesomebody5404
      @mikesomebody5404 5 років тому +1

      @@AndreySozykin Осветите)

  • @borisblade8993
    @borisblade8993 4 роки тому +4

    спасибо большое! всегда приятно смотреть!

  • @tankowot
    @tankowot 5 років тому +4

    Все понятно и просто, огромная благодарность

    • @AndreySozykin
      @AndreySozykin  5 років тому

      Спасибо за приятный отзыв!

  • @glgl1964
    @glgl1964 3 роки тому +3

    Спасибо, всё очень лаконично, понятно. На работе нужно было разобраться с Веб Сокетами и теперь хоть понятно)

  • @webkoth6105
    @webkoth6105 4 роки тому +4

    Отлично рассказано. Спасибо за видео

  • @ivandanko5408
    @ivandanko5408 3 роки тому +3

    Афигеть как все просто и понятно) спасибо)

    • @AndreySozykin
      @AndreySozykin  3 роки тому

      Пожалуйста! Рад, что понравилось!

  • @trek3456
    @trek3456 2 роки тому

    Хороший вы учитель! 👍🏻

  • @alexs2382
    @alexs2382 2 роки тому +1

    Спасибо большое! Коротко и ясно :)

  • @SomeOne69871
    @SomeOne69871 2 роки тому +1

    Спасибо Вам большое за лекции!

  • @eb6006
    @eb6006 3 роки тому +1

    Огромное спасибо за видео! Все встало на свои места!

  • @user-hz3nf6xh1h
    @user-hz3nf6xh1h Рік тому +1

    Классная подача, все понятно и наглядно

  • @user-ej5up4bk8o
    @user-ej5up4bk8o 5 років тому +39

    Спасибо за информацию. Очень подробно всё рассказано. Держи лайк.
    Не освящены только 2 вопроса:
    1 - сколько веб сокетов может быть открыто на одном соединении
    2 - что произойдёт, когда количество открытых сокетов будет переполнено.

    • @hansolo5665
      @hansolo5665 4 роки тому +8

      1 соединение это и есть 1 сокет. если занять все, то попытка открыть еще один закончится ошибкой

    • @user-mm5ln4qh5q
      @user-mm5ln4qh5q Рік тому

      А как вопросы правильно освящать? Святой водой можно?

  • @henrytavilla
    @henrytavilla 3 роки тому +1

    Андрей, отличная подборка advanced тем по сетям! Большое спасибо! (=

  • @ascope6434
    @ascope6434 2 роки тому

    Огромное спасибо за знания !!!!

  • @user-qu6mb9il6w
    @user-qu6mb9il6w 3 роки тому +1

    Спасибо! Сразу всё стало ясно и понятно.

  • @sabr4207
    @sabr4207 Рік тому +1

    Красавачик, все четко объяснил)👍

  • @Ginzilla95
    @Ginzilla95 Рік тому

    Спасибо большое! Материал классный и подан так же!

  • @vladislavkaras491
    @vladislavkaras491 4 дні тому

    Благодарю за ролик!

  • @dogeatsthesun908
    @dogeatsthesun908 Рік тому

    Быстро, просто, доступно, кайфово

  • @Denis-535
    @Denis-535 5 років тому +3

    Как всегда все отлично!

  • @frostywka
    @frostywka 4 роки тому +3

    Спасибо. Что то невероятное !!!

  • @mudrecsalimkhanov329
    @mudrecsalimkhanov329 Рік тому

    Грамотно разложено!

  • @JustAnotherLinuxChannel
    @JustAnotherLinuxChannel 4 роки тому +1

    Сходу лайк, можно сказать вырос на вашем курсе

  • @last2636
    @last2636 11 місяців тому

    Хороший видос, с важными деталями. Спасибо за ваш труд. Рекомендую вам на стадии монтажа видео немного ускорять голос, чтобы это не слишком затягивалось.

  • @lenasnow6968
    @lenasnow6968 2 роки тому +1

    Супер подача. Канал в топ

  • @diatm1506
    @diatm1506 3 роки тому +1

    Отличная подача материала

  • @robert33232
    @robert33232 8 місяців тому

    Шикарно! Спасибо!

  • @weru0748
    @weru0748 5 років тому +3

    супер уроки!автор мега мозг!

  • @user-yx5nj4fw2x
    @user-yx5nj4fw2x Рік тому

    спасибо за контент

  • @eugenezakharov3162
    @eugenezakharov3162 3 роки тому +3

    Спасибо, очень доступно рассказано.
    Смутило что вы про текстовые заголовки 2 раза сказали для http, но это верно только для 1.1 версии
    В http 2 же бинарно всё

    • @AndreySozykin
      @AndreySozykin  3 роки тому

      Да, HTTP имеется в виду первая версия.

  • @keepsilence6843
    @keepsilence6843 11 місяців тому

    Отличное видео

  • @user-nv8hz7jl5s
    @user-nv8hz7jl5s Рік тому

    Спасибо большое.

  • @dmitryfedyainov4788
    @dmitryfedyainov4788 Рік тому +1

    Очень крутое видео. Спасибо!

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 3 роки тому

    Огромное спасибо!

  • @unicoxr5tj417
    @unicoxr5tj417 11 місяців тому

    прекрасный урок

  • @voilesik
    @voilesik Рік тому

    Отлично! Спасибо!

  • @user-dc9jh3hq9d
    @user-dc9jh3hq9d 4 роки тому +2

    Великолепно!

  • @Versie2007
    @Versie2007 5 років тому +3

    Наконец-то! :)

    • @AndreySozykin
      @AndreySozykin  5 років тому

      Да, долго готовился :-)

  • @sergeydev8273
    @sergeydev8273 3 роки тому +1

    Все четко и по делу

  • @user-ih8vs8xw2c
    @user-ih8vs8xw2c Рік тому

    Спасибо ❤️

  • @user-lb9rz2jg9l
    @user-lb9rz2jg9l 9 місяців тому

    Отлично, не то что частями везде

  • @user-nv7gz2vl5g
    @user-nv7gz2vl5g 4 роки тому +1

    Спасибо)

  • @memoryLayer
    @memoryLayer 4 роки тому +4

    Кратко, чётко и понятно. Да это жестко ))

  • @hutoryanin
    @hutoryanin 3 роки тому +1

    *Л. а. й. к. о. с.* за видос.

  • @atillaattila8900
    @atillaattila8900 3 роки тому +2

    Спасибо за информацию) очень интересно, об этом не знал)

  • @cthulhufhtagn2177
    @cthulhufhtagn2177 5 років тому +1

    Top! 😎👍

  • @olgamazurenko8142
    @olgamazurenko8142 4 роки тому +1

    Спасибо!

  • @gijduvon6379
    @gijduvon6379 3 роки тому +1

    Спасибо за крутые лекции! Скажите, а планируется видео про RSockets?

    • @AndreySozykin
      @AndreySozykin  3 роки тому

      Пока не планировал. Но стриминговые протоколы интересная тема. Думаю, как к ней подступиться.

  • @user-rz7wq5ui5l
    @user-rz7wq5ui5l 4 роки тому +1

    Лайк не глядя

  • @artur_kia
    @artur_kia 2 роки тому +1

    Спасибо

  • @user-dn4lk4ur2w
    @user-dn4lk4ur2w 3 роки тому +1

    Благодарю

  • @TheSelectmax
    @TheSelectmax 11 місяців тому

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

  • @mykhailostepanishchev6472
    @mykhailostepanishchev6472 3 роки тому +1

    топ , спасибо .

  • @artyomkalashnikov6303
    @artyomkalashnikov6303 Рік тому

    А можете сделать лекцию про OAST(внеполосное соединение). Искал, но не смог найти информацию

  • @okyierrorvloneokyierrorvlo8640

    Андрей, у вас случайно нет ролика по протоколу ntp)?

  • @PAIN153
    @PAIN153 2 роки тому

    Очень познавательно) Честно говоря вот начиная с формата заголовка Кадра немного запутался ( даже можно сказать не понял) как

  • @user-wf6hh8fq1n
    @user-wf6hh8fq1n 4 роки тому +1

    very good

  • @user-ch5iz9xm6u
    @user-ch5iz9xm6u 4 роки тому +2

    Спасибо что разжевали

  • @selenast7561
    @selenast7561 3 роки тому

    А в чем разница с http/1.1, который тоже поддерживает, если я правильно помню, постоянное соединение?

  • @brayaka1418
    @brayaka1418 3 роки тому +1

    Можно ли подделать WS соединение/кадр/сообщение? Нужно ли изобретать симуляцию сессий? Или маскирование надёжно?

    • @AndreySozykin
      @AndreySozykin  3 роки тому +1

      Подделать можно. Для защиты лучше использовать готовый протокол WSS (WebSockets over SSL/TLS).

  • @muslimdevblog
    @muslimdevblog Рік тому

    Будет ли продолжение курса?

  • @hackyou497
    @hackyou497 2 роки тому

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

  • @alex_donnotdisrupt_2000
    @alex_donnotdisrupt_2000 3 роки тому

    Спасибище!!
    А получается если в приложение почему-то не будет реализован(неверно) close..клиент не станет его тоже отправлять? И такое соединение будет держаться вечность?) И/или пока их не откроется столько что сервер ляжет?

    • @olego5633
      @olego5633 2 роки тому

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

  • @alejandrospencio5524
    @alejandrospencio5524 3 роки тому

    спасибО! а какие минусы ?

  • @Denis-535
    @Denis-535 4 роки тому +1

    07:45 А если сервер посылает клиенту сообщение close, то клиент тоже должен ответно отправить close?
    По-моему сервер закрывает сессию не ожидая каких-то ответных сообщений. Хотя на клиенте нужно вызвать close, чтобы состояние сокета перешло из CloseReceived в Close. Не знаю посылает ли клиент сообщение или просто меняет значение состояния.

    • @AndreySozykin
      @AndreySozykin  4 роки тому +2

      Вызовы методов сокета не всегда напрямую связаны с сообщениями. Close нужен для закрытия соединения. В идеальном случае соединение нужно закрывать с двух сторон.
      Но TCP позволяет закрыть соединение с одной стороны, а с другой оставить открытым. Поэтому клиент не обязан вызывать close. Но лучше это сделать.

  • @writetoyourdestiny
    @writetoyourdestiny 3 роки тому +1

    Андрей, объясните, пожалуйста, а как это все проходит через NAT? Как маршрутизатор понимает какому клиенту в сети предназначен входящий запрос от сервера? При ответе сервера, понятно, есть запить в таблице NAT, когда клиент запрашивал что-то у сервера, а вот когда клиент ничего не запрашивал, как сервер может передать что-то клиенту и как маршрутизатор поймет какому?
    И еще получается, что при использовании WS браузер готов принимать запросы от сервера? А при использовании HTTP браузер готов принимать только ответы сервера на отправленные запросы, так?

    • @AndreySozykin
      @AndreySozykin  3 роки тому +2

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

  • @user-zh4zj6dg2r
    @user-zh4zj6dg2r 4 роки тому +1

    вопрос? TCP cоединение и TCP протокол. в этом случае какая разница? а тип данных TCP разве не дейтаграммы?

    • @AndreySozykin
      @AndreySozykin  4 роки тому

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

  • @victoriacannonball83
    @victoriacannonball83 4 роки тому +1

    Можно где-то скачать презентации к лекциям?

    • @AndreySozykin
      @AndreySozykin  4 роки тому +1

      Презентация выкладываю на сайт, но сейчас он в процессе переезда и не успел выложить все презентации. По Web-сокетам презентацию выложил. Ссылка на страницу курса - www.asozykin.ru/courses/networks_online

    • @victoriacannonball83
      @victoriacannonball83 4 роки тому

      @@AndreySozykinСпасибо!

  • @Denis-535
    @Denis-535 5 років тому +3

    А что происходит, когда сервер шлет сообщение, а клиент в это время подключен, но не принимает сообщения?

    • @AndreySozykin
      @AndreySozykin  5 років тому +1

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

    • @Denis-535
      @Denis-535 5 років тому

      ​@@AndreySozykin забыл дописать, что клиент не принимает лишь в течение нескольких секунд. Допустим обрабатывает старые сообщения или как в моем случае шлет http запросы.

    • @Denis-535
      @Denis-535 5 років тому

      @@AndreySozykin Похоже, что сервер буферизирует сообщения. А когда клиент начинает принимать сообщения, то сервер шлет весь буфер.

  • @greezlock7291
    @greezlock7291 5 років тому +3

    Почему бы заместо WS не использовать возможности "keep alive" в http?

    • @AndreySozykin
      @AndreySozykin  5 років тому +2

      Потому что в HTTP сервер не может отправить ничего клиенту по своей инициативе, а в WS может. Это ключевое отличие.

    • @greezlock7291
      @greezlock7291 5 років тому +1

      @@AndreySozykin Я согласен со случаем, когда нету постоянного соединения (i.e. keep-alive).
      Но если оно есть, что будет мешать в последующем серверу отправлять сообщения первым?

    • @nanvlad
      @nanvlad 5 років тому

      @@greezlock7291 думаю, что клиент попросту не будет ожидать, что сервер первым напишет сообщение, поэтому и не обработает его.

  • @nigan952
    @nigan952 2 роки тому

    Зачем нужны WebSocet кадры, когда есть TCP фрагменты?

  • @MrEmityushkin
    @MrEmityushkin 2 роки тому

    +Plus

  • @4Aziwzjdfgnk29y
    @4Aziwzjdfgnk29y 4 роки тому +1

    WebSocket должен хостинг поддерживать или как? я не могу понять

    • @4Aziwzjdfgnk29y
      @4Aziwzjdfgnk29y 4 роки тому

      все понял...

    • @AndreySozykin
      @AndreySozykin  4 роки тому

      Web-сервер должен поддерживать.

    • @4Aziwzjdfgnk29y
      @4Aziwzjdfgnk29y 4 роки тому

      Andrey Sozykin и что бы настроить демона нужно на хосте ssh подключение

  • @nexgenua
    @nexgenua 3 роки тому +1

    HTTP2 может же отправлять данные по своей воле

    • @AndreySozykin
      @AndreySozykin  3 роки тому

      Да, в HTTP2 такую возможность добавили.

  • @user-qd8dj4oy2s
    @user-qd8dj4oy2s 4 роки тому

    3:23 Вы говорите URL, а написано URI, ошибка?

    • @troollface4357
      @troollface4357 4 роки тому

      Написано URL, просто l маленькая

  • @dmitriys5353
    @dmitriys5353 3 роки тому +1

    +

  • @user-rk7zn5kh4q
    @user-rk7zn5kh4q 2 роки тому

    Отлично! Но до 0:47 сек я думал что он вообще не по-русски говорит)))

  • @user-tx3mt1zi2d
    @user-tx3mt1zi2d Рік тому

    Привет андрей

  • @user-jp5hf1mo1e
    @user-jp5hf1mo1e 11 місяців тому

    Web-сокет получается над HTTP, на не на одном уровне

  • @mikesomebody5404
    @mikesomebody5404 5 років тому +4

    А я думал, что вебсокеты используют на траснпортном уровне sctp.

    • @AndreySozykin
      @AndreySozykin  5 років тому +1

      Нет, web сокеты - это протокол прикладного уровня.

  • @_..X.._
    @_..X.._ Рік тому

    зачем websocket?
    дана мотивация "почему не http", что очень странно, т.к. он тут вообще не при чём.
    потом построен TCP-2 поверх TCP ... "чтобы инфраструктура с LB".
    что конкретно не так (полный список), если я просто использую TCP (КАК И ПОЛОЖЕНО!). ответа не дано.

    • @_..X.._
      @_..X.._ Рік тому

      т.е. у материала нет фундамента. зачем этот протокол?
      подачада нужна от проблемы, постановки задачи. что-то не выходит, как её решить.
      учтите что все LB и прочее в облаке строю я под своё приложение

  • @m_zhukov98
    @m_zhukov98 5 років тому +1

    Зачем тогда нужен http, если сокеты работают эффективнее?

    • @AndreySozykin
      @AndreySozykin  5 років тому +2

      Web cокеты эффективнее только для приложений реального времени. Для большинства ситуаций HTTP вполне достаточно. Еще в HTTP есть кэш, который существенно повышает производительность, если данные меняются не часто.

    • @m_zhukov98
      @m_zhukov98 5 років тому +2

      @@AndreySozykin Получается чат в контакте , телеграмме фейсбуке и тд работает на сокетах, а https применяется, чтобы достать саму страницу с сервера?

    • @AndreySozykin
      @AndreySozykin  5 років тому +4

      Идея такая, но на практике не совсем так. Для онлайн приложений еще может использоваться AJAX, HTTP Long Polling и другие подобные технологии. Не всем нравятся web сокеты, некоторые не могут перенести унаследованный код на web сокеты и есть много других причин.

    • @xenonist4502
      @xenonist4502 5 років тому +2

      Как минимум потому что сокеты появились много позже http)))

    • @nanvlad
      @nanvlad 5 років тому

      @@AndreySozykin А Long Polling разве не на веб-сокетах реализован?

  • @user-jp5hf1mo1e
    @user-jp5hf1mo1e 11 місяців тому

    т.е. просто АЯКС переименовали в ВЕБ-сокет

  • @kostya1306
    @kostya1306 2 роки тому

    Тема сисек не раскрыта. Осталось много вопросов, например: Если я хочу организовать сокетное соединение не на собственном сервере, а на арендованном (виртуальном может быть). Как провайдер к этому отнесется? Какие ресурсы у него задействуются? Сколько соединений он сможет одновременно держать (ограниченное количество, очень большое, или бесконечное)? Сколько по времени модет жить соединение, есть ли тайаут, после которого провайдер может принудительно закрыть соединение? Если у клиента пропала всязь, соединение само будет пытаться восстановиться или закроется?

  • @serhiinikitin1679
    @serhiinikitin1679 2 роки тому +1

    видео отличное, все объяснил очень хорошо, но подстригись нормально плиз, мне приходится твое лицо диспетчером задач закрывать

    • @AndreySozykin
      @AndreySozykin  2 роки тому

      Прическу регулярно меняю 😉

    • @serhiinikitin1679
      @serhiinikitin1679 2 роки тому

      @@AndreySozykin братик, ты ж айтишник, сходи в номальный барбершоп, денег должно хватить

  • @zlodeyzlodey4347
    @zlodeyzlodey4347 4 роки тому +1

    Мозг

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 4 роки тому

    Спасибо

  • @nikolaipavlenko8923
    @nikolaipavlenko8923 3 роки тому +1

    Спасибо!

  • @andreykrivoshein3788
    @andreykrivoshein3788 3 роки тому +1

    Спасибо