Целью данной статьи является объяснить как работает локальная сеть. Я расскажу для чего нужен IP адрес, маска, шлюз по умолчанию, DNS и немного маршрутизации. Взгляните на схему компьютерной сети. На ней изображена локальная сеть из трёх компьютеров (Winodws 7 и 8, и Debian 7), роутера (маршрутизатор), свитча (коммутатор). Пусть наш коммутатор поддерживает функцию MDIX - автоопределение типа кабеля. В таком случае мы можем использовать как прямой так и кросс патч-корд, в противном случае только прямой. Так же на смехе изображён отдельный компьютер, подключённый напрямую к сети Интернет. Данная топология локальной сети называется "Звезда". Так как в сети отсутствуют сервера с приложениями, сеть является одноранговой.

 Если мы просто соеденим три компьютера между собой с помощью Ethernet-кабеля, то без DHCP сервера или ручной настройки, компьютеры по умолчанию автоматически настроятся с помощью APIPA, кроме Debain 7. Однако работать с такой сетью будет не очень удобно, по этому мы вручную настроим наши компьютеры. Я сразу укажу в настройках адрес шлюза по умолчанию и ДНС. IP адрес должен быть уникальным для каждого компьютера в сети, так как это его уникальных сетевой идентификатор, как например почтовый адрес с фамилией получателя. Маска сети определяет границы сети, её первый адрес (идентификатор сети) и последний адрес (broadcast). В нашем случае NetworkID - 10.10.10.0, Broadcast - 10.10.10.255. Всего существует 33 сетевых маски. Посмотреть все маски и потренироваться в вычислении количества IP адресов для компьютеров, а так же Broadcast-ов можно в онлайн IP-калькуляторе. Для работы только локальной сети шлюз по умолчанию не нужен, а вот для того, чтобы попасть за пределы локальной сети, в том числе в сеть Internet, необходим шлюз по умолчанию. Если у вас две сети 10.10.10.0.24 и 192.168.0.0/24, но в пределах одной физической сети, то вам также нужен будет шлюз по умолчанию, который будет иметь два интерфейса: по одному для каждой сети. Часто, для подключения используют Ethernet-маршуртизаторы или xDSL-модемы. Именно они и являются шлюзами в Internet и их внутренний IP адрес нужно указывать в качестве шлюза по умолчанию. Так же можно указать IP адреса серверов, на которых установлены приложения вроде ISA 200X, TMG, Kerio Control, UserGate, а так же Windows Server с ролью RRAS, Unix-like решения и другие приложения. Если же нет специального оборудования для доступа в Интернет, а просто приходит "шнурок" от провайдера - необходимо спросить у провайдера настройки для сетевой карты, но в большенстве случаев все настройки задаются с помощью DHCP. DNS сервера нужны для разрешения (преобразования) доменных имён в IP адреса. Без него нельзя будет зайти на Гугл, но можно будет зайти, например, по адресу 173.194.69.94. Что удобнее запомнить IP адрес или имя веб-сайта?! Если на одном IP адресе несколько веб-сайтов, то веб-сервер сам определяет какой ресурс был запрошен. Обычно провайдеры предоставляют два DNS сервера, но можно задать и больше в дополнительных настройках. Хотя, если используется надёжный DNS сервер (т.е. он всегда доступен), то хватит и одного DNS сервера. В сетях с рабочей группой ДНС сервером может быть любой доступный ДНС сервер, например маршрутизатор или от гугла 8.8.8.8. В сетях с Active Directory у всех клиентов введёных в домен должен быть установлен только ДНС сервер локальной сети, содержащий зону вашего домена, интегрированную в Active Directory. Как правило - это контроллер домена, но поддерживаются и Unix ДНС сервер BIND от версии 8.2.

 Ниже приведены настройки компьютеров в тестовой локальной сети. Для Debian 7:

cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
       address 10.10.10.50
       netmask 255.255.255.0
       network 10.10.10.0
       broadcast 10.10.10.255
       gateway 10.10.10.10

 DNS сервер:

cat /etc/resolv.conf
nameserver 10.10.10.10

 Для Windows 8 и 7:

 Для Ubunutu 13.04 (маску можно писать в сокращённом виде /24):

 Немного об особенностях сетей Windows. Если в сетевом интерфейсе не указан шлюз по умолчанию, или указан несуществующий адрес, то тип сети будет определён как Общедоступный или Public. А это означает, что сетевой интерфейс будет блокировать все входящие соединения. Если мы попытаемся проверить доступность компьютеров с помощью ping с компьютера Windows 8, то Debian ответит, а Windows 7 будет недоступен. Всё это правится в настройках Firewall Windows или если поменять тип сети на Домашняя (Home) или Рабочая (Work). В Windows 8 Домашняя и Рабочая объедены в Частную (Private). Смена типов сетей для Windows 7 и Windows 8 (нужно включить общие папки и принтеры для частной сети):

 Рассмотрим как работает локальная сеть без доступа в интернет: у компьютеров не будет настроен шлюз по умолчанию и ДНС. Моей рабочей станцией будет Windows 8. Я хочу обратиться к компьютеру debian7-1, для этого я в командной строке выполню следующую команду:

C:\Users\admin>ping debian7-1
Ping request could not find host debian7-1. Please check the name and try again.

 Однако, мой компьютер не знает имени debian7-1, о чём нам и сообщает результат команды ping. Теперь попробуем обратится к компьютеру по его IP адресу.

C:\Users\admin>ping 10.10.10.50 

Pinging 10.10.10.50 with 32 bytes of data:
Reply from 10.10.10.50: bytes=32 time<1ms TTL=64
Reply from 10.10.10.50: bytes=32 time<1ms TTL=64
Reply from 10.10.10.50: bytes=32 time<1ms TTL=64
Reply from 10.10.10.50: bytes=32 time<1ms TTL=64

Ping statistics for 10.10.10.50:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

 Сеть между Debian и Windows работает, но не по имени, а только по IP. А теперь я обращусь по имени к компьютеру с именем WIN7:

C:\Users\admin>ping win7

Pinging 10.10.10.200 with 32 bytes of data:
Reply from 10.10.10.200: bytes=32 time<1ms TTL=128
Reply from 10.10.10.200: bytes=32 time<1ms TTL=128
Reply from 10.10.10.200: bytes=32 time<1ms TTL=128
Reply from 10.10.10.200: bytes=32 time<1ms TTL=128

Ping statistics for 10.10.10.200:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

 Я редко настраиваю сети для дома без DNS сервера (хотя бы DNS в роутере), а в организациях тем более. По этому для меня было в новинку увидеть разрешение имён компьютеров без настройки DNS или файла hosts. Если честно, я даже не смог сформулировать поисковый запрос в гугл, чтобы узнать в чём дело. Но знающие люди подсказали Link-Local Multicast Name Resolution (LLMNR). Поддерживается только с Windows Vista и выше. Во время ping красным цветом я выделил значения TTL. По данному значению можно определить установленную ОС: 128 - Windows, 64 - Linux, 54 - FreeBSD, 255 - Cisco IOS 12 версии.

 В данном примере был упомянут файл hosts. В Windows он находится по пути C:\Windows\System32\drivers\etc\hosts. В Linux операционных системах по пути /etc/hosts. Заполняется он одинаково для обеих ОС, хотя и выглядит немного по разному. Для того, чтобы с компьютера с Debian я мог обратится по имени к компьютеру WIN7 или WIN8, я должен сделать соответствующие записи в данный файл. Для разрешения имён за пределами локальной сети можно так же использовать данный файл. LLMNR работает только в пределах одного сегмента. Ещё одной особенностью протокола LLMNR является то, что он хоть и разрешает имена в IP адреса, но этого недостачно для доступа в общую папку на другом компьютере, по этому настройка файла hosts для доступа к ресурсам обязательна. Для того, что бы редактировать файл hosts блокнот должен быть открыть от имени администратора и текстовый редактор в Debian от имени root. Вот вид файла hosts по умолчанию для Windows и Debian с правками:

# Copyright (c) 1993-2009 Microsoft Corp. 
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost 
127.0.1.1 debian7-1.domain.tld debian7-1

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

10.10.10.200 win7
10.10.10.100 win8

  Для того, чтобы лучше понять работу локальной сети, можно рассмотреть, что происходит с IP пакетом на пути следования от сетевой карты до сетевой карты. Структура IP пакета содержит несколько полей. Нас будут интересовать только два поля: адрес источника и адрес назначения. В нашем случае адрес источника это 10.10.10.100, адрес назначения для Win7 - 10.10.10.200, для Debian7-1 - 10.10.10.50. Адрес источника нужен будет для того, чтобы получатель знал кому отвечать. Однако сетевая карта понятия не имеет где находится адрес назначения 10.10.10.200 или 10.10.10.50. На помощь ей приходит протокол ARP (NDP для IPv6). В самом начале выполняется Broadcast запрос ARP на IP адресс 10.10.10.255 (данный адрес определён в таблице маршрутизации) на предмет "Кому принадлежит IP адрес 10.10.10.200 и какой у тебя MAC адрес?". Нам ответит только тот узел, который имеет запрашиваемый адрес. Остальные проигнорируют этот запрос. Напомню, что Broadcast сообщение, это сообщение всем сетевым устройствам в сети, количество которых определяется сетевой маской. У нас сеть 10.10.10.0/24 - 253 узла (минус номер сети и адрес broadcast). Если у нас сеть была бы 10.10.10.96/29, то первый рабочий адрес (который можно назначить сетевой карте) был бы 10.10.10.97, а последний - 10.10.10.102. В таком случае, ни Win7 (10.200), ни Debian7-1 (10.50) не получили бы широковещатьеный запрос, так как они вне этой сети, и, соответственно, не ответят нам. После того, как ARP запрос был выполнен и получен ответ, то создаётся таблица ARP:

C:\Users\admin>arp -a
Interface: 10.10.10.100 --- 0x10
  Internet Address      Physical Address      Type
  10.10.10.50         00-25-90-05-e1-4b     dynamic
  10.10.10.200        00-15-5d-0a-01-00     dynamic
root@debian7-1:~# arp -a 
win7 (10.10.10.200) at 00-15-5d-0a-01-00 [ether] on eth0
win8 (10.10.10.100) at 00:25:90:71:b4:94 [ether] on eth0

 Все динамические записи имеют определённое время жизни, около 2 минут до следующего продления. Между нашими компьютерами установлен коммутатор, у которого тоже есть своя таблица ARP для того, чтобы знать через какой интерфейс отправлять данные, адресованные этому IP c его MAC адресом. Таблица ARP с коммутатора Cisco 3750 c IOS 12 версии:

cisco3750.1#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.10.10.10           198   0001.6456.f400  ARPA   Vlan25
Internet  10.10.10.50             0   0025.9005.e14b  ARPA   Vlan25
Internet  10.10.10.100            3   0025.9071.b494  ARPA   Vlan25
Internet  10.10.10.200            -   0015.5d0a.0100  ARPA   Vlan25
cisco3750.1#sh mac-address-table
          Mac Address Table
-------------------------------------------
Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
 All    0100.0ccc.cccc    STATIC      CPU
  50    0025.9005.e14b    DYNAMIC     Fa1/0/1
  50    0001.6456.f400    DYNAMIC     Gi1/0/1
  50    0025.9071.b494    DYNAMIC     Fa1/0/2
  50    0015.5d0a.0100    DYNAMIC     Fa1/0/3

 На этом всё, пакет знает IP адрес получателя, сетевая карта знает его MAC адрес, коммутатор знает соответствие МАС адреса и порта, имена разрешаются или через файл hosts, или через службу DNS - всё готово для сетевого общения!

Резюме:
- для соединения компьютеров напрямую используют кроссовый патч-корд.
- для соединения компьютеров через коммутаторы можно использовать любой патч-корд, если коммутатор поддерживает автоопределение MDIX.
- для работы локальной сети со смешанными ОС необходимо вручную назначить IP адреса и сетевую маску.
- IP адреса, MAC адреса должны быть уникальными во избежании конфликтов (исключение multicast).
- для работы локальных сетей Windows необходимо проверить настройки сетевых профилей.
- для использования имён компьютеров необходимо внести записи с именами и соотвтествующим им IP адреса в файл hosts или использовать DNS.

03.07.2013