Как передаются сообщения между узлами в LAN(Ethernet)?
Помогите разобраться в таком нюансе: читаю сейчас литературу по сетевому програмированию(.NET) и буксую на моменте, где описана технология Ethernet(в частности передачи сообщений между узлами). В чем, собственно, вопрос: на нижнем подуровне 2-го уровня модели OSI проживает MAC-адрес и протокол ARP. Возьмем вполне стандартную ситуацию, когда у нас есть, к примеру, локальная одноранговая ethernet сеть(через кабели, к примеру), и нужно от одного узла передать сообщение другому. И есть волшебное устройство коммутатор(одним из главных св-в которого, как я понял, является разрешение коллизий локалок через прямую адресацию, используя МАС-адрес). Так вот, я хочу с одного узла отправить сообщение другому узлу, будет ли при отправке сообщение в пакете данных указываться MAC-адрес(исходный и получателя) или там будут IP-адреса(исходный и получателя), которые после захода в сетевой адаптер узла через протокол ARP будут преобразовываться в MAC-адрес, сверяться и т.д.? Прошу поправить, если допустил где-то ошибку.
Ответы (1 шт):
Да, будет, а как иначе? В пакете будут, и маки, и IP. За это отвечает ARP и таблица маршрутизации. Но MAC - это локомотив, который тянет ваш IP вагон, а на ближайшем узле локомотив прицепят другой, а вагон поедет дальше.
Когда вы что-то собираетесь сделать - у вас должен появиться конкретный вопрос. Когда вы что-то изучаете - у вас должна появиться конкретная гипотеза. Ни того не другого в вышеизложенном тексте я не увидел, а следовательно сделал вывод, что вы запутались, и вообще не поняли практически ничего про OSI. Попробуйте переизучить сначала.
Но я объясню на пальцах. Ethernet - это канальный уровень OSI передачи данных по локальной сети. Физический уровень OSI - это медный провод, Wi-Fi (к примеру 802.11n), передающий по радиоканалу, ну или множеству радиоканалов одновременно, кому как угодно, у оптики могут быть свои прибамбасы.
Так вот, MAC-адрес - это адрес физического сетевого устройства, так уж условились, что MAC адреса используются, и в мире меди, и оптики, и радио, но это условие для существования Интернета вовсе не обязательно, просто так получилось. Когда вы втыкаете медный провод, витую пару в компьютер одним концом, а в маршрутизатор другим - вы связываете 2 устройства по протоколу Ethernet, а чтобы они узнавали друг друга и не путались, они называют друг друга по имени - MAC адресу. В локальной сети, где все устройства могут видеть друг друга посредством коммутации, они видят эти адреса друг друга, при этом часть устройств могут быть подключены по Wi-Fi, часть по проводам, на канальном уровне Ethernet это не важно. Это и есть разница между физическим и канальным уровнями.
Но как только вам потребовался доступ в интернет, вы идете в магазин за маршрутизатором, потому что провайдер хочет отделить вашу локальную сеть от себя, и допускает подключение только одного устройства на физическом уровне, и вот здесь вступает в бой IP, и сама маршрутизация - сетевой уровень OSI.
Чтобы вам достучаться до устройства вне вашей локальной сети, вы отправляете пакет своему маршрутизатору с просьбой отправить его дальше, он делает то же самое, отправляя следующему маршрутизатору, и так далее. А так как IP, это стандарт сетевой адресации, а не протокол передачи данных, здесь вступает в бой TCP, и с IP они неразлучные друзья, поэтому и пишут TCP/IP. И рядом с TCP еще гуляет UDP. Это транспортный уровень OSI.
Далее на это все наращивается больше всякой всячины, которая уже способна гулять по всему интернету, я не буду про нее рассказывать. Успехов в освоении темы.
Кстати, а при чем здесь C#? Если кратко, то мир связи для C# начинается с уровня TCP/IP. Открывается сокет, улетает TCP пакет по IP адресу. Совершенно фиолетово, что там уровнями ниже. Вот и всё.