Интерфейс сокетов | Курс "Компьютерные сети"

Поділитися
Вставка
  • Опубліковано 25 бер 2016
  • Интерфейс транспортного уровня стека TCP/IP "Сокеты". Лекции по курсу "Компьютерные сети" - goo.gl/0aIOuf
    Страница курса - www.asozykin.ru/courses/networ...
    Сокеты - это интерфейс для взаимодействия с транспортным уровнем. В отличие от протоколов транспортного уровня TCP и UDP, которые используются для связи между транспортными уровнями разных хостов, интерфейс сокетов используется для взаимодействия приложения с транспортным уровнем внутри одного компьютера.
    Интерфейс сокетов был впервые предложен в Berkeley UNIX 4.2 BSD. Это файл специального вида, при записи данных в которой они передаются по сети.
    Сокеты оказались удобным интерфейсом, поэтому различные варианты сокетов реализованы в разных операционных системах (в том числе в Windows и Linux) и языках программирования.
    Операции сокетов:
    socket - cоздание новыго сокета
    bind - установка связи сокета с IP-адресом и портом
    listen - объявление о желании принимать соединения
    accept - прием запроса на установку соединения
    сonnect - установка соединения
    send - отправка данные по сети
    receive - получение данные из сети
    close - закрытие соединения
    Рассматривается пример использования сокетов на Python.
    Программист взаимодействует с транспортным уровнем через интерфейс сокетов, поэтому протоколы TCP и UDP скрыты от программиста. Следовательно, при изменении протоколов транспортного уровня программу менять не придется.
    Сокеты в Python - docs.python.org/3/library/soc...
    Лекция "Основы организации компьютерных сетей" - • Основы организации ком...
    Лекция "Транспортный уровень" - • Транспортный уровень |...
    Лекция "Протокол TCP" - • Протокол TCP | Курс "К...
    Лекция "Протокол UDP" - • Протокол UDP | Курс "...
    Практические занятия по курсу "Компьютерные сети" - goo.gl/YP3l83
    Мой канал с краткими и понятными объяснениями сложных тем в ИТ и компьютерных науках:
    goo.gl/kW93MA
  • Наука та технологія

КОМЕНТАРІ • 195

  • @miketuev3241
    @miketuev3241 2 роки тому +10

    Удивительно короткое и при этом супер понятное объяснение. У вас талант огромные штуки объяснять!!!!

  • @davidghukasyan1038
    @davidghukasyan1038 7 років тому +117

    Андрей, вы мне так помогли! У меня через час экзамен, почти все ваши лекции смотрел, стал намного уверенным в своих знаниях. Спасибо вам большое, объясняете лучше чем все мои преподаватели вместе взятые!

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

      +David Ghukasyan, спасибо за хороший отзыв! Удалось ли сдать экзамен?
      Какой университет?

    • @davidghukasyan1038
      @davidghukasyan1038 7 років тому +40

      да, Андрей, сдал на отлично! Ереванский Государственный Университет, факультет Информатики и Прикладной Математики. Спасибо еще раз, жду новых ваших лекций!

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

      I know Im pretty randomly asking but does anyone know of a good place to stream newly released tv shows online ?

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

      @Dustin Jamal I use FlixZone. You can find it by googling =)

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

      @Benjamin Ahmed Yea, I have been using flixzone for months myself :D

  • @PitonyJory
    @PitonyJory 4 роки тому +17

    Смотрю весь курс, не устаю поражаться качеству донесения информации!

  • @user-dx7rq2qb9y
    @user-dx7rq2qb9y 4 роки тому +24

    Огромное Вам спасибо, Андрей. К сожалению, на ютубе очень мало людей, которые могут столь информативно дать большой объем знаний! Продолжайте в том же духе!

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

      Обязательно буду продолжать!

  • @SuperHero777
    @SuperHero777 3 роки тому +5

    Отличный материал !!! Лаконично, понятно и хорошо подаётся. Легко запоминается.
    А то некоторые как усложнят, как закрутят, что даже имея знания, уже можно запутаться.
    Благодарим Вас за проделанню работу !!!

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

      Спасибо за приятный отзыв! Рад, что мой подход нравится!

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

    Восхитительный курс! Вы очень просто и доходчиво объясняете сложные вещи, за что вам огромное человеческое спасибо. Прохожу курс обучения на образовательном портале, как раз сейчас нам читают компьютерные сети. Чтобы понимать, о чём вообще речь, параллельно смотрю ваш курс. По сравнению с путанными объяснениями нашего преподавателя - это просто сказочный восторг! А примеры на Python очень порадовали - учусь на программиста Python)

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

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

  • @sergey_rozhkov
    @sergey_rozhkov 11 місяців тому +2

    Спасибо вам за полезный материал! Невероятно круто у вас получается объяснять все темы по компьютерным сетям! Браво!

  • @dswonderchild
    @dswonderchild 4 роки тому +18

    ОГРОМНОЕ СПАСИБО, особенно был поражен тем, что Вы привели пример кода на Python.

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

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

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

      Да, пример на питоне хорошо зашёл

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

    Применительно ко всему циклу и даже каналу - просто отличная работа, объясняющая технологии простым языком. При этом упрощения делаются небольшими. Т.е. именно теория даётся отлично. Завидую, что автор может объяснить все простым языком!

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

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

  • @user-yk2ff5pj7x
    @user-yk2ff5pj7x 5 років тому +11

    Огромное Вам спасибо! И ещё большЕе спасибо за то что ПОДРОБНО отвечаете на вопросы в комментариях!!!

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

      Пожалуйста! Всегда рад вопросам.

  • @alextokarev7562
    @alextokarev7562 8 років тому +10

    Andrey Sozykin , большое Вам спасибо за данный курс.
    Самый низкий поклон.

    • @AndreySozykin
      @AndreySozykin  8 років тому +3

      +Alex Tokarev, пожалуйста! Рад, что оказалось полезно!

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

      @@AndreySozykin А можно вам задонатить куда нибудь? Очень круто объясняете

  • @trek3456
    @trek3456 8 років тому +38

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

    • @AndreySozykin
      @AndreySozykin  8 років тому +3

      +Дмитрий Ларионов, рад, что нравится!

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

    Превосходное объяснение, как и всегда! Огромное спасибо!

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

    Большое вам спасибо! Много раз читала man-страницы и прочие источники, но благодаря вашему видео всё стало понятно на лету.

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

    Андрей, огромное спасибо за Вашу работу! Изучал по Вашим урокам компьютерные сети, прошёл собеседование!!!

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

    Офигенное обьяснение!

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

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

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

    Спасибо большое за видео!Очень четко и понятно объяснили! Прохожу курс по сетевым технологиям и мне очень помогло Ваше видео в понимании материала! Однозначно лайк и подписка!

  • @AlekseySergeev278
    @AlekseySergeev278 Місяць тому +1

    Спасибо, Андрей

  • @braiN941
    @braiN941 4 роки тому +5

    Спасибо большое, хорошее объяснение, а то везде непонятно

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

    Спасибо.
    Qilgan bu yaxshi amallariyezni ajrini bersin.

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

    Великолепный курс, огромное спасибо!

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

    Отличные видео, очень информативные, и чем дальше, тем интереснее, смотрю с самого начала на одном дыхании, многое уже знал, но многое было и новой информацией, но все равно очень полезно и интересно!
    Благодарю за проделанную работу, за видео и презентации! Успехов! :)

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

      Спасибо за приятный отзыв! Рад, что курс полезен и формат нравится!

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

    Классная лекция. Спасибо!

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

    Спасибо вам, Андрей!

  • @user-yi7gw9vu6n
    @user-yi7gw9vu6n 7 років тому +3

    Умница! Честь и похвала! Все точки расставил над и))

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

      Рад, что оказалось полезным!

  • @celasitpc5831
    @celasitpc5831 6 років тому +2

    Спс за урок. Все подробно разобрал и объяснил

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

    Спасибо за видео!

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

    Большое спасибо!

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

    коротко и ясно. спасибо!

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

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

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

    Очень интересно! На С++ синтаксис плюс минус аналогичный. Отличные лекции!

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

      Синтаксис похож, потому что операции с сокетами придумали не зависимо от языка программирования.

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

    Молодчина!Спасибо.

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

    Спасибо, очень доходчиво

  • @user-fghjiydsvjk975
    @user-fghjiydsvjk975 8 років тому +7

    спасибо за очередную хорошо разжеванную тему
    с твоего позволения хочу лишь внести пару корректив для полноты картины
    1) connect - устанавливает соединение лишь в случае работы с TCP, но не UDP.
    В случае использования UDP сокетов (SOCK_DGRAM) этот вызов лишь сохраняет информацию удаленного адреса сервера и порта для отправки сообщений и их получений. То есть этот вызов можно и не использовать, но в этом случае придется использовать другие API для работы с сокетами, которые подразумевают ЯВНОЕ указание информации о сервере (sendto / recvfrom)
    2) важное API для работы с TCP протоколом, которое подразумевает отправку fin флага или другими словами "одностороннее закрытие соединения" - shutdown
    уж не знаю, есть ли оно в python, но среди стандартных posix API оно должно пристуствовать и иногда полезно

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

      +conquistador, спасибо, все написано правильно.
      Я об этом не говорю, чтобы не перегружать техническими деталями.

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

      Спасибо за инфо!

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

    Спасибо Вам!

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

    класс, отличный материал

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

    класс, спасибо

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

    клас, спосибо! профессиональное

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

    Спасибо

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

    Очень познавательно

  • @atillaattila8900
    @atillaattila8900 8 років тому +1

    spasibo za klasnoe video

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

    Несколько раз пересмотрел лекцию, вроде в целом понял о чем речь, но все же до конца не усваивается информация. Возможно потому, что я не имею представления о программировании. Мне показалось, что лекция скорее нацелена на тех, кто понимает программирование, но не силен в устройстве сети.
    Но благодаря этой лекции появилось желание и в программировании разобраться.
    В интернете много ресурсов, обучающих компьютерным сетям, но, как и многие на этом канале, я считаю, что Ваш курс лучший (по крайней мере из тех, с которыми я сталкивался) по доступности изложения для уровня новичок и по лаконичности.
    Был бы рад, еслибы Вы выложили подобный курс по программированию с нуля. Думаю, достаточно многим людям это было бы интересно и многие были бы Вам благодарны.

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

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

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

    Чётко. Лайк, подписка

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

    шикарно!

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

    Спасибо!

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

    Топ видос. Я как раз на пайтоне сокеты изучаю

  • @TheSuperStepan
    @TheSuperStepan 8 років тому +14

    Андрей, я не совсем понял что такое сокет.
    Олифер трактует определение сокет как ip-adress + port
    как очередь из данных, идущих на определенный адрес и конкретный порт

    • @AndreySozykin
      @AndreySozykin  8 років тому +69

      +TheSuperStepan можно понимать и так, как трактует Олифер. Для Интернет сокета это правильно.
      Вообще сокет - это такая штука, которая объединяет два процесса. Один процесс туда что-то записывает, другой читает.
      Первоначально сокеты в Unix использовались для взаимодействия процессов на одном компьютере. Процессы, даже если они на одном компьютере, изолированы друг от друга, поэтому для передачи данных им нужны сторонние механизмы (inter-process communication). Сокеты - один из механизмов обмена данными между процессами с помощью файлового дескриптора: один процесс пишет в файл специального вида, а другой читает. Это сокеты протокола Unix.
      С появлением сетей TCP/IP оказалось что абстракция сокетов хорошо подходит не только для взаимодействия процессов на одном компьютере, но и по сети. Процессы по прежнему пишут данные в файл и читают из него, но данные передаются по сети. Собственно передача данных выполняется операционной системой и скрыта от программиста. Такие сокеты называют Интернет сокетами. Определяются они не именем файла, как Unix сокеты, а парами IP-адрес и порт для клиента и сервера.

    • @liochamakedonsky7538
      @liochamakedonsky7538 7 років тому +19

      Впервые встретил объяснение которое я понял. Спасибо вам огромное. По сетям у вас очень классный курс! Насколько я понял, многие пытаются преподавать материал, сами не понимая сути...и это вносит такую путаницу....

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

      +Liocha Makedonsky, спасибо за хороший отзыв! Рад, что оказалось понятно :)

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

    спасибо!!!

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

    А копия сокета получаетя имеет другой порт? И непонятно зачем нужен accept, если сервер и так уже слушает, непонятно тогда что он случает до accept

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

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

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

    Еще бы видео про WebSocket'ы.

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

      Сейчас готовлю материалы. Будет на этой или следующей неделе.

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

    Assalomu alaykum, rahmat sizga

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

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

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

    Скажите, а можно забиндить клиентский сокет на левый ip?

  • @RuslanRavilevi4
    @RuslanRavilevi4 7 років тому +4

    добрый день. Спасибо за курс, у меня вопрос по видео - из примера в видео, отправляем данные серверу "hello world", почему клиент их получает обратно? вроде клиент должен получить потверждение? если сервер обратно отправляет пакет - получаются накладные расходы?

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

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

    • @user-gd6il5zb8l
      @user-gd6il5zb8l 4 роки тому +3

      Ожидал увидеть тут подобный коммент. Сам не сразу понял, зачем одни и те же данные возвращать клиенту.
      В надежде на то, что мой коммент будет полезным для развития курса, отмечу, что в подобных примерах, кмк, было бы лучше добавить какую-то не совсем связанную с темой урока операцию с полученными данными, чтобы наглядно показать сразу две вещи:
      1. Есть смысл в том, чтобы получать от клиента данные и возвращать ему что-то взамен. (Например, отправил клиент "2+2", а сервер ему - "4").
      2. Сокеты, интерфейс транспортного уровня, ну прям _реально_ используются в _программе_ . Мол, вот то место, где эти ваши пока очень теоретические в этом курсе компьютерные сети вполне практически пересекаются с программированием. Вот здесь вы вызываете сокеты, вот тут - вычисляете "2 + 2", а вот здесь - шлете ответ обратно клиенту. Сами вычисления на Питоне не относятся к теме, но это было бы очень наглядно.
      И в целом я заметил, что мне как человеку, который лучше всего понимает материал на практических примерах, иногда сложно понять какой-то нюанс сетей, потому что он представлен только в теории и весьма упрощенной. Хотя с упрощением я согласен, ибо понимаю, что оно тут реально необходимо, прошу обратить внимание на это и, если вы найдете места, которые можно объяснить на практических примерах без ненужного новичкам усложнения, уделить этим местам больше "практического" времени. Вот как в этом видео про сокеты. Прям вообще чистенько на мое сознанеие положилось из-за практического примера, очень ясно теперь все вижу.

  • @XanderEVGs
    @XanderEVGs 9 місяців тому

    4:45 копия сокета на сервере имеет другой порт, не 80ый(так утверждает один эксперт в одном споре)?
    Если я правильно помню, сервер отличает клиентов по соурс порт, но как и кем он назначается, рандомно? Ос клиента?
    Если отличие идет по соурс порт, то смысла подменять порт на сервере нет вроде бы

  • @alexanderpolyakov7696
    @alexanderpolyakov7696 8 років тому +1

    Андрей, здравствуйте! Извините, что не по теме.
    Вы не могли бы сказать о чем идет речь в этом предложении?
    "The TCP stack also maintains the variance in the measured RTT, the RTTVAR"
    И вообще зачем нужен RTTVAR?

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

      +Alexander Polyakov, это больше по теме протокола TCP - ua-cam.com/video/hd6QNXK5rPk/v-deo.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

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

      Воу, вот это объяснение!

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

    то есть сокеты нужны,чтобы программист мог настраивать сервер?

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

    спс

  • @user-nm2lu8po7l
    @user-nm2lu8po7l 4 місяці тому +1

    С П А С И Б О !

  • @user-ik5yv4op4o
    @user-ik5yv4op4o 2 роки тому +1

    Андрей здравствуйте. Вы сказали что интерфейсы используются для взаимодействия между разными уровнями стека протоколов. Я правильно понял, что интерфейс сокетов используется для взаимодействия уровня приложений с транспортным уровнем?

  • @rostl642
    @rostl642 7 років тому +6

    Здравствуйте Андрей. Спасибо за лекцию, как всегда всё прекрасно. У меня небольшой вопрос, 1 сокет - сугубо для одного порта? Т.е., если допустим на компьютере условно происходит передача и прием данных по двум портам - 45 и 4500 допустим, то на компе будет открыто 2 сокета для каждого из портов?

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

      +rostl, да, именно так.

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

      Я правильно понимаю, что два сокета на один айпишник, но разные порты будут занимать два места в очереди на стороне сервера?

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

      @@user-gd6il5zb8l нет, очередь из соединений создаеться для кажного сокета отдельно, соответственно будет 2 очереди

    • @manOfPlanetEarth
      @manOfPlanetEarth Місяць тому

      @@ruslanvolovik2745
      а как, собственно, работает эта очередь соединений?

  • @catshannon5064
    @catshannon5064 8 років тому +1

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

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

      +Vlad Stetsenko, да именно так. Сокет (в Unix) - это тип специальный файла. Интерфейс сокетов придуман был именно для программ на C, там такие же вызовы: bind, listen и т.п.

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

    Андрей, а не планируете более подробные видосы про poll, select, epoll и Linux aio? Спасибо!

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

      Пока не планировал. Сейчас делаю новый курс по SQL. Потом, возможно, на эту тему подумаю.

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

    Андрей, вы делаете отличные лекции! Спасибо большое. Можно уточнить, я так пониманию, сокеты стали нужны, чтобы множество пользователей могло работать с одним сервером. Ведь связка IP-адрес и порт (192.168.1.1:80), если пользователей, скажем, 100 и они постоянно обмениваются информацией с сервером, качают что-нибудь с него, очень "сыроватое" решение. В любом случае, нужно было решение вроде сокетов "порт для порта". Интернет-сокет - это специальный "адрес" конкретного соеднинения + буфер для обмена данными? я правильно понял его предназначение?

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

      Да, именно так. Сокеты сделали как раз для того, чтобы скрыть взаимодействие по сети. Изначально сокет - это файл специального типа в UNIX. Данные пишутся в этот файл, а читать их можно на другом компьютере. Такая абстракция сетевого ввода-вывода.
      Связка IP и порт необходима, иначе непонятно, куда клиенту подключаться.

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

      @@AndreySozykin а каким образом происходит привязка к этому "файлу"? у этого файл есть какой то ID? я просто сейчас усиленно изучаю эту тему, а подробного разбора как устроены сокеты не могу найти. То что вы описали - самое подробное что я нашел в сети.

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

      В википедии есть описание типа файла для сокетов - en.m.wikipedia.org/wiki/Unix_file_types
      Еще ссылка с более подробной информацией - unix.stackexchange.com/questions/116563/is-there-a-file-for-each-socket

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

      @@Valaukar1111 это ты так "усиленно занимаешся", видно...

  • @user-ct7xm2lz8r
    @user-ct7xm2lz8r 6 років тому +2

    Андрей, а вот такой вопрос. Допустим я пишу чат и хочу напрямую устанавливать соединение через интернет между двумя собеседниками, один из них сервер, другой клиент. Как клиенту узнать IP-адрес сервера?

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

      Нужен какой-то дополнительный сервис, который будет сводить вместе клиентов и серверы. Подобным образом устроен BitTorrent. Есть torrent трекер, который сам не хранит даннные, но знает, у кого что лежит.

  • @botsynth
    @botsynth 11 місяців тому +1

    Зачем серверному сокету указывать адрес? ОС имеет сетевой интерфейс, интерфейс обладает адресом, на этот адрес маршрутизатор передаст пакет, ОС отправит пакет на определенный порт. В чем я не прав?

  • @emilsentcov
    @emilsentcov 7 років тому +2

    Здравствуйте! Андрей. Огромное спасибо, очень познавательный материал.
    Но дойдя до этой темы, я впал ступор, не могу понять что такое Сокеты.
    Возможно, что-то усложняю для себя в этом вопросе, поэтому не могу понять.
    Есть возможность объяснить как то иначе, что такое Сокет?

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

      +Эмиль Сенцов, сокеты - это набор функций (или методов) для разработки программ для сетей. Если вы хотите что-то передать по сети из программы, то используете сокеты.

  • @user-rz7wq5ui5l
    @user-rz7wq5ui5l 6 років тому +3

    Разве закрытие соединения TCP не инициируется методом socket.shutdown(socket.SHUT_RDWR), а socket.close() просто освобождает ресурсы?
    docs.python.org/3/library/socket.html?highlight=socket#socket.socket.close

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

      Не совсем так. socket.close() также закрывает соединение, если сокетом пользовался только один процесс. Если же через сокет работали несколько процессов, то соединение не разорвется и другие процессы смогут передавать данные.
      socket.shutdown(socket.SHUT_RDWR) закрывает соединение, не зависимо от того, сколько процессов используют сокет. Подробности можно посмотреть по ссыдке - stackoverflow.com/questions/409783/socket-shutdown-vs-socket-close
      Но эта тема выходит за рамки вводного курса по сетям.

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

    Андрей, а что же тогда порт, это тоже какой-то пронумерованный файл или структура в памяти? Ну или ссылку на вашу лекцию про порты.

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

      Порт - это идентификатор процесса на транспортном уровне. Про порты в лекции о траеспортном уровне - ua-cam.com/video/g7vq-JVId58/v-deo.html

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

      @@AndreySozykin Merci

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

    Я хотел бы спросить, мне бы как то прочесть заголовок ip в сокетах, я могу это реализовать в сырых сокетах но это ооочень долго и сложно, нужно будет реализовать весь механизм Tcp в ручну просто чтобы прочесть ip заголовок. Так вопрос, как?

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

    При сотворении копии сокета, нуно было сказать, что ему присваивается другой номер порта, выбираемой за диапазоном 1024

    • @manOfPlanetEarth
      @manOfPlanetEarth Місяць тому

      а как в таком случае ведет себя очередь для соединений? она одна на сервер? или при клонировании сокета клонируется и очередь - но тогда в чем ее смысл, если на каждый клон сокета будет очередь для соединений и при том всегда с одним соединением?

  • @emilsentcov
    @emilsentcov 7 років тому +1

    Благодарствую за разъяснения. Тогда скажите как называется IP адрес в паре с портом приложения?Путаница возникла, Википедия трактует Сокет как IP адрес в паре с портом приложения.

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

      Упрощенно можно понимать и так. Сокет - это файл специального вида, который связан с IP-адресов и портом на текущем компьютере, а также с IP-адресом и портом на удаленном компьютере (вместе с протоколом транспортного уровня TCP или UDP мы получаем полное описание соединения). Все, что пишется в этот файл, появляется на другом компьютере.
      Строго говоря, сокеты бывают не только TCP/IP, но и других типов, например, Unix. Там передача данных выполняется без IP-адресов и портов. Но сейчас почти везде используются сокеты TCP/IP, так что в Википедии описан самый популярный вариант сокетов.

    • @emilsentcov
      @emilsentcov 7 років тому

      Теперь понятно. Очень вразумительно.

  • @traydr-1609
    @traydr-1609 Рік тому

    Тоесть первый сокет у нас принимает соединение и устанавливает его, а копию мы делаем, чтобы первый сокет всегда принимал новых клиентов?
    После чего новый клиент на 1ом сокете снова сделает копию и уйдет в нее, а первый сокет снова освободиться для принятия нового клиента?

  • @sergeyufimtsev711
    @sergeyufimtsev711 8 років тому

    Получается, что сокеты взаимодействуют и с сетевым уровнем? Ведь иначе бы они не привязывались к IP-адресу

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

      +Sergey Ufimtsev, не совсем так. Сокеты используются для передачи данных от одного приложения другому.
      Но чтобы знать, где находится другое приложение, нужны обязательно IP-адрес и порт. В этом смысле изоляция не полная. Однако большая часть задач сетевого уровня (маршрутизация и т.п.) от сокетов скрыты.

    • @manOfPlanetEarth
      @manOfPlanetEarth Місяць тому

      @@AndreySozykin
      6:19
      "conn, addr=s.accept()" что означает эта строка? что за "addr", если дальше эта переменная не используется?

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

    Я иногдп думаю, что те, кто поставил видосам Андрея дизлайк, просто неуверенной рукой/в темноте/спросонья (нужное подчеркнуть) двумя сантиметрами в выборе кнопки ошиблись.

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

      Не обязательно всем должно нравиться. Кроме того, без дизлайков youtub будет подозревать накрутки.

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

      @@AndreySozykin я просто по Вашим лекциям на собеседование готовилась. И в полном восторге от того, как Вы так все четко и структурированно обьясняете.

  • @D0sart
    @D0sart 7 років тому +2

    Очередь соединений == размер окна ?

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

      +D0sart, нет. Размер окна свой для каждого соединения. Очередь нужно для разных соединений. Если запросов на соединение приходит очень много и сервер не успевает их обрабатывать, они устанавливаются в очередь.

  • @sashasashovic91
    @sashasashovic91 2 місяці тому

    Лучше использовать read вместо receive.

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

    Ах тыж сукин сын я в деле, с меня тоже лайк

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

    Когда создается копия сокета, то какой ip ей присваивается?

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

      Тот же самый, что и у основного сокета.

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

      Andrey Sozykin а как сеть воспринимает 2 одинаковых ip?

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

      Это же на транспортном уровне. Там соединения различаются по 5 параметерам:
      - IP отправителя
      - Порт отправителя
      - IP получателя
      - Порт получателя
      - Протокол транспортного уровня (TCP или UDP).

    • @manOfPlanetEarth
      @manOfPlanetEarth Місяць тому

      @@AndreySozykin
      ​⁠​⁠​⁠
      4:24
      критикую:)
      вот в этом моменте вообще ничего не понятно. у другого сокета есть ip адресс и порт? какие? как происходит соединение клиента с другим сокетом? клиент же связан с исходной парой айпи адрес-порт сервера, а тут клиента коннектят на какой-то другой сокет. и кто это делает? ОС сервера? очередь соединений - как конкретно она работает? особенно в свете копирования сокета. очередь копируется или как? ни слова про это.
      столько вопросов и нет ответов:)

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

    Разве системный программист не может работать с IP пакетами?

  • @anoninfo97
    @anoninfo97 6 років тому +1

    Запили видосик по стриму, как сделать стрим по типу fm.

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

      Не понял вопрос :-(

    • @anoninfo97
      @anoninfo97 6 років тому +2

      Andrey Sozykin как работает стрим в интернет радио к примеру. Какие процессы происходят при этом.

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

      Понятно. Интересная тема, спасибо! Подумаю, как это можно сделать.

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

    Plus

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

    сокеты у прогеров и технарей совсем разные вещи)

  • @sergeisokolov8205
    @sergeisokolov8205 День тому

    Bind читается как "байнд"!

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

    Как бы ещё и Питон выучить?!?

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

      Есть отличный сайт - pythontutor.ru

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

      у Сергея Лебедева неплохой курс про особенности питона
      курс для программистов, т.е. его слушатели уже программируют на других языках

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

      на курсы на степике есть) для начинающих самое то

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

    вообще не понял что такое сокет

  • @user-Milfs_hub
    @user-Milfs_hub 5 років тому +1

    Я не знал, что Гнойный видео по программированию снимает и да лучше убери свое лицо с видео отвлекает

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

      Не понял, при чем тут Гнойный :-)

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

      @@AndreySozykin Я не могу понять следующее: метод accept принимает соединение, но он это делает при любых обстоятельствах. Можно ли как-то глянуть кто просится подключится и если узел нам не угоден(например айпи не нравтся), то отклонить соединение?

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

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

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

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

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

      @@AndreySozykin понял, админские цели значит. Это тоже очень хорошо.

  • @bulba1995
    @bulba1995 3 місяці тому

    Какраз читаю книгу Stivens_UNIX_Razrabotka_setevykh_prilozheniy там такой подход используется тоже , я вам признателен за видео )

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

    Спасибо!

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

    Спасибо

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

    Спасибо