Re: bind слушает на эфемерных портах
On Wed, Aug 21, 2013 at 10:52:00PM +0300, Hleb Valoshka wrote:
> On 8/21/13, Eugene Berdnikov <bd4@protva.ru> wrote:
>
> >> Кто-нибудь встречался с ситуацией, когда bind слушает на эфемерных портах
> >> udp?
> > Что такое эфемерные порты?
>
> https://en.wikipedia.org/wiki/Ephemeral_ports
Вы не догадываетесь, что сервер dns может иногда выступать в роли
клиента? Ему это бывает нужно для работы, сюрприз.
> >> При этом на 53-м он слушает не на 0.0.0.0, а на каждом адресе
> >> индивидуально
> >> и на ip6 не слушает. Тут же на 0.0.0.0 и [::].
> > При чём тут порты? Это же адреса. И это правильно. Точно так же ведёт
> > себя ntpd, и, наверное, многие другие приложения, работающие по udp.
> > Причины лежат в области сетевого API и дизайна прикладных протоколов.
>
> Вот причём:
>
> tcp 127.0.0.1:53
> tcp 1.2.3.4:53
> udp 127.0.0.1:53
> udp 1.2.3.4:53
> udp 0.0.0.0:45678
> udp6 :::46532
>
> Мне такое поведение кажется странноватым.
Вы, наверное, не писали код серверов, работающих по udp, поэтому
не можете понять источники предпочтений сторонних авторов.
А лежат они, повторюсь, в области API сокетов и дизайна протоколов.
Можно не делать привязку слушающего сокета к юникастовому адресу,
можно делать явную привязку при открытии клиентской коннекции, тогда
всё будет выглядеть иначе. И для целого ряда приложений ситуация
действительно выглядит иначе. Часто задача может быть решена разными
способами, например, dnsmasq для работы в качестве dhcp-сервера
слушает udp-шный сокет, привязанный к порту 67, а ISC-шный dhcpd
с той же целью слушает raw socket.
Выбор оптимальной схемы работы требует дополнительных знаний,
которые простому сисадмину могут казаться тёмным лесом...
--
Eugene Berdnikov
Reply to: