Как два браузера одновременно прослушивают порт 80? - PullRequest
13 голосов
/ 21 декабря 2009

Когда я пытаюсь привязать сокет к порту 80 из программы, я получаю сообщение об ошибке, но как два браузера одновременно могут слушать один и тот же порт 80?

Ответы [ 7 ]

19 голосов
/ 21 декабря 2009

Браузеры не прослушивают порт 80, HTTP , серверы делают (хотя это просто соглашение, вы можете легко использовать FTP или telnet-сервер, используя порт 80).

В TCP / IP «сессия» должна быть уникальной, а сессия определяется как 5-кортеж (protocol, sourceIP, sourcePort, destinationIP, destinationPort). Это позволяет правильно маршрутизировать пакеты в Интернете.

Обычно, когда клиент пытается связаться с сервером, он указывает 0 в качестве порта источника, что означает, что операционная система назначает ему неиспользуемый порт. Это означает, что клиент на самом деле будет прослушивать этот порт, а не порт 80.

Таким образом, вы можете получить сеанс со свойствами (TCP, mybox.com, 1101, www.microsoft.com, 80), когда ваш браузер выходит на веб-страницы Microsoft.

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

Запуск netstat -a (в Linux или Windows) сообщит вам, связан ли сервер с портом 80. Найдите прослушиватель для порта 80 (или http, если он разрешает порты для имен служб), что-то вроде:

tcp  0  0  localhost:http  *:*  LISTEN
19 голосов
/ 21 декабря 2009

Они не слушают порт 80, они общаются с портом 80 или 443, если вы используете SSL (или на любом другом порту, если администратор нарушил соглашение, вы могли видеть URL-адреса, подобные http://www.site.com:8080 где сайт был настроен на порт 8080).

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

Как говорит paxdiablo, вы можете использовать netstat, чтобы увидеть, какие программы прослушивают соединения (использование "netstat -a -b" покажет, какой исполняемый файл связан с каким портом)

8 голосов
/ 21 декабря 2009

Браузеры фактически не слушают порт 80. Веб-серверы делают это, и браузер открывает соединение с портом между 49152 и 65535, я думаю (динамические порты).

4 голосов
/ 21 декабря 2009

В сетевом соединении есть один узел (обычно называемый клиентом), который подключается к другому (обычно называемому сервером). Говорят, что сервер прослушивает определенный порт, а клиент подключается к этому порту.

В этом случае веб-сервер прослушивает порт 80, в то время как все клиенты (браузеры) подключаются к нему.

3 голосов
/ 21 декабря 2009

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

2 голосов
/ 21 декабря 2009

Когда браузер устанавливает соединение с сервером, он связывается с локальным непривилегированным портом, но подключается к порту 80 веб-сервера. Когда сервер отправляет ответ, он переходит к непривилегированному порту на компьютер браузера. Если на одном компьютере установлено два браузера, они привязываются к разным портам.

0 голосов
/ 21 декабря 2009

Если вы имеете в виду «как два сервера могут прослушивать порт 80», подумайте об использовании HTTP Server API. Оба сервера могут зарегистрировать функцию обратного вызова вместе с URL. Затем клиент может решить, какой сервер вызвать, основываясь на URL-адресе, например,

http://localhost/Service1 перейдет в службу, которая указала "http://localhost/Service1" в качестве своего URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...