Доброго времени суток, On Thu, Feb 10, 2022 at 03:30:11PM +0300, Артём Н. wrote: > Есть UDP echo-сервер (не важно какой, пусть будет на основе Netcat): > ncat -4 --exec /bin/cat -u --listen 2000 > Запускаю клиент на той же машине: > ncat -4 -s 192.168.2.13 -u 127.0.0.1 2000 > Адрес 192.168.2.13 от реально существующего адаптера, т.е. адрес машины в > ЛВС. > > Пишу что-то на клиенте - сервер выходит с кодом 0. > > Запрос принимает, ответ успевает отправить, но ответ не доходит. > Почему?
Это не особенность поведения сети, а скорее особенность работы netcat с UDP сокетами. Пакет не доходит до клиента так как у пакетов, идущих от сервера, src IP отличен от 127.0.0.1: 13:55:20.051152 lo In IP 192.168.2.13.34469 > 127.0.0.1.2000: UDP, length 5 13:55:20.054295 lo In IP 192.168.2.13 > 192.168.2.13: ICMP 192.168.2.13 udp port 34469 unreachable, length 41 Если запустить клиента под strace, то видно, что после создания сокета с помощью socket() and bind() его на IP = 192.168.2.13, он зовет connect() на 127.0.0.1. После чего этот сокет будет принимать только пакеты с src IP = 127.0.0.1. Поэтому и "ICMP 192.168.2.13 udp port 34469 unreachable". -- Stanislav Maslovski

