2016-11-28 2 views
0

Моя понять из таблицы NAT являетсяПочему пробивка отверстий TCP таким образом не работает?

  1. NAT таблица отображает только (Private IP: Port) -> (Public IP: Port)
  2. Он не заботится о протоколе или гнездо подключения

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

  1. Узел A за NAT соединиться с сервером S, NAT из хоста А отображает его пару

    Host A(192.0.0.1:100)   ->   NAT   ->   Server 
              (192.0.0.1:100 -> 121.0.0.1:200) MAPPED 
    
  2. Узел A закрывает этот разъем и открыть новый сокет на том же локальный порт (100)

    Host A(listening 192.0.0.1:100) ->   NAT   ->   Server 
              (192.0.0.1:100 -> 121.0.0.1:200) MAPPED 
    
  3. Тогда я думал, что любой клиент может подключиться к хосту A (получить 121.0.0.1:200 от сервера), используя уже переведенную пару (192.0.0.1:100 -> 121.0.0.1:200)
    Поскольку таблица NAT учитывает только IP-адрес и порт, а не исходный IP-адрес и порт.

Но это не работает! Я нашел другую сложную реализацию, но мне любопытно, в чем проблема.

+0

контратип: http://stackoverflow.com/questions/26694286/how-do-i-do-tcp-hole-punching – selbie

ответ

Смежные вопросы