• Что означает socket. Что такое сокет

    18.09.2023

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

    Одним из значимых шагов по его модернизации является замена процессора на более производительный. Однако здесь возникает несколько проблем, одной из которых является разъем на материнской плате, в который процессор вставляется — сокет. Их существует огромное количество, поэтому если вы просто пойдете в магазин и выберете более мощное «ядро» для своего компьютера, то 99%, что он не сможет работать с установленной материнской платой, поскольку при его выборе нужно обязательно учитывать, для какого именно сокета он сделан. А современные процессоры стоят от пары до десятков тысяч рублей — жалко выкидывать такие деньги на ветер!

    Какой лучший сокет процессора?

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

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

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

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

    Сокеты процессоров Intel

    • Устаревшие — LGA 775, 1156, 1366, 2011
    • Современные — LGA 1151, 1150, 1155

    Число в названии сокета обозначает количество контактов на поверхности.

    Сокеты процессоров AMD

    • Устаревшие — AM2, AM2+
    • Современные — AM3, AM3+, FM1, FM2

    Визуально отличить современные сокеты процессоров Intel от AMD очень просто:

    1. Во-первых, на разъеме материнской платы для AMD расположено множество отверстий для контактов, которые в виде штырьков имеются на процессоре. На сокетах же Intel наоборот, сами контакты-ножки, а в процессоре отверстия.
    2. Также отличие в креплении процессора — в сокете Intel по периметру имеется металлическая рамка с защелкой-фиксатором. Процессоры AMD крепятся путем смещения верхней пластины сокета относительно нижней.
    3. И наконец, кулер (вентилятор) у Интел крепится в упомянутых выше отвестиях, а у АМД на специальную пластиковую рамку вокруг сокета. Все эти отличия можно видеть на скриншоте ниже.

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

    В описании материнской платы и процессора сокет может оозначаться по-разному, например: «Socket», «S» или просто номер модели.

    Рассмотрим для примера системную плату с сокетом Intel и процессор от AMD.

    На данном скриншоте отображена плата с сокетом 1155, о чем явно говорит название:
    «ASRock H61M-DGS (RTL) LGA1155 PCI-E+Dsub DVI+GbLAN SATA MicroATX 2DDR-III»

    А здесь изображена страница с процессором AMD с сокетом FM 2, что видно также из названия:
    «ASUS F2A85-V PRO (RTL) SocketFM2 3xPCI-E+Dsub+DVI+HDMI+DP+GbLAN SATA RAID ATX 4DDR-III»

    Также модель сокета часто упоминается в описаниях кулеров для того, чтобы пояснить, на какой именно сокет он может быть установлен. Например, в примере ниже из заголовка мы сразу понимаем, с какими сокетами будет работать данный кулер (Intel 775, 1155 и AMD AM2, AM3):
    Cooler Master Буран T2 (3пин, 775 / 1155 / AM2 / AM3, 30 дБ, 2200об / мин, тепл.тр.)

    При обновлении старого компьютера

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

    Открываем крышку компьютера, и ищем на системной плате надпись, указывающую на ее модель. Как правило она имеется, например на следующем изображении мы видим модель GA-870A-UD3 от производителя Gygabite.

    Идем на сайте фирмы или просто вбиваем данную модель в поисковик и смотрим подробное описание платы, а именно с какими конкретно моделями процессоров и с каким сокетом она стыкуется.

    В нашем примере это процессоры AMD Phenom II или AMD Athlon II с сокетом AM3 — идем в магазин и берем один из них.

    Сборка компьютера с нуля

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

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

    Замена системы охлаждения

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

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

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

    Например, производя замену центрального процессора, существует другое обозначение (CPU), очень важно точно понимать, какой именно тип сокета он имеет и подойдёт ли он к разъёму на материнской плате персонального компьютера.

    Что это такое

    Основной и очень важный параметр материнки – сокет центрального процессора (socket CPU). Это размещённое на основной плате компьютера гнездо, предназначенное для установки в него CPU. И прежде чем соединить эти компоненты в одну слаженную систему, нужно определить, совместимы ли они между собой или нет. Это как подключать вилку в розетку , если вилка американского стандарта, а розетка европейского, то они, естественно, не подойдут друг к другу, и прибор не заработает.

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

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

    • Сокеты для центральных процессоров от производителя AMD.
    • Сокеты, предназначенные для процессоров, произведённых компанией Intel.

    Характеристики сокетов Intel и AMD

    • Физическими размерами socket.
    • Способом соединения контактов сокета и процессора.
    • Типом крепления охлаждающей системы процессорного кулера.
    • Количеством гнёзд или контактных площадок.

    Способ соединения – здесь нет ничего сложного. На сокете имеются либо гнезда (как у AMD), в которые вставляются контакты процессора. Либо штырьки (как у Intel), на которые ложатся плоские контактные площадки CPU. Третьего варианта здесь нет.

    Количество гнёзд или штырьков – здесь вариантов множество, их число может составлять от 400 и до 2000, а может быть, и ещё больше. Определить этот параметр можно взглянув на маркировку сокета, в названии которого закодирована данная информация. К примеру, Intel Core i7-2600 под процессорный socket Intel LGA 1155 имеет как раз 1155 контактных площадок на своей поверхности. А аббревиатура LGA говорит о том, что процессор имеет плоские контакты, а сокет, напротив, состоит из 1155 штырьков.

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

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

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

    Как определить сокет у процессора

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

    По производителю и модели

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

    Вот примерная последовательность действий:

    Через Speccy

    1. Скачайте и проинсталлируйте приложение Aida64 либо Speccy на свой компьютер. Далее, рассмотрим второй вариант. Откройте программу Speccy. И найдите в ней раздел с параметрами CPU, он должен называться «Центральный процессор».
    2. Далее, в выбранном разделе отыщите строку с наименованием «Конструктив» и ознакомьтесь с его содержимым. Именно здесь и будет указан тип сокета процессора.
    3. Примерно такие же действия, нужно будет выполнить при использовании программы Aida64. Раздел «Компьютер», подраздел DMI, далее в подразделе «Процессор», ищем строку со словом Socket.

    В документации

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

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

    Для этого и приходится разбирать старое «железо» и выяснять информацию о тех или иных характеристиках и параметрах. Однако нужно учитывать и свои способности к подобным процедурам. Тут, как в народе говорят : «не можешь – не берись». И если присутствует неуверенность в успехе такого мероприятия, то лучше тогда обратится в специальные сервисные центры или к отдельным опытным мастерам.

    Опубликовано: 03.02.2017

    Приветствую, друзья.

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

    Что такое сокеты ПК

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

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

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

    Выбор сокета

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

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

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

    Виды сокетов

    Сокеты бывают разные черные, белые, красные . Их очень много. У каждого производителя они свои. И вообще, если лезть в такие дебри, потребуется не статья, а целая энциклопедия. Нам достаточно знать, что тренд среди новых сокетов определяют 2 крупнейшие кампании производителя: AMD и Intel. Самые свежие линейки сокетов, на текущий момент, и подробное описание их преимуществ в сравнении с более старшими версиями можно найти на сайтах производителей. Также, по мере появления новых технологий на рынке, на просторах интернета появляется куча сравнительных обзоров. Почитайте, если интересно.

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

    Сокеты Intel

    Процессоры Intel чаще всего оказываются более производительными и менее прожорливыми в плане энергопотребления + меншьше нагреваются. Однако ради достижения таких результатов им приходится часто менять сокеты. Сокеты Intel не совместимы между собой. Intel выпускает на рынок новый сокет практически каждый год. Это сильно осложняет апгрейд компьютера. Ради установки нового процессора от Intel приходится покупать новую материнскую плату с новым сокетом. Материнские платы под самый свежий сокет intel, как правило, очень дорогие.


    К современным сокетам Intel можно отнести:

    LGA 2011-3 - пришедшему на замену LGA 2011 . Поддерживает Кэш L3 в 20 Мб, до 8 ядер процессора и частоту оперативной памяти до 17000 МГц. Также стоит отметить наличие припоя под крышкой процессора, благодаря чему происходит намного более качественная теплоотдача на радиатор.

    LGA 1150 и более свежий 1151 - процессоры на данном сокете хоть и проигрывают сокету 2011-3, но все равно имеют хорошие показатели производительности. Процессоры на данном сокете подойдут даже для серьезных игровых ПК.

    LGA 2066 - должен прийти на замену сокету 2011-3 в 3 квартале 2017 года.

    Сокеты AMD


    Сокеты кампании AMD отличаются совместимостью среди смежных процессоров. Менее частый переход на новый сокет позволяет дольше обновлять процессор ПК без необходимости замены материнской платы. Благодаря этому обновление системы обходится намного дешевле. Однако и здесь есть обратная сторона. Новые технологии не так быстро доходят до компьютеров на процессорах от AMD. Например поддержка памяти типа DDR4 ожидается только в начале 2017 года. Процессоры AMD имеют 2 линейки сокетов:

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

    AM 3 / AM 3+ - эти сокеты пришли на смену сокетам AM2/AM2+. Они предназначены для работы с мало и высоко производительными процессорами без графического ядра.

    AM 4 - новинка 2016 года. Данный сокет должен заменить собой сокеты AM3/AM3+ . На данный момент процессоров с таким сокетом в продаже нет, но вот-вот ожидается их появление.

    Таблица совместимости процессоров AMD

    Материнская плата
    AM2
    Материнская плата
    AM2+
    Материнская плата
    AM3
    Материнская плата
    AM3+
    Материнская плата
    FM1
    Материнская плата
    FM2
    Материнская плата
    FM2+
    Процессор AM2
    Процессор AM2+
    Процессор AM3
    Процессор AM3+
    Процессор FM1
    Процессор FM2
    Процессор FM2+

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

    Выбор сокета очень важен для правильной компановки компьютера. Для высокопроизводительных ПК стоит выбирать сокеты под современные процессоры Intel. Для среднего сегмента подойдут как Intel так и AMD сокеты. Все зависит от цены. Фавориты в этом сегменте могут со временем менятся. При сборке бюджетных ПК стоит уделить внимание компании AMD. Их процессоры и материнские платы дешевле и обновление их обойдется недорого.

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

    Что это

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

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


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

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

    Сервер

    Сейчас создайте два файла - один для сервера, а другой для клиента.

    В Python для работы с сокетами используется модуль socket:

    Import socket

    Прежде всего нам необходимо создать сокет:

    Sock = socket.socket()

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

    Теперь нам нужно определится с хостом и портом для нашего сервера. Насчет хоста - мы оставим строку пустой, чтобы наш сервер был доступен для всех интерфейсов. А порт возьмем любой от нуля до 65535. Следует отметить, что в большинстве операционных систем прослушивание портов с номерами 0 - 1023 требует особых привилегий. Я выбрал порт 9090. Теперь свяжем наш сокет с данными хостом и портом с помощью метода bind, которому передается кортеж, первый элемент (или нулевой, если считать от нуля) которого - хост, а второй - порт:

    Sock.bind(("", 9090))

    Теперь у нас все готово, чтобы принимать соединения. С помощью метода listen мы запустим для данного сокета режим прослушивания. Метод принимает один аргумент - максимальное количество подключений в очереди. Напряжем нашу бурную фантазию и вспомним про зал с окошками. Так вот этот параметр определяет размер очереди. Если он установлен в единицу, а кто-то, явно лишний, пытается еще подстроится сзади, то его пошлют:) Установим его в единицу:

    Sock.listen(1)

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

    Conn, addr = sock.accept()

    Вот и все. Теперь мы установили с клиентом связь и можем с ним «общаться». Т.к. мы не можем точно знать, что и в каких объемах клиент нам пошлет, то мы будем получать данные от него небольшими порциями. Чтобы получить данные нужно воспользоваться методом recv, который в качестве аргумента принимает количество байт для чтения. Мы будем читать порциями по 1024 байт (или 1 кб):

    While True: data = conn.recv(1024) if not data: break conn.send(data.upper())

    Как мы и говорили для общения с клиентом мы используем сокет, который получили в результате выполнения метода accept. Мы в бесконечном цикле принимаем 1024 байт данных с помощью метода recv. Если данных больше нет, то этот метод ничего не возвращает. Таким образом мы можем получать от клиента любое количество данных.

    Теперь можно и закрыть соединение:

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

    #!/usr/bin/env python # -*- coding: utf-8 -*- import socket sock = socket.socket() sock.bind(("", 9090)) sock.listen(1) conn, addr = sock.accept() print "connected:", addr while True: data = conn.recv(1024) if not data: break conn.send(data.upper()) conn.close()

    Клиент

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

    #!/usr/bin/env python # -*- coding: utf-8 -*- import socket sock = socket.socket() sock.connect(("localhost", 9090)) sock.send("hello, world!") data = sock.recv(1024) sock.close() print data

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

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

    Вы постоянно слышите разговоры о каких-то "сокетах" и, наверно, вам интересно, что же это такое. В общем, изначально сокеты - это способ общения программ друг с другом, используя файловые дескрипторы Unix.

    Ок -- возможно, вы слышали от какого-нибуть Unix-хакера фразу типа "господи, всё, что есть в Unix - файлы!" Этот человек, возможно, имел в виду, что программы в Unix при абсолютно любом вводе-выводе читают или пишут в файловый дескриптор. Дескриптор файла - это простое целое число, связанное операционной системой с открытым файлов. Но (и в этом заключается ловушка) файлом может быть и сетевое подключение, и FIFO, и пайпы, и терминал, и реальный файл на диске, и просто что угодно другое. Всё в UNIX - это файл! Итак, просто поверьте, что собираясь общаться с другой программой через интернет, вам придется делать это через дескриптор файла.

    "Эй, умник, а откуда мне взять этот дескриптор файла для работы в сети?" Отвечу.
    Вы совершаете системный вызов socket(). Он возвращает дескриптор сокета, и вы общаетесь через него с помощью системных вызовов send() и recv() (man send, man recv).

    "Но, эй!" могли бы вы воскликнуть. "Если это дескриптор файла, почему я не могу использовать простые функции read() и write(), чтобы общаться через него?". Ответ прост: "Вы можете!". Немного развернутый ответ: "Вы можете, но send() и recv() предлагают гораздо больший контроль над передачей ваших данных."

    Что дальше? Как насчет этого: бывают разные виды сокетов. Есть DARPA инернет-адреса (Сокеты интернет), CCITT X.25 адреса (X.25 сокеты, которые вам не нужны), и, вероятно, многие другие в зависимости от особенностей вашей ОС. Этот документ описывает только первые, Интернет-Сокеты.

    Два типа интернет-сокетов

    Что? Есть два типа интернет сокетов? Да. Ну ладно, нет, я вру. Есть больше, но я не хочу вас пугать. Есть ещё raw-сокеты, очень мощная штука, вам стоит взглянуть на них.

    Ну ладно. Какие два типа? Один из них - "потоковый сокет", второй - "сокет дейтаграмм", в дальнейшем они будут называться "SOCK_STREAM" и "SOCK_DGRAM" соответственно. Дейтаграммные сокеты иногда называют "сокетами без соединения" (хотя они могут и connect()`иться, если вам этого действительно захочется. См. connect() ниже.)

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

    Что использует потоковые сокеты? Ну, вы наверно слышали о программе Telnet, да? Телнет использует потоковый сокет. Все символы, которые вы печатаете, должны прибыть на другой конец в том же порядке, верно? Кроме того, браузеры используют протокол HTTP, который в свою очередь использует потоковые сокеты для получения страниц. Если вы зайдёте телнетом на любой сайт, на порт 80 и наберёте что-то вроде "GET / HTTP/1.0" и нажмете ввод два раза, на вас свалится куча HTML ;)

    Как потоковые сокеты достигают высокого уровня качества передачи данных? Они используют протокол под названием "The Transmission Control Protocol", иначе - "TCP". TCP гарантирует, что ваши данные передаются последовательно и без ошибок. Возможно, ранее вы слышали о TCP как о половине от "TCP/IP", где IP - это "Internet Protocol". IP имеет дело в первую очередь с маршрутизацей в Интернете и сам по себе не отвечает за целостность данных.

    Круто. А что насчёт дейтаграммных сокетов? Почему они называются без-соединительными? В чем тут дело? Почему они ненадежны?
    Ну, вот некоторые факты: если вы посылаете дейтаграмму, она может дойти. А может и не дойти. Но если уж приходит, то данные внутри пакета будут без ошибок.

    Дейтаграммные сокеты также используют IP для роутинга, но не используют TCP; они используют "User Datagram Protocol", или "UDP".

    Почему UDP не устанавливает соединения? Потому что вам не нужно держать открытое соединение с потоковыми сокетами. Вы просто строите пакет, формируете IP-заголовок с информацией о получателе, и посылаете пакет наружу. Устанавливать соединение нет необходимости. UDP как правило используется либо там, где стек TCP недоступен, либо там, где один-другой пропущеный пакет не приводит к концу света. Примеры приложений: TFTP (trivial file transfer protocol, младшый брат FTP), dhcpcd (DHCP клиент), сетевые игры, потоковое аудио, видео конференции и т.д.

    "Подождите минутку! TFTP и DHCPcd используются для передачи бинарных данных с одного хоста на другой! Данные не могут быть потеряны, если вы хотите нормально с ними работать! Что это за темная магия?"

    Нуу, мой человеческий друг, TFTP и подобные программы обычно строят свой собственный протокол поверх UDP. Например, TFTP протокол гласит, что для каждого принятого пакета получатель должен отправить обратно пакет, говорящий "я получил его!" ("ACK"-пакет). Если отправитель исходного пакета не получает ответ, скажем, в течение 5 секунд, он отправит пакет повторно, пока, наконец, не получит ACK. Подобные процедуры очень важны для реализации надёжных приложений, использующих SOCK_DGRAM.

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

    Зачем вам может понадобиться использовать ненадежный базовый протокол? По двум причинам: скорость и скорость. Этот способ гораздо быстрее, выстрелил-и-забыл, чем постоянное слежение за тем, всё ли благополучно прибыло получателю. Если вы отправляете сообщение в чате, TCP великолепен, но если вы шлёте 40 позиционных обновлений персонажа в секунду, может быть, не так и важно, если один или два из них потеряются, и UDP тут будет неплохим выбором.

    Теория сетей и низкие уровни

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

    Эй, детишки, настало время поговорить об инкапсуляции данных! Это очень-очень важная вещь. Это настолько важно, что вам стоит выучить это наизусть.
    В основном суть такова: пакет родился; пакет завёрнут ("инкапсулирован") в заголовок первым протоколом (скажем, протоколом TFTP), затем всё это (включая хидер TFTP) инкапсулируется вновь следующим протоколом (скажем, UDP), затем снова - следующим (например, IP), и наконец финальным, физическим протоколом (скажем, Ethernet).

    Когда другой компьютер получает пакет, оборудование (сетевая карта) исключает Ethernet-заголовок (разворачивает пакет), ядро ОС исключает заголовки IP и UDP, программа TFTP исключает заголовок TFTP, и наконец мы получаем голые данные.

    Теперь наконец можно поговорить о печально известной модели OSI - многоуровневой модели сети. Эта модель описывает систему сетевой функциональности, которая имеет много преимуществ по сравнению с другими моделями. Например, вы можете написать в своей программе как сокеты, которые шлют данные не заботясь о том, как физически передаются данные (серийный порт, эзернет, модем и т.д.), так как программы на более низких уровнях (ОС, драйверы) делают за вас всю работу, и представляют её прозрачно для программиста.

    Собственно, вот все уровни полномасштабной модели:


    • Прикладной

    • Представительский

    • Сеансовый

    • Транспортный

    • Сетевой

    • Канальный

    • Аппаратный (физический)

    Физический уровень - это оборудование; ком-порт, сетевая карта, модем и т.д. Прикладной слой - дальше всех отстоит от физического. Это то место, где пользователь взаимодействует с сетью.

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


    • Уровень приложений (Telnet, FTP и т.д.)

    • Транспортный протокол хост-хост (TCP, UDP)

    • Интернет-уровень (IP и маршрутизация)

    • Уровень доступа к сети (Ethernet, Wi-Fi или что угодно)

    Теперь вы можете четко видеть, как эти слои соответствуют инкапсуляции исходных данных.

    Видите, как много работы заключается в создании одного простого пакета? Офигеть! И все эти заголовки пакетов вы должны самостоятельно набирать в блокноте! Шучу. Всё, что вам нужно сделать в случае потоковых сокетов - это послать (send()) данные наружу. Ядро ОС построит TCP и IP хидеры, а оборудование возьмет на себя уровень доступа к сети. Ах, я люблю современные технологии.

    На этом наш краткий экскурс в теорию сетей завершен. Ах да, я забыл вам сказать: всё, что я хотел вам сказать о маршрутизации: ничего! Да-да, я ничего не буду говорить об этом. О таблице маршрутизации за вас позаботятся ОС и IP-протокол. Если вам действительно интересно, почитайте документацию в интернете, её море.

    Похожие статьи