Может ли кто-нибудь объяснить достаточно четко разницу между портом и сокетом. Я знаю, что порт служит дверью в сеть для процесса приложения и что процесс приложения использует сокетное соединение с данным номером порта для управления сетевым взаимодействием, но когда у вас есть несколько процессов, прослушивающих один номер порта, я нахожу трудно понять разницу между сокетом и портом и то, как они все сочетаются друг с другом.
networking
sockets
networks
Cobie
источник
источник
Ответы:
S - это серверная программа: допустим, это HTTP-сервер, поэтому он использует известный номер порта для HTTP , равный 80. Я запускаю его на хосте с IP-адресом
10.0.0.4
, поэтому он будет прослушивать соединения10.0.0.4:80
(потому что вот где все ожидают его найти).Внутри S я собираюсь создать сокет и связать его с этим адресом: теперь ОС знает, что входящие соединения
10.0.0.4:80
должны быть направлены к моему процессу S через этот конкретный сокет.вывод netstat, когда сокет связан:
NB. локальный адрес - все нули, потому что S не волнует, как его клиенты достигают его
Как только S имеет этот сокет, он будет принимать соединения - каждый раз, когда подключается новый клиент,
accept
возвращает новый сокет, который является специфическим для этого клиентавывод netstat после того, как соединение принято:
10.0.0.4:80
представляет конец соединения S и связан с сокетом, возвращаемымaccept
10.0.0.5:55715
является концом соединения клиента и связан с сокетом, который клиент передал для соединения . Порт клиента не используется ни для чего, кроме маршрутизации пакетов по этому TCP-соединению к нужному процессу: он назначается случайным образом ядром клиента из диапазона временных портов.Теперь S может с радостью продолжать принимать больше клиентских подключений ... каждый получит свой собственный сокет, каждый сокет будет связан с уникальным TCP-соединением, и каждое соединение будет иметь уникальный удаленный адрес. S будет отслеживать состояние клиента (если оно есть), связывая его с сокетом.
Итак, примерно:
accept
возвращается один из одновременных вызовов, он делает это только в одном процессе, сокет каждого входящего соединения уникален для одного экземпляра сервера.socketpair
, являясь дочерним элементом этого процесса и наследуя его, или явно передавая один из сокетов из этого процессаисточник
Думайте о своей машине как о жилом доме:
Порт - это номер квартиры.
Розетка - это дверь квартиры.
IP-адрес - это уличный адрес здания.
источник
A socket is the door of an apartment.
Но разве не может быть много открытых гнезд на одном порту?Порт является частью адреса в протоколах TCP и UDP. Он используется для того, чтобы помочь ОС определить, какое приложение должно получить полученные данные. ОС должна поддерживать порты для поддержки TCP и UDP, потому что порты являются неотъемлемой частью TCP и UDP.
Сокет является частью интерфейса, который ОС предоставляет приложениям, чтобы позволить им отправлять и получать сетевые данные. Большинство реализаций сокетов поддерживают множество протоколов помимо TCP и UDP, некоторые из которых не имеют понятия портов. ОС не должна поддерживать сокеты для поддержки TCP или UDP; это может обеспечить другой интерфейс для приложений для использования. Сокет - это просто один из способов отправки и получения данных через определенный порт.
источник
Компьютер имеет IP-адрес, который идентифицирует его как отдельный объект в сети. Мы добавляем к этому дополнительный номер, чтобы мы могли различать подключения к этому компьютеру. Это номер порта. На стороне ОС соединения вам нужны буферы, состояние соединения и т. Д. Этот логический объект - сокет.
источник
Сокет - это канал связи с портом. Когда вы хотите, чтобы ваша программа взаимодействовала по сети, вы указали ей способ адресации порта, и это делается путем создания сокета и подключения его к порту. По сути, сокет = IP + порты Сокеты обеспечивают доступ к порту + ip
источник
IP-адрес идентифицирует устройство, то есть адрес конкретного устройства, когда вы достигли машины с использованием IP-адреса, теперь порт определяет, с каким процессом на этой машине обмениваться данными.
Таким образом, для реального обмена данными вам нужны оба порта + IP, который называется сокетом.
источник