Сетевое программирование уровня 2 OSI
Недавно я взял несколько классов по сетевому взаимодействию (CCNA с 1 по 4), поэтому я понимаю большую часть теории, стоящей за всем этим. То, что я хотел бы сделать сейчас, это взять эти знания и применить их на практике в виде небольших приложений.
Я читал некоторые статьи на MSDN о том, как это сделать, но они, кажется, охватывают только сетевое программирование на уровне 3 или 4 и выше, IIRC. То, что я ищу, - это несколько простых примеров того, как иметь дело со связностью второго уровня (т. Е. Кадрированием) между хостами, или даже просто с чем-то простым, например, как выполнять широковещательную передачу Ethernet.
У меня есть небольшой опыт работы с C# и C++, поэтому примеры, которые используют любой из этих языков, были бы хорошими.
Благодарю.
3 ответа
Для Windows взгляните на WinPcap, который обеспечивает низкоуровневый доступ к сети. Пакет разработчика уже содержит несколько простых примеров, с которых можно начать.
Кстати, в Linux есть пакетные сокеты.
Вы можете использовать сетевую библиотеку eEx для написания небольших приложений (я делал то же самое во время моего CCNA).
Это простая в использовании и объектно-ориентированная библиотека программирования.Net, которая позволяет перейти на второй уровень и отправлять пользовательские кадры через WinPcap.
Типы фреймов, такие как Ethernet, ARP, IP, UDP, TCP и RIP, реализованы, и, насколько я знаю, это протоколы, которые происходят во время CCNA.
Учебные руководства по C# доступны здесь, и если вы хотите рассмотреть что-то более глубокое, например, разрешение адресов, вы всегда можете взглянуть на исходный код, поскольку библиотека имеет открытый исходный код.
Очень вероятно, что вы могли бы изучить низкоуровневые сетевые утилиты в системах GNU/Linux или также изучить уровни ядра TCP, UDP или IP. Но, например, вещание через Ethernet - это что-то очень низкое и не очень полезное. И реальные примеры (обычно написанные на C, а не C++), вероятно, не могут быть простыми, потому что они имеют дело с обработкой ошибок.