Как можно проще, между сокетом и портом нет физической разницы, как, например, между PATA и SATA. Это всего лишь кусочки программного обеспечения для чтения и записи NIC.
Порт - это, по сути, общедоступный сокет, некоторые из которых общеизвестны / общеприняты, обычный пример - 80, посвященный HTTP. Любой, кто хочет обмениваться трафиком с использованием определенного протокола, в данном случае HTTP, канонически переходит на порт 80. Конечно, 80 не является физически выделенным для HTTP (это не что-то физически, это просто число, логическое значение), и может использоваться на некотором конкретном компьютере для какого-либо другого протокола ad libitum, если те, кто пытается подключиться, знают, какой протокол (который может быть довольно закрытым) использовать.
Сокет - это, по сути, частный порт, созданный для особых целей, известных сторонам соединения, но не обязательно известный кому-либо еще. Базовый транспортный уровень обычно является TCP или UDP, но это не обязательно. Важной характеристикой является то, что оба конца знают, что происходит, что бы это ни было.
Ключевым моментом здесь является то, что при получении запроса на соединение по какому-либо порту ответное рукопожатие включает в себя информацию о сокете, созданном для обслуживания конкретного запрашивающего. Последующее общение происходит через это (частное) соединение через сокет, а не через соединение с общедоступным портом, на котором служба продолжает прослушивать запросы на соединение.