• Как сервера взаимодействуют с клиентом если IP адреса не уникальные?

    Я так понимаю, что интересен случай ipv4, где многие узлы могут делить один адрес.

    В этом случае всё разруоивается при помощи NAT.
    1. Когда через поутер проходит какой-то запрос во внешнюю сеть - он подменяет адрес отправителя на свой, а также прописывает в порт отправителя какой-нибудь ещё не занятый порт, чтобы можно было отличить одного клиента от другого.
    2. При этом он у себя в памяти сохраняет, кто на самом деле отправил запрос и с каким изначально портом, чтобы можно было отправить обратно.
    3. Когда приходит ответ от сервера - в адрес назначения и порт подсовывается то, что было заранее сохранено.
    4. При закрытии соединения - запись убирается.

    Он работает полностью автономно и по пути следования таких может быть много.

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

    Также есть проброс портов - по факту то же самое, но настраивается заранее либо при помощи upnp.
    Ответ написан
    Комментировать
  • Как сервера взаимодействуют с клиентом если IP адреса не уникальные?

    saboteur_kiev
    @saboteur_kiev Куратор тега Компьютерные сети
    software engineer
    На устройство с серым айпи нельзя отправить первый пакет.

    Но само устройство может отправить пакет на устройство с белым айпи, благодаря маршрутизации. А благодаря технологии NAT на роутере с белым айпи для этого устройства резервируется порт для обратной связи.
    Нат обычно и настроен на ближайшем маршрутизаторе.

    Либо на маршрутизаторе можно настроить проброс порта (port forwarding) - это статичное резервирование определенного порта на маршрутизаторе для того, чтобы все что идет на этот порт перенаправлялось на нужный порт нужного устройство в подсети маршрутизатора.
    Ответ написан
  • Как сделать что бы выбор был не с 0 до 2, а с 1 до 3?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    row = int(input("Введите номер строки(1, 2, 3): ")) - 1

    PS: Код - жесть...
    Ответ написан
    Комментировать