[networking] В чем разница между портом и сокетом?


14 Answers

Сокет состоит из трех вещей:

  1. IP-адрес
  2. Транспортный протокол
  3. Номер порта

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

Например:

  • 1030 - это порт.
  • (10.1.1.2, TCP, порт 1030) является сокетом.
Question

Это был вопрос, поднятый одним из инженеров-программистов в моей организации. Меня интересует самое широкое определение.




Сокет - это особый тип дескриптора файла, который используется процессом для запроса сетевых сервисов из операционной системы. Адрес сокета - это тройка: {protocol, local-address, local-process}, где локальный процесс идентифицируется номером порта.

В пакете TCP / IP, например:

{tcp, 193.44.234.3, 12345}

Разговор - это линия связи между двумя процессами, таким образом изображая связь между двумя. Ассоциацией является 5-кортеж, который полностью определяет два процесса, которые содержат соединение: {протокол, локальный адрес, локальный процесс, внешний адрес, внешний процесс}

В пакете TCP / IP, например:

{tcp, 193,44,234,3, 1500, 193,44,234,5, 21}

может быть действительной ассоциацией.

Пол-ассоциация - это: {протокол, локальный адрес, локальный процесс}

или

{protocol, foreign-address, foreign-process}

которые определяют каждую половину соединения.

Полусоединение также называется сокет или транспортный адрес. То есть, сокет является конечной точкой для связи, которая может быть названа и адресована в сети. Интерфейс сокета является одним из нескольких интерфейсов прикладного программирования (API) для протоколов связи. Разработанный как универсальный коммуникационный интерфейс программирования, он впервые был внедрен системой UNIX 4.2BSD. Хотя он не был стандартизирован, он стал фактическим промышленным стандартом.




Port:

A port can refer to a physical connection point for peripheral devices such as serial, parallel, and USB ports. The term port also refers to certain Ethernet connection points, s uch as those on a hub, switch, or router.

Socket:

A socket represents a single connection between two network applications. These two applications nominally run on different computers, but sockets can also be used for interprocess communication on a single computer. Applications can create multiple sockets for communicating with each other. Sockets are bidirectional, meaning that either side of the connection is capable of both sending and receiving data.




Приложение состоит из пары процессов, которые обмениваются данными по сети (пара клиент-сервер). Эти процессы отправляют и получают сообщения в сеть и из нее через программный интерфейс, называемый сокетом . Учитывая аналогию, представленную в книге «Компьютерная сеть: подход сверху вниз». Существует дом, который хочет общаться с другим домом. Здесь дом аналогичен процессу и двери к розетке. Процесс отправки предполагает, что на другой стороне двери есть инфраструктура, которая будет передавать данные в пункт назначения. Как только сообщение поступит с другой стороны, оно проходит через дверь приемника (гнездо) в дом (процесс). Эта иллюстрация из той же книги может помочь вам:

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




Port and socket can be compared to the Bank Branch.

The building number of the "Bank" is analogous to IP address . Bank has got different sections like :1) SAVINGS ACCOUNT DEPARTMENT 2) PERSONAL LOAN DEPARTMENT 3) HOME LOAN DEPARTMENT 4) GRIEVANCE DEPARTMENT .

so 1(SAVINGS ACCOUNT DEPARTMENT) ,2 ( PERSONAL LOAN DEPARTMENT) ,3(HOME LOAN DEPARTMENT) and 4(GRIEVANCE DEPARTMENT) are Ports.

Now let us say you go to open a savings account , you go to Bank(IP address) then you go to "SAVINGS ACCOUNT DEPARTMENT" (Port number 1) then you meet one of the employee working under "SAVINGS ACCOUNT DEPARTMENT" let us call him as SAVINGACCOUNT_EMPLOYEE1 for opening account .

SAVINGACCOUNT_EMPLOYEE1 is your socket descriptor , so there may be SAVINGACCOUNT_EMPLOYEE1 to SAVINGACCOUNT_EMPLOYEEN these are all socket descriptors.

Likewise other departments will be having employess working under them and they are analogous to socket.

Hope this helps !!




A port denotes a communication endpoint in the TCP and UDP transports for the IP network protocol. A socket is a software abstraction for a communication endpoint commonly used in implementations of these protocols (socket API). An alternative implementation is the XTI/TLI API.

Смотрите также:

Stevens, WR 1998, UNIX Network Programming: Networking APIs: Sockets and XTI; Volume 1, Prentice Hall.
Stevens, WR, 1994, TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley.




Already theoretical answers have been given to this question. I would like to give a practical example to this question, which will clear your understanding about Socket and Port.

I found it here

This example will walk you thru the process of connecting to a website, such as Wiley. You would open your web browser (like Mozilla Firefox) and type www.wiley.com into the address bar. Your web browser uses a Domain Name System (DNS) server to look up the name www.wiley.com to identify its IP address is. For this example, the address is 192.0.2.100.

Firefox makes a connection to the 192.0.2.100 address and to the port where the application layer web server is operating. Firefox knows what port to expect because it is a well-known port . The well-known port for a web server is TCP port 80.

The destination socket that Firefox attempts to connect is written as socket:port, or in this example, 192.0.2.100:80. This is the server side of the connect, but the server needs to know where to send the web page you want to view in Mozilla Firefox, so you have a socket for the client side of the connection also.

The client side connection is made up of your IP address, such as 192.168.1.25, and a randomly chosen dynamic port number. The socket associated with Firefox looks like 192.168.1.25:49175. Because web servers operate on TCP port 80, both of these sockets are TCP sockets, whereas if you were connecting to a server operating on a UDP port, both the server and client sockets would be UDP sockets.




Кажется, что есть много ответов, сравнивающих сокет с соединением между двумя ПК. Я считаю, что это абсолютно неверно. Сокет всегда был конечной точкой на 1 ПК, который может быть или не быть подключен - конечно, мы все использовали приемник или UDP-сокеты * в какой-то момент. Важная часть заключается в том, что он является адресным и активным. Отправка сообщения в файл 1.1.1.1:1234 вряд ли будет работать, поскольку для этой конечной точки нет сокета.

Сокеты являются специфичными для протокола - поэтому реализация уникальности, которую используют как TCP / IP и UDP / IP * (ipaddress: port), отличается от, например, IPX (Network, Node и ... ahem, socket - но отличается что означает общий «сокет». Номера сокетов IPX эквивалентны IP-портам). Но все они предлагают уникальную адресуемую конечную точку.

Поскольку IP стал доминирующим протоколом, порт (в сетевых терминах) стал автономным с номером порта UDP или TCP, который является частью адреса сокета.

  • UDP не имеет отношения к подключению - это означает, что виртуальная схема между двумя конечными точками никогда не создается. Однако мы по-прежнему относимся к сокетам UDP как к конечной точке. Функции API дают понять, что оба являются просто разными типами сокетов. SOCK_DGRAM - это UDP (просто отправка сообщения), а SOCK_STREAM - это TCP (создание виртуальной схемы).

  • Технически, IP-заголовок содержит IP-адрес, а протокол поверх IP (UDP или TCP) содержит номер порта. Это позволяет иметь другие протоколы (например, ICMP , которые не имеют номеров портов, но имеют информацию IP-адресации).




Сокет - это структура вашего программного обеспечения. Это более-менее файл; он имеет операции, такие как чтение и запись. Это не физическая вещь; это способ для вашего программного обеспечения ссылаться на физические вещи.

Порт - вещь, подобная устройству. Каждый хост имеет одну или несколько сетей (физически); хост имеет адрес в каждой сети. Каждый адрес может иметь тысячи портов.

Один сокет может использовать порт только по адресу. Розетка распределяет порт примерно так же, как выделение устройства для ввода / вывода файловой системы. Как только порт будет выделен, никакой другой сокет не сможет подключиться к этому порту. Порт будет освобожден, когда розетка будет закрыта.

Взгляните на терминологию TCP / IP .




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

Общим определением для сети является использование модели OSI, которая разделяет сеть на несколько слоев в соответствии с назначением. Есть несколько важных, которые мы рассмотрим здесь:

  • Уровень канала передачи данных . Этот уровень отвечает за получение пакетов данных от одного сетевого устройства к другому и находится чуть выше уровня, фактически передающего. Он говорит о MAC-адресах и знает, как найти хосты на основе их MAC (аппаратного) адреса, но не более того.
  • Сетевой уровень - это уровень, который позволяет переносить данные по машинам и по физическим границам, таким как физические устройства. Сетевой уровень должен по существу поддерживать дополнительный механизм, основанный на адресе, который как-то связан с физическим адресом; введите IP-адрес (IPv4). IP-адрес может получить ваш пакет от A до B через Интернет, но ничего не знает о том, как проходить индивидуальные перелеты. Это обрабатывается слоем выше в соответствии с информацией маршрутизации.
  • Транспортный слой . Этот уровень отвечает за определение способа получения информации от A до B и любых ограничений, проверок или ошибок в этом поведении. Например, TCP добавляет дополнительную информацию в пакет, так что можно вывести, если пакеты были потеряны.

TCP содержит, среди прочего, концепцию ports . Это фактически разные конечные точки данных на том же IP-адресе, к которому может привязываться Internet Socket ( AF_INET ).

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

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

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

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

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Большой! Поэтому в структурах sockaddr мы укажем наш порт и bam! Работа выполнена! Ну, почти, кроме:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

также возможно. Ург, это забросило гаечный ключ в работах!

Хорошо, на самом деле это не так. Все, что нам нужно сделать, это найти некоторые подходящие определения:

  • Интернет-сокет - это комбинация IP-адреса, протокола и связанного с ним номера порта, по которому служба может предоставлять данные. Таким образом, порт tcp 80, .com - это интернет-сокет.
  • Unix-сокет - конечная точка IPC, представленная в файловой системе, например /var/run/database.sock .
  • API сокетов - это метод запроса приложения на чтение и запись данных в сокет.

Вуаля! Это подбирает вещи. Итак, в нашей схеме,

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

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




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

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




A port is an entity that is used by networking protocols to attain access to connected hosts. Ports could be application-specific or related to a certain communication medium. Different protocols use different ports to access the hosts, like HTTP uses port 80 or FTP uses port 23. You can assign user-defined port numbers in your application, but they should be above 1023.

Ports open up the connection to the required host while sockets are an endpoint in an inter-network or an inter-process communication. Sockets are assigned by APIs(Application Programming Interface) by the system.

A more subtle difference can be made saying that, when a system is rebooted ports will be present while the sockets will be destroyed.




A socket is a data I/O mechanism. A port is a contractual concept of a communication protocol . A socket can exist without a port. A port can exist witout a specific socket (eg if several sockets are active on the same port, which may be allowed for some protocols).

A port is used to determine which socket the receiver should route the packet to, with many protocols, but it is not always required and the receiving socket selection can be done by other means - a port is entirely a tool used by the protocol handler in the network subsystem. eg if a protocol does not use a port, packets can go to all listening sockets or any socket.




Это термины из двух разных доменов: «порт» - это концепция из сетей TCP / IP, «сокет» - это API (программирование). «Сокет» создается (в коде), беря порт, имя хоста или сетевой адаптер и объединяя их в структуру данных, которую вы можете использовать для отправки или получения данных.




Короткий короткий ответ.

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

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




Related