Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Это idle-игра стратегия о рыцарях, исследованиях, крафте и сражениях, которая предоставляет пользователям расслабляющий опыт. Игра не требует концентрации и идеально подходит, когда вам нужно сделать перерыв или отдохнуть.

Герои Мини-Королевства

Кликер, Стратегии, Мидкорные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Linux + Данные

С этим тегом используют

Windows IT Программирование Ubuntu IT юмор Компьютер Программист Статистика Инфографика Telegram (ссылка) Негатив Россия Интересное Экономика Все
5 постов сначала свежее
14
DELETED
10 месяцев назад
Серия IP протокол (IPv4)

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco⁠⁠

Господа, дамы, здравствуйте!

В прошлом посте обсудили MTU и некоторые важные особенности, связанные с размерами пакетов и кадров, в этом давайте посмотрим: как можно менять MTU на различном оборудование, для примера рассмотрим следующие устройства:

  1. Компьютер под управлением Linux, для этого будет использоваться виртуальная машина с Debian 10 (на схеме это Host_1).

  2. Компьютер под управлением Windows 10 (значок с подписью Win).

  3. Роутер CSR1000v под управлением IOS XE.

  4. Хотелось бы еще рассмотреть классические коммутаторы, но коммутаторы под управлением IOL в EVE-NG, как я понял, всё-таки являются multilayer свичами, а не классическими L2, плюс на IOL у меня не получилось изменить канальный MTU, но SW на схему добавлен и мы немного с ним поработаем.

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Схема, на которой будем всё это тестировать:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Схема для тестов с MTU

Зеленый кружок это возможность для выхода устройств лабы в реальную сеть, IP-адреса подписаны на схеме, а на линке SW/CSR кадры ходят в 200 влане, в сторону Windows кадры отдаются без метки.

Как изменить MTU на коммутаторе Cisco

Перед изменением MTU разберемся как его смотреть, есть стандартное заблуждение, что на оборудование Cisco в конфигурации нельзя увидеть значения MTU, если оно равно значению MTU по умолчанию, и действительно, команда show run не дает никаких результатов:

SW#sh run | in mtu

SW#sh run | in MTU

SW#

Можно даже посмотреть конфигурацию одного из интерфейсов:

SW#sh run int e0/0

Building configuration...

Current configuration : 29 bytes

!

interface Ethernet0/0

end

SW#

Но почему-то многие забывают что есть show run all:

SW#sh run all | in mtu

crypto ikev2 fragmentation mtu 576

mtu 1500

mpls mtu 1500

mtu 1500

mpls mtu 1500

mtu 1500

mpls mtu 1500

mtu 1500

mpls mtu 1500

no ip tcp path-mtu-discovery

SW#

В лабе EVE-NG используется коммутатор IOL, MTU у них меняются на интерфейсах. Вот пример конфигурации интерфейса Ethernet0/0:

SW#show run all | s Ethernet0/0

buffers Ethernet0/0 permanent 96

buffers Ethernet0/0 max-free 96

buffers Ethernet0/0 min-free 0

buffers Ethernet0/0 initial 0

interface Ethernet0/0

switchport

switchport access vlan 1

no switchport nonegotiate

no switchport protected

no switchport port-security mac-address sticky

mtu 1500

no ip arp inspection trust

ip arp inspection limit rate 15 burst interval 1

ip arp inspection limit rate 15

load-interval 300

carrier-delay 2

no shutdown

tx-ring-limit 64

tx-queue-limit 64

no macsec replay-protection

no macsec

ipv6 mfib forwarding input

ipv6 mfib forwarding output

ipv6 mfib cef input

ipv6 mfib cef output

mpls mtu 1500

snmp trap link-status

no onep application openflow exclusive

cts role-based enforcement

no mka pre-shared-key

mka default-policy

cdp tlv location

cdp tlv server-location

cdp tlv app

arp arpa

arp timeout 14400

channel-group auto

spanning-tree port-priority 128

spanning-tree cost 0

hold-queue 2000 in

hold-queue 0 out

ip igmp snooping tcn flood

no bgp-policy accounting input

no bgp-policy accounting output

no bgp-policy accounting input source

no bgp-policy accounting output source

no bgp-policy source ip-prec-map

no bgp-policy source ip-qos-map

no bgp-policy destination ip-prec-map

no bgp-policy destination ip-qos-map

SW#

Если не увидели в выводе выше значение MTU, то вот строки: mtu 1500, mpls mtu 1500. Все интерфейсов на коммутаторе четыре:

SW#

SW#sh int des

Interface Status Protocol Description

Et0/0 up up

Et0/1 up up

Et0/2 up up

Et0/3 up up

SW#

Посмотреть MTU на интерфейсе можно еще и так:

SW#sh int e0/0 | in MTU

MTU 1500 bytes, BW 10000 Kbit/sec, DLY 1000 usec,

SW#

Это канальный MTU. В конфигурации каждого порта мы видим два MTU: Ethernet и MPLS, оба равны 1500 байт, но порт можно перевести в режим роутера, тогда у него появится еще и IP MTU. Переводим порт:

SW#conf t

SW(config)#int e0/1

SW(config-if)#no switchport

Посмотрим какие MTU есть на коммутаторе:

SW#sh run all | in mtu

crypto ikev2 fragmentation mtu 576

mtu 1500

mpls mtu 1500

mtu 1500

ip mtu 1500

mpls mtu 1500

mtu 1500

mpls mtu 1500

mtu 1500

mpls mtu 1500

no ip tcp path-mtu-discovery

SW

Появилась строка ip mtu 1500, она относится к порту Ethernet0/1. Чтобы посмотреть IP MTU можно воспользоваться вот такой командной:

SW#sh ip int e0/1

Ethernet0/1 is up, line protocol is up

Internet protocol processing disabled

SW#

Возникла ошибка, дело в том, что интерфейс e0/1 переведен в режим роутера, но на нем не работает IP процесс, чтобы он заработал, надо настроить IP-адрес:

SW#conf t

Enter configuration commands, one per line.

SW(config)#int e0/1

SW(config-if)#ip add

SW(config-if)#ip address 1.1.1.1 255.255.255.0

Теперь мы можем посмотреть IP MTU и другие параметры процесса IP:

SW#sh ip int e0/1

Ethernet0/1 is up, line protocol is up

Internet address is 1.1.1.1/24

Broadcast address is 255.255.255.255

Address determined by setup command

MTU is 1500 bytes

MPLS MTU посмотреть можно так (но MPLS должен быть включен на интерфейсе):

SW# sh mpls interfaces e0/1 detail

Interface Ethernet0/1:

Type Unknown

IP labeling not enabled

LSP Tunnel labeling not enabled

IP FRR labeling not enabled

BGP labeling not enabled

MPLS not operational

MTU = 1500

SW#

Изменить канальный MTU можно было бы вот такой командой:

SW#conf t

SW(config)#int e0/1

SW(config-if)#mtu 1600

% Interface Ethernet0/1 does not support user settable mtu.

SW(config-if)#

IP MTU на образах IOL меняется:

SW(config-if)#ip mtu 1000

MPLS MTU тоже можно поменять:

SW(config-if)#mpls mtu 1100

Итоговая конфигурация интерфейса теперь такая:

SW#sh run int e0/1

Building configuration...

Current configuration : 106 bytes

!

interface Ethernet0/1

no switchport

ip address 1.1.1.1 255.255.255.0

ip mtu 1000

mpls mtu 1100

end

SW#

Классические коммутаторы Cisco, как правило, не позволяют менять MTU отдельных интерфейсов и не имеют конфигураций MPLS MTU, у них есть так называемый system mtu, который позволяет задавать MTU всем интерфейсам сразу, показать не могу, поэтому отправлю к странице Configuration Guide для Catalyst 2960.

Команда Ping и размеры пакетов при пинге

Порт e0/1 на коммутаторе никак не влияет на передачу данных между хостами. MTU на всех линках, которые обеспечивают связность между ПК, сейчас стандартный и равен 1500 байт. Давайте в этом убедимся пингом с одного хоста на другой:

user@debian:~$ ping 10.0.0.6 -M do -s 1472 -c 4

PING 10.0.0.6 (10.0.0.6) 1472(1500) bytes of data.

1480 bytes from 10.0.0.6: icmp_seq=1 ttl=127 time=1.20 ms

1480 bytes from 10.0.0.6: icmp_seq=2 ttl=127 time=1.51 ms

1480 bytes from 10.0.0.6: icmp_seq=3 ttl=127 time=1.46 ms

1480 bytes from 10.0.0.6: icmp_seq=4 ttl=127 time=1.76 ms

Здесь стоит обратить внимание на то, что опция -s 1472 задает размер ICMP вложения без учета ICMP и IP заголовков, таким образом получается, что сформированный IP-пакет равен 1500 байт. В этом легко убедиться, если посмотреть на дамп Wireshark:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Размер пакета, который был сгенерирован при пинге с опцией -s 1472 в Linux

Если указать размер 1473 байта, то пинга не будет:

user@debian:~$ ping 10.0.0.6 -M do -s 1473 -c 3

PING 10.0.0.6 (10.0.0.6) 1473(1501) bytes of data.

ping: local error: Message too long, mtu=1500

ping: local error: Message too long, mtu=1500

ping: local error: Message too long, mtu=1500

--- 10.0.0.6 ping statistics ---

3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 43ms

user@debian:~$

На скрине зеленым выделен размер кадра, красным IP-пакета. А теперь сделаем пинг с роутера в сторону Debian:

CSR#ping 10.0.0.2 size 1500 df-bit

Type escape sequence to abort.

Sending 5, 1500-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:

Packet sent with the DF bit set

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 1/63/121 ms

CSR#ping 10.0.0.2 size 1501 df-bit

Type escape sequence to abort.

Sending 5, 1501-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:

Packet sent with the DF bit set

.....

Success rate is 0 percent (0/5)

CSR#

По результату пингов можно сделать вывод, что в IOS XE задается размер IP пакета при выполнении пинга. В Windows при пинге задается размер ICMP вложения без учета заголовков IP и ICMP:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Пинг в Windows с указанием размера payload ICMP и запретом на фрагментацию

Вывод из этого всего простой. Когда вы задаете размеры чего-то при пинге, всегда узнавайте, чего именно размер вы задаете.

Как изменить MTU на роутере Cisco?

Фактически способы изменения различных MTU на роутере мы рассмотрели, когда говорили про коммутаторы, т.к. для примера использовался multilayer switch. Но давайте все-таки кое-что посмотрим.

Для начала обратим внимание что максимальный канальный MTU на интерфейсе роутера может быть 9216 байт:

CSR#configure terminal

Enter configuration commands, one per line. End with CNTL/Z.

CSR(config)#int gi1

CSR(config-if)#mtu ?

<1500-9216> MTU size in bytes

CSR(config-if)#mtu

При этом сейчас канальный MTU равен 1500 байт, давайте посмотрим на возможные значение IP и MPLS MTU:

CSR(config-if)#ip mtu ?

<68-1500> MTU (bytes)

CSR(config-if)#mpls mtu ?

<64-1500> MTU (bytes)

Изменим L2 MTU, зададим максимальное значение:

CSR(config-if)#mtu 9216

CSR(config-if)#do sh int gi1 | in MTU

MTU 9216 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

Значение изменилось, а теперь давайте посмотрим на значения, которые можно задать IP и MPLS MTU:

CSR(config-if)#ip mtu ?

<68-9216> MTU (bytes)

CSR(config-if)#mpls mt

<64-9216> MTU (bytes)

Их верхняя граница отодвинулась на значение 9216 байт, при этом у IP минимальный MTU может быть равен 68 байт, а у Ethernet и MPLS 64. Давайте теперь посмотрим на линк в сторону коммутатора, в самом начале я упоминал, что на этом линке используется 200 влан, со стороны роутера настроен саб-интерфейс с номером 200, который инкапсулирует кадры в 200 влан, конфигурация выглядит так:

CSR# sh run int gi2

Building configuration...

Current configuration : 96 bytes

!

interface GigabitEthernet2

description toHost_2_via_SW

no ip address

negotiation auto

end

CSR# sh run int gi2.200

Building configuration...

Current configuration : 100 bytes

!

interface GigabitEthernet2.200

encapsulation dot1Q 200

ip address 10.0.0.5 255.255.255.252

end

CSR#

Поясню по поводу саб-интерфейса Gi2.200: о том, что на кадры нужно ставить метку с номером 200, говорит строка encapsulation dot1Q 200, цифра 200 после Gi2 это номер саб-интерфейса, эта цифра не обязана совпадать с номером влана, но для удобства их обычно делают одинаковыми.

Саб-интерфейс и влан в данном случае я городил, чтобы посмотреть на связь между MTU физического интерфейса и MTU саб-интерфейса.

Посмотрим какие MTU сейчас на Gi2 и Gi2.200:

CSR#sh int gi2 | in MTU

MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

CSR#sh int gi2.200 | in MTU

MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

CSR#sh ip int gi2.200 | in MTU

MTU is 1500 bytes

CSR#

Посмотрим какой MTU можно задать саб-интерфейсу:

CSR(config)#int gi2.200

CSR(config-subif)#mtu ?

<1500-9216> MTU size in bytes

Выставим саб-интерфейсу L2 и L3 MTU равными 1600 байт:

CSR(config)#int gi2.200

CSR(config-subif)#mtu 1600

CSR(config-subif)#ip mtu ?

<68-1500> MTU (bytes)

CSR(config-subif)#ip mtu

Роутер съел команду mtu 1600, но при этом задать ip mtu 1600 возможности нет. Давайте посмотрим применился ли L2 MTU 1600 для саб-интерфейса:

CSR#sh int gi2.200 | in MTU

MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

CSR#

А вот и не изменился. Выставим L2 MTU 1600 байт для Gi2:

CSR(config)#int gi2

CSR(config-if)#mtu 1600

CSR(config-if)#do sh int gi2 | in MTU

MTU 1600 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

CSR(config-if)#

Выставили, он применился. Посмотрим MTU Gi2.200:

CSR(config-if)#do sh int gi2.200 | in MTU

MTU 1600 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

CSR(config-if)#

Увеличим MTU Gi2 до 1700 байт и посмотрим канальный MTU Gi2.200:

CSR(config)#int gi2

CSR(config-if)#mtu 1700

CSR(config-if)#do sh int gi2.200

GigabitEthernet2.200 is up, line protocol is up

Hardware is CSR vNIC, address is 5000.0002.0001 (bia 5000.0002.0001)

Internet address is 10.0.0.5/30

MTU 1700 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

Канальный MTU саб-интерфейса увеличивается вместе с канальным MTU основного интерфейса. L3 MTU теперь тоже можно сделать 1700 байт, но мы сделаем 1600 байт:

CSR(config)#int gi2.200

CSR(config-subif)#ip mtu ?

<68-1700> MTU (bytes)

CSR(config-subif)#ip mtu 1600

CSR(config-subif)#do sh run int gi2.200

Building configuration...

Current configuration : 113 bytes

!

interface GigabitEthernet2.200

encapsulation dot1Q 200

ip address 10.0.0.5 255.255.255.252

ip mtu 1600

end

CSR(config-subif)#do sh ip int gi2.200 | in MTU

MTU is 1600 bytes

CSR(config-subif)#do sh int gi2.200 | in MTU

MTU 1700 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

CSR(config-subif)#

Какие выводы мы можем сделать из увиденного?

  1. В IOS XE значение Ethernet MTU саб-интерфейса наследуется от основного интерфейса.

  2. Сетевым MTU саб-интерфейса можно управлять, но он не может быть больше канального.

  3. Плюс нужно не забывать, что это пример конкретного оборудования с конкретной операционной системой, и на каком-то ином оборудование поведение может быть другим, поэтому либо читайте документацию, либо тестируйте, а лучше и то и другое.

По факту в IOS XE на саб-интерфейсе можно менять IP MTU и MPLS MTU, канальный MTU наследуется, это подтверждает вывод sh run all:

CSR#sh run all | b GigabitEthernet2.200

interface GigabitEthernet2.200

...

encapsulation dot1Q 200

ip address 10.0.0.5 255.255.255.252

....

ip mtu 1600

...

mpls mtu 1700

.....

!

По результатам sh run all видим, что нет даже возможности задать канальный mtu на саб-интерфейсе, а вот конфигурация основной интерфейс.

CSR#sh run all | b GigabitEthernet2

interface GigabitEthernet2

description toHost_2_via_SW

...

mtu 1700

...

ip mtu 1700

...

mpls mtu 1700

...

!

Для дальнейшего рассмотрения я вернул MTU всех интерфейсов на 1500 байт.

Размер Ethernet заголовка и настройки MTU

В прошлом посте про MTU я говорил, что есть некоторые стандарты, которые увеличивают размер заголовка, самый очевидный и часто используемый в компьютерных сетях стандарт это 802.1q или VLAN, он добавляет к полю заголовка 4 байта, то есть эта добавка никак не должна влиять на способность оборудования пропустить кадр с MTU 1500, если на интерфейсах этого оборудования настроено 1500 байт.

Убедимся в этом, запустим пинг из Linux в Windows IP-пакетами размером 1500 байт и снимем дамп с двух линков:

  1. На линке Host_1/CSR. Здесь кадр идет без поля 802.1q.

  2. На линке CSR/SW, здесь кадры идут с меткой 200.

На линке коммутатор/Windows дамп снимать смысла нет, потому что коммутатор убирает метку, когда отдает кадр в сторону ПК. Пинг:

user@debian:~$ ping 10.0.0.6 -M do -s 1472

PING 10.0.0.6 (10.0.0.6) 1472(1500) bytes of data.

1480 bytes from 10.0.0.6: icmp_seq=1 ttl=127 time=56.6 ms

1480 bytes from 10.0.0.6: icmp_seq=2 ttl=127 time=1.19 ms

1480 bytes from 10.0.0.6: icmp_seq=3 ttl=127 time=1.46 ms

1480 bytes from 10.0.0.6: icmp_seq=4 ttl=127 time=1.57 ms

1480 bytes from 10.0.0.6: icmp_seq=5 ttl=127 time=1.79 ms

1480 bytes from 10.0.0.6: icmp_seq=6 ttl=127 time=1.88 ms

Дамп с линка между Линуксом и роутером:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Ethernet кадр без метки размером 1514 байт с вложением 1500 байт

Зеленым выделен размер кадра (Dst MAC + Src MAC + Type + Payload). Красным выделен размер пакета 1500 байт. Теперь кадр на линке между роутером и коммутатором:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Ethernet кадр с меткой размером 1518 байт с вложением 1500 байт

Размер кадра увеличен до 1518 байт за счет того, что к заголовку добавились поля 802.1Q, но IP-пакет по-прежнему 1500 байт, данный кадр прошел через линк с MTU 1500 байт и это правильное поведение оборудование, но если вы работаете с каким-нибудь noname китайским тестируйте такие моменты.

Как изменить MTU интерфейса в Windows 10?

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

C:\Windows\system32>netsh interface ipv4 show subinterfaces

MTU MediaSenseState Bytes In Bytes Out Interface

------ --------------- --------- --------- -------------

4294967295 1 0 2885 Loopback Pseudo-Interface 1

1500 1 5304932209 130883729 Ethernet

1500 1 7203292 7209265 Ethernet 2

1500 1 1665597 7301481 Ethernet 3

C:\Windows\system32>

В левом столбце значение L2 MTU, вывод я такой делаю, потому что можно посмотреть расширенные настройки интерфейсов:

C:\Windows\system32>netsh interface ipv4 show interfaces level=verbose

Interface Loopback Pseudo-Interface 1 Parameters

----------------------------------------------

IfLuid : loopback_0

IfIndex : 1

State : connected

Metric : 75

Link MTU : 4294967295 bytes

Reachable Time : 30500 ms

Base Reachable Time : 30000 ms

Retransmission Interval : 1000 ms

DAD Transmits : 0

Site Prefix Length : 64

Site Id : 1

Forwarding : disabled

Advertising : disabled

Neighbor Discovery : disabled

Neighbor Unreachability Detection : disabled

Router Discovery : dhcp

Managed Address Configuration : enabled

Other Stateful Configuration : enabled

Weak Host Sends : disabled

Weak Host Receives : disabled

Use Automatic Metric : enabled

Ignore Default Routes : disabled

Advertised Router Lifetime : 1800 seconds

Advertise Default Route : disabled

Current Hop Limit : 0

Force ARPND Wake up patterns : disabled

Directed MAC Wake up patterns : disabled

ECN capability : application

Interface Ethernet Parameters

----------------------------------------------

IfLuid : ethernet_32768

IfIndex : 8

State : connected

Metric : 25

Link MTU : 1500 bytes

Reachable Time : 20000 ms

Base Reachable Time : 30000 ms

Retransmission Interval : 1000 ms

DAD Transmits : 3

Site Prefix Length : 64

Site Id : 1

Forwarding : disabled

Advertising : disabled

Neighbor Discovery : enabled

Neighbor Unreachability Detection : enabled

Router Discovery : dhcp

Managed Address Configuration : enabled

Other Stateful Configuration : enabled

Weak Host Sends : disabled

Weak Host Receives : disabled

Use Automatic Metric : enabled

Ignore Default Routes : disabled

Advertised Router Lifetime : 1800 seconds

Advertise Default Route : disabled

Current Hop Limit : 0

Force ARPND Wake up patterns : disabled

Directed MAC Wake up patterns : disabled

ECN capability : application

И тут написано Link MTU. Поменяем значение MTU интерфейсу со значением Ethernet на 1600 байт через командую строку. Изменения рекомендую вносить через командую строку, запущенную от имени администратора:

C:\Windows\system32>netsh interface ipv4 set subinterface "Ethernet" mtu=1600 store=persistent

Ok.

C:\Windows\system32>netsh interface ipv4 show subinterfaces

MTU MediaSenseState Bytes In Bytes Out Interface

------ --------------- --------- --------- -------------

4294967295 1 0 5345 Loopback Pseudo-Interface 1

1600 1 272969 38897 Ethernet

1500 1 7203292 7221915 Ethernet 2

1500 1 3137674 15390579 Ethernet 3

Слово "Ethernet" в команде для смены MTU это имя интерфейса, имена интерфейсов можно посмотреть командой ipconfig. В графическом интерфейсе можно изменить размер кадров, который должен уметь обрабатывать интерфейс, заходим в меню "Настройки параметров адаптера" и здесь жмем ПКМ на нужный интерфейс:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Перечень адаптеров в Windows 10

Выбираем пункт "Свойства"/"Properties".

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Меню просмотра и настроек свойств выбранного интерфейса

Жмем на кнопку "Configure..."/"Настроить...". А далее идем по цифрам:

Настройка MTU в Windows, Linux, на коммутаторах и роутерах Cisco Сисадмин, Компьютерные сети, IT, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Урок, Обучение, YouTube, Образование, Видео, Ethernet, Длиннопост, Windows, Linux

Меню включения Jumbo Frame на сетевых интерфейсах в Windows 10

В русской версии Windows меню "Jumbo Packet" перевели как "Большой кадр". Значение 9014 байт это именно что размер кадра, потому что после того как будет выбрано 9014 байт, MTU интерфейса станет 9000 байт:

C:\Windows\system32>netsh interface ipv4 show subinterfaces

MTU MediaSenseState Bytes In Bytes Out Interface

------ --------------- --------- --------- -------------

4294967295 1 0 6695 Loopback Pseudo-Interface 1

1600 1 570470 92983 Ethernet

9000 1 0 2656 Ethernet 2

1500 1 4577930 22004973 Ethernet 3

C:\Windows\system32>

Когда вы включаете Jumbo кадры, интерфейс перезагружается.

Как изменить MTU в Linux?

Перейдем к Linux. Разберемся как проверять MTU на интерфейсах.

Прежде чем продолжить сделаю одно примечания. В посте о настройке лабы TTL я довольно подробно описал базовые сетевые настройки для Debian 10, плюс там же дал некоторые полезные ссыли, поэтому сейчас на этом вопросе подробно не останавливаюсь.

На конкретном интерфейсе MTU смотрим так:

user@debian:~$ ip link show dev ens3

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:00 brd ff:ff:ff:ff:ff:ff

user@debian:~$

На всех интерфейсах можно посмотреть так:

user@debian:~$ ip link list

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:00 brd ff:ff:ff:ff:ff:ff

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:01 brd ff:ff:ff:ff:ff:ff

Или вот так:

user@debian:~$ ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:00 brd ff:ff:ff:ff:ff:ff

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:01 brd ff:ff:ff:ff:ff:ff

Или даже так:

user@debian:~$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:03:00 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.180/24 brd 192.168.0.255 scope global dynamic ens3

valid_lft 6939sec preferred_lft 6939sec

inet6 fe80::250:ff:fe00:300/64 scope link

valid_lft forever preferred_lft forever

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:03:01 brd ff:ff:ff:ff:ff:ff

inet 10.0.0.2/30 brd 10.0.0.3 scope global ens4

valid_lft forever preferred_lft forever

inet6 fe80::250:ff:fe00:301/64 scope link

valid_lft forever preferred_lft forever

Разберемся с тем, как сделать временные изменения MTU на интерфейсе, изменять будем на ens3, этот интерфейс включен в мою домашнюю сеть, а через нее в интернет, для проверки попинуем Гугл:

user@debian:~$ ping -s 1473 -M do 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 1473(1501) bytes of data.

ping: local error: Message too long, mtu=1500

ping: local error: Message too long, mtu=1500

^C

--- 8.8.8.8 ping statistics ---

2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 19ms

user@debian:~$ ping -s 1472 -M do 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 1472(1500) bytes of data.

1480 bytes from 8.8.8.8: icmp_seq=1 ttl=109 time=54.9 ms

1480 bytes from 8.8.8.8: icmp_seq=2 ttl=109 time=55.4 ms

^C

--- 8.8.8.8 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 2ms

rtt min/avg/max/mdev = 54.873/55.123/55.374/0.343 ms

user@debian:~$

Пакеты размером 1501 байт не проходят, пакеты размером 1500 байт проходят. Изменим MTU:

sudo ip link set ens3 mtu 1400

Запустим пинг:

user@debian:~$ ping -s 1373 -M do 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 1373(1401) bytes of data.

ping: local error: Message too long, mtu=1400

ping: local error: Message too long, mtu=1400

ping: local error: Message too long, mtu=1400

^C

--- 8.8.8.8 ping statistics ---

3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 36ms

user@debian:~$ ping -s 1372 -M do 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 1372(1400) bytes of data.

1380 bytes from 8.8.8.8: icmp_seq=1 ttl=109 time=55.3 ms

1380 bytes from 8.8.8.8: icmp_seq=2 ttl=109 time=55.3 ms

^C

--- 8.8.8.8 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 3ms

rtt min/avg/max/mdev = 55.322/55.328/55.334/0.006 ms

user@debian:~$

Пакеты размером 1401 байт не проходят, 1400 байт проходят. Посмотрим параметры интерфейса:

user@debian:~$ ip link show dev ens3

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000nani

link/ether 00:50:00:00:03:00 brd ff:ff:ff:ff:ff:ff

user@debian:~$

У интерфейса ens3 MTU будет 1400 байт до перезагрузки машины, после ребута он вновь станет 1500 байт. Разберемся как изменить MTU на постоянной основе, как и большая часть других настроек Linux, постоянные изменения применяются через изменение конфигурационных файлов. Открываем файл с сетевыми настройками любым удобным редактором:

sudo nano /etc/network/interfaces

Находим конфигурацию нужного нам интерфейса и добавляем в нее значение MTU нужного нам размера, в моем случае 1400 байт:

#to_CSR

allow-hotplug ens4

iface ens4 inet static

address 10.0.0.2/30

up ip route add 10.0.0.4/30 via 10.0.0.1

mtu 1400

Стоит учитывать что название и расположение файла с сетевыми настройками зависит от дистрибутива, с которым вы работаете. Давайте проверим изменился ли MTU:

user@debian:~$ ip link show dev ens4

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:01 brd ff:ff:ff:ff:ff:ff

Нет, он по-прежнему 1500 байт, надо передернуть:

user@debian:~$ sudo ifdown ens4

user@debian:~$ sudo ifup ens4

user@debian:~$ ip link show dev ens4

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:03:01 brd ff:ff:ff:ff:ff:ff

user@debian:~$

Просто ifup будет недостаточно, сперва интерфейс надо выключить, потом включить. Контрольная проверка пингами:

user@debian:~$ ping -s 1373 -M do 10.0.0.1

PING 10.0.0.1 (10.0.0.1) 1373(1401) bytes of data.

ping: local error: Message too long, mtu=1400

ping: local error: Message too long, mtu=1400

^C

--- 10.0.0.1 ping statistics ---

2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 15ms

user@debian:~$ ping -s 1372 -M do 10.0.0.1

PING 10.0.0.1 (10.0.0.1) 1372(1400) bytes of data.

1380 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=60.9 ms

1380 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=0.641 ms

1380 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=0.591 ms

1380 bytes from 10.0.0.1: icmp_seq=4 ttl=255 time=0.595 ms

^C

--- 10.0.0.1 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 61ms

rtt min/avg/max/mdev = 0.591/15.670/60.856/26.088 ms

user@debian:~$

И не забывайте, что в Linux есть замечательная утилита grep, которая позволяет избежать просмотра портянок различного рода конфигураций и диагностических выводов:

user@debian:~$ ip a | grep mtu

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000

user@debian:~$

Ну и всё, спасибо, что дочитали!

Вопрос для вашего ответа

Почему роутер дает возможность установить минимальный MTU для IP 68 байт, а для MPLS и Ethernet 64 байта? В чем логика, если IP это вложение в Ethernet и тот же IP может быть закрыт MPLS заголовком?

Видео версия

Видео версия для тех, кому проще посмотреть и послушать, чем почитать.

Показать полностью 9 1
[моё] Сисадмин Компьютерные сети IT Роутер IP Протокол Сети Связь Телеком Данные Системное администрирование Инженер Урок Обучение YouTube Образование Видео Ethernet Длиннопост Windows Linux
2
9
DELETED
11 месяцев назад
Серия IP протокол (IPv4)

Настройка лабы в EVE-NG к посту о Time to Live⁠⁠

Господа, дамы, здравствуйте!

Предыдущая публикация была о TTL и в ней для демонстрации работы я использовал небольшую лабу, собранную в EVE-NG, этот пост для тех, кто хочет самостоятельно собрать такую же лабу и немного поэксперементировать. Ниже мы разберемся с некоторыми особенностями настроек роутеров и хостов лабы TTL.

Чего не будет в посте

Здесь не будет гайда о том, как установить виртуалку и поднять на ней EVE-NG, т.к. таких гайдов много, плюс есть официальная документация.

  1. Вот на этом ютуб канале есть много гайдов на русском языке по EVE.

  2. Вот раздел документации на официальном сайте. Если вы планируете использовать версию EVE-NG для бедных, то рекомендую начать с раздела Community Cookbook, в интернете есть где-то даже машинный перевод этой документации.

В лабе используются хосты, поднятые на образах Debian 10, но гайдов по работе с Linux здесь тоже не будет, я лишь опишу действия, которые делал, чтобы поднять лабу. Если хотите разобраться со всеми этими линуксами, то рекомендую посты пользователя @doatta. Есть еще два хороших канала на Ютубе: Кирилла Семаева и UNИX, у второго есть еще свой сайт.

В лабе протоколом маршрутизации выбран OSPF, сейчас я лишь покажу как его настроить, чтобы заработало, но детальных пояснений не будет, возможно, когда-нибудь я доберусь до OSPF.

Настройка роутеров

В целом, в настройках роутеров ничего сложно нет, вот основные моменты:

  1. Каждому роутеру был задан Loopback адрес с маской /32, каждый октет адреса равен номеру роутера, сделано это было просто для удобства, например, для R3 это 3.3.3.3/32.

  2. На интерфейсах роутеров были назначены р2р сети, принцип назначения объяснялся в посте про TTL.

  3. Маршрутизация использовалась динамическая, протокол OSPF.

  4. Петля делалась за счет статического маршрута на R4.

Но, наверное, мне нужно было бы начать с напоминания топологии:

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Топология сети, которую будем настраивать

IP настройки на интерфейсах

Вот так настраиваются Loopback интерфейсы на роутерах (на примере R5, фактически для этой лабы Lo адреса и не нужны):

R5#conf t

R5(config)#interface lo0

R5(config-if)#description system

R5(config-if)#ip address 5.5.5.5 255.255.255.255

На других роутерах меняется только IP-адрес. IP настройки на интерфейсах роутеров Cisco подробно рассматривались здесь. Но, если что, вот пример настроек на физических интерфейсах R5:

interface FastEthernet0/0

description to_Host_2

ip address 192.168.2.17 255.255.255.0

speed auto

full-duplex

interface FastEthernet0/1

description to_R4

ip address 10.4.5.5 255.255.255.0

speed auto

full-duplex

Настройки OSPF

Детально про настройку OSPF говорить не буду. Но его конфиг я покажу, вот так он выглядит на R5:

R5#conf t

R5(config)#router ospf 100

R5(config-router)#network 5.5.5.5 0.0.0.0 area 0

R5(config-router)#network 10.0.0.0 0.255.255.255 area 0

R5(config-router)#network 192.168.2.0 0.0.0.255 area 0

На R1 строку network 192.168.2.0 0.0.0.255 area 0 нужно будет заменить на network 192.168.1.0 0.0.0.255 area 0. На других роутерах третья команда network не нужна.

Краткое пояснение по командам OSPF

Командной router ospf 100 мы запускаем процесс OSPF на роутере и даем ему номер 100, как понимаете, на роутере может работать несколько разных процессов OSPF, при этом на двух соседних роутерах номера их OSPF процессов могут не совпадать, но обычно их делают одинаковыми для удобства.

Команда network довольно интересная, первое число, похожее на IP-адрес, это номер сети, второе число, похожее на маску сети, на самом деле wildcard mask, на русский язык ее переводят как обратная маска или инверсная маска, но сути ее работы это название не отражает. Когда-нибудь я про не напишу, сейчас отправлю в Яндекс или Гугл.

Можно сказать, что команда network это правило для маршрутизатора, роутер перебирает свои IP-интерфейсы и проверяет: попадают ли они под правило, заданные командой network или нет. Если интерфейс попадает под правило, то на нем включается OSPF процесс, интерфейс включается в регион, который указан после ключевого слова area, а информация о сети, которая настроена на этом интерфейсе, будет рассказана другим маршрутизаторам, с которыми установлено OSPF соседство.

Примечание:

Такая конфигурация OSPF подходит для лабы, но не подходит для реальных сетей. Как минимум, потому, что считается небезопасной, дело в том, что командой network 192.168.2.0 0.0.0.255 area 0 мы включаем OSPF на интерфейсе fa0/0, и роутер будет пытаться найти OSPF соседей за портом fa0/0. Fa0/0 это порт в сторону клиента, за которым на самом деле может оказаться злоумышленник.

Выход из такой ситуации у Cisco называется passive-interface, у Huawei такая же фича называется silent-interface. Вообще, хорошим тоном с точки зрения безопасности сети, является включение OSPF руками на тех сетевых линках, где он вам действительно нужен, а сети с клиентских интерфейсов, если это действительно требуется, вкидывать процессу OSPF через механизм редистрибьюции маршрутов.

Под правило network 5.5.5.5 0.0.0.0 area 0 попадает интерфейс Lo0, на нем включается OSPF процесс, сам интерфейс включается в нулевой регион, его адрес относится к сети 5.5.5.5/32, R5 начинает рассказывать всем своим OSPF соседям о том, что у него есть такая сеть.

Посмотреть OSPF интерфейсы на роутере можно так:

R5#show ip ospf int br

Interface PID Area IP Address/Mask Cost State Nbrs F/C

Fa0/0 100 0 192.168.2.17/24 10 DR 0/0

Fa0/1 100 0 10.4.5.5/24 10 DR 1/1

Lo0 100 0 5.5.5.5/32 1 LOOP 0/0

Если нужна какая-то более детальная информация по интерфейсу:

R5#show ip ospf int fa0/1

FastEthernet0/1 is up, line protocol is up

Internet Address 10.4.5.5/24, Area 0

Process ID 100, Router ID 5.5.5.5, Network Type BROADCAST, Cost: 10

Transmit Delay is 1 sec, State DR, Priority 1

Designated Router (ID) 5.5.5.5, Interface address 10.4.5.5

Backup Designated router (ID) 4.4.4.4, Interface address 10.4.5.4

Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5

oob-resync timeout 40

Hello due in 00:00:01

Supports Link-local Signaling (LLS)

Cisco NSF helper support enabled

IETF NSF helper support enabled

Index 2/2, flood queue length 0

Next 0x0(0)/0x0(0)

Last flood scan length is 1, maximum is 2

Last flood scan time is 0 msec, maximum is 0 msec

Neighbor Count is 1, Adjacent neighbor count is 1

Adjacent with neighbor 4.4.4.4 (Backup Designated Router)

Suppress hello for 0 neighbor(s)

Для создания петли маршрутизации на роутере R4 прописывался вот такой статический маршрут:

R4#sh run | in ip ro

ip route 192.168.2.12 255.255.255.255 10.3.4.3

R4#

На статиках сейчас останавливаться не буду, скоро будет отдельный пост.

Настройка и подготовка хостов

Теперь о подготовке и настройке хостов. Я не сисадмин Linux, поэтому, возможно, действия, описанные ниже, можно сделать более оптимально и просто, но тут уж как смог.

Для начала разберемся, где взять образы дистрибутивов Linux для EVE-NG, во-первых, на официальном сайте, там же есть гайд: текст + видео. На Ютуб канале, который был обозначен в начале поста есть видео о том, как подготовить свой дистрибутив для эмуляции в EVE-NG.

Настройки EVE-NG для хостов

Теперь о некоторых настройках в EVE-NG, которые я использовал для хостов. При первом запуске образа Linux в EVE-NG для подключения к хосту придется использовать VNC. Мне через VNC с отдельными окнами для каждого хоста работать было неудобно, поэтому я решил проблему так: на эмулируемом образе создал два порта, один из которых был подключен в лабу, второй был подключен в мою домашнюю сеть. На порт, который смотрит в домашнюю сеть, IP-адрес прилетает по DHCP от домашнего роутера, по этому адресу я и подключался к машине в дальнейшем.

Вот первичные настройки виртуальной машины в EVE:

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Первичные настройки в EVE-NG для хостов

Чтобы эмулируемые в лабе устройства могли получать адреса от физического роутера, в сетевых настройках VMWare для виртуалки EVE-NG должен быть включен bridge. Настройка производится вот здесь, вот так:

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Нужно поставить чекрыжик на Bridged... и галку на Replicate physical...

На топологию лабы нужно добавить интерфейс/устройство, через которое виртуальные хосты, могли бы подключаться к реальной физической сети, надо сделать так: по рабочей области жмем ПКМ, в меню выбираем Network, в появившемся окне в списке Type выбираем как на скрине ниже.

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Добавляем устройство для организации связности между виртуальной сетью и физической

Образ Linux одним линком нужно будет подключить к появившемуся облаку, это облако свяжет его с физической сетью.

На официальном сайте EVE образ Debian идут с графическим интерфейсом, но все примеры настроек сделаны в эмуляторе терминала, во-первых, это быстрее, во-вторых, я не знаю как делать сетевые настройки в Linux через графику.

Если вы скачали образ Debian с официального сайта EVE (а я так и сделал), то там уже будет создан пользователь с логином user и паролем Test123.

Настройка sudo на хостах

Мне удобнее работать через sudo, в Debian sudo нужно включить, вот перечень команд для этого:

su

#ввести пароль Test123

apt install sudo

exit

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Установка sudo в Debian 10

Для пользователя с логином user правка файла /etc/sudoers не требуется, но если хотите создать нового пользователя и работать из-под него, то не забудьте отредактировать файл sudoers, добавив запись аналогичную той, что сделана для user.

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Содержимое файла sudoers

Сетевые настройки хостов

Теперь к сетевым настройкам на хостах. Командой ip a смотрим сетевые интерфейсы, которые сейчас есть.

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Список IP-интерфейсов

Интерфейс ens3 соответствует интерфейсу e0 на топологии EVE-NG, интерфейс ens4 это e1, этот мануал я пишу уже после того, как собрал изначальную схему и записал видео, т.е. ниже буду рассказать как добавить третий образ на схему (для исходных двух хостов отличаться будут только настраиваемые IP-адреса и прописываемые статики), физически я его подключил так:

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Настраиваем узел с именем Linux

Перед тем как продолжать докладываю, этих ваших команд в Linux вагон и маленькая тележка, список команд можно увеличивать за счет установки новых программ и утилит, но базовые команды по работе с сетью и интерфейсами можно найти в этой шпаргалке на сайте Red Hat.

Я хочу чтобы на ens3 мне приходили настройки из моей реальной сети по DHCP, давайте это организуем, пишем команду:

sudo nano /etc/network/interfaces

В данном файле можно делать различные сетевые настройки, VIM не использую, потому что не хочу писать гайд о том, как из него выйти. В этом файле пишем настройки для интерфейса ens3, пишем их так:

# to_local_network

allow-hotplug ens3

iface ens3 inet dhcp

Строка с решеткой это просто комментарий, вторая строка говорит том, что ens3 надо включать сразу как включится образ, третья строка заставляет машину начинать слать DHCP запросы через ens3, чтобы получить свои сетевые настройки. В файле это выглядит так:

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Настройка получения IP-адресов по DHCP в Debian 10

Далее нажимаем Ctrl+O чтобы сохранить, Ctrl+X закрыть файл. Если вы после редактирования напишите ip a, то увидите, что сетевые настройки на ens3 по DHCP не прилетают, на самом деле они и не запрашиваются, значит нужно передернуть, передергивать интерфейс будем такой командой:

sudo ifup ens3

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Смотрим настройки сетевых интерфейсов после передергивания

После этого мы видим, что адрес был выдан и это 192.168.0.130. Всё, по этому адресу мы можем подключаться при помощи SSH клиента, который установлен на основной операционной системе, плюс образ Linux теперь имеет доступ к интернету.

Настройки SSH на клиенте, через который мы будем подключаться к Debian, стандартные, в SecureCRT они находятся здесь:

Настройка лабы в EVE-NG к посту о Time to Live Сисадмин, Linux, Debian, Компьютерные сети, IT, Хост, Роутер, IP, Протокол, Сети, Связь, Телеком, Данные, Системное администрирование, Инженер, Длиннопост

Настройки SSH на клиенте

Для того чтобы была возможность подключаться по SSH на виртуальной машине должен быть запущен SSH сервер, который должен слушать 22 порт на предмет входящих подключений, сам порт должен быть открыть, включен ли сервер и какой порт он слушает можно проверить так:

user@debian:~$ sudo systemctl status ssh

● ssh.service - OpenBSD Secure Shell server

Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)

Active: active (running) since Sat ... CDT; 39min ago

Docs: man:sshd(8)

man:sshd_config(5)

Process: 471 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)

Main PID: 491 (sshd)

Tasks: 1 (limit: 4689)

Memory: 5.7M

CGroup: /system.slice/ssh.service

└─491 /usr/sbin/sshd -D

debian systemd[1]: Starting OpenBSD Secure Shell server...

debian sshd[491]: Server listening on 0.0.0.0 port 22.

debian sshd[491]: Server listening on :: port 22.

Строка Active: active (running) означаете, что сервер включен, по портам, полагаю, не нужно пояснять. Посмотреть открытые tcp/udp порты можно еще и так:

ss -lnput #UDP+TCP

ss -lu #только UDP

ss -tl #только TCP

Если не установлен ssh сервер его надо установить, в Debian и ему подобных дистрибутивах это делается так:

sudo apt update

sudo apt install openssh-server

Если 22 порт закрыт, его надо открыть, вариантов почему порт закрыт, может быть много, например, у вас установлен фаервол ufw и он не разрешает подключение к 22 порту, открыть порт можно будет так:

sudo ufw allow ssh

С вопросом подключения по SSH мы разобрались, нам надо теперь разобраться с интеграцией образа Linux в лабу, для этого на ens4 нужно назначить IP-адрес:

sudo nano /etc/network/interfaces

# to_lan_network

allow-hotplug ens4

iface ens4 inet static

address 192.168.3.25/24

# gateway 192.168.3.1

up ip route add 192.168.1.0/24 via 192.168.3.1 #первый статик

up ip route add 192.168.2.0/24 via 192.168.3.1 #второй статик

up ip route add 10.0.0.0/8 via 192.168.3.1 #третий статик

Строка iface ens3 inet static говорит о том, что адрес на интерфейс надо назначить руками, строка address 192.168.3.25/24 сообщает операционной системе какой IP-адрес и маску мы хотим использовать на этом интерфейсе. Строка # gateway 192.168.3.1 закомментирована, если убрать решетку, то машина будет считать, что за портом ens4 находится шлюз по умолчанию. Эту строку я закомментировал, потому что мой домашний роутер по DHCP сообщил, что именно он является шлюзом по умолчанию для данного хоста(а через домашний роутер осуществляется выход в интернет, а обычным домашним компьютерам и роутерам живется проще, когда они дорогу в интрнет знают не как full view, а как маршрут по умолчанию).

В связи с тем, что домашний роутер является шлюзом по умолчанию, но третий хост все-таки должен знать как добраться до других устройств лабы, пришлось писать и три статических маршрута: первый нужен чтобы был доступен узел Host_1, второй нужен чтобы был доступен Host_2, третий нужен чтобы были доступны p2p сети, настроенные между роутерами между роутерами. Если нужно чтобы были доступны Loopback интерфейсы роутеров, статики до них нужно тоже прописать.

Посмотрим применились ли настройки на ens4:

user@debian:~$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3

valid_lft 4963sec preferred_lft 4963sec

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff

inet6 fe80::250:ff:fe00:801/64 scope link noprefixroute

valid_lft forever preferred_lft forever

user@debian:~$

Наших настроек на ens4 не видим, статических маршрутов, которые мы добавили, тоже не увидим:

user@debian:~$ ip route show

default via 192.168.0.1 dev ens3

192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.130

user@debian:~$

Надо передернуть, скажете вы:

user@debian:~$ sudo ifup ens4

user@debian:~$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3

valid_lft 4476sec preferred_lft 4476sec

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff

inet 192.168.3.25/24 brd 192.168.3.255 scope global ens4

valid_lft forever preferred_lft forever

user@debian:~$

И будете правы, получилось! Сразу после этого в таблице маршрутизации должны будут появиться маршруты, которые мы задавали статикой:

user@debian:~$ ip route show

default via 192.168.0.1 dev ens3

10.0.0.0/8 via 192.168.3.1 dev ens4

192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.130

192.168.1.0/24 via 192.168.3.1 dev ens4

192.168.2.0/24 via 192.168.3.1 dev ens4

192.168.3.0/24 dev ens4 proto kernel scope link src 192.168.3.25

user@debian:~$

Если не появились, надо будет напечатать в эмуляторе терминала три команды из файла interfaces, но уже без ключевого слова up, вот так:

ip route add 192.168.1.0/24 via 192.168.3.1

ip route add 192.168.2.0/24 via 192.168.3.1

ip route add 10.0.0.0/8 via 192.168.3.1

Чтобы новый хост получил связность с другими узлами сети, нужно не забыть выполнить настройки на R3(донастроить OSPF + настроить интерфейс в сторону хоста), показывать я это уже не буду.

Для просмотра базовой информации о сетевых и канальных параметрах есть четыре команды:

ПОСМОТРЕТЬ СЕТЕВЫЕ НАСТРОЙКИ:

user@debian:~$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3

valid_lft 4166sec preferred_lft 4166sec

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff

inet 192.168.3.25/24 brd 192.168.3.255 scope global ens4

valid_lft forever preferred_lft forever

ПОСМОТРЕТЬ КАНАЛЬНЫЕ ПАРАМЕТРЫ:

user@debian:~$ ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff

ARP ТАБЛИЦА:

user@debian:~$ ip neigh show

192.168.0.101 dev ens3 lladdr 8c:55:4a:a9:b9:dd REACHABLE

192.168.0.1 dev ens3 lladdr b#:#0:24:#0:#f:#0 STALE

ТАБЛИЦА МАРШРУТИЗАЦИИ:

user@debian:~$ ip route show

default via 192.168.0.1 dev ens3

10.0.0.0/8 via 192.168.3.1 dev ens4

192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.130

192.168.1.0/24 via 192.168.3.1 dev ens4

192.168.2.0/24 via 192.168.3.1 dev ens4

192.168.3.0/24 dev ens4 proto kernel scope link src 192.168.3.25

user@debian:~$

Давайте проверим доступность R3:

user@debian:~$ ping 192.168.3.1

PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.

64 bytes from 192.168.3.1: icmp_seq=1 ttl=255 time=9.88 ms

64 bytes from 192.168.3.1: icmp_seq=2 ttl=255 time=11.1 ms

64 bytes from 192.168.3.1: icmp_seq=3 ttl=255 time=2.07 ms

^C

--- 192.168.3.1 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 5ms

rtt min/avg/max/mdev = 2.074/7.673/11.067/3.988 ms

user@debian:~$

Успех, а теперь попингуем Host_1 и Host_2:

PING 192.168.1.15 (192.168.1.15) 56(84) bytes of data.

^C

--- 192.168.1.15 ping statistics ---

4 packets transmitted, 0 received, 100% packet loss, time 75ms

user@debian:~$

user@debian:~$ ping 192.168.2.12

PING 192.168.2.12 (192.168.2.12) 56(84) bytes of data.

^C

--- 192.168.2.12 ping statistics ---

4 packets transmitted, 0 received, 100% packet loss, time 68ms

user@debian:~$

А вот хосты не доступны. Вопрос: почему? На роутерах настройки корректные. Что надо сделать, чтобы эти узлы стали доступны?

Напоследок дам еще некотрые пояснения. Сетевые настройки мы выполняли в файле /etc/network/interfaces для того, чтобы после перезагрузки виртуальной машины они сохранились. Но адреса можно настраивать временно без сохранения в настроек в файл.

В примере ниже адрес 192.168.3.44/24 добавляется на интерфейс ens4 как secondary, поскольку основной адрес у нас уже задан, а add означает добавить. Вторичный адрес будет активен до перезагрузки.

user@debian:~$ sudo ip address add 192.168.3.44/24 dev ens4

user@debian:~$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3

valid_lft 6906sec preferred_lft 6906sec

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff

inet 192.168.3.25/24 brd 192.168.3.255 scope global ens4

valid_lft forever preferred_lft forever

inet 192.168.3.44/24 scope global secondary ens4

valid_lft forever preferred_lft forever

user@debian:~$

На этом, собственно, всё. Видео к данном посту нет и не планировалось.

Показать полностью 11
[моё] Сисадмин Linux Debian Компьютерные сети IT Хост Роутер IP Протокол Сети Связь Телеком Данные Системное администрирование Инженер Длиннопост
1
ggrl
2 года назад

Восстановление данных, не работает флешка⁠⁠

Перестала запускаться флешка. Компьютер видит, но не открывает.

Восстановление данных, не работает флешка Флешки, Не работает, Восстановление, USB, Данные, Компьютерная помощь, Linux

В интернете рекомендуют воспользоваться различными программами для восстановления данных или для работы с разделами дисков. Они не помогают, флешка в них определяется, но не работает. Либо выкинуть флешку. Больше советов не нашел.


Предлагаю решение на эту тему, т.к. вопросов много, а ответов нет.

1) Скачиваете самый простой linux live на рабочий носитель. Я воспользовался slax

2) Запускаем (изменив в биосе приоритет загрузки)

3) Вставляем флешку, она открывается. Работаем с ней.

В моем случае, флешка открывалась не больше чем на минуту, этого хватило для переноса данных в несколько заходов.

Так-же в интернете можно найти множество команд (в отличии от windows) для работы с флешкой в linux. Есть возможность восстановление носителя, если он имеет программный сбой.

Показать полностью
Флешки Не работает Восстановление USB Данные Компьютерная помощь Linux
3
12
4etk0
4etk0
4 года назад
Статистика

СРАВНЕНИЕ ПОПУЛЯРНОСТИ ОПЕРАЦИОННЫХ СИСТЕМ (2003-2020) [ИНФОГРАФИКА]⁠⁠

Сравнение популярности операционных систем начиная с 2003 по 2020 года.


В статистике не стал учитывать серверные ОС в виду их малочисленности использования.

Данные: https://www.w3schools.com/browsers/browsers_os.asp

Показать полностью
[моё] Windows Linux Mac Статистика Данные Видео
35
36
balaev84av
7 лет назад
GNU/Linux

Архивация и компрессия файлов. Часть 2⁠⁠

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


Сжатие не следует воспринимать как "удаление ненужных частей". Важно, чтобы восстановленный файл имел точно такое же содержимое, что исходный (совпадения размеров файлов - не достаточно).


Есть много алгоритмов компрессии и много форматов сжатых файлов. В UNIX и Linux популярны форматы сжатия Bzip2, Gzip (традиционный), LZMA, XZ. Для примера - те же три файла:


$ cd works

$ cp old/file?.* today/


Компрессор gzip для формата Gzip обычно удаляет файл-операнд; иначе нужна опция -k (от keep):


$ cd today

$ gzip -k file?.*

$ du -k file?.*

100 file1.000

4 file1.000.gz

100 file2.rnd

104 file2.rnd.gz

100 file3.txt

32 file3.txt.gz


Шаблоны имён здесь раскрывает оболочка. Расширение имени здесь добавляется, а не заменяет исходное.

Понятие "степень сжатия" (compression ratio) толкуется по-разному: 1) "какую долю от размера исходного файла составляет размер сжатого файла" либо 2) "какую долю удалось убрать". Обычно выражается в процентах.


Выше видно, что нулевой файл имеет степень сжатия (1) в четыре процента (то есть сжат в 25 раз), случайный файл - 104% (то есть лучше было бы его вовсе не сжимать), текстовый файл - 32% (то есть примерно втрое уменьшился).


Вот вывод компрессором информации об архиве, в том числе степени сжатия в смысле (2):


$ gzip -l file3.txt.gz | column -t

compressed uncompressed ratio uncompressed_name

29806 102400 70.9% file3.txt


В выводе не учтены внутренние вспомогательные данные формата, здесь - около 3 КиБ: 100 - 71 = 29; 32 - 29 = 3.


Нередко алгоритм допускает несколько степеней сжатия. По умолчанию программа обычно выбирает нечто среднее. За более сильное сжатие (меньше размер) приходится платить увеличенными временем упаковки и расходом оперативной памяти. Нередко выигрыш в степени сжатия оказывается незначителен. Скорость распаковки остаётся прежней.


$ rm file{2,3}.*.gz

$ gzip -fkv --best file{2,3}.*

file2.rnd: -0.0% -- replaced with file2.rnd.gz

file3.txt: 70.9% -- replaced with file3.txt.gz

$ du -k file{2,3}.*

100 file2.rnd

104 file2.rnd.gz

100 file3.txt

32 file3.txt.gz


В данном случае - никакой разницы.


Опция -f - принудительное выполнение (от force), то есть здесь - заменить (replace) уже существующий сжатый файл новым. Опция --best - сжать наилучшим доступным алгоритмом (с параметрами, нацеленными на наиболее сильное сжатие).


Можно попробовать другой компрессор/формат, например bzip2 (Bzip2, ".bz2"):


$ bzip2 -k file3.txt

$ du -k file3.*

100 file3.txt

28 file3.txt.bz2

32 file3.txt.gz


Здесь есть небольшой выигрыш: 32 - 28 = 4.


Нет простого способа узнать, насколько сильным будет сжатие. Тексты часто сжимаются со степенью (1) ниже 50%. Хуже всего сжимаются хаотичные (случайные, шум) данные.


Для удобства можно считать, что для файлов средних размеров сжатие уместно, если степень (1) составляет 60% и ниже (то есть сэкономлено 40% места и больше). Если файл большой (1 ГиБ и выше), то даже небольшая экономия при сжатии может быть уместна. Уже сжатый файл обычно бесполезно сжимать ещё раз. Файлы размером ниже 3 КиБ сжимать тоже бесполезно.


Для "декомпрессии" (распаковки, извлечения оригинала) сжатого файла часто есть не только опция компрессора, но и отдельная программа-распаковщик. Или сам компрессор может быть запущен под другим именем файла (например, с жёсткой ссылкой) для распаковки - это зависит от программиста.


$ gzip -d -kf file2.rnd.gz

$ gunzip -kf file2.rnd.gz


Здесь или опция -d, или программа gunzip. Опции -k, -f - с прежним смыслом. Аналогично с BZip2:


$ bzip2 -d -kf file3.txt.bz2

$ bunzip2 -kf file3.txt.bz2

$ diff -qs /bin/bunzip2 /bin/bzip2

Файлы /bin/bunzip2 и /bin/bzip2 идентичны


Документация: man-страницы.


Чтобы задействовать содержимое оригинального (несжатого файла), обычно нужно явным способом распаковать сжатый. На это тратится процессорное время; в мобильном компьютере может быть повышенный расход заряда аккумулятора. Кроме того, степень сжатия непредсказуема или даже (1) выше 100%, поэтому при массовых правках файлов свободное место на диске может внезапно закончиться.


Чтобы задействовать содержимое оригинального (несжатого файла), обычно нужно явным способом распаковать сжатый. На это тратится процессорное время; в мобильном компьютере может быть повышенный расход заряда аккумулятора. Кроме того, степень сжатия непредсказуема или даже (1) выше 100%, поэтому при массовых правках файлов свободное место на диске может внезапно закончиться.


Есть несколько форматов файловых систем, где файлы сжимаются/распаковываются автоматически (говорят: "на лету" (on-the-fly) или "прозрачная (transparent) распаковка").


Есть аналоги привычных утилит с именами, начинающимися на bz (для BZip2), xz или z (GZip): bzcat, bzless, bzgrep и другие. Делают то же, что оригиналы, но со сжатыми файлами.


Midnight Commander, подобные ему двухпанельные диспетчеры файлов, некоторые другие диспетчеры - могут открывать/распаковывать архивы/сжатые файлы. Иногда есть возможность имитировать монтирование архива как каталога (только на чтение, иногда ещё и на запись). В таких случаях программе может понадобиться предварительно распаковать файлы во временный каталог (обычно куда-то в /tmp/). Это заметно как зависание программы при работе с большим (несколько десятков МиБ и выше) архивом.


В UNIX и Linux компрессия традиционно является операцией над одиночным файлом. То есть для компрессии каталога с содержимым - нужно сначала создать архив, а потом его сжимать (либо, реже, - сжать каждый файл, а потом заархивировать всё).


Архиватор tar может задействовать какой-либо компрессор, если тот воспринимает просто имя файла как сигнал к сжатию либо воспринимает опцию -d как сигнал к распаковке (декомпрессии). Опции tar для внешних компрессоров: -z для gzip, -j для bzip2, -J для xz. Для остальных компрессоров - опция -I (заглавная i, после которой указать имя программы). Примеры:


# Архив tar внутри сжатого файла Gzip одной командой.

$ tar -cvz -f archive.tar.gz "old"

old/

old/file3.txt

old/file1.000

old/file2.rnd

$ du -s archive.tar.gz

136 archive.tar.gz

# Вывод сокращён.

$ file archive.tar.gz

archive.tar.gz: gzip compressed data


# Архив tar внутри сжатого файла Bzip2 одной командой.

$ tar -cj -f archive.tar.bz2 "old"

$ du -s archive.tar.bz2

132 archive.tar.bz2

$ file archive.tar.bz2

archive.tar.bz2: bzip2 compressed data, block size = 900k


# Архив tar внутри сжатого файла LZMA одной командой.

$ tar -c -I lzma -f archive.tar.lzma "old"

$ du -s archive.tar.lzma

128 archive.tar.lzma

$ file archive.tar.lzma

archive.tar.lzma: LZMA compressed data, streamed


Вместо множественных расширений вида ".tar.gz" могут попадаться одиночные: ".tgz", ".tbz", ".txz" и другие - по традиции или при необходимости соблюдать ограничения на длину имени. Устаревший компрессор - compress; расширение ".Z"; в tar есть опция -Z.


# Примеры распаковки сжатых архивов одной командой:

$ rm -r old/

$ tar -xj -f archive.tar.bz2

# Или:

$ tar -x -I lzma -f archive.tar.lzma


Чтобы изменить содержимое сжатого архива, программе приходится его предварительно распаковывать, а после внесения изменений - заново упаковывать обратно. Это затраты времени, оперативной памяти и, возможно, пространства на диске для временного хранения. Может оказаться удобнее - упаковать файлы в поддереве по отдельности, не создавая архива. У gzip/gunzip есть опция -r (от recursive). Для других программ можно задействовать find (и, если нужно, xargs).


В семействе Windows привыкли воспринимать архивацию и компрессию как единую, неделимую операцию. Часто говорят "заархивировать" в смысле "получить сжатый архив"; "разархивировать" - "выполнить и декомпрессию, и извлечение из архива". Или: "упаковать" и "распаковать" файлы. И сжатые файлы называют "архивами". Для большинства пользователей важно именно сжатие данных, а архивация подразумевается сама собой.


Популярные в Windows форматы сжатых файлов с возможностью хранения файлового поддерева (архива): ZIP, RAR. Соответственно программы: для командной строки - zip.exe, rar.exe; для GUI - WinZip, WinRAR. Диспетчер файлов системы Windows - Проводник (Explorer) может смонтировать архив ZIP как подкаталог там, где находится сам файл архива. Есть и другие программы, в том числе поддерживающие много форматов, например: 7-Zip, PeaZip (и вышеуказанные WinZip, WinRAR).


Набор программ p7zip (в том числе 7z, 7za) является вариантом 7-Zip для командной строки UNIX и Linux. Формат 7z может давать более сильное сжатие, чем Gzip и Bzip2.


В Linux может быть проблема с форматом ZIP для файловых имён, содержащих не-латиницу. У ZIP есть свой внутренний формат хранения имён. Если создать архив в Windows, а потом попытаться распаковать в Linux, имена превратятся в наборы кракозябров. В последнее время дистрибутивы обычно поставляют исправленные программы unzip и zip. Или придётся пробовать перекодировать имена программой iconv или convmv.


Возможные (ненадёжно) варианты перекодировки имени (предполагаемый в примере файл сохранил расширение ".pdf" на латинице, поэтому файл можно как-то задействовать через шаблон оболочки):


$ N=$(ls *.pdf | iconv -f cp1252 -t cp850 | iconv -f cp866)

# Или другой вариант:

$ N=$(ls *.pdf | iconv -t iso8859-1 | iconv -f cp866)


# После каждого варианта просмотреть

# содержимое переменной N для перекодированного имени.

$ echo $N

# И если имя выглядит разумно, то:

$ mv *.pdf "$N"

$ unset N


Программы для Windows часто поставляются в виде особых архивов, в том числе формата Microsoft Cabinet (".cab"). Такие архивы по лицензионным соглашениям запрещено распаковывать вручную. Для Linux есть программа cabextract.


Иногда в России встречаются старые форматы архивов с внутренней компрессией: ARJ, HA, LHA и другие. Для Linux могут найтись программы: arj, ha, unar. Иначе может понадобиться устанавливать FreeDOS/Wine или иную среду выполнения DOS/Windows-программ, а потом искать соответствующие декомпрессоры.


В Windows нередко создают "самораспаковывающиеся" (self-extracting) архивы: это программа-распаковщик, к которой присоединён собственно архив. Как и обычная программа для Windows, имеют расширение ".exe". Предназначены для пользователей, у которых нет своей копии распаковщика. Иногда такой архив можно распаковать и в Linux (зависит от формата архива и наличия программ, например 7-zip). Нежелательны к применению, потому что могут содержать программы-вирусы. Не следует запускать напрямую, а лучше - открыть отдельным распаковщиком. В Linux иногда делают сценарии оболочки, состоящие из команды на распаковку и присоединённого к сценарию архива; программы: makeself, shar (sharutils).


В некоторых форматах архивов и/или сжатых файлов предусмотрено шифрование с паролем: 7z, RAR, ZIP и другие.


Компрессия данных может встретиться и на системном уровне. Например, в некоторых файловых системах нулевые фрагменты (пустые блоки) внутри файлов не хранятся и не копируются (это называется "разреженные файлы", sparse files).


Программы для GUI: Archive Manager (File Roller) для GNOME, Ark для KDE, Engrampa для MATE, PeaZip, Xarchiver. Они отображают содержимое архивов, подобно тому как диспетчеры файлов отображают содержимое каталогов; предоставляют меню команд создания/распаковки архивов. Но сами не содержат программного кода архиваторов/компрессоров, поэтому требуют установки библиотек (libarchive, liblzma, unrar и других) и самих архиваторов/компрессоров для командной строки.


В файлах мультимедиа (изображения, звук, видео) часто применяют алгоритмы "несимметричного" сжатия, то есть с частичной потерей информации. Это позволяет сжать данные ещё сильнее (в десятки или больше раз). Некоторые потери в деталях изображений или в звуковых волнах уместны, если средний человек эти оттенки/детали/шумы и прочее не различает. Такие алгоритмы обычно имеют широкий набор настроек, поэтому нужно следить за тем, чтобы качество мультимедиа не стало плохим, явно заметным.

Показать полностью
[моё] Данные Для начинающих Gzip Linux Длиннопост Текст Компрессия
18
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии