Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Несколько вопросов по сетям.  (Прочитано 7017 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« : 24-04-2015 07:31 » 

Доброго утра.)

В некоторые моменты, к сожалению, не особо вдавался, и теперь это даёт о себе знать, но, почитав, разную информацию столкнулся с тем, что мнения авторов разнятся.

Итак, предположим, есть устройство, которое хочет послать по сети пакет. В первом представлении он выглядит, как кадр с заголовком из MAC адресов отправителя, получателя..., области данных (в которой может располагаться IP, а затем и TCP части). Так вот, если пакет сформирован правильно с контрольными суммами и т.п., но без частей IP..., то какова его область распространения? Второе, если с качестве адреса получателя будет указан широковещательный MAC адрес (FF-FF...), то насколько далеко уйдёт этот пакет? Затем, если сетевая карта компьютера будет принимать и складировать эти пакеты, то как их отработает ОС по умолчанию?

Вопросов много, поэтому не посоветуете ли почитать что-нибудь, но близкое к аппаратной части.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #1 : 24-04-2015 09:49 » 

Aether, многое зависит от способа построения сети(хабы/свитчи).

Если рассмотреть самый простой вариант - две ПЭВМ подключенные по витой паре друг к другу, то пакет с только сформированным MAC-уровнем (источник, приёмник и какой-нибудь номер протокола), уйдёт в линию. На другой ПЭВМ, если совпал MAC-адрес назначения, или адрес широковещательный сетевая карточка примет этот пакет и отдаст драйверу, который передаст его сетевому стеку ОС. В стеке посмотрят, что такого протокола не знают и отбросят пакет. Если каким-либо образом протокол поддерживается - пакет передадут уже непосредственно протокольной части стека, которая будет разбираться всё-ли там нормально и кому этот пакет в пространстве пользователя передать.
Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 24-04-2015 10:49 » 

Ладно, лучше, наверное, конкретнее: предположим с машины А через sendto (UDP/IP) я посылаю пакет на машину Б. Обе машины принадлежат одной подсети, но мне известны: оба IP адреса, номера портов и лишь MAC адрес отправителя. Вопрос: в итоговом исходящем реальном пакете какой будет стоять MAC адрес получателя? Здравый смысл подсказывает, что он будет либо широковещательным всегда, либо есть некий служебный механизм, который предварительно запросит соответствие MAC-IP машины.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #3 : 24-04-2015 11:13 » 

Для установления с каким MAC-адресом необходимо выдать пакет, в стеке протоколов TCP/IP предназначен протокол ARP.

Любая ПЭВМ содержит arp-таблицу, в которой установлено соответствие между IP-адресом и MAC-адресом. Если искомый IP-адрес не обнаруживается в таблице, в сеть выдаётся широковещательный ARP-запрос "who has" (с MAC-адресом ff-ff-ff-ff-ff-ff), при помощи которого сетевой стек спрашивает, какой MAC-адрес, для интересующего его IP-адреса. Если машина с таким IP-адресом в локальной сети присутствует, то она отвечает со своим MAC-адресом в качестве источника и MAC-адресом запросившей ПЭВМ в качестве приёмника, что это она, если нет, то соответственно никто не отвечает и после нескольких повторных запросов (пакет с ARP-запросом мог погибнуть в линии из-за коллизий или поломки сетевого оборудования) системный вызов sendto() возвращает  no route to host. Таблица периодически чистится, чтобы избежать проблем, когда контрагент выбыл из строя, а потом вернулся с заменённой карточкой и соответственно другим MAC-адресом, но тем-же IP-адресом.

С роутерами дело немного усложняется - там вместо ПЭВМ могут отвечать уже они своим MAC-адресом, а дальше передавать её от своего имени (с точки зрения MAC-адресов) в другую сеть. Т.е. в таком случае, при взаимодействии через один роутер (или машину-маршрутизатор с включенной опцией форвардинга пакетов), IP-адреса в пакетах у обоих ПЭВМ будут друг-дружки, а MAC-адреса в качестве приёмника обе ПЭВМ будут выставлять равными адресом роутера.

Для более полных сведений поищите книги Ричарда У.Стивенса у него есть и про протоколы TCP/IP, и про пользование сетевым и межпроцессным взаимодействием в ОС UNIX.
« Последнее редактирование: 24-04-2015 11:22 от darkelf » Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 24-04-2015 13:27 » 

А еще настоятельно рекомендую к углубленному прочтению "Эффективное программирование TCP/IP" Йона Снейдера. Ее легко найти в сети в сканированном виде. Изумительно легко написана, очень подробно, а главное с примерами программирования и очень подробным разбором типичных источников ошибок и заблуждений, в том числе самой распространенной - о гарантированной доставке Улыбаюсь.
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 24-04-2015 14:43 » 

Спасибо, попробую найти и ознакомиться.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 24-04-2015 20:02 » new

Так вот, если пакет сформирован правильно с контрольными суммами и т.п., но без частей IP..., то какова его область распространения?

Сегмент сети. Только в данном случае корректнее говорить не о пакете, а о фрейме. Все-таки речь не о сетевом, а о канальном уровне, если я правильно понял вопрос.

Второе, если с качестве адреса получателя будет указан широковещательный MAC адрес (FF-FF...), то насколько далеко уйдёт этот пакет?

В пределах сегмента сети.

Затем, если сетевая карта компьютера будет принимать и складировать эти пакеты, то как их отработает ОС по умолчанию

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

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines