Понимание основ сокетов
Я читал о базовом сетевом программировании, но мне трудно найти прямое объяснение того, что именно и сокет, и как оно относится к стеку OSI или TCP/IP.
-
Может кто-нибудь объяснить мне, что такое сокет? Является ли это структурой данных, определяемой программистом или API, или это аппаратное устройство на сетевой карте?
-
Какие слои упомянутых сетевых моделей имеют дело с "сырыми" сокетами? Транспортный слой? Сетевой уровень?
-
В терминах данных, которые они передают между ними, есть сокет на основе текста или двоичный?
-
Существует ли альтернативное сетевое программирование на основе сокетов? Или все сетевые приложения используют какую-либо форму сокета?
Если я смогу получить это много, я должен иметь довольно четкое представление обо всем остальном, что я читаю. Спасибо за любую помощь!
Ответы
Ответ 1
Краткие ответы:
- Socket - это абстракция конечной точки IP-соединения, поэтому, если вы считаете ее структурой API, вы не очень далеки. Пожалуйста, прочитайте http://en.wikipedia.org/wiki/Internet_socket
- Уровень Интернета, то есть IP-протокол. На практике вы обычно используете явно сокеты, которые привязываются к определенным параметрам транспортного уровня (датаграмма/UDP или поток /TCP ).
- Сокеты отправляют данные в сетевом порядке байтов - будь то текстовые или двоичные, зависят от протокола верхнего уровня.
- Теоретически, возможно, да, но на практике весь IP-трафик выполняется с использованием "сокетов"
Ответ 2
Socket - это программный механизм, предоставляемый операционной системой. Как и его название, вы можете думать о нем как о "электрической розетке" или о каком-то электрическом соединителе, хотя сокет не является физическим устройством, а программным механизмом. В реальном мире, когда у вас есть два электрических разъема, вы можете подключить их с помощью провода. Таким же образом в сетевом программировании вы можете создать один сокет на одном компьютере и другой сокет на другом компьютере, а затем соединить эти сокеты. И когда вы записываете данные в один из них, вы получаете их на другом. Есть также несколько различных видов сокетов. Например, если вы программируете серверное программное обеспечение, вы хотите иметь прослушивающий сокет, который никогда не отправляет или не принимает фактические данные, а только прослушивает и принимает входящие соединения и создает новый сокет для каждого нового подключения.
Ответ 3
Сокет в C parlance - это структура данных в пространстве ядра, соответствующая одной конечной точке сеанса UDP или TCP (я использую сеанс очень слабо, говоря о UDP). Обычно это связано с одним номером порта на локальной стороне и редко более чем одним "известным" номером по обе стороны сеанса.
"Сырое гнездо" - конечная точка, более или менее, физического транспорта. Они редко используются в программировании приложений, но иногда используются для различных диагностических событий (traceroute, ping, а возможно и для других), и могут потребовать открытия привилегий.
Сокеты по своей природе являются двоичным октетом-транспортом. Это не редкость рассматривать сокеты (TCP-сокеты, как минимум) как потоки, основанные на тексте.
Я еще не видел модель программирования, которая не включает в себя что-то вроде сокетов, если вы копаете достаточно глубоко, но, безусловно, существуют другие модели создания сетей. Псевдо файловая система "/net/", где открытие "/net/127.0.0.0.1/tcp/80" (или "tcp/www" ) даст вам дескриптор файла, где записи заканчиваются на веб-сервере на локальном хосте является лишь одним.