Как работает связь через порты

Я изучал программирование сокетов, и у меня возникли некоторые вопросы. Это некоторые сомнения начального уровня

  1. Обязательно ли использовать хорошо известный порт для конкретного приложения. Например, если я использую ssl, могу ли я спроектировать сервер для прослушивания 1000, а не 443.

  2. Для http мы подключаемся к порту 80 с другого произвольного порта. Почему нет порта 80 для порта 80 связи.

  3. как сервер реагирует на соединения, приходящие к нему из разных портов на его порт 80.

  4. сколько подключений возможно для конкретного

2 ответа

Решение
  1. Нет, это не обязательно, но некоторые приложения ожидают такого поведения по умолчанию (это делает приложение более удобным для использования, поскольку вам не нужно явно указывать порт). Например, когда вы заходите на сайт example.com, вам не нужно указывать порт, поскольку по умолчанию используется порт 80. Если вы хотите подключиться к веб-серверу через другой порт, вам нужно явно указать этот порт. Иногда люди намеренно меняют порты, такие как порт 22 SSH, чтобы меньше мешать фоновому шуму в Интернете.
  2. Нет причин, по которым вы хотели бы этого, предположив, что вы запускаете веб-сервер на порту 80 и хотите перейти на веб-сайт, вы не сможете этого сделать, поскольку другой порт использует этот порт. Как я уже говорил в 1, порты просто есть, поэтому вам не нужно указывать их, когда вы хотите подключиться к службе, если только эта служба не запущена на порте не по умолчанию.
  3. Это будет зависеть от того, что прослушивает его порт 80, веб-серверы будут отвечать протоколом HTTP. Если по какой-либо причине вы используете SSH на этом порту, он ответит SSH.
  4. Однако нет никаких ограничений на конкретный порт. Однако существует ограничение на количество одновременных подключений, обычно ограниченное количеством дескрипторов файлов, поддерживаемых ядром (например, 2048). ( stackoverflow)

1 - Это как раз о "стандартах". По умолчанию ваш браузер достигнет порта 443, если вы укажете https, и 80, если http для примера. Вы можете делать все, что захотите, для своего конкретного использования, но вам нужно будет указать свой собственный порт, например: some.place.to.go:1000 Вы можете использовать "зарезервированные и хорошо известные" порты (0-1023) для соответствующие сервисы, но если вам нужно / хотите использовать другой, это зависит от вас... помните, у вас их более 65 тыс.:)

2- потому что порты < 1024 зарезервированы и не могут быть использованы для установления соединения

3. Мы говорим о TCP-соединениях... На конкретной машине номер порта в сочетании с IP-адресом машины называется сокетом. Комбинация IP и порта на клиенте и сервере известна как четыре кортежа. Этот четыре кортежа однозначно идентифицирует соединение. Таким образом, сервер может общаться со многими клиентами, потому что каждый клиент имеет уникальное соединение с сервером, чтобы общаться с ним.

Пример: клиент (cli) подключается к серверу (srv) из клиентского порта (5432) к порту сервера (80) cli:5432 -> srv:80

Сервер ответит клиенту на тот же клиентский порт: srv:80 -> cli:5432 И так далее...

Итак, для 2) вопроса: - представьте на стороне клиента, что работает http-сервер, "локальный" порт 80 уже используется. - представьте, что за маршрутизатором есть несколько клиентов (только с 1 IP...), как много клиентов используют один и тот же порт?

Если соединение было установлено с порта 80, а не с произвольного порта, ни одна из этих ситуаций не будет работать. вот почему нам нужно использовать произвольный порт для инициации запроса!

4 - от IP до всего мира, максимум 65535 (потому что вы можете связывать только 65k сокетов... так как у вас есть только 65k портов)

Если вы хотите пойти дальше в этом, я призываю вас прочитать этот материал:

http://en.wikipedia.org/wiki/Internet_protocol_suite (и соответствующие статьи...)

http://www.thegeekstuff.com/2011/11/tcp-ip-fundamentals/

Другие вопросы по тегам