Моя понять из таблицы NAT являетсяПочему пробивка отверстий TCP таким образом не работает?
- NAT таблица отображает только (Private IP: Port) -> (Public IP: Port)
- Он не заботится о протоколе или гнездо подключения
Таким образом, я думал, что перфорация отверстий в TCP может быть выполнена путем повторного использования локального порта.
Узел A за NAT соединиться с сервером S, NAT из хоста А отображает его пару
Host A(192.0.0.1:100) -> NAT -> Server (192.0.0.1:100 -> 121.0.0.1:200) MAPPED
Узел A закрывает этот разъем и открыть новый сокет на том же локальный порт (100)
Host A(listening 192.0.0.1:100) -> NAT -> Server (192.0.0.1:100 -> 121.0.0.1:200) MAPPED
- Тогда я думал, что любой клиент может подключиться к хосту A (получить 121.0.0.1:200 от сервера), используя уже переведенную пару (192.0.0.1:100 -> 121.0.0.1:200)
Поскольку таблица NAT учитывает только IP-адрес и порт, а не исходный IP-адрес и порт.
Но это не работает! Я нашел другую сложную реализацию, но мне любопытно, в чем проблема.
контратип: http://stackoverflow.com/questions/26694286/how-do-i-do-tcp-hole-punching – selbie