[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: