LINUX.ORG.RU

Вопрос по протоколам

 , , ,


1

1

Как я понимаю, все TCP/IP пакеты завернуты в Ethernet фреймы, а для их передачи нужно знать MAC-адрес получателя, но(!) для передачи TCP/IP пакетов нужно знать лишь IP-адрес получателя. Как так получается?

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



Последнее исправление: letni (всего исправлений: 4)

Нужда не отпадает. Если сервер в твоей подсети, то нужно знать его MAC. Если не в твоей — нужно знать MAC шлюза.

generator ★★★
()
Ответ на: комментарий от CYB3R

А конкретнее можно? Вот вырезка из статьи с хабра

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

letni
() автор топика
Ответ на: комментарий от CYB3R

Прямо по твоей же ссылке: в блоке Data лежат, цитирую: “IP,ARP, etc.” так что не так? Сетевой уровень работает поверх канального

Valkeru ★★★★
()
Последнее исправление: Valkeru (всего исправлений: 1)
Ответ на: комментарий от Valkeru

ТС задал такой вопрос:

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

Вопрос некорректный, так как нужда в знании MAC-адреса получателя не отпадает. MAC не нужно знать отправителю IP-пакета. А у свитча в памяти таблица «IP-MAC», он отправит куда нужно в соответствии с ней.

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

у свитча в памяти таблица «IP-MAC»

define «свитч». Если говорить об «свитчах» в понимании L2-switch, что обычно и имеется в виду, то там IP-адреса вообще до фонаря, у них таблица «MAC-port». Вот L3-switch (маршрутизаторы) - там да, «IP-MAC+port».

Ну и некорректность вопроса - это немного в другую степь, ИМХО.

Valkeru ★★★★
()
Последнее исправление: Valkeru (всего исправлений: 2)
Ответ на: комментарий от CYB3R

То есть, получается, каждый маршрутаризатор/свитч: будь то мой или уже покрупнее(у провайдера), они как бы соединены друг с другом и знают MAC-адрес друг друга, верно? Таким образом, мне при пересылке TCP/IP пакета нужно указывать в Ethernet фрейме не MAC получателя, а MAC интернет-провайдера, верно?

letni
() автор топика

Тебе надо изучить документацию вот по этой ключевой фразе: «7-ми уровневая модель osi». Сейчас ты задал вопрос, который подразумевает пересказ базовых понятий.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Я изучу, но это вопос не дает мне покоя. Кстати, подскажи, пожалуйста, мой тезис сверх верен или я где-то ошибся? Просто ткни, а я уже найду в чем ошибка.

letni
() автор топика

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

Когда ты хочешь послать пакет на определённый адрес, Linux определяет по своей таблице маршрутизации адрес ближайшего перевалочного пункта, который ближе к назначению, чем текущий хост. Обычно это шлюз в подсети. Из ARP таблицы берётся MAC адрес того устройства, к данным спереди пристыковывается Ethernet заголовок, в адрес назначения вписывается MAC адрес шлюза, пакет отсылается в сеть. Если в ARP таблице нет подходящей записи, перед этим делается широковещательный запрос «у кого IP такой-то? Ответь». По ответу вычисляется MAC адрес.

Шлюз разбирает IP адрес назначения, выясняет, куда дальше пересылать пакет. В Ethernet заголовке он меняет адрес назначения на MAC адрес устройства, которому пересылает пакет. Всё продолжается, пока пакет не дойдёт до получателя, или пока у него не кончится TTL (time to live).

i-rinat ★★★★★
()

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

Harald ★★★★★
()
Ответ на: комментарий от letni

Там ответ на твой вопрос.

Вкратце, Ethernet - это канальный уровень, IP - сетевой. Зная ip-адрес, твоя машина смотрит в таблицу маршрутизации и видит шлюз, через который можно добраться до этого ip-адреса(сетевой уровень), после чего через arp-запрос выясняет mac-адрес шлюза и далее на канальном уровне идёт обмен между твоим компом и шлюзом. Далее шлюз смотрит свою таблицу маршрутизации и узнаёт ближайший маршрутизатор, через который можно добраться до целевого ip-адреса(сетевой уровень) и точно так же выясняет mac-адрес этого маршрутизатора, после чего передаёт ему данные на канальном уровне. И эти действия повторяются на каждом маршрутизаторе, пока данные не дойдут до компьютера-получателя.

TCP же - это ещё уровнем выше. Это уже транспортный. А я тебе только что пересказал часть этой самой сетевой модели OSI. Так что лучше сходи и сам почитай. Пересказ всегда хуже оригинала.

shell-script ★★★★★
()
Ответ на: комментарий от i-rinat

Спасибо большое. Очень хороший ответ.

letni
() автор топика
Ответ на: комментарий от shell-script

Я понял :) Спасибо большое.

letni
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.