В чем разница между портом и сокетом? - PullRequest
823 голосов
/ 30 сентября 2008

Этот вопрос был задан одним из разработчиков программного обеспечения в моей организации. Я заинтересован в самом широком определении.

Ответы [ 35 ]

3 голосов
/ 30 сентября 2008

Сокет является конечной точкой связи. Сокет не имеет прямого отношения к семейству протоколов TCP / IP, его можно использовать с любым протоколом, поддерживаемым вашей системой. API сокета C ожидает, что вы сначала получите пустой объект сокета из системы, который затем можно будет привязать к локальному адресу сокета (чтобы напрямую получать входящий трафик для протоколов без установления соединения или принимать входящие запросы на соединение для протоколов, ориентированных на установление соединения) или что вы можете подключиться к удаленному адресу сокета (для любого типа протокола). Вы можете даже сделать и то и другое, если хотите контролировать оба: локальный адрес сокета, к которому привязан сокет, и адрес удаленного сокета, к которому подключен сокет. Для протоколов без установления соединения подключение сокета даже необязательно, но если вы этого не сделаете, вам также придется передавать адрес назначения с каждым пакетом, который вы хотите отправить через сокет, как иначе, как бы сокет знал, куда отправить эти данные? Преимущество заключается в том, что вы можете использовать один сокет для отправки пакетов на разные адреса сокетов. Как только вы настроили свой сокет и, возможно, даже подключили его, считайте его двунаправленным каналом связи. Вы можете использовать его для передачи данных в какой-либо пункт назначения, а другой пункт назначения может использовать его для передачи данных вам. То, что вы пишете в сокет, отправляется, а то, что было получено, доступно для чтения.

С другой стороны, порты - это то, что есть только у определенных протоколов стека протоколов TCP / IP. TCP и UDP пакеты имеют порты. Порт - это просто число. Комбинация порта источника и порта назначения определяет канал связи между двумя хостами. Например. у вас может быть и сервер, и простой HTTP-сервер, и простой FTP-сервер. Если сейчас приходит пакет для адреса этого сервера, как он узнает, является ли это пакет для HTTP или FTP-сервера? Что ж, он будет знать, так как HTTP-сервер будет работать на порту 80, а FTP-сервер - на порту 21, поэтому, если пакет поступает с портом назначения 80, он предназначен для HTTP-сервера, а не для FTP-сервера. Также пакет имеет порт источника, поскольку без такого порта источника сервер может иметь только одно подключение к одному IP-адресу за раз. Порт источника позволяет серверу различать идентичные соединения: все они имеют один и тот же порт назначения, например, порт 80, один и тот же IP-адрес назначения, всегда один и тот же адрес сервера и один и тот же исходный IP-адрес, поскольку все они исходят от одного и того же клиента, но поскольку у них разные исходные порты, сервер может отличать их друг от друга. И когда сервер отправляет обратно ответы, он делает это с портом, с которого поступил запрос, таким образом, клиент также может различать разные ответы, которые он получает.

2 голосов
/ 31 декабря 2008

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

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

2 голосов
/ 31 августа 2015

Один порт может иметь один или несколько разъемов, соединенных с разными внешними IP-адресами, например, с несколькими электрическими розетками.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312
2 голосов
/ 26 июня 2013

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

Я нашел это здесь

Этот пример проведет вас через процесс подключения к веб-сайту, такому как Wiley. Вы должны открыть свой веб-браузер (например, Mozilla Firefox) и ввести www.wiley.com в адресную строку. Ваш веб-браузер использует сервер системы доменных имен (DNS) для поиска имени www.wiley.com, чтобы определить его IP-адрес. Для этого примера адрес 192.0.2.100.

Firefox устанавливает соединение с адресом 192.0.2.100 и портом где работает веб-сервер прикладного уровня. Firefox знает какой порт ожидать, потому что это известный порт. Хорошо известный порт для веб-сервера - TCP-порт 80.

Целевой сокет, к которому пытается подключиться Firefox, записывается как сокет: порт, или в этом примере 192.0.2.100:80. Это сервер сторона соединения, но сервер должен знать, куда отправить веб-страницу, которую вы хотите просмотреть в Mozilla Firefox, поэтому у вас есть сокет для клиентская сторона соединения также.

Соединение на стороне клиента состоит из вашего IP-адреса, такого как 192.168.1.25 и случайно выбранный динамический номер порта. Сокет, связанный с Firefox, выглядит как 192.168.1.25:49175. Потому что веб серверы работают на TCP-порту 80, оба эти сокета являются TCP-сокетами, тогда как, если вы подключались к серверу, работающему с портом UDP, сокеты сервера и клиента будут UDP-сокетами.

2 голосов
/ 16 октября 2013

Сокет - это абстракция, предоставляемая ядром пользовательским приложениям для ввода / вывода данных. Тип сокета определяется протоколом его обработки, связью IPC и т. Д. Поэтому, если кто-то создает сокет TCP, он может выполнять манипуляции, такие как чтение данных в сокет и запись данных в него простыми методами, а также обработка протокола более низкого уровня, например преобразования TCP и пересылка пакетов на сетевые протоколы более низкого уровня осуществляется конкретной реализацией сокета в ядре. Преимущество состоит в том, что пользователю не нужно беспокоиться об обработке специфичных для протокола нитриций, а следует просто читать и записывать данные в сокет, как обычный буфер. То же самое верно в случае IPC, пользователь просто читает и записывает данные в сокет, а ядро ​​обрабатывает все детали более низкого уровня в зависимости от типа созданного сокета.

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

2 голосов
/ 30 сентября 2008

Сокет - это механизм ввода / вывода данных. Порт - это договорная концепция протокола связи . Сокет может существовать без порта. Порт может существовать без определенного сокета (например, если на одном порту активно несколько сокетов, что может быть разрешено для некоторых протоколов).

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

1 голос
/ 30 сентября 2008

Сокет - это, по сути, конечная точка для сетевого взаимодействия, состоящая как минимум из IP-адреса и порта. В Java / C # сокет является реализацией более высокого уровня одной стороны двустороннего соединения.

Кроме того, определение в документации Java .

1 голос
/ 21 августа 2016

Я знаю, что есть много объяснений. Но есть еще один простой способ понять это на практическом примере. Мы все можем подключиться к HTTP-порту 80, но означает ли это, что только один пользователь может подключаться к этому порту одновременно? Ответ очевидно «нет». Несколько пользователей для разных целей могут получить доступ к HTTP-порту 80, но они все еще получают правильный ответ, которого они ждут, с сервера, не так ли? Теперь подумай минутку, как? Да, вы правы, это IP-адрес , который однозначно идентифицирует разных пользователей, которые контактируют для разных целей. Если бы вы прочитали предыдущие ответы, прежде чем попасть сюда, вы бы знали, что IP-адрес является частью информации, из которой состоит сокет. Задумайтесь, возможно ли общение без розеток? Ответ «Да», но вы не можете запустить более одного приложения в порту, но мы знаем, что мы не являемся переключателем «Dump», который работает только на оборудовании.

1 голос
/ 30 сентября 2008

Порт:

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

Цоколь:

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

0 голосов
/ 18 марта 2013

Порт - это объект, который используется сетевыми протоколами для доступа к подключенным хостам. Порты могут быть специфическими для приложения или связаны с определенной средой связи. Различные протоколы используют разные порты для доступа к хостам, например, HTTP использует порт 80 или FTP использует порт 23. Вы можете назначить пользовательские номера портов в вашем приложении, но они должны быть выше 1023.

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

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

...