Андрей, вы мне так помогли! У меня через час экзамен, почти все ваши лекции смотрел, стал намного уверенным в своих знаниях. Спасибо вам большое, объясняете лучше чем все мои преподаватели вместе взятые!
да, Андрей, сдал на отлично! Ереванский Государственный Университет, факультет Информатики и Прикладной Математики. Спасибо еще раз, жду новых ваших лекций!
Огромное Вам спасибо, Андрей. К сожалению, на ютубе очень мало людей, которые могут столь информативно дать большой объем знаний! Продолжайте в том же духе!
Отличный материал !!! Лаконично, понятно и хорошо подаётся. Легко запоминается. А то некоторые как усложнят, как закрутят, что даже имея знания, уже можно запутаться. Благодарим Вас за проделанню работу !!!
Применительно ко всему циклу и даже каналу - просто отличная работа, объясняющая технологии простым языком. При этом упрощения делаются небольшими. Т.е. именно теория даётся отлично. Завидую, что автор может объяснить все простым языком!
Восхитительный курс! Вы очень просто и доходчиво объясняете сложные вещи, за что вам огромное человеческое спасибо. Прохожу курс обучения на образовательном портале, как раз сейчас нам читают компьютерные сети. Чтобы понимать, о чём вообще речь, параллельно смотрю ваш курс. По сравнению с путанными объяснениями нашего преподавателя - это просто сказочный восторг! А примеры на Python очень порадовали - учусь на программиста Python)
Спасибо большое за видео!Очень четко и понятно объяснили! Прохожу курс по сетевым технологиям и мне очень помогло Ваше видео в понимании материала! Однозначно лайк и подписка!
Отличные видео, очень информативные, и чем дальше, тем интереснее, смотрю с самого начала на одном дыхании, многое уже знал, но многое было и новой информацией, но все равно очень полезно и интересно! Благодарю за проделанную работу, за видео и презентации! Успехов! :)
Интерфейс - как получить доступ к сервису уровня. Получаем доступ через интерфейс(пульт/рычаги/кнопка :D) транспортного уровня - сокеты. Сервис - обеспечить передачу данные между хостами. Как это сервис будет реализован? С помощью проколов, вшитых в ОС/или еще куда =)
спасибо за очередную хорошо разжеванную тему с твоего позволения хочу лишь внести пару корректив для полноты картины 1) connect - устанавливает соединение лишь в случае работы с TCP, но не UDP. В случае использования UDP сокетов (SOCK_DGRAM) этот вызов лишь сохраняет информацию удаленного адреса сервера и порта для отправки сообщений и их получений. То есть этот вызов можно и не использовать, но в этом случае придется использовать другие API для работы с сокетами, которые подразумевают ЯВНОЕ указание информации о сервере (sendto / recvfrom) 2) важное API для работы с TCP протоколом, которое подразумевает отправку fin флага или другими словами "одностороннее закрытие соединения" - shutdown уж не знаю, есть ли оно в python, но среди стандартных posix API оно должно пристуствовать и иногда полезно
Несколько раз пересмотрел лекцию, вроде в целом понял о чем речь, но все же до конца не усваивается информация. Возможно потому, что я не имею представления о программировании. Мне показалось, что лекция скорее нацелена на тех, кто понимает программирование, но не силен в устройстве сети. Но благодаря этой лекции появилось желание и в программировании разобраться. В интернете много ресурсов, обучающих компьютерным сетям, но, как и многие на этом канале, я считаю, что Ваш курс лучший (по крайней мере из тех, с которыми я сталкивался) по доступности изложения для уровня новичок и по лаконичности. Был бы рад, еслибы Вы выложили подобный курс по программированию с нуля. Думаю, достаточно многим людям это было бы интересно и многие были бы Вам благодарны.
Андрей, я не совсем понял что такое сокет. Олифер трактует определение сокет как ip-adress + port как очередь из данных, идущих на определенный адрес и конкретный порт
+TheSuperStepan можно понимать и так, как трактует Олифер. Для Интернет сокета это правильно. Вообще сокет - это такая штука, которая объединяет два процесса. Один процесс туда что-то записывает, другой читает. Первоначально сокеты в Unix использовались для взаимодействия процессов на одном компьютере. Процессы, даже если они на одном компьютере, изолированы друг от друга, поэтому для передачи данных им нужны сторонние механизмы (inter-process communication). Сокеты - один из механизмов обмена данными между процессами с помощью файлового дескриптора: один процесс пишет в файл специального вида, а другой читает. Это сокеты протокола Unix. С появлением сетей TCP/IP оказалось что абстракция сокетов хорошо подходит не только для взаимодействия процессов на одном компьютере, но и по сети. Процессы по прежнему пишут данные в файл и читают из него, но данные передаются по сети. Собственно передача данных выполняется операционной системой и скрыта от программиста. Такие сокеты называют Интернет сокетами. Определяются они не именем файла, как Unix сокеты, а парами IP-адрес и порт для клиента и сервера.
Впервые встретил объяснение которое я понял. Спасибо вам огромное. По сетям у вас очень классный курс! Насколько я понял, многие пытаются преподавать материал, сами не понимая сути...и это вносит такую путаницу....
Андрей здравствуйте. Вы сказали что интерфейсы используются для взаимодействия между разными уровнями стека протоколов. Я правильно понял, что интерфейс сокетов используется для взаимодействия уровня приложений с транспортным уровнем?
Оо!!! Как раз ты-то мне и нужен. 5:20 Есть строка: conn, addr=s.accept() Что она структурно и конкретно означает? Вижу, что есть некая переменная addr, которая объявляется и сразу инициализируется и больше нигде не используется☝🏼☝🏼 Первый вопрос: ну и зачем она нужна???? Второй вопрос: что такое "conn"??? Это переменная или что? Почему она висит в воздухе без типа и значения??? Что за хрень с этим питоном?
Тоесть первый сокет у нас принимает соединение и устанавливает его, а копию мы делаем, чтобы первый сокет всегда принимал новых клиентов? После чего новый клиент на 1ом сокете снова сделает копию и уйдет в нее, а первый сокет снова освободиться для принятия нового клиента?
добрый день. Спасибо за курс, у меня вопрос по видео - из примера в видео, отправляем данные серверу "hello world", почему клиент их получает обратно? вроде клиент должен получить потверждение? если сервер обратно отправляет пакет - получаются накладные расходы?
Это просто демонстрационный пример. Сервер отправил клиенту ту же самую строку, поэтому клиент ее и получил. В реальности сервер, конечно же, отправит что-то полезное клиенту. Не нужно путать сокеты и TCP. Подтверждение отправляется по протоколу TCP. Сокеты позволяют передавать процессам на разных хостах данные друг другу. В примере пересылаются простые строки. Причем для передачи используется TCP, и подтверждение о доставке тоже пересылается. Но все это скрыто от программиста.
Ожидал увидеть тут подобный коммент. Сам не сразу понял, зачем одни и те же данные возвращать клиенту. В надежде на то, что мой коммент будет полезным для развития курса, отмечу, что в подобных примерах, кмк, было бы лучше добавить какую-то не совсем связанную с темой урока операцию с полученными данными, чтобы наглядно показать сразу две вещи: 1. Есть смысл в том, чтобы получать от клиента данные и возвращать ему что-то взамен. (Например, отправил клиент "2+2", а сервер ему - "4"). 2. Сокеты, интерфейс транспортного уровня, ну прям _реально_ используются в _программе_ . Мол, вот то место, где эти ваши пока очень теоретические в этом курсе компьютерные сети вполне практически пересекаются с программированием. Вот здесь вы вызываете сокеты, вот тут - вычисляете "2 + 2", а вот здесь - шлете ответ обратно клиенту. Сами вычисления на Питоне не относятся к теме, но это было бы очень наглядно. И в целом я заметил, что мне как человеку, который лучше всего понимает материал на практических примерах, иногда сложно понять какой-то нюанс сетей, потому что он представлен только в теории и весьма упрощенной. Хотя с упрощением я согласен, ибо понимаю, что оно тут реально необходимо, прошу обратить внимание на это и, если вы найдете места, которые можно объяснить на практических примерах без ненужного новичкам усложнения, уделить этим местам больше "практического" времени. Вот как в этом видео про сокеты. Прям вообще чистенько на мое сознанеие положилось из-за практического примера, очень ясно теперь все вижу.
Здравствуйте Андрей. Спасибо за лекцию, как всегда всё прекрасно. У меня небольшой вопрос, 1 сокет - сугубо для одного порта? Т.е., если допустим на компьютере условно происходит передача и прием данных по двум портам - 45 и 4500 допустим, то на компе будет открыто 2 сокета для каждого из портов?
@@ruslanvolovik2745 Руслан! Давай разбираться! Я вижу неоднозначность! Автор говорит: вон на сервере создали сокет с очередью соединений длиной 5. Дальше приходит запрос на соединение и сокет клонируется. Где очередь соединений у нового сокета? Какого она размера? У автора никакая очередь у нового сокета не нарисована. Из всего этого получается ТОЛЬКО ТАКАЯ картина: создаётся изначальный сокет с очередью соединений, и при каждом новом соединении клонируется исходный сокет с очередью ровно на одно соединение, и какой длины была очередь первородного сокета, столько новых "одноместных" сокетов и создаётся. Руслан, это так?🤔
Разве закрытие соединения TCP не инициируется методом socket.shutdown(socket.SHUT_RDWR), а socket.close() просто освобождает ресурсы? docs.python.org/3/library/socket.html?highlight=socket#socket.socket.close
Не совсем так. socket.close() также закрывает соединение, если сокетом пользовался только один процесс. Если же через сокет работали несколько процессов, то соединение не разорвется и другие процессы смогут передавать данные. socket.shutdown(socket.SHUT_RDWR) закрывает соединение, не зависимо от того, сколько процессов используют сокет. Подробности можно посмотреть по ссыдке - stackoverflow.com/questions/409783/socket-shutdown-vs-socket-close Но эта тема выходит за рамки вводного курса по сетям.
Андрей, вы делаете отличные лекции! Спасибо большое. Можно уточнить, я так пониманию, сокеты стали нужны, чтобы множество пользователей могло работать с одним сервером. Ведь связка IP-адрес и порт (192.168.1.1:80), если пользователей, скажем, 100 и они постоянно обмениваются информацией с сервером, качают что-нибудь с него, очень "сыроватое" решение. В любом случае, нужно было решение вроде сокетов "порт для порта". Интернет-сокет - это специальный "адрес" конкретного соеднинения + буфер для обмена данными? я правильно понял его предназначение?
Да, именно так. Сокеты сделали как раз для того, чтобы скрыть взаимодействие по сети. Изначально сокет - это файл специального типа в UNIX. Данные пишутся в этот файл, а читать их можно на другом компьютере. Такая абстракция сетевого ввода-вывода. Связка IP и порт необходима, иначе непонятно, куда клиенту подключаться.
@@AndreySozykin а каким образом происходит привязка к этому "файлу"? у этого файл есть какой то ID? я просто сейчас усиленно изучаю эту тему, а подробного разбора как устроены сокеты не могу найти. То что вы описали - самое подробное что я нашел в сети.
В википедии есть описание типа файла для сокетов - en.m.wikipedia.org/wiki/Unix_file_types Еще ссылка с более подробной информацией - unix.stackexchange.com/questions/116563/is-there-a-file-for-each-socket
Я иногдп думаю, что те, кто поставил видосам Андрея дизлайк, просто неуверенной рукой/в темноте/спросонья (нужное подчеркнуть) двумя сантиметрами в выборе кнопки ошиблись.
@@AndreySozykin я просто по Вашим лекциям на собеседование готовилась. И в полном восторге от того, как Вы так все четко и структурированно обьясняете.
4:45 копия сокета на сервере имеет другой порт, не 80ый(так утверждает один эксперт в одном споре)? Если я правильно помню, сервер отличает клиентов по соурс порт, но как и кем он назначается, рандомно? Ос клиента? Если отличие идет по соурс порт, то смысла подменять порт на сервере нет вроде бы
а как в таком случае ведет себя очередь для соединений? она одна на сервер? или при клонировании сокета клонируется и очередь - но тогда в чем ее смысл, если на каждый клон сокета будет очередь для соединений и при том всегда с одним соединением?
Здравствуйте! Андрей. Огромное спасибо, очень познавательный материал. Но дойдя до этой темы, я впал ступор, не могу понять что такое Сокеты. Возможно, что-то усложняю для себя в этом вопросе, поэтому не могу понять. Есть возможность объяснить как то иначе, что такое Сокет?
+Эмиль Сенцов, сокеты - это набор функций (или методов) для разработки программ для сетей. Если вы хотите что-то передать по сети из программы, то используете сокеты.
Андрей, здравствуйте! Извините, что не по теме. Вы не могли бы сказать о чем идет речь в этом предложении? "The TCP stack also maintains the variance in the measured RTT, the RTTVAR" И вообще зачем нужен RTTVAR?
+Alexander Polyakov, это больше по теме протокола TCP - th-cam.com/video/hd6QNXK5rPk/w-d-xo.html TCP использует подтверждение доставки для того чтобы убедится, что данные переданы успешно. Если через заданный период времени подтверждение получения данных не пришло, то сегмент отправляется повторно. Сложный вопрос заключается в том, как правильно выбрать время ожидания подтверждения (обозначается RTO, retransmission timeout). Если RTO будет слишком коротким, то подтверждения часто будут приходить после того, как таймаут закончится. То есть будет много излишних повторных оправок сегментов. С другой стороны, если RTO слишком большой, то обнаруживать проблемы доставки мы будем поздно. TCP динамически вычисляет размер RTO в зависимости от времени прохождения сегмента от отправителя до получателя и обратно (RTT, round-trip time). RTO должен быть немого больше, чем RTT, тогда подтверждения будут приходить вовремя. Но в реальных сетях RTT для разных сегментов TCP может сильно отличатся друг от друга. Поэтому используется схема "сглаживания" RTT, на основе удаления выбросов и последующего усреднения. Для того вычисляются два дополнительных параметра: SRTT - smoothed round-trip time, "сглаженное" RTT. RTTVAR - round-trip time variation, характеризует, насколько значения RTT для разных сегментов TCP могут отличатся друг от друга. Процесс вычисления RTO в TCP описан в документе RFC 6298: 1. Пока RTT не известно, задается RTO
Благодарствую за разъяснения. Тогда скажите как называется IP адрес в паре с портом приложения?Путаница возникла, Википедия трактует Сокет как IP адрес в паре с портом приложения.
Упрощенно можно понимать и так. Сокет - это файл специального вида, который связан с IP-адресов и портом на текущем компьютере, а также с IP-адресом и портом на удаленном компьютере (вместе с протоколом транспортного уровня TCP или UDP мы получаем полное описание соединения). Все, что пишется в этот файл, появляется на другом компьютере. Строго говоря, сокеты бывают не только TCP/IP, но и других типов, например, Unix. Там передача данных выполняется без IP-адресов и портов. Но сейчас почти везде используются сокеты TCP/IP, так что в Википедии описан самый популярный вариант сокетов.
Андрей, а вот такой вопрос. Допустим я пишу чат и хочу напрямую устанавливать соединение через интернет между двумя собеседниками, один из них сервер, другой клиент. Как клиенту узнать IP-адрес сервера?
Нужен какой-то дополнительный сервис, который будет сводить вместе клиентов и серверы. Подобным образом устроен BitTorrent. Есть torrent трекер, который сам не хранит даннные, но знает, у кого что лежит.
скажите, это конечно немного не по теме, ну как допустим программист системный на с, взаимодействует с транспортным уровнем. Я читал, что любое взаимодействие например с клавой происходит через поток что записывается в файл, то есть тут также, только файл - сокет?
+Vlad Stetsenko, да именно так. Сокет (в Unix) - это тип специальный файла. Интерфейс сокетов придуман был именно для программ на C, там такие же вызовы: bind, listen и т.п.
Я хотел бы спросить, мне бы как то прочесть заголовок ip в сокетах, я могу это реализовать в сырых сокетах но это ооочень долго и сложно, нужно будет реализовать весь механизм Tcp в ручну просто чтобы прочесть ip заголовок. Так вопрос, как?
+D0sart, нет. Размер окна свой для каждого соединения. Очередь нужно для разных соединений. Если запросов на соединение приходит очень много и сервер не успевает их обрабатывать, они устанавливаются в очередь.
+Sergey Ufimtsev, не совсем так. Сокеты используются для передачи данных от одного приложения другому. Но чтобы знать, где находится другое приложение, нужны обязательно IP-адрес и порт. В этом смысле изоляция не полная. Однако большая часть задач сетевого уровня (маршрутизация и т.п.) от сокетов скрыты.
@@AndreySozykin 6:19 "conn, addr=s.accept()" что означает эта строка? что за "addr", если дальше эта переменная не используется? Что за conn, который висит в воздухе без типа и значения??????
Это же на транспортном уровне. Там соединения различаются по 5 параметерам: - IP отправителя - Порт отправителя - IP получателя - Порт получателя - Протокол транспортного уровня (TCP или UDP).
@@AndreySozykin 4:24 критикую:) вот в этом моменте вообще ничего не понятно. у другого сокета есть ip адресс и порт? какие? как происходит соединение клиента с другим сокетом? клиент же связан с исходной парой айпи адрес-порт сервера, а тут клиента коннектят на какой-то другой сокет. и кто это делает? ОС сервера? очередь соединений - как конкретно она работает? особенно в свете копирования сокета. очередь копируется или как? ни слова про это. столько вопросов и нет ответов:)
@@AndreySozykin Я не могу понять следующее: метод accept принимает соединение, но он это делает при любых обстоятельствах. Можно ли как-то глянуть кто просится подключится и если узел нам не угоден(например айпи не нравтся), то отклонить соединение?
Вот вы говорите что транспортный, это первый с которым может взаимодействовать программист. А я думал что вот то подробное описание алгоритмов разных протоколов озвучивается затем чтобы программист, при желании понимал как ему писать алгоритм, если надо на своём устройстве это реализовать, без роутер ОС или других ОС. Теперь не понимаю зачем, кроме общих знаний, знать алгоритмы взаимодействия разных протоколов нижних уровней.
Скорее всего, незачем 🙂 В любом случае полезно понимать, что за параметры вводятся при настройке сетевой конфигурации компьютеров. Еще иногда бывает полезно уметь настраивать маршруты к определенным сетям, как на серверах, так и на обычных компьютерах.
Удивительно короткое и при этом супер понятное объяснение. У вас талант огромные штуки объяснять!!!!
Спасибо!
Андрей, вы мне так помогли! У меня через час экзамен, почти все ваши лекции смотрел, стал намного уверенным в своих знаниях. Спасибо вам большое, объясняете лучше чем все мои преподаватели вместе взятые!
+David Ghukasyan, спасибо за хороший отзыв! Удалось ли сдать экзамен?
Какой университет?
да, Андрей, сдал на отлично! Ереванский Государственный Университет, факультет Информатики и Прикладной Математики. Спасибо еще раз, жду новых ваших лекций!
I know Im pretty randomly asking but does anyone know of a good place to stream newly released tv shows online ?
@Dustin Jamal I use FlixZone. You can find it by googling =)
@Benjamin Ahmed Yea, I have been using flixzone for months myself :D
Смотрю весь курс, не устаю поражаться качеству донесения информации!
Спасибо!
Огромное Вам спасибо, Андрей. К сожалению, на ютубе очень мало людей, которые могут столь информативно дать большой объем знаний! Продолжайте в том же духе!
Обязательно буду продолжать!
Спасибо вам за полезный материал! Невероятно круто у вас получается объяснять все темы по компьютерным сетям! Браво!
Отличный материал !!! Лаконично, понятно и хорошо подаётся. Легко запоминается.
А то некоторые как усложнят, как закрутят, что даже имея знания, уже можно запутаться.
Благодарим Вас за проделанню работу !!!
Спасибо за приятный отзыв! Рад, что мой подход нравится!
ОГРОМНОЕ СПАСИБО, особенно был поражен тем, что Вы привели пример кода на Python.
Вроде бы Python сейчас один из самых популярных языков для сетевых приложений. Если, конечно, Web не брать.
Да, пример на питоне хорошо зашёл
Огромное Вам спасибо! И ещё большЕе спасибо за то что ПОДРОБНО отвечаете на вопросы в комментариях!!!
Пожалуйста! Всегда рад вопросам.
Применительно ко всему циклу и даже каналу - просто отличная работа, объясняющая технологии простым языком. При этом упрощения делаются небольшими. Т.е. именно теория даётся отлично. Завидую, что автор может объяснить все простым языком!
Спасибо за приятный отзыв!
Andrey Sozykin , большое Вам спасибо за данный курс.
Самый низкий поклон.
+Alex Tokarev, пожалуйста! Рад, что оказалось полезно!
@@AndreySozykin А можно вам задонатить куда нибудь? Очень круто объясняете
Восхитительный курс! Вы очень просто и доходчиво объясняете сложные вещи, за что вам огромное человеческое спасибо. Прохожу курс обучения на образовательном портале, как раз сейчас нам читают компьютерные сети. Чтобы понимать, о чём вообще речь, параллельно смотрю ваш курс. По сравнению с путанными объяснениями нашего преподавателя - это просто сказочный восторг! А примеры на Python очень порадовали - учусь на программиста Python)
Спасибо за приятный отзыв!
Превосходное объяснение, как и всегда! Огромное спасибо!
Пожалуйста!
Отличная работа! Спасибо)
+Дмитрий Ларионов, рад, что нравится!
Большое вам спасибо! Много раз читала man-страницы и прочие источники, но благодаря вашему видео всё стало понятно на лету.
Спасибо, вы очень хороший преподаватель, информация изложена понятно и последовательно
Офигенное обьяснение!
Спасибо!
Спасибо большое за видео!Очень четко и понятно объяснили! Прохожу курс по сетевым технологиям и мне очень помогло Ваше видео в понимании материала! Однозначно лайк и подписка!
Спасибо большое, хорошее объяснение, а то везде непонятно
Пожалуйста!
Отличные видео, очень информативные, и чем дальше, тем интереснее, смотрю с самого начала на одном дыхании, многое уже знал, но многое было и новой информацией, но все равно очень полезно и интересно!
Благодарю за проделанную работу, за видео и презентации! Успехов! :)
Спасибо за приятный отзыв! Рад, что курс полезен и формат нравится!
Великолепный курс, огромное спасибо!
Пожалуйста!
Спасибо.
Qilgan bu yaxshi amallariyezni ajrini bersin.
Интерфейс - как получить доступ к сервису уровня.
Получаем доступ через интерфейс(пульт/рычаги/кнопка :D) транспортного уровня - сокеты.
Сервис - обеспечить передачу данные между хостами.
Как это сервис будет реализован?
С помощью проколов, вшитых в ОС/или еще куда =)
Я так понимаю, что да: реализованы в ОС и драйверах сетевой карты🤷♂️
Спасибо вам, Андрей!
Пожалуйста!
спасибо за очередную хорошо разжеванную тему
с твоего позволения хочу лишь внести пару корректив для полноты картины
1) connect - устанавливает соединение лишь в случае работы с TCP, но не UDP.
В случае использования UDP сокетов (SOCK_DGRAM) этот вызов лишь сохраняет информацию удаленного адреса сервера и порта для отправки сообщений и их получений. То есть этот вызов можно и не использовать, но в этом случае придется использовать другие API для работы с сокетами, которые подразумевают ЯВНОЕ указание информации о сервере (sendto / recvfrom)
2) важное API для работы с TCP протоколом, которое подразумевает отправку fin флага или другими словами "одностороннее закрытие соединения" - shutdown
уж не знаю, есть ли оно в python, но среди стандартных posix API оно должно пристуствовать и иногда полезно
+conquistador, спасибо, все написано правильно.
Я об этом не говорю, чтобы не перегружать техническими деталями.
Спасибо за инфо!
Спс за урок. Все подробно разобрал и объяснил
Пожалуйста!
Умница! Честь и похвала! Все точки расставил над и))
Рад, что оказалось полезным!
Очень интересно! На С++ синтаксис плюс минус аналогичный. Отличные лекции!
Синтаксис похож, потому что операции с сокетами придумали не зависимо от языка программирования.
Классная лекция. Спасибо!
Пожалуйста!
Несколько раз пересмотрел лекцию, вроде в целом понял о чем речь, но все же до конца не усваивается информация. Возможно потому, что я не имею представления о программировании. Мне показалось, что лекция скорее нацелена на тех, кто понимает программирование, но не силен в устройстве сети.
Но благодаря этой лекции появилось желание и в программировании разобраться.
В интернете много ресурсов, обучающих компьютерным сетям, но, как и многие на этом канале, я считаю, что Ваш курс лучший (по крайней мере из тех, с которыми я сталкивался) по доступности изложения для уровня новичок и по лаконичности.
Был бы рад, еслибы Вы выложили подобный курс по программированию с нуля. Думаю, достаточно многим людям это было бы интересно и многие были бы Вам благодарны.
Да, интерфейс - это скорее для программирования.
Кажется, что базовых курсов по программированию сейчас достаточно много хороших.
Спасибо, Андрей
Пожалуйста!
Андрей, я не совсем понял что такое сокет.
Олифер трактует определение сокет как ip-adress + port
как очередь из данных, идущих на определенный адрес и конкретный порт
+TheSuperStepan можно понимать и так, как трактует Олифер. Для Интернет сокета это правильно.
Вообще сокет - это такая штука, которая объединяет два процесса. Один процесс туда что-то записывает, другой читает.
Первоначально сокеты в Unix использовались для взаимодействия процессов на одном компьютере. Процессы, даже если они на одном компьютере, изолированы друг от друга, поэтому для передачи данных им нужны сторонние механизмы (inter-process communication). Сокеты - один из механизмов обмена данными между процессами с помощью файлового дескриптора: один процесс пишет в файл специального вида, а другой читает. Это сокеты протокола Unix.
С появлением сетей TCP/IP оказалось что абстракция сокетов хорошо подходит не только для взаимодействия процессов на одном компьютере, но и по сети. Процессы по прежнему пишут данные в файл и читают из него, но данные передаются по сети. Собственно передача данных выполняется операционной системой и скрыта от программиста. Такие сокеты называют Интернет сокетами. Определяются они не именем файла, как Unix сокеты, а парами IP-адрес и порт для клиента и сервера.
Впервые встретил объяснение которое я понял. Спасибо вам огромное. По сетям у вас очень классный курс! Насколько я понял, многие пытаются преподавать материал, сами не понимая сути...и это вносит такую путаницу....
+Liocha Makedonsky, спасибо за хороший отзыв! Рад, что оказалось понятно :)
Молодчина!Спасибо.
Пожалуйста!
коротко и ясно. спасибо!
Пожалуйста! Рад, что понравилось!
Хороший ролик. Спасибо
класс, отличный материал
Спасибо!
Спасибо Вам!
Пожалуйста!
Андрей здравствуйте. Вы сказали что интерфейсы используются для взаимодействия между разными уровнями стека протоколов. Я правильно понял, что интерфейс сокетов используется для взаимодействия уровня приложений с транспортным уровнем?
Да, именно так.
@@AndreySozykin Ок. Спасибо!
шикарно!
Спасибо!
Спасибо за видео!
*Л. а. й. к. о. с.* за видос.
Спасибо!
Спасибо, очень доходчиво
Пожалуйста!
Чётко. Лайк, подписка
Спасибо!
Очень познавательно
Спасибо!
Топ видос. Я как раз на пайтоне сокеты изучаю
👍
Оо!!! Как раз ты-то мне и нужен.
5:20
Есть строка:
conn, addr=s.accept()
Что она структурно и конкретно означает? Вижу, что есть некая переменная addr, которая объявляется и сразу инициализируется и больше нигде не используется☝🏼☝🏼
Первый вопрос: ну и зачем она нужна????
Второй вопрос: что такое "conn"??? Это переменная или что? Почему она висит в воздухе без типа и значения??? Что за хрень с этим питоном?
spasibo za klasnoe video
Пожалуйста!
Тоесть первый сокет у нас принимает соединение и устанавливает его, а копию мы делаем, чтобы первый сокет всегда принимал новых клиентов?
После чего новый клиент на 1ом сокете снова сделает копию и уйдет в нее, а первый сокет снова освободиться для принятия нового клиента?
я так же понял🤷♂️ и типа эти клонированные "одноместные" сокеты и есть очередь соединений исходного сокета.
Спасибо!
Пожалуйста!
добрый день. Спасибо за курс, у меня вопрос по видео - из примера в видео, отправляем данные серверу "hello world", почему клиент их получает обратно? вроде клиент должен получить потверждение? если сервер обратно отправляет пакет - получаются накладные расходы?
Это просто демонстрационный пример. Сервер отправил клиенту ту же самую строку, поэтому клиент ее и получил. В реальности сервер, конечно же, отправит что-то полезное клиенту.
Не нужно путать сокеты и TCP. Подтверждение отправляется по протоколу TCP.
Сокеты позволяют передавать процессам на разных хостах данные друг другу. В примере пересылаются простые строки. Причем для передачи используется TCP, и подтверждение о доставке тоже пересылается. Но все это скрыто от программиста.
Ожидал увидеть тут подобный коммент. Сам не сразу понял, зачем одни и те же данные возвращать клиенту.
В надежде на то, что мой коммент будет полезным для развития курса, отмечу, что в подобных примерах, кмк, было бы лучше добавить какую-то не совсем связанную с темой урока операцию с полученными данными, чтобы наглядно показать сразу две вещи:
1. Есть смысл в том, чтобы получать от клиента данные и возвращать ему что-то взамен. (Например, отправил клиент "2+2", а сервер ему - "4").
2. Сокеты, интерфейс транспортного уровня, ну прям _реально_ используются в _программе_ . Мол, вот то место, где эти ваши пока очень теоретические в этом курсе компьютерные сети вполне практически пересекаются с программированием. Вот здесь вы вызываете сокеты, вот тут - вычисляете "2 + 2", а вот здесь - шлете ответ обратно клиенту. Сами вычисления на Питоне не относятся к теме, но это было бы очень наглядно.
И в целом я заметил, что мне как человеку, который лучше всего понимает материал на практических примерах, иногда сложно понять какой-то нюанс сетей, потому что он представлен только в теории и весьма упрощенной. Хотя с упрощением я согласен, ибо понимаю, что оно тут реально необходимо, прошу обратить внимание на это и, если вы найдете места, которые можно объяснить на практических примерах без ненужного новичкам усложнения, уделить этим местам больше "практического" времени. Вот как в этом видео про сокеты. Прям вообще чистенько на мое сознанеие положилось из-за практического примера, очень ясно теперь все вижу.
класс, спасибо
А копия сокета получаетя имеет другой порт? И непонятно зачем нужен accept, если сервер и так уже слушает, непонятно тогда что он случает до accept
те же вопросы. ты разобрался?
Здравствуйте Андрей. Спасибо за лекцию, как всегда всё прекрасно. У меня небольшой вопрос, 1 сокет - сугубо для одного порта? Т.е., если допустим на компьютере условно происходит передача и прием данных по двум портам - 45 и 4500 допустим, то на компе будет открыто 2 сокета для каждого из портов?
+rostl, да, именно так.
Я правильно понимаю, что два сокета на один айпишник, но разные порты будут занимать два места в очереди на стороне сервера?
@@АнатолийАнатолий-п1д нет, очередь из соединений создаеться для кажного сокета отдельно, соответственно будет 2 очереди
@@ruslanvolovik2745
а как, собственно, работает эта очередь соединений?
@@ruslanvolovik2745
Руслан! Давай разбираться! Я вижу неоднозначность!
Автор говорит: вон на сервере создали сокет с очередью соединений длиной 5. Дальше приходит запрос на соединение и сокет клонируется. Где очередь соединений у нового сокета? Какого она размера? У автора никакая очередь у нового сокета не нарисована. Из всего этого получается ТОЛЬКО ТАКАЯ картина: создаётся изначальный сокет с очередью соединений, и при каждом новом соединении клонируется исходный сокет с очередью ровно на одно соединение, и какой длины была очередь первородного сокета, столько новых "одноместных" сокетов и создаётся.
Руслан, это так?🤔
Разве закрытие соединения TCP не инициируется методом socket.shutdown(socket.SHUT_RDWR), а socket.close() просто освобождает ресурсы?
docs.python.org/3/library/socket.html?highlight=socket#socket.socket.close
Не совсем так. socket.close() также закрывает соединение, если сокетом пользовался только один процесс. Если же через сокет работали несколько процессов, то соединение не разорвется и другие процессы смогут передавать данные.
socket.shutdown(socket.SHUT_RDWR) закрывает соединение, не зависимо от того, сколько процессов используют сокет. Подробности можно посмотреть по ссыдке - stackoverflow.com/questions/409783/socket-shutdown-vs-socket-close
Но эта тема выходит за рамки вводного курса по сетям.
С П А С И Б О !
Пожалуйста!
Андрей, вы делаете отличные лекции! Спасибо большое. Можно уточнить, я так пониманию, сокеты стали нужны, чтобы множество пользователей могло работать с одним сервером. Ведь связка IP-адрес и порт (192.168.1.1:80), если пользователей, скажем, 100 и они постоянно обмениваются информацией с сервером, качают что-нибудь с него, очень "сыроватое" решение. В любом случае, нужно было решение вроде сокетов "порт для порта". Интернет-сокет - это специальный "адрес" конкретного соеднинения + буфер для обмена данными? я правильно понял его предназначение?
Да, именно так. Сокеты сделали как раз для того, чтобы скрыть взаимодействие по сети. Изначально сокет - это файл специального типа в UNIX. Данные пишутся в этот файл, а читать их можно на другом компьютере. Такая абстракция сетевого ввода-вывода.
Связка IP и порт необходима, иначе непонятно, куда клиенту подключаться.
@@AndreySozykin а каким образом происходит привязка к этому "файлу"? у этого файл есть какой то ID? я просто сейчас усиленно изучаю эту тему, а подробного разбора как устроены сокеты не могу найти. То что вы описали - самое подробное что я нашел в сети.
В википедии есть описание типа файла для сокетов - en.m.wikipedia.org/wiki/Unix_file_types
Еще ссылка с более подробной информацией - unix.stackexchange.com/questions/116563/is-there-a-file-for-each-socket
@@Valaukar1111 это ты так "усиленно занимаешся", видно...
Андрей, а не планируете более подробные видосы про poll, select, epoll и Linux aio? Спасибо!
Пока не планировал. Сейчас делаю новый курс по SQL. Потом, возможно, на эту тему подумаю.
Я иногдп думаю, что те, кто поставил видосам Андрея дизлайк, просто неуверенной рукой/в темноте/спросонья (нужное подчеркнуть) двумя сантиметрами в выборе кнопки ошиблись.
Не обязательно всем должно нравиться. Кроме того, без дизлайков youtub будет подозревать накрутки.
@@AndreySozykin я просто по Вашим лекциям на собеседование готовилась. И в полном восторге от того, как Вы так все четко и структурированно обьясняете.
Еще бы видео про WebSocket'ы.
Сейчас готовлю материалы. Будет на этой или следующей неделе.
@@AndreySozykin
в итоге так и не сделали выпуск про веб сокеты?????:(((((
@@AndreySozykin
Извиняюсь!!!!! Увидел про вебсокеты в плейлисте продвинутых тем!!!!👍🏼🎉🥳
спасибо!!!
Пожалуйста!
4:45 копия сокета на сервере имеет другой порт, не 80ый(так утверждает один эксперт в одном споре)?
Если я правильно помню, сервер отличает клиентов по соурс порт, но как и кем он назначается, рандомно? Ос клиента?
Если отличие идет по соурс порт, то смысла подменять порт на сервере нет вроде бы
Спасибо
Пожалуйста!
При сотворении копии сокета, нуно было сказать, что ему присваивается другой номер порта, выбираемой за диапазоном 1024
а как в таком случае ведет себя очередь для соединений? она одна на сервер? или при клонировании сокета клонируется и очередь - но тогда в чем ее смысл, если на каждый клон сокета будет очередь для соединений и при том всегда с одним соединением?
ВАНЕС!!!! Алё, сучара!!!! Ответь на вопрос.
клас, спосибо! профессиональное
Здравствуйте! Андрей. Огромное спасибо, очень познавательный материал.
Но дойдя до этой темы, я впал ступор, не могу понять что такое Сокеты.
Возможно, что-то усложняю для себя в этом вопросе, поэтому не могу понять.
Есть возможность объяснить как то иначе, что такое Сокет?
+Эмиль Сенцов, сокеты - это набор функций (или методов) для разработки программ для сетей. Если вы хотите что-то передать по сети из программы, то используете сокеты.
Правильней бы было коннект в трай завернуть - сервер может быть недоступен или отказать в соединении
Assalomu alaykum, rahmat sizga
Спасибо!
Андрей, здравствуйте! Извините, что не по теме.
Вы не могли бы сказать о чем идет речь в этом предложении?
"The TCP stack also maintains the variance in the measured RTT, the RTTVAR"
И вообще зачем нужен RTTVAR?
+Alexander Polyakov, это больше по теме протокола TCP - th-cam.com/video/hd6QNXK5rPk/w-d-xo.html
TCP использует подтверждение доставки для того чтобы убедится, что данные переданы успешно. Если через заданный период времени подтверждение получения данных не пришло, то сегмент отправляется повторно.
Сложный вопрос заключается в том, как правильно выбрать время ожидания подтверждения (обозначается RTO, retransmission timeout). Если RTO будет слишком коротким, то подтверждения часто будут приходить после того, как таймаут закончится. То есть будет много излишних повторных оправок сегментов. С другой стороны, если RTO слишком большой, то обнаруживать проблемы доставки мы будем поздно.
TCP динамически вычисляет размер RTO в зависимости от времени прохождения сегмента от отправителя до получателя и обратно (RTT, round-trip time). RTO должен быть немого больше, чем RTT, тогда подтверждения будут приходить вовремя. Но в реальных сетях RTT для разных сегментов TCP может сильно отличатся друг от друга. Поэтому используется схема "сглаживания" RTT, на основе удаления выбросов и последующего усреднения. Для того вычисляются два дополнительных параметра:
SRTT - smoothed round-trip time, "сглаженное" RTT.
RTTVAR - round-trip time variation, характеризует, насколько значения RTT для разных сегментов TCP могут отличатся друг от друга.
Процесс вычисления RTO в TCP описан в документе RFC 6298:
1. Пока RTT не известно, задается
RTO
Воу, вот это объяснение!
Здравствуйте Андрей. Извините что не по теме, вопрос такой где можно зарабатывать специалисту с этими знаниями, учусь на кафедре сетей связи 4 курс
Благодарствую за разъяснения. Тогда скажите как называется IP адрес в паре с портом приложения?Путаница возникла, Википедия трактует Сокет как IP адрес в паре с портом приложения.
Упрощенно можно понимать и так. Сокет - это файл специального вида, который связан с IP-адресов и портом на текущем компьютере, а также с IP-адресом и портом на удаленном компьютере (вместе с протоколом транспортного уровня TCP или UDP мы получаем полное описание соединения). Все, что пишется в этот файл, появляется на другом компьютере.
Строго говоря, сокеты бывают не только TCP/IP, но и других типов, например, Unix. Там передача данных выполняется без IP-адресов и портов. Но сейчас почти везде используются сокеты TCP/IP, так что в Википедии описан самый популярный вариант сокетов.
Теперь понятно. Очень вразумительно.
Андрей, а вот такой вопрос. Допустим я пишу чат и хочу напрямую устанавливать соединение через интернет между двумя собеседниками, один из них сервер, другой клиент. Как клиенту узнать IP-адрес сервера?
Нужен какой-то дополнительный сервис, который будет сводить вместе клиентов и серверы. Подобным образом устроен BitTorrent. Есть torrent трекер, который сам не хранит даннные, но знает, у кого что лежит.
скажите, это конечно немного не по теме, ну как допустим программист системный на с, взаимодействует с транспортным уровнем. Я читал, что любое взаимодействие например с клавой происходит через поток что записывается в файл, то есть тут также, только файл - сокет?
+Vlad Stetsenko, да именно так. Сокет (в Unix) - это тип специальный файла. Интерфейс сокетов придуман был именно для программ на C, там такие же вызовы: bind, listen и т.п.
Андрей, а что же тогда порт, это тоже какой-то пронумерованный файл или структура в памяти? Ну или ссылку на вашу лекцию про порты.
Порт - это идентификатор процесса на транспортном уровне. Про порты в лекции о траеспортном уровне - th-cam.com/video/g7vq-JVId58/w-d-xo.html
@@AndreySozykin Merci
Bind читается как "байнд"!
то есть сокеты нужны,чтобы программист мог настраивать сервер?
спс
Лучше использовать read вместо receive.
Я хотел бы спросить, мне бы как то прочесть заголовок ip в сокетах, я могу это реализовать в сырых сокетах но это ооочень долго и сложно, нужно будет реализовать весь механизм Tcp в ручну просто чтобы прочесть ip заголовок. Так вопрос, как?
Скажите, а можно забиндить клиентский сокет на левый ip?
Очередь соединений == размер окна ?
+D0sart, нет. Размер окна свой для каждого соединения. Очередь нужно для разных соединений. Если запросов на соединение приходит очень много и сервер не успевает их обрабатывать, они устанавливаются в очередь.
Получается, что сокеты взаимодействуют и с сетевым уровнем? Ведь иначе бы они не привязывались к IP-адресу
+Sergey Ufimtsev, не совсем так. Сокеты используются для передачи данных от одного приложения другому.
Но чтобы знать, где находится другое приложение, нужны обязательно IP-адрес и порт. В этом смысле изоляция не полная. Однако большая часть задач сетевого уровня (маршрутизация и т.п.) от сокетов скрыты.
@@AndreySozykin
6:19
"conn, addr=s.accept()" что означает эта строка? что за "addr", если дальше эта переменная не используется?
Что за conn, который висит в воздухе без типа и значения??????
Ах тыж сукин сын я в деле, с меня тоже лайк
Спасибо!
Когда создается копия сокета, то какой ip ей присваивается?
Тот же самый, что и у основного сокета.
Andrey Sozykin а как сеть воспринимает 2 одинаковых ip?
Это же на транспортном уровне. Там соединения различаются по 5 параметерам:
- IP отправителя
- Порт отправителя
- IP получателя
- Порт получателя
- Протокол транспортного уровня (TCP или UDP).
@@AndreySozykin
4:24
критикую:)
вот в этом моменте вообще ничего не понятно. у другого сокета есть ip адресс и порт? какие? как происходит соединение клиента с другим сокетом? клиент же связан с исходной парой айпи адрес-порт сервера, а тут клиента коннектят на какой-то другой сокет. и кто это делает? ОС сервера? очередь соединений - как конкретно она работает? особенно в свете копирования сокета. очередь копируется или как? ни слова про это.
столько вопросов и нет ответов:)
@@AndreySozykin
Андрей, вернитесь к нам!!😀
сокеты у прогеров и технарей совсем разные вещи)
в чем именно разница?
тебе вопрос задали!!! отвечай!:)
Алё!! Актимель!!!! Прокис что ли???
Запили видосик по стриму, как сделать стрим по типу fm.
Не понял вопрос :-(
Andrey Sozykin как работает стрим в интернет радио к примеру. Какие процессы происходят при этом.
Понятно. Интересная тема, спасибо! Подумаю, как это можно сделать.
Ну, ты сделал стрим????? Или ты куи пинал???
@@manOfPlanetEarth Сделал что нужно, но ТЫ никогда не узанешь что и как.
Как бы ещё и Питон выучить?!?
Есть отличный сайт - pythontutor.ru
у Сергея Лебедева неплохой курс про особенности питона
курс для программистов, т.е. его слушатели уже программируют на других языках
на курсы на степике есть) для начинающих самое то
Plus
Разве системный программист не может работать с IP пакетами?
вообще не понял что такое сокет
Я не знал, что Гнойный видео по программированию снимает и да лучше убери свое лицо с видео отвлекает
Не понял, при чем тут Гнойный :-)
@@AndreySozykin Я не могу понять следующее: метод accept принимает соединение, но он это делает при любых обстоятельствах. Можно ли как-то глянуть кто просится подключится и если узел нам не угоден(например айпи не нравтся), то отклонить соединение?
@@ubelian
возможно, когда не нравится айпи - это случай межсетевых экранов?🤔 Это я предполагаю.
Вот вы говорите что транспортный, это первый с которым может взаимодействовать программист. А я думал что вот то подробное описание алгоритмов разных протоколов озвучивается затем чтобы программист, при желании понимал как ему писать алгоритм, если надо на своём устройстве это реализовать, без роутер ОС или других ОС. Теперь не понимаю зачем, кроме общих знаний, знать алгоритмы взаимодействия разных протоколов нижних уровней.
Скорее всего, незачем 🙂
В любом случае полезно понимать, что за параметры вводятся при настройке сетевой конфигурации компьютеров. Еще иногда бывает полезно уметь настраивать маршруты к определенным сетям, как на серверах, так и на обычных компьютерах.
@@AndreySozykin понял, админские цели значит. Это тоже очень хорошо.
Какраз читаю книгу Stivens_UNIX_Razrabotka_setevykh_prilozheniy там такой подход используется тоже , я вам признателен за видео )
Большое спасибо!
Спасибо!
Пожалуйста!
Спасибо
Спасибо