Какие еще API-интерфейсы сокетов доступны? В чем разница между каждым из этих Socket API?

Все называли это программированием сокетов или сетевым программированием на C, и мы начали использовать его, включив sys/socket.h & netinet/in.h. Мы думали, что это 100% правда. Но когда я увидел эту книгу, у меня в голове возник вопрос

Межсетевое взаимодействие с TCP / IP, том III: Программирование клиент-сервер и приложения, который был доступен в 4 различных версиях.

  1. Сокеты Linux / POSIX
  2. Разъемы AT&T TLI (интерфейс транспортного уровня)
  3. Розетки BSD (Беркли)
  4. Оконные розетки

Я смущен. Это ясно показывает, что для Socket API не существует стандарта.

также я удивлен, увидев sys/socket.h & netinet/in.h, которые являются частью библиотеки POSIX C в http://en.wikipedia.org/wiki/Berkeley_sockets. Я запутался больше.

  1. Почему для этого нет стандарта?
  2. Какие еще API-интерфейсы сокетов доступны?
  3. В чем разница между каждым из этих Socket API?
  4. Когда люди говорят «Сетевое программирование на C» / «Программирование сокетов», что именно они имеют в виду?
  5. Ссылки для получения дополнительной информации?

person claws    schedule 15.01.2010    source источник


Ответы (4)


Почему для этого нет стандарта?

Стандартом де-факто являются сокеты BSD, на которых основаны API-интерфейсы сокетов Linux, POSIX и Windows.

Какие еще API-интерфейсы сокетов доступны?

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

К середине 90-х эта битва в значительной степени закончилась. Сокеты BSD победили.

В чем разница между каждым из этих Socket API?

Между вариантами BSD, Linux и POSIX есть незначительные различия, ничего более серьезного, чем любые другие различия между операционными системами Unixy.

Причина, по которой у них есть версия книги для Linux / POSIX, вероятно, больше связана с маркетингом, чем с чем-то техническим. Он отвечает на вопрос, который издатель, вероятно, много видел: «Зачем мне книга BSD, я использую Linux, а не BSD!» Или, что чаще в наши дни: «Что такое BSD?»

С высоты 10 000 футов Winsock сильно отличается от сокетов BSD, но, поскольку это довольно строгий надмножество сокетов BSD, вы все равно можете перенести свои знания. Большинство различий - это чистые расширения сокетов BSD, в основном связанные с различиями в архитектуре ядра Windows и способах построения программ Windows. Например, первым действительно большим расширением были асинхронные сокеты, которые значительно упрощают использование сокетов в однопоточной программе Windows GUI, чем использование чистых сокетов BSD. Более поздние расширения поддерживают специальные функции, доступные в ядрах, производных от NT, которые не имеют простого аналога в системах Unixy, такие как объекты событий и перекрывающийся ввод-вывод.

Как бы то ни было, в некоторых системах Unixy есть расширения для простых старых сокетов BSD, например, aio_*() в Solaris и других системах.

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

Когда люди говорят «Сетевое программирование на C» / «Программирование сокетов», что именно они имеют в виду?

Сокеты BSD или какой-то другой вариант.

Ссылки для получения дополнительной информации?

Часто задаваемые вопросы программиста Winsock. В частности, вы можете просмотреть его раздел ресурсы и статью часто задаваемых вопросов Совместимость с сокетами BSD.

(Отказ от ответственности: я сопровождаю FAQ.)

person Warren Young    schedule 16.01.2010

API-интерфейсы сокетов Linux, BSD и Windows (по крайней мере; я не знаю о AT&T TLI API) очень похожи друг на друга. Например, Windows API изначально был основан на BSD API.

person ChrisW    schedule 15.01.2010
comment
Да, 4 разных имени на самом деле не означают 4 совершенно разных реализации. По крайней мере, с упомянутыми вами тремя, это почти то же самое, но с некоторыми особенностями платформы. - person Kylotan; 15.01.2010

Почему для этого нет стандарта?

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

В чем разница между каждым из этих Socket API?

Linux / POSIX / BSD все похожи. Windows немного отличается, но поскольку она по-прежнему должна поддерживать базовые протоколы, функциональность остается почти такой же. Честно говоря, я не уверен, кто использует AT&T TLI больше, если они когда-либо использовали.

Какие еще API-интерфейсы сокетов доступны?

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

Когда люди говорят «Сетевое программирование на C» / «Программирование сокетов», что именно они имеют в виду?

Ничего точного. Технически язык C ничего не знает о сетевом программировании. Однако многие поставщики (например, Unix, Linux, Windows и т. Д.) Предоставляют библиотеки C для выполнения сетевых операций, отсюда и множество API-интерфейсов, которые вы указали выше.

person Duck    schedule 15.01.2010

Интерфейс TLI фактически согласован с OSI. Одно время Novell также поставляла его. Это устарело. API-интерфейсы Linux и Winsock основаны на API-интерфейсе BSD, в большей степени в случае Linux, в меньшей степени в случае Winsock. В обоих случаях также есть небольшие различия в реализации.

person user207421    schedule 16.11.2010