Ну что ж у Вас никак чакры не раскроются...
Вот смотрите. На пальцах.
Есть отделение почты России, в котором есть окошко (будем считать, что оно одно). Так и определим: отделение - это адрес сервиса, окошко - это порт этого сервиса (http = 80).
Клиент подходит к этому окошку и начинает туда говорить: "Здравствуйте, можно у Вас спросить?" Эта фраза, ни что иное, как пакет сообщения (ну типа устанавливается соединение). Этот пакет вылетает из головы этого клиента, который является частью тела source port (sport) (и номер его какой угодно, но обычно что-то между 1024 и 65535), и летит в окошко, которое будет являться destination port (dport = 80).
Клиенты (адреса) могут быть разными и головы (порты) у них могут быть разными, то есть номера их портов динамические. А вот окошко одно, и номер порта у него статический = 80.
Дальше из окошка отвечают: "Да, конечно". А вот тут ситуация меняется. Теперь пакет сообщения летит из того же окошка. То есть номер порта тот же(80), а вот функция у него уже сменилась и он значится, как sport. А голова клиента становится dport... но всё та же, что перед этим говорила, то есть номер порта тот же (из 1024-65535).
Вот так вот dport становится sport-ом и обратно.
А теперь ситуация, когда это происходит с осложнениями. Клиент (через такой же динамический порт с номером 1024-65535) перетёр с оператором (по протоколу ftp, тут уже порт сервиса будет равным 21), что он хочет получить посылку и после всех подготовок эту посылку нужно передать. И посылка будет передаваться руками (порты замечу совсем другие) через (по протоколу ftp-data)... а, допустим, просто через верх перебросят. Теперь уже клиент раскрывает свои клешни (уже совсем другой dport) и ловит посылку посланную с рук оператора (другой sport) через заграждение.
Вот как-то так.
Может не много кривовато, но как смог.