Home

Page 25
Page 25
background image

Теперь  обсудим  более  детально  вопросы,  касающиеся  того,  каким  образом  можно  связать 

серверное  приложение,  использующее UDP, с  адресами  сервера  (и  клиента).  Еще  раз  запустим 
утилиту netstat.exe: 
 

C:\>netstat -an -p udp 

 

Активные подключения 

 

  Имя    Локальный адрес        Удаленный адрес  

Состояние 

  UDP    0.0.0.0:7              *:* 

  UDP    0.0.0.0:9              *:* 

  UDP    0.0.0.0:13             *:* 

  UDP    0.0.0.0:17             *:* 

  UDP    0.0.0.0:19             *:* 

  UDP    0.0.0.0:135            *:* 

  UDP    0.0.0.0:445            *:* 

  UDP    0.0.0.0:1030           *:* 

  UDP    0.0.0.0:1032           *:* 

  UDP    0.0.0.0:1064           *:* 

  UDP    0.0.0.0:3456           *:* 

  UDP    127.0.0.1:53           *:* 

  UDP    127.0.0.1:1029         *:* 

  UDP    192.168.0.89:53        *:* 

  UDP    192.168.0.89:137       *:* 

  UDP    192.168.0.89:138       *:* 

  UDP    192.168.0.89:500       *:* 

 

Зададимся  вопросом:  почему  в  ряде  строк endpoint сервера  имеет  вид 0.0.0.0:port, а  в  ряде 

строк – 192.168.0.89:port.  

Рассмотрим  следующую  ситуацию:  пусть  некий  узел  имеет  несколько  интерфейсов, 

например,  несколько  сетевых  адаптеров  или IP адресов,  сопоставленных  с  одним  сетевым 
адаптером (на самом деле узел с сетевым адаптером ВСЕГДА имеет несколько интерфейсов – по 
крайней  мере,  всегда  присутствует  интерфейс Loopback). Предположим,  на  таком  узле  запущено 
серверное  приложение,  прослушивающее  некоторый UDP порт.  Значит  ли  это,  что  сервер  будет 
готов принимать UDP дейтаграммы, адресованные данному порту, НЕ зависимо от того, на какой 
ИНТЕРФЕЙС они поступили? Приложение, открывающее порт для прослушивания, может сделать 
это  через  системные  вызовы  несколькими  способами.  Можно  открыть  порт  так,  что UDP пакеты, 
поступившие на порт с указанным номером будут обработаны в любом случае, независимо от того, 
какому  интерфейсу  они  предназначались,  это  отображается  в  распечатке  утилиты netstat.exe 
строкой вида:  

 

UDP    0.0.0.0:13             *:* 

 
В том случае, если процесс, занимающий некоторый UDP порт (впоследствии о TCP можно 

будет  сказать  то  же  самое) «привязан»  к  определенному IP адресу  некоторого  интерфейса,  это 
отображается строкой вида: 

 

  UDP    192.168.0.89:53        *:* 

 
Это  означает,  что  в  том  случае,  если UDP дейтаграмма,  направленная  на 53 порт,  была 

получена  в IP пакете,  адрес  получателя  которого 192.168.0.89, она  будет  обработана,  в  случае  же 
поступления UDP дейтаграммы  для 53 порта  на  любой  другой  интерфейс  станции,  она  будет 
отброшена.  Отмечаем,  что  данная  возможность  реализуется  обычно  реализуется  в  стеке,  и 
называется селективным обслуживанием по IP адресу сервера.  

Отметим,  что  программист,  создающий  серверное  программное  обеспечение  может 

предложить  пользователю/администратору  сконфигурировать,  будет  ли  данное  приложение 
слушать  некий  порт  независимо  от IP адреса  получателя  пакета  или  гибко  настраивать,  на  каких 
интерфейсах  станция  будет  прослушивать  порт.  Впоследствии  мы  часто  будем  пользоваться 
возможность привязать серверный процесс к конкретному IP адресу, вместо того, чтобы позволить 
ему отвечать на пакеты, посланные на любые адреса узла сервера. 


Copyright © 2021 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.