пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Компания Cisco сейчас, безусловно, является лидером среди производителей сетевого оборудования, однако немалую часть этого рынка занимает оборудование компаний Huawei и Juniper, в которых команды для CLI отличаются от команд в Cisco IOS. Поэтому, мы собрали в таблицы основные и наиболее часто используемые команды для траблшутинга у Cisco и привели их аналоги в Huawei и Juniper. Поэтому, если вы знакомы с системой IOS, то эта таблица поможет на начальных этапах освоиться в других ОС.
Список основных команд, конечно, шире, поэтому если мы забыли упомянуть какие-то команды, напишите их комментариях.
Cisco
Huawei
show
display
traceroute
tracert
configure terminal
system-view
exit
quit
end
return
no
undo
reload
reboot
erase
delete
hostname
sysname
enable
super
disable
super 0
write memory / copy running-config startup-config
save
show ip route
display ip routing-table
show flash
dir flash:
clear
reset
show logging
display logbuffer
write terminal / show run
display current-configuration
show startup
display saved-configuration
show tech
display diagnostic-information
show ip nat translation
display nat session
enable secret
super pass cipher
snmp-server
snmp-agent
router ospf
ospf
router rip
rip
router bgp
bgp
show ospf neighbours
display ospf peer
show interfaces
display interface
show version
display version
show history
display history-command
show access-list
display acl all
shop ip nat translations
display nat session all
show mac address-table
display mac-address
show spanning-tree
display stp
debug / no debug
debugging / undo debugging
Получается как-то так. А если сравнить команды Cisco и Juniper?
Cisco
Juniper
show run
show configuration
show history
show cli history
show running-config
show configuration
show ip route
show route
show ip interface brief
show interface terse
show controller
show interfaces intfc extensive
show tech-support
request support info
reload
request system reboot
clock set
set date
show ip bgp
show route protocol bgp
show ip bgp neighbors
show ip bgp neighbor
show ip bgp summary
show bgp summary
clear ip bgp
clear bgp neighbor
show ip ospf database
show ospf database
show ip ospf interface
show ospf interface
show ip ospf neighbor
show ospf neighbor
show ip traffic
show system statistic
show logging
show log
no
delete
В семиуровневой модели OSI на различных уровнях имеются разные типы адресов. На канальном это MAC-адрес, а на сетевом это IP-адрес. И для того чтобы установить соответствие между этими адресами используется протокол Address Resolution Protocol – ARP. Именно о нем мы поговорим в этой статье.
Адресация
Адреса 2-го уровня используются для локальных передач между устройствами, которые связаны напрямую. Адреса 3-го уровня используются устройств, которые подключены косвенно в межсетевой среде. Каждая сеть использует адресацию для идентификации и группировки устройств, чтобы передачи прошла успешно. Протокол Ethernet использует MAC-адреса, которые привязаны к сетевой карте.
Чтобы устройства могли общаться друг с другом, когда они не находятся в одной сети MAC-адрес должен быть сопоставлен с IP-адресом. Для этого сопоставления используются следующие протоколы:
Address Resolution Protocol (ARP)
Reverse ARP (RARP)
Serial Line ARP (SLARP)
Inverse ARP (InARP)
Address Resolution Protocol
Устройству 3го уровня необходим протокол ARP для сопоставления IP-адреса с MAC-адресом, для отправки IP пакетов. Прежде чем устройство отправит данные на другое устройство, оно заглянет в свой кеш ARP где хранятся все сопоставления IP и MAC адресов, чтобы узнать, есть ли MAC-адрес и соответствующий IP-адрес для устройства, которому идет отправка. Если записи нет, то устройство-источник отправляет широковещательное сообщение каждому устройству в сети чтобы узнать устройству с каким MAC-адресом принадлежит указанный IP-адрес. Все устройства сравнивают IP-адрес с их собственным и только устройство с соответствующим IP-адресом отвечает на отправляющее устройство пакетом, содержащим свой MAC-адрес. Исходное устройство добавляет MAC-адрес устройства назначения в свою таблицу ARP для дальнейшего использования, создает пакет с новыми данными и переходит к передаче.
Проще всего работу ARP иллюстрирует эта картинка:
Первый компьютер отправляет broadcast сообщение всем в широковещательном домене с запросом “У кого IP-адрес 10.10.10.2? Если у тебя, то сообщи свой MAC-адрес” и на что компьютер с этим адресом сообщает ему свой MAC.
Когда устройство назначения находится в удаленной сети, устройства третьего уровня одно за другим, повторяют тот же процесс, за исключением того, что отправляющее устройство отправляет ARP-запрос для MAC-адреса шлюза по умолчанию. После того, как адрес будет получен и шлюз по умолчанию получит пакет, шлюз по умолчанию передает IP-адрес получателя по связанным с ним сетям. Устройство уровня 3 в сети где находится устройство назначения использует ARP для получения MAC-адреса устройства назначения и доставки пакета.
Кэширование ARP
Поскольку сопоставление IP-адресов с MAC-адресами происходит на каждом хопе в сети для каждой дейтаграммы, отправленной в другую сеть, производительность сети может быть снижена. Чтобы свести к минимуму трансляции и ограничить расточительное использование сетевых ресурсов, было реализовано кэширование протокола ARP.
Кэширование ARP - это способ хранения IP-адресов и связанных c ними MAC-адресов данных в памяти в течение определенного периода времени, по мере изучения адресов. Это минимизирует использование ценных сетевых ресурсов для трансляции по одному и тому же адресу каждый раз, когда отправляются данные. Записи кэша должны поддерживаться, потому что информация может устаревать, поэтому очень важно, чтобы записи кэша устанавливались с истечением срока действия. Каждое устройство в сети обновляет свои таблицы по мере передачи адресов.
Статические и динамические записи в кеше ARP
Существуют записи статического ARP-кэша и записи динамического ARP-кэша. Статические записи настраиваются вручную и сохраняются в таблице кеша на постоянной основе. Статические записи лучше всего подходят для устройств, которым необходимо регулярно общаться с другими устройствами, обычно в одной и той же сети. Динамические записи хранятся в течение определенного периода времени, а затем удаляются.
Для статической маршрутизации администратор должен вручную вводить IP-адреса, маски подсети, шлюзы и соответствующие MAC-адреса для каждого интерфейса каждого устройства в таблицу. Статическая маршрутизация обеспечивает больший контроль, но для поддержания таблицы требуется больше работы. Таблица должна обновляться каждый раз, когда маршруты добавляются или изменяются.
Динамическая маршрутизация использует протоколы, которые позволяют устройствам в сети обмениваться информацией таблицы маршрутизации друг с другом. Таблица строится и изменяется автоматически. Никакие административные задачи не требуются, если не добавлен лимит времени, поэтому динамическая маршрутизация более эффективна, чем статическая маршрутизация.
Устройства, которые не используют ARP
Когда сеть делится на два сегмента, мост соединяет сегменты и фильтрует трафик на каждый сегмент на основе MAC-адресов. Мост создает свою собственную таблицу адресов, которая использует только MAC-адреса, в отличие от маршрутизатора, который имеет кэш ARP адресов, который содержит как IP-адреса, так и соответствующие MAC-адреса.
Пассивные хабы - это устройства центрального соединения, которые физически соединяют другие устройства в сети. Они отправляют сообщения всем портам на устройства и работают на уровне 1, но не поддерживают таблицу адресов.
Коммутаторы уровня 2 определяют, какой порт подключен к устройству, к которому адресовано сообщение, и отправлять сообщение только этому порту, в отличие от хаба, который отправляет сообщение всем его портам. Однако коммутаторы уровня 3 - это маршрутизаторы, которые создают кеш ARP (таблица).
Inverse ARP
Inverse ARP (InARP), который по умолчанию включен в сетях ATM, строит запись карты ATM и необходим для отправки одноадресных пакетов на сервер (или агент ретрансляции) на другом конце соединения. Обратный ARP поддерживается только для типа инкапсуляции aal5snap. Для многоточечных интерфейсов IP-адрес может быть получен с использованием других типов инкапсуляции, поскольку используются широковещательные пакеты.
Reverse ARP
Reverse ARP (RARP) - работает так же, как и протокол ARP, за исключением того, что пакет запроса RARP запрашивает IP-адрес вместо MAC-адреса. RARP часто используется бездисковыми рабочими станциями, потому что этот тип устройства не имеет способа хранить IP-адреса для использования при их загрузке. Единственный адрес, который известен - это MAC-адрес, поскольку он выжигается в сетевой карте. Для RARP требуется сервер RARP в том же сегменте сети, что и интерфейс устройства.
Proxy ARP
Прокси-ARP был реализован для включения устройств, которые разделены на физические сегменты сети, подключенные маршрутизатором в той же IP-сети или подсети для сопоставления адресов IP и MAC. Когда устройства не находятся в одной сети канала передачи данных (2-го уровня), но находятся в одной и той же IP-сети, они пытаются передавать данные друг другу, как если бы они находились в локальной сети. Однако маршрутизатор, который отделяет устройства, не будет отправлять широковещательное сообщение, поскольку маршрутизаторы не передают широковещательные сообщения аппаратного уровня. Поэтому адреса не могут быть сопоставлены.
Прокси-сервер ARP включен по умолчанию, поэтому «прокси-маршрутизатор», который находится между локальными сетями, отвечает своим MAC-адресом, как если бы это был маршрутизатор, к которому адресована широковещательная передача. Когда отправляющее устройство получает MAC-адрес прокси-маршрутизатора, он отправляет данные на прокси-маршрутизатор, который по очереди отправляет данные на указанное устройство.
Proxy ARP вызывается следующими условиями:
IP-адрес назначения не находится в той же физической сети (LAN), на которой получен запрос.
Сетевое устройство имеет один или несколько маршрутов к IP-адресу назначения.
Все маршруты к IP-адресу назначения проходят через интерфейсы, отличные от тех, на которых получен запрос.
Когда proxy ARP отключен, устройство отвечает на запросы ARP, полученные на его интерфейсе, только если IP-адрес назначения совпадает с его IP-адресом или если целевой IP-адрес в ARP-запросе имеет статически настроенный псевдоним ARP.
Serial Line Address Resolution Protocol
Serial Line ARP (SLARP) используется для последовательных интерфейсов, которые используют инкапсуляцию High Link Level Link Control (HDLC). В дополнение к TFTP-серверу может потребоваться сервер SLARP, промежуточное (промежуточное) устройство и другое устройство, предоставляющее услугу SLARP. Если интерфейс напрямую не подключен к серверу, промежуточное устройство требуется для пересылки запросов сопоставления адреса на сервер. В противном случае требуется напрямую подключенное устройство с сервисом SLARP.
Уже прошло несколько лет с тех пор, как появился Kotlin, и он преуспевает. Так как Kotlin был создан в качестве замены Java, то его, как и следовало ожидать, во многом сравнивают именно с ним.
Чтобы помочь вам выбрать один из двух языков, я сравню основные аспекты каждого из них.
Вот 8 пунктов, которые я рассмотрю в этой статье:
Синтаксис
Лямбда-выражения
Обработка нулей
Классы предметной области
Глобальные переменные
Параллелизм
Функции расширения
Сообщество
Сравнение синтаксиса
Давайте сначала проведем сравнение базового синтаксиса. Я думаю, что многие из вас, кто читает эту статью, возможно, уже знают кое-что о Java и/или Kotlin, но я все же приведу пример, чтобы мы могли явно их сравнить:
Java
public class HelloClass {
public void FullName(String firstName, String lastName) {
String fullName = firstName + " " + lastName;
System.out.println("My name is : " + fullName);
}
public void Age() {
int age = 21;
System.out.println("My age is : " + age);
}
public static void main(String args[]) {
HelloClass hello = new HelloClass();
hello.FullName("John","Doe");
hello.Age();
}
}
Kotlin
class NameClass {
fun FullName(firstName: String, lastName:String) {
var fullName = "$firstName $lastName"
println("My Name is : $fullName")
}
}
fun Age() {
var age : Int
age = 21
println("My age is: $age")
}
fun main(args: Array) {
NameClass().FullName("John","Doe")
Age()
}
Код не сильно отличается, если не считать небольших различий в синтаксисе методов и классов.
Но реальное различие заключается в том, что Kotlin поддерживает вывод типов, где тип переменной не нужно объявлять. А еще там не нужны точки с запятой ( ; ).
Также можно отметить, что Kotlin не сильно придерживается принципов ООП, в отличие от Java, где все содержится внутри класса. Посмотрите хотя бы на функции Age и main в примере – они не находятся внутри класса.
Kotlin, как правило, имеет меньше строк кола, а вот Java придерживается традиционного подхода и, соответственно, является достаточно многословным.
Одно из преимуществ Kotlin перед Java – он может делать все, используя как традиционный ООП-подход, так и любой другой.
Лямбда-выражения
Если мы заговорили о Java и Kotlin, то мы, конечно же, должны поговорить об их знаменитых лямбда-выражениях. У Kotlin есть встроенная поддержка лямбда-функций (и всегда была), а вот в Java она появилась только в Java 8.
Давайте посмотрим, как они выглядят.
Java
//syntaxes
parameter -> expression
(parameter1, parameter2) -> { code }
//sample usage
ArrayList numbers = new ArrayList();
numbers.add(5);
numbers.add(9);
numbers.forEach( (n) -> { System.out.println(n); } );
Kotlin
//syntax
{ parameter1, parameter2 -> code }
//sample usage
max(strings, { a, b -> a.length < b.length })
В Java скобки не являются обязательными: если есть только один параметр, то они не нужны. Но в Kotlin скобки нужны всегда. Однако, в общем и целом, помимо синтаксиса, различий не так уж и много.
Как по мне, лямбда-функции используются только в качестве методов обратного вызова. Хоть они и имеют гораздо более широкий спектр применений, все же они не очень читабельны, в связи с чем их реже используют. Они, конечно, сократят объем вашего кода, но разобраться в нем потом будет достаточно сложно.
Это вопрос предпочтений, но мне кажется, что намного удобнее, когда скобки используются всегда, как в Kotlin, потому что так код становится более читабельным.
Обработка нулей
В объектно-ориентированном языке значения нулевого типа всегда были проблемой. Когда вы пытаетесь использовать содержимое нулевого значения, выпадает исключение нулевого указателя (NPE - Null Pointer Exception).
Поскольку NPE всегда были проблемой, то и у Java, и у Kotlin есть свой способ обработки нулевых объектов. Как они это делают, я покажу ниже.
Java
Object object = objServ.getObject();
//traditional approach of null checking
if(object!=null){
System.out.println(object.getValue());
}
//Optional was introduced in Java 8 to further help with null values
//Optional nullable will allow null object
Optional
