Что такое сокет в сети?

Содержание

Что такое сокет? Основные сокеты процессоров AMD и Intel

Что такое сокет в сети?

Термин «сокет» представляет собой пассивную часть параметров процессора, но в то же время является важным показателем при сборке системы. В этом материале будет разобрано понятие сокет, а также будут приведены примеры популярных из них для процессоров от Intel и AMD.

Что представляет собой сокет?

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

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

Есть также и технологические изменения: множество разных контроллеров, поддержание интегрированной графики в CPU, показатели производительности и многое другое.

Сокет для процессора на материнской плате

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

Посмотреть, поддерживается тот или иной процессор для материнки или нет, можно на официальном сайте самой материнской платы. В таком случае можно быть точно уверенным, что выбранные устройства окажутся совместимыми. Ниже будут рассмотрены популярные модели сокетов от двух известных производителей – АМД и Интел.

Сокеты Intel

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

Здесь есть положительная и отрицательная сторона ситуации. С одной стороны, это хорошо, так как увеличивается производительность CPU и практически под каждую модель создаётся свой специфический сокет. Но, с другой стороны, сделать апгрейд в таком случае очень сложно, так как новые процессоры имеют свои разъёмы, поэтому если их и менять, то делать это нужно вместе с материнской платой, что будет, не очень удобно, а главное, дорого.

Какие же модели можно рассматривать и чем они характеризуются?

  1. Socket LGA 2011. Модель прекрасно работает с различными процессорами на архитектуре Ivy Bridge от Intel (Core i3, i5, i7). Изначально сокет использовался в качестве маркетингового хода, чтобы встрясти положение на рынке, и повысить стоимость на процессоры для него. Это было в первое время, затем стоимость таких процессоров упала. Однако на материнках с этим сокетом это не отразилось и стоимость их так, и осталась высокой в отличие от вариантов, которые будут рассмотрены ниже.
  2. Socket LGA 1356, 1155, 1156. Эти модели применимы только для одной архитектуры Sandy Bridge 2, хоть и являются несовместимыми между собой. Наиболее эффективным оказалась модель 1155, которую использовали для большей части систем. Сокет 1366 был создан для мощнейших станций, который также отлично себя показал в работе.

    Socket LGA 1155

  3. Socket LGA 775. В некоторых системах они всё ещё используются, однако, стоит отдать должное, они уже сильно устарели. Системы, в которых можно их увидеть: Celeron, Core 2 Quad и Duo.

Сокеты AMD

Этот производитель в своих решениях был более консервативен. Между многими сокетами есть совместимость, благодаря устроенным сериям «+». К примеру, сокет АМ3 будет совместимым с АМ3+, в результате для пользователей открываются большие возможности по апгрейду, что является хорошим преимуществом. Однако такое топтание непозволительно для IT-направления.

Некоторые модели сокетов от AMD.

  1. Socket АМ3 и АМ3+. По специфике эти две модификации являются совместимыми друг с другом. Такие сокеты отлично подойдут для некоторых моделей CPU: Phenom, FX и Athlon 2. Сокеты для мощных процессоров сначала не оправдали ожиданий, однако, после спада цен устроили пользователей ввиду низкой стоимости и хорошей производительности. Эти две модификации сейчас хорошо используются как среди дешёвых систем, так и дорогих, что доказывает хороший уровень практичности этих моделей.

    Socket АМ3+

  2. Socket АМ2 и АМ2+. Эти модели сейчас являются несколько устаревшими, однако, используются еще во многих системах. Разрабатывались они для CPU: Sempron, Phenom и Athlon.
  3. Socket FM1 и FM2. Изначально модификации создавались для процессоров из серии AMD Fusion, однако, впоследствии используются для тех, кто не хочет покупать дискретную карту, но желает иметь интегрированную графику.

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

.

Источник: https://www.pc-school.ru/what-is-socket/

Программирование сокетов. Сеть и сокет. Что такое сокет? | OTUS

Что такое сокет в сети?

Web Sockets (веб-сокеты) — это технология, позволяющая создавать интерактивное соединение для обмена сообщения в онлайн-режиме. Соединение создаётся в сети между сервером и клиентом (браузером). В отличие от протокола HTTP веб-сокеты позволяют работать с 2-направленным потоком данных, поэтому можно с уверенностью сказать, что технология является уникальной. Для наилучшего понимания давайте разберём особенности работы сокетов и посмотрим, а чем они конкретно отличаются от HTTP.

Как функционирует HTTP?

Про протокол HTTP (HTTPS) знает каждый, так как мы постоянно встречаемся с ним в своих браузерах. Как правило, браузер постоянно запрашивает у сервера, есть ли для него сообщения, а потом получает их. Здесь возможны различные типы запросов (POST, GET, PUT), причём каждый из них имеет своё назначение. Особенности работы хорошо видны на картинке:

А что сокеты?

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

Когда используют веб-сокет?

Сокет применяется в том случае, если вы, к примеру, разрабатываете:— чат- и IoT-приложения;— программы, работающие в режиме реального времени;— многопользовательские игры.

Когда нежелательно применять сокет?

Особых противопоказаний в отношении сокета и сокетов нет. Один из недостатков — несовместимость с некоторыми видами браузеров, но этот минус уже практически изжил себя, так как сегодня около 95 % браузеров поддерживают сокеты.

Тем не менее иногда сокет вам всё же не нужен, и зависит это от того, с каким типом приложения вы будете работать. Например, вы создаёте простую CMS и вам совершенно нет нужды обеспечивать функциональность в режиме реального времени.

Не стоит применять сокет и в REST API, так как будет вполне достаточно стандартных HTTP-запросов (GET, DELETE, POST и PUT). В целом специалисты не рекомендует использовать сокет, если это не риалтайм-приложение, но вопрос о недостатках сокетов требует более детального рассмотрения в рамках отдельной статьи.

От теории к практике

Давайте напишем сокет самостоятельно. Для создания клиента будем использовать язык программирования JavaScript, а для создания сервера — Node.js.

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

Cоздание клиента

DOCTYPE html> Пример чата с сокетом let ws = new WebSocket(«ws://localhost:8080»); // выведем новые сообщения в нашу консоль ws.onmessage = ({data}) => { console.log(data); } // отправим сообщение ws.onopen = () => ws.send('Text');

Cоздание сервера

const WebSocket = require('ws'); // создаём новый сокет-серверconst wss = new WebSocket.Server({ port: 8080}); // отправляем клиентам, если функция `clientValidator` возвращает true. This — это wss.wss.broadcast = function(data, clientValidator = () => true) { this.clients.forEach(client => { if (clientValidator(client)) { client.send(data); } });} wss.on(«connection», ws => { // событие вызовется, если клиент отправит сообщение ws.on('message', message => { // отправим сообщение всем за исключением автора wss.broadcast(message, client => client !== ws); });});

И что в итоге?

Что же, давайте продемонстрируем работу созданных нами сокетов:

Есть ли эквивалент сокету в HTTP?

В принципе, есть. Смотрите, HTTP должен проверять канал в сети на наличие новых сообщений. Следовательно, мы можем задействовать dirty check, то есть «грязную проверку». При этом подходе клиент с заданной периодичностью (например, каждые 100 мс) будет проверять, есть ли новые сообщения на сервере. Не вникая в XMLHttpRequest, можно применять библиотеку Axios. Это достаточно понятный и декларативный инструмент. Итак, наш клиент:

Читайте также  Как создать сетевую папку в локальной сети?

DOCTYPE html> Обмениваемся сообщениями в режиме онлайн let localMessages = []; // первоначальное обновление локального сообщения axios.get('http://localhost:8080/messages') .then(({data}) => localMessages = data.messages); // обновление списка сообщений const updateMessages = () => { axios.get('http://localhost:8080/messages') .then(({data}) => { const difference = data.messages.splice(localMessages.length); difference.forEach(message => { console.log(message); localMessages.push(message); }); }) .catch(console.log); } // отправка сообщения const sendMessage = text => { axios.post('http://localhost:8080/messages', {text}); } // каждые 100 мс проверяем, присутствуют ли новые сообщения setInterval(updateMessages, 100);

А теперь посмотрим, что делается на сервере:

const express = require('express');const bodyParser = require('body-parser');const app = express(); app.use(bodyParser.json(), function(req, res, next) { res.header(«Access-Control-Allow-Origin», «*»); res.header(«Access-Control-Allow-Headers», «Origin, X-Requested-With, Content-Type, Accept»); next();}); // в реальном приложении сообщения сохранялись бы в БД либо в JSON-файлах// но не в переменной, которая, как известно, обнуляется в случае остановки сервераlet messages = []; // создается новое сообщениеapp.post('/messages', (req, res) => { messages.push(req.body.text); res.json({ success: true });}); // получаем все сообщенияapp.get('/messages', (req, res) => { res.json({ messages });}); // «слушаем» все запросы на localhost: 8080.app.listen(8080, () => console.log('Слушаю порт 8080'));

Делаем выводы

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

А что вы думаете про сокет? Пишите в коментариях!

Источник: https://otus.ru/nest/post/678/

Разница между веб-сокетами и Socket.IO

Что такое сокет в сети?

Доброго времени суток, друзья!

Веб-сокеты и Socket.IO, вероятно, являются двумя наиболее распространенными средствами коммуникации в режиме реального времени (далее — живое общение). Но чем они отличаются?

При построении приложения для живого общения наступает момент, когда необходимо выбрать средство для обмена данными между клиентом и сервером. Веб-сокеты и Socket.IO являются самыми популярными средствами живого общения в современном вебе. Какое из них выбрать? В чем разница между этими технологиями? Давайте выясним.

Веб-сокеты

Говоря о веб-сокетах, мы имеем ввиду протокол веб-коммуникации, представляющий полнодуплексный канал коммуникации поверх простого TCP-соединения.

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

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

Веб-сокеты появились в 2010 году в Google Chrome 4, первый RFC (6455) опубликован в 2011.

Веб-сокеты используются в следующих случаях:

  • Чаты
  • Многопользовательские игры
  • Совместное редактирование
  • Социальные (новостные) ленты
  • Приложения, работающие на основе местоположения

и т.д.

Socket.IO

Socket.IO — библиотека JavaScript, основанная (написанная поверх) на веб-сокетах… и других технологиях. Она использует веб-сокеты, когда они доступны, или такие технологии, как Flash Socket, AJAX Long Polling, AJAX Multipart Stream, когда веб-сокеты недоступны. Легкой аналогией может служить сравнение Fetch API и Axios. Главными преимуществами Socket.IO является следующее:

  • В отличие от веб-сокетов, Socket.IO позволяет отправлять сообщения всем подключенным клиентам. Например, вы пишете чат и хотите уведомлять всех пользователей о подключении нового пользователя. Вы легко можете это реализовать с помощью одной операции. При использовании веб-сокетов, для реализации подобной задачи вам потребуется список подключенных клиентов и отправка сообщений по одному.
  • В веб-сокетах сложно использовать проксирование и балансировщики нагрузки. Socket.IO поддерживает эти технологии из коробки.
  • Как отмечалось ранее, Socket.IO поддерживает постепенную (изящную) деградацию.
  • Socket.IO поддерживает автоматическое переподключение при разрыве соединения.
  • С Socket.IO легче работать.

Может показаться, что Socket.IO — лучшее средство для живого общения. Однако существует несколько ситуаций, когда лучше использовать веб-сокеты. Во-первых, веб-сокеты поддерживаются всеми современными браузерами. Поэтому вы редко нуждаетесь в поддержке других технологий, предоставляемой Socket.IO.

Если говорить о сетевом трафике, то веб-сокеты отправляют всего два запроса:

  • GET для получения HTML страницы
  • UPGRADE для соединения с веб-сокетами

Это позволяет установить соединение с сервером. А что насчет Socket.IO?

  • GET для получения HTML страницы
  • Клиентская библиотека Socket.IO (207кб)
  • Три long polling (длинные опросы) Ajax-запроса
  • UPGRADE для соединения с веб-сокетами

В мире JS 207кб — это много.

Какое нерациональное использование сетевого трафика!

В npm существует пакет «websocket-vs-socket.io», который позволяет сравнить сетевой трафик этих технологий:

Простой сервер на веб-сокетах

В нашей программе на Node.js мы создадим сервер, работающий на порту 3001. При каждом подключении клиента мы будем присваивать ему уникальный ID. При отправке сообщения клиентом мы будем уведомлять его об успехе: []: const WebSocket = require('ws')const UUID = require('uuid')const wss = new WebSocket.Server({ port: 3001 }) wss.on('connection', ws => { ws.id = UUID() ws.on('message', message => { ws.send(`[${ws.id}]: ${message}`) })}) Отлично! Но что если мы хотим рассылать сообщение каждому подключенному клиенту? Веб-сокеты не поддерживают рассылку по умолчанию.

Это можно реализовать следующим образом: const WebSocket = require(«ws»)const UUID = require(«uuid»)const wss = new WebSocket.Server({ port: 3001 }) function broadcast(clientId, message) { wss.clients.forEach(client => { if(client.readyState === WebSocket.OPEN) { client.send(`[${clientId}]: ${message}`) } })} wss.on('conection', ws => { ws.id = UUID() ws.on('message', message => broadcast(ws.id, message))})
Легко и просто! Как видите, WebSocket.Server хранит записи о каждом подключенном клиенте, поэтому мы можем сделать итерацию и отправить сообщение каждому.

Вы можете протестировать код на компьютере (MacOS) или в браузере (Chrome).

Простой сервер на Socket.IO

Это было не сложно. Может ли Socket.IO сделать это еще проще? Как нам написать такой же сервер на Socket.IO? const io = require('socket.io')const server = io.listen(3002) server.on('connection', socket => { socket.on('message', message => { socket.emit(`[${socket.id}]: ${message}`) socket.broadcast.emit(`[${socket.

id}]: ${message}`) })}) Код получился почти наполовину короче! Как видите, метод «broadcast» не отправляет уведомление отправителю, поэтому мы вынуждены делать это вручную. Существует проблема: код нельзя протестировать на обычном клиенте веб-сокетов. Это связано с тем, что, как отмечалось ранее, Socket.IO использует не чистые веб-сокеты, а множество технологий для поддержки всех возможных клиентов.

Так как же нам проверить его работоспособность? // head // body Необходимо использовать специальный клиент. В приведенном примере мы загружаем его из CDN. Этот клиент позволяет нам провести быстрые (грязные) тесты в браузере. Как видите, наши примеры не сильно отличаются. Однако, если говорить о совместимости, следует помнить о том, что Socket.IO работает с собственной библиотекой и его нельзя использовать в целях, не связанных с веб-разработкой.

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

На заметку

Горизонтальное масштабирование. Допустим, ваш чат обрел популярность и вам необходимо добавить еще один сервер и балансировщик нагрузки для обработки запросов. Ну, если вы открываете соединение на «server 1», затем балансировщик переключает вас на «server 2», вы получите ошибку: «Error during WebSocket handshake: Unexpected response code: 400». Socket.

IO решает эту проблему с помощью cookie (или с помощью маршрутизации соединений на основе исходных адресов), а у веб-сокетов не существует подобного механизма. Производительность. Как отмечалось ранее, Socket.IO предоставляет несколько абстрактных уровней над транспортным уровнем веб-сокетов. Также здесь используется упаковывание данных в формат JSON, так что возможность отправлять на сервер (и наоборот) бинарные данные отсутствует.

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

Так что же выбрать?

Решать вам. Socket.IO облегчает жизнь, вам не нужно заботиться о проблемах, связанных с балансировкой нагрузки, разрывом соединений или рассылкой сообщений… но необходим ли вам такой функционал? Клиентская библиотека Socket.IO весит больше, чем пакеты React, Redux и React-Redux вместе взятые. Уверены ли вы, что не можете ограничиться веб-сокетами? Еще одной важной вещью, о которой следует помнить, является то, что при использовании Socket.

IO на стороне сервера, большая часть кода будет написана на абстракциях, предоставляемых этой библиотекой. Если у вас возникнет необходимость переписать Node.js-микросервисы на Go, Elixir, Java или другой язык программирования, вам придется переписывать почти всю логику. Например, для рассылки сообщений в Socket.IO используется метод «broadcast» (который в веб-сокетах реализуется вручную), поэтому при рефакторинге придется понять, как этот метод работает.

В этом случае следует предпочесть веб-сокеты, поскольку их легче адаптировать.

Благодарю за внимание.

Хабы:

  • Разработка веб-сайтов
  • JavaScript
  • Программирование
  • Node.JS

Источник: https://habr.com/ru/post/498996/

Что такое сокет (socket)?

Что такое сокет в сети?
Категория ~ Что такое? – Игорь (Администратор)

В рамках данного обзора, я расскажу вам что такое сокет (socket), а так же некоторые особенности.

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

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

Но, обо всем по порядку.

Сокет (socket) это

Сокет (socket) — это разъем для подключения процессора к материнской плате. Если приводить жизненную аналогию, то это как штекер провода и розетка в стене.

Примечание: Стоит знать, что данный термин так же используется в программировании. Там, в общем смысле, сокет означает — программный интерфейс для обмена данными.

Читайте также  Как сделать подсеть в локальной сети?

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

Чем сокеты отличаются?

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

Тем не менее, бывают обратно совместимые расширения сокетов, но их крайне мало. Например, материнская плата с поддержкой сокета AM3+ может позволять подключать процессоры с сокетом AM3 (нужно уточнять в спецификации материнской платы).

Физические различия сокетов:

1. Сам размер. Ширина и высота.

2. Количество контактов. В нынешнее время измеряется в сотнях и доходит до 1000+. Например, у сокета AM4 1331 контактов (процессоры AMD), а у LGA 2011 или Socket R (серверные процессоры Intel) 2011 контактов.

3. Вид контактов. Либо с контактными ножками, либо без них.

4. Расстояние для крепления кулера. Казалось бы, какая может быть разница в охлаждающем устройстве. Однако, она существует из-за разности ширины и длины. Поэтому если вам нужен более мощный кулер для процессора, а не стандартный, то необходимо учитывать сокет.

Примечание: В принципе, можно прикрепить кулер от другого сокета (основная же их задача — отвод тепла), но лучше этого не делать.

Технологические различия сокетов:

1. Мощность и производительность. Например, старые сокеты, даже если к ним с помощью «напильника» подключить текущие процессоры, попросту не смогут потянуть такие мощности.

2. Поддерживаемая оперативная память. Речь о типе DDR, поддерживаемых частотах и объеме.

3. Различные дополнительные возможности. Например, поддерживает ли сокет возможность встроенной видеокарты в процессоре.

Основные линейки сокетов

Если говорить о привычной бытовой технике, включая компьютеры, то основные линейки сокетов это Intel и AMD. Тем не менее, стоит знать, что специализированные устройства, например, мощные сервера могут быть с другими линейками процессоров (Oracle, IBM, NVidia и так далее). Просто так исторически сложилось, что в текущее время линеек 2.

Каждая из линеек подразумевает деление на определенные сокеты. Каждый отдельный сокет обычно поддерживает небольшой набор процессоров. К примеру, AM3+ поддерживает процессоры AMD FX-4100, FX-4300, FX-6100, FX-6300 и так далее до FX-9000. Сокет Socket H2 (LGA 1155) от Intel поддерживает процессоры с архитектурой Intel Sandy Bridge и Intel Ivy Bridge (например, Core i3/i5/i7 определенных моделей).

Если говорить о качествах, то линейка от AMD считается более бюджетной и ее процессоры лучше для разгона, однако у линейки Intel процессоры потребляют меньше ватт, более стабильны и производительны. Хотя, как говорится, сколько людей, столько и мнений.

Так же советую ознакомиться с обзором Как узнать сокет материнской платы и процессора.

Подписывайтесь в социальных сетях и делайте репосты!

☕ Хотите выразить благодарность автору?

Источник: https://ida-freewares.ru/chto-takoe-soket-socket.html

Сокеты

Что такое сокет в сети?
96

C# и .NET — Сетевое программирование — Сокеты

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

Первоначально сокеты были разработаны для UNIX в Калифорнийском университете в Беркли. В UNIX обеспечивающий связь метод ввода-вывода следует алгоритму open/read/write/close. Прежде чем ресурс использовать, его нужно открыть, задав соответствующие разрешения и другие параметры. Как только ресурс открыт, из него можно считывать или в него записывать данные. После использования ресурса пользователь должен вызывать метод Close(), чтобы подать сигнал операционной системе о завершении его работы с этим ресурсом.

Когда в операционную систему UNIX были добавлены средства межпроцессного взаимодействия (Inter-Process Communication, IPC) и сетевого обмена, был заимствован привычный шаблон ввода-вывода. Все ресурсы, открытые для связи, в UNIX и Windows идентифицируются дескрипторами.

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

Следовательно, для сокетов жизнь дескриптора можно разделить на три фазы: открыть (создать) сокет, получить из сокета или отправить сокету и в конце концов закрыть сокет.

Интерфейс IPC для взаимодействия между разными процессами построен поверх методов ввода-вывода. Они облегчают для сокетов отправку и получение данных. Каждый целевой объект задается адресом сокета, следовательно, этот адрес можно указать в клиенте, чтобы установить соединение с целью.

Типы сокетов

Существуют два основных типа сокетов — потоковые сокеты и дейтаграммные.

Потоковые сокеты (stream socket)

Потоковый сокет — это сокет с установленным соединением, состоящий из потока байтов, который может быть двунаправленным, т, е. через эту конечную точку приложение может и передавать, и получать данные.

Потоковый сокет гарантирует исправление ошибок, обрабатывает доставку и сохраняет последовательность данных. На него можно положиться в доставке упорядоченных, сдублированных данных.

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

Потоковые сокеты достигают этого уровня качества за счет использования протокола Transmission Control Protocol (TCP). TCP обеспечивает поступление данных на другую сторону в нужной последовательности и без ошибок.

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

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

Потоки базируются на явных соединениях: сокет А запрашивает соединение с сокетом В, а сокет В либо соглашается с запросом на установление соединения, либо отвергает его.

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

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

Дейтаграммные сокеты (datagram socket)

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

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

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

Кроме двух рассмотренных типов существует также обобщенная форма сокетов, которую называют необрабатываемыми или сырыми.

Сырые сокеты (raw socket)

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

По определению, сырой сокет — это сокет, который принимает пакеты, обходит уровни TCP и UDP в стеке TCP/IP и отправляет их непосредственно приложению.

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

Однако нечасто может потребоваться программа, работающая с сырыми сокетами. Если вы не пишете системное программное обеспечение или программу, аналогичную анализатору пакетов, вникать в такие детали не придется. Сырые сокеты главным образом используются при разработке специализированных низкоуровневых протокольных приложений. Например, такие разнообразные утилиты TCP/IP, как trace route, ping или arp, используют сырые сокеты.

Работа с сырыми сокетами требует солидного знания базовых протоколов TCP/UDP/IP.

Читайте также  Как подключить два маршрутизатора к одной сети?

Порты

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

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

За определенными службами номера портов зарезервированы — это широко известные номера портов, например порт 21, использующийся в FTP. Ваше приложение может пользоваться любым номером порта, который не был зарезервирован и пока не занят. Агентство Internet Assigned Numbers Authority (IANA) ведет перечень широко известных номеров портов.

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

Например, на стороне клиента, приложение должно знать адрес цели и номер порта. Отправляя запрос на соединение, клиент пытается установить соединение с сервером:

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

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

Работа с сокетами в .NET

Поддержку сокетов в .NET обеспечивают классы в пространстве имен System.Net.Sockets — начнем с их краткого описания.

Классы для работы с сокетами

Класс Описание
MulticastOption Класс MulticastOption устанавливает значение IP-адреса для присоединения к IP-группе или для выхода из нее.
NetworkStream Класс NetworkStream реализует базовый класс потока, из которого данные отправляются и в котором они получаются. Это абстракция высокого уровня, представляющая соединение с каналом связи TCP/IP.
TcpClient Класс TcpClient строится на классе Socket, чтобы обеспечить TCP-обслуживание на более высоком уровне. TcpClient предоставляет несколько методов для отправки и получения данных через сеть.
TcpListener Этот класс также построен на низкоуровневом классе Socket. Его основное назначение — серверные приложения. Он ожидает входящие запросы на соединения от клиентов и уведомляет приложение о любых соединениях.
UdpClient UDP — это протокол, не организующий соединение, следовательно, для реализации UDP-обслуживания в .NET требуется другая функциональность.
SocketException Это исключение порождается, когда в сокете возникает ошибка.
Socket Последний класс в пространстве имен System.Net.Sockets — это сам класс Socket. Он обеспечивает базовую функциональность приложения сокета.

Класс Socket

Класс Socket играет важную роль в сетевом программировании, обеспечивая функционирование как клиента, так и сервера. Главным образом, вызовы методов этого класса выполняют необходимые проверки, связанные с безопасностью, в том числе проверяют разрешения системы безопасности, после чего они переправляются к аналогам этих методов в Windows Sockets API.

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

Свойства и методы класса Socket

Свойство или метод Описание
AddressFamily Дает семейство адресов сокета — значение из перечисления Socket.AddressFamily.
Available Возвращает объем доступных для чтения данных.
Blocking Дает или устанавливает значение, показывающее, находится ли сокет в блокирующем режиме.
Connected Возвращает значение, информирующее, соединен ли сокет с удаленным хостом.
LocalEndPoint Дает локальную конечную точку.
ProtocolType Дает тип протокола сокета.
RemoteEndPoint Дает удаленную конечную точку сокета.
SocketType Дает тип сокета.
Accept() Создает новый сокет для обработки входящего запроса на соединение.
Bind() Связывает сокет с локальной конечной точкой для ожидания входящих запросов на соединение.
Close() Заставляет сокет закрыться.
Connect() Устанавливает соединение с удаленным хостом.
GetSocketOption() Возвращает значение SocketOption.
IOControl() Устанавливает для сокета низкоуровневые режимы работы. Этот метод обеспечивает низкоуровневый доступ к лежащему в основе классу Socket.
Listen() Помещает сокет в режим прослушивания (ожидания). Этот метод предназначен только для серверных приложений.
Receive() Получает данные от соединенного сокета.
Poll() Определяет статус сокета.
Select() Проверяет статус одного или нескольких сокетов.
Send() Отправляет данные соединенному сокету.
SetSocketOption() Устанавливает опцию сокета.
Shutdown() Запрещает операции отправки и получения данных на сокете.

Источник: https://professorweb.ru/my/csharp/web/level3/3_1.php

Интерфейс сокетов в транспортном уровне — операции сокетов Беркли

Что такое сокет в сети?

Интерфейс применяется для взаимодействия между разными уровнями. 

Транспортный уровень (ТУ) это первый уровень с которым может взаимодействовать программист. Поэтому интерфейс ТУ, который позволяет нам писать программы для сети, мы обязательно будем рассматривать.

Сокеты Беркли

Интерфейс называется интерфейсом сокетов. Сокеты впервые появились в операционной системе (ОС) Berkeley Unix 4.2 BSD в 1983 году. 

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

Таким образом взаимодействие с сетью скрыто от программиста. Такая абстракция оказалась очень удобной, сокеты стали использоваться не только в UNIX, но и во многих других ОС в том числе в windows и linux, поддержку сокетов добавили во многие языки программирования. 

Сокеты сейчас это де-факто стандарт для взаимодействия программ с транспортным уровнем, стека протоколов TCP/IP. 

Операции сокетов Беркли

МЫ будем рассматривать операции сокетов Беркли. Большая часть современных реализаций сокетов имеют такие же операции или очень похожие на них. 

Операции сокетов Беркли делятся на несколько типов. 

  • Первый тип это создание сокетов: Socket, Bind, Listen. 
  • Второй, установка соединения: Connect и Accept. 
  • Третья, передача данных Send, Receive. 
  • Четвёртое, закрытие соединения Close. 

Модель клиент-сервер

Сокеты Беркли используют модель клиент-сервер. Сервер это программа, которая постоянно работает на некотором компьютере, известен его IP адрес и порт и сервер ждет подключение клиентов. А клиент это приложение, которое активно устанавливает соединение с сервером. 

Работа сокетов

Рассмотрим подробнее, как используются сокеты Беркли. У нас есть два компьютера, клиент и сервер. Вначале необходимо создать сокет на сервере и сделать так, чтобы он мог принимать запрос на соединение. 

На сервере выполняется вызов Soket. Создается объект — сокет, в простейшем случае, это просто файл специального вида. 

Затем вызывается метод Bind, который используется для присоединения сокета к определенному ip адресу и порту. Например, ip адрес из внутренней сети и порт 80, порт веб серверов. 

Вызов Listen говорит о том, что сокет готов принимать соединение по сети, сокет слушает. При вызове listen создаётся очередь для соединений, в вызове необходимо указать размер этой очереди. В примере на картинке ниже, размер очереди 5. Если сервер получит больше, чем 5 запросов на соединение, а предыдущие запросы еще не обработаны, то все новые запросы будут отбрасываться. 

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

Клиент со свой стороны, сначала вызывает метод сокет, для создания сокета, как правило для клиента не имеет значение, какой ip адрес и какой порт используется, номер порта назначается операционной системой. Поэтому метод bind на клиентском сокете обычно не вызывается. 

Сразу после создания сокета, вызывается метод connect, в котором указывается ip адрес и порт. В параметрах метода connect указываются ip адрес сервера и порт с которыми нужно установить соединение. Отправляется запрос на соединение. 

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

Клиент подготавливает порцию данных, вызывает метод send. Данные передаются по сети и сервер может их прочитать с помощью метода receive. 

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

пример на Python. Серверный сокет

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

Посмотри видео о примере сокета на языке питон. (timecode 5:15)

Python. Типы сокетов

Рассмотрим более подробно, какие виды протоколов можно использовать в сокетах. На сетевом уровне можно использовать:

  • socket.AF_INET — IPv4
  • socket.AF_INET6 — IPv6

А на транспортном: 

  • socket.SOCK_STREAM — TCP
  • socket.SOCK_DGRAM — UDP

Есть и другие типы сокетов, но с сетями TCP/IP они используются редко. 

Пример на Python. Клиентский сокет

Рассмотрим использование сокетов на стороне клиентов. Также посмотри видео, которое указано выше. (Timecode 7:03)

Заключение

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

Источник: https://ZvonDoZvon.ru/tehnologii/kompyuternye-seti/soket