Есть две технологии в ИТ, которые казалось должны были исчезнуть на рубеже прошлого века, но их живучесть и удобство раз за разом отодвигает их уход со сцены. Речь идет об IPv4 и X11. Если первый из них практически во всех аспектах уступает IPv6, то преимущества Wayland, как технологии над X11 очевидны не всем. Wayland вовсе не универсален, как X Windows System, он намного более прост. Это дает ему ряд преимуществ по сравнению с иксами, но в этом же кроются его недостатки.

Если говорить о преимуществах, то это в первую очередь простота реализации и долгожданное избавление пользователей графической среды Linux от таких артефактов перерисовки, как разрывы изображения, a․ k․ a․ tearing. С этим особенно часто сталкиваются обладатели видеокарт NVidia. Хватает и недостатков и противники замены X-сервера напирают на гибкость использования сетевых возможностей в различных сценариях.

As mentioned, X is essentially a networking protocol with graphical displaying capabilities.

На самом деле X11 сетевой протокол с графическими возможностями, а не наоборот. Из этого простого факта следует, что даже если в скором времени основные дистрибутивы Linux перейдут на протокол Wayland, многие из возможностей и примеров использования X сервера будут востребованы еще достаточно долгое время. Удаленный доступ к приложениям и сессиям X.Org - современной реализации X Window System, одна из таких ключевых особенностей системы.

▍ Сетевая структура взаимодействий X-сервера


Наиболее распространенным IPC, т․ е․ способом взаимодействия между процессами, X-клиента и X-сервера, являются сокеты. Их роль в предоставлении API связи с использование TCP/IP, а также сокетов домена Unix. Помимо сокетов клиент и сервер для коммуникации могут также использовать иные каналы IPC, например MIT Shared Memory Extension.

Доменные сокеты Unix (от англ. Unix Domain Sockets, UDS) являются POSIX-механизмом IPC, с помощью которого различные процессы ОС могут взаимодействовать друг с другом. Такие сокеты эффективнее локальных TCP/IP соединений, так как не требуют дополнительных байтов в заголовке протокола. Подобно сокетам TCP/IP, доменные сокеты Unix поддерживают надёжную потоковую передачу данных с помощью SOCK_STREAM. Они также могут работать в режиме упорядоченной ( см․ SOCK_SEQPACKET) и неупорядоченной ( см․ SOCK_DGRAM) передачи датаграмм.


Рис. 1 Сетевое взаимодействие между клиентом и сервером X с помощью UDS.

UDS используют файловую систему ОС в качестве адресного пространства имён (например /tmp/my_xapp), сами сокеты в ней всего лишь inode, а процессы обращаются к сокетам, так же, как к файлу. Однако обмен данными в активном соединении использует не файловую систему, а только буферы памяти ядра.


Рис. 2 Сетевое взаимодействие между клиентом и сервером X поверх TCP/IP.

Сокеты TCP/IP и UDS создаются с помощью функции CreateWellKnownSockets(). Для этого она обращается к _XSERVTransMakeAllCOTSServerListeners. Эта процедура пробегает по каждому интерфейсу транспорта, поддерживаемого сервером.

static Bool
TryCreateSocket(int num, int *partial)
{
    char port[20];
    snprintf(port, sizeof(port), "%d", num);

<span class="hljs-keyword" style="color: rgb(0, 0, 255);">return</span> (_XSERVTransMakeAllCOTSServerListeners(port, partial,
    &ListenTransCount,
    &ListenTransConns) >= <span class="hljs-number" style="color: rgb(0, 128, 0);">0</span>);

}

Количество таких интерфейсов определено константой NUMTRANS в файле X11/Xtrans/Xtrans.c.

#define NUMTRANS        (sizeof(Xtransports)/sizeof(Xtransport_table))

Таблица Xtransports[] определена в том же самом файле и содержит 10 элементов, таким образом NUMTRANS ≤ 10.

|admin@redeye:[~]> grep '{ &TRANS' /usr/include/X11/Xtrans/Xtrans.c
    { &TRANS(SocketTCPFuncs),   TRANS_SOCKET_TCP_INDEX },
    { &TRANS(SocketINET6Funcs), TRANS_SOCKET_INET6_INDEX },
    { &TRANS(SocketINETFuncs),  TRANS_SOCKET_INET_INDEX },
    { &TRANS(SocketLocalFuncs), TRANS_SOCKET_LOCAL_INDEX },
    { &TRANS(SocketUNIXFuncs),  TRANS_SOCKET_UNIX_INDEX },
    { &TRANS(LocalFuncs),       TRANS_LOCAL_LOCAL_INDEX },
    { &TRANS(PTSFuncs),         TRANS_LOCAL_PTS_INDEX },
    { &TRANS(NAMEDFuncs),       TRANS_LOCAL_NAMED_INDEX },
    { &TRANS(PIPEFuncs),        TRANS_LOCAL_PIPE_INDEX },
    { &TRANS(SCOFuncs),         TRANS_LOCAL_SCO_INDEX },

Сами же флаги, которые во время сборки определяют транспортные интерфейсы X сервера, можно найти в xc/config/cf/linux.cf.

#if HasDECnet
# define ConnectionFlags    -DUNIXCONN -DTCPCONN -DDNETCONN
# define ExtraLibraries        -ldnet
#else
# define ConnectionFlags    -DUNIXCONN -DTCPCONN
#endif

Проследив цепочку до системного вызова socket() находим такую последовательность транспортных процедур.

TRANS(MakeAllCOTSServerListeners)
                 |
                 v               +-------------------------+
+----->TRANS(OpenCOTSServer)+--->|TRANS(SocketSelectFamily)|
|                |               |TRANS(SocketOpen)        |
|                v               +-------+-----------------+
|           TRANS(Open)                  |
|                |                       |
|                v                       v
+------+TRANS(ParseAddress)          socket()

Серверный процесс стартует с вызова функции TRANS(CreateListener) из Xtrans.c. Далее переход в состояние ожидания входящего соединения происходит в такой последовательности.

TRANS(MakeAllCOTSServerListeners)
   |
   v
TRANS(CreateListener)
   |
   v
TRANS(SocketCreateListener)
   |
   v
bind()  

В файле Xtransmit.h можно обнаружить X_TCP_PORT. Первое клиентское соединение будет использовать порт 6000, второе — 6001 и т․ д․

#define X_TCP_PORT    6000


▍ Взгляд изнутри трафика между клиентом и сервером X


Запустим простейшую иксовую программу Xclock и проверим как все это работает на практике.

|admin@redeye:[~]> DISPLAY=tcp/192.168.10.10:0.0 strace -e trace=network -f xclock 2>& 1  |grep -A3 TCP
1. socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP) = 3
2. setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
3. setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
4. connect(3, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("192.168.10.10")}, 16) = 0

В первой строке вывода видим, что системный вызов socket() завершился успешно и вернул файловый десткриптор 3. Далее, во второй строке setsockopt() выставляет параметр TCP_NODELAY, с которым TCP фрагменты отправляются по сети как можно ранее, даже если эти фрагменты слишком малы. В третьей строке опять встречается setsockopt() на это раз для активации опции SO_KEEPALIVE. Данный параметр поддерживает соединение в активном состоянии, с помощью периодической отправки служебных сообщений. Наконец в четвертой строке системный вызов connect() соединяет клиент X с сервером, по TCP порту 6000.

Используемый TCP порт напрямую связан с количеством соединений и номером переменной $DISPLAY, если бы использовалось DISPLAY=tcp/192.168.10.10:1.0, то тогда в последней строке connect() состоялся бы по TCP порту 6001.

После рукопожатия обмен данными происходит с использованием структур X-клиента — xConnClientPrefix, и X-сервера — xConnSetupPrefix, XconnSetup, определенных в файле /usr/include/X11/Xproto.h. Размер занимаемой памяти в структур в байтах определен в #define директивах заголовочного файла.

#define sz_xConnClientPrefix 12
#define sz_xConnSetupPrefix 8
#define sz_xConnSetup 32
...
typedef struct {
    CARD8       byteOrder;
    BYTE        pad;
    CARD16      majorVersion, minorVersion;
    CARD16      nbytesAuthProto;        /* Authorization protocol */
    CARD16      nbytesAuthString;       /* Authorization string */
    CARD16      pad2;
} xConnClientPrefix;
...
typedef struct {
    CARD8          success;
    BYTE           lengthReason; /*num bytes in string following if failure */
    CARD16         majorVersion,
                   minorVersion;
    CARD16         length;       /* 1/4 additional bytes in setup info */
} xConnSetupPrefix;



Рис. 3 Установка параметров соединения в сессии X11.

Можно также пронаблюдать за процессом с помощью сетевого анализатора, клиентский запрос Initial connection request соответствует вызову xConnClientPrefix. Соответственно Initial connection reply в следующем пакете создан со стороны xConnSetupPrefix и xConnSetup. Для сбора трафика можно запустить Wireshark и слушать локальный интерфейс, либо с помощью следующей команды tcpdump.

|root@redeye:[~]> tcpdump -i lo -vv not arp -w x11_trace.pcapng

Далее, сам файл можно открыть в Wireshark и отфильтровать просмотр по протоколу x11. Обычно для сбора трафика нужны привилегии root.


Рис. 4 Сетевой след соединения X11 в WireShark.

То же самое и во всех подробностях можно увидеть в tshark в текстовом формате. Так выглядит клиентский запрос X11 в сторону сервера.

Frame 11: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits)
    Encapsulation type: Ethernet (1)
    ...
    [Protocols in frame: eth:ethertype:ipv6:tcp:x11]
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Destination: 00:00:00_00:00:00 (00:00:00:00:00:00)
        Address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    ...
Internet Protocol Version 6, Src: ::1, Dst: ::1
    0110 .... = Version: 6
    ...
Transmission Control Protocol, Src Port: 49202, Dst Port: 6010, Seq: 1, Ack: 1, Len: 48
    Source Port: 49202
    Destination Port: 6010
    ...
X11, Request, Initial connection request
    byte-order: 0x6c (Little-endian)
    unused
    protocol-major-version: 11
    protocol-minor-version: 0
    authorization-protocol-name-length: 18
    authorization-protocol-data-length: 16
    unused
    authorization-protocol-name: MIT-MAGIC-COOKIE-1

Пакет с ответом со стороны X-сервера совсем не так лаконичен, в нем указаны все необходимые детали для форматирования графического вывода на экран.


Frame 13: 14698 bytes on wire (117584 bits), 14698 bytes captured (117584 bits)
    Encapsulation type: Ethernet (1)
    ...
    [Protocols in frame: eth:ethertype:ipv6:tcp:x11]
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Destination: 00:00:00_00:00:00 (00:00:00:00:00:00)
        Address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    ...
Internet Protocol Version 6, Src: ::1, Dst: ::1
    0110 .... = Version: 6
    ...
Transmission Control Protocol, Src Port: 6010, Dst Port: 49202, Seq: 1, Ack: 49, Len: 14612
    Source Port: 6010
    ...
X11, Reply, Initial connection reply
    success: 1
    unused
    protocol-major-version: 11
    protocol-minor-version: 0
    replylength: 3651
    release-number: 12011000
    resource-id-base: 0x0b200000
    resource-id-mask: 0x001fffff
    motion-buffer-size: 256
    length-of-vendor: 20
    maximum-request-length: 65535
    number-of-screens-in-roots: 1
    number-of-formats-in-pixmap-formats: 7
    image-byte-order: 0x00 (LSBFirst)
    bitmap-format-bit-order: 0x00 (LSBFirst)
    bitmap-format-scanline-unit: 32
    bitmap-format-scanline-pad: 32
    min-keycode: 8
    max-keycode: 255
    unused
    vendor: The X.Org Foundation
    pixmap-format
        pixmap-format
    ...
        pixmap-format
    ...
    screen
        screen (000007a4: 1920 x 1080 x 24)
            root: 0x000007a4
            default_colormap: 0x00000020
            white_pixel: 0x00ffffff
            black_pixel: 0x00000000
            current_input_masks: 0x00fa8033
            width_in_pixels: 1920
            height_in_pixels: 1080
            width_in_millimeters: 451
            height_in_millimeters: 254
            min_installed_maps: 1
            max_installed_maps: 1
            root_visual: 0x00000021
            backing_stores: 0x01
            save_unders: False
            root_depth: 24
            allowed_depths_len: 7
            depth-detail
                depth-detail
                    depth: 24
                    unused
                    visualtypes-numbers: 576
                    unused
                    visualtype
                        visualtype
                ...
                        visualtype
                ...
                        visualtype
                ...


▍ Удаленное подключение к X-серверу по ssh


Переходя от теории сетевых взаимодействий X Window System к практике, рассмотрим, как запустить графическое приложение на уделенном X-сервере при подключении по ssh.

|admin@redeye:[~]> ssh -X my.remote.host
|admin@redeye:[~]> ssh -Y my.remote.host

  1. Подключение необходимо запускать с ключом -X, который активирует переадресацию X11. На практике, однако из-за X11 SECURITY extension это часто не работает. В таких случаях используют -Y для подключения с доверительной переадресацией X11.
  2. Убедитесь, что на удаленном сервере установлен пакет xauth, который создаст файл ~/.Xauthorityy. Если все нормально, то файл уже создан и проверка показывает на наличие MAGIC COOKIE.

|admin@redeye:[~]> xauth list
host/unix:0  MIT-MAGIC-COOKIE-1  00000000000000111111111111111111

  1. Имеет смысл в качестве проверки иксов выполнить xclock прежде, чем запускать JAVA installer, или мастер настроек некоей корпоративной CRM, или ERP системы. Если показалось окно xclock, то соединение с X-сервером работает как надо.



Рис. 5 Собственно xclock, значит удаленные иксы настроены и работают.

  1. Если после логина по ssh была выполнена команда смены пользователя sudo su - для перехода в root, то тогда необходимо выставить переменную DISPLAY. Этого не надо делать, если используется изначальный пользователь и сеанс shell.

|admin@redeye:[~]> export DISPLAY=:0
echo $DISPLAY
:0

Я стараюсь по мере возможности тестировать сеанс Wayland при каждом новом релизе KDE Plasma, несмотря на многочисленные улучшения с каждым разом, на версии kde-apps-21.04.3 работать можно лишь на Plasma-X11. В чем бы не состояли преимущества Wayland, до тех пор пока в терминале зависает команда man, хаотично прыгают элементы ниспадающего меню и блуждает внешний монитор, старый и добрый X Window System остается вне конкуренции. Надеюсь так не будет продолжаться долго.

▍ Для дополнительной информации




Комментарии (56)


  1. 13werwolf13
    26.08.2021 12:25
    +13

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

    щас кто нибудь напишет что это ненужно в 21 веке и закидает меня минусами конечно, но я сторонник идеи что лучше иметь возможность и не использовать её чем не иметь возможности когда она понадобится.


    1. Ritan
      26.08.2021 14:19
      -1

      8 лет назад это было возможно, а сейчас нет? Звучит неправдоподобно

      https://www.reddit.com/r/linux/comments/1fk6wf/multiple_seat_support_on_wayland/

      Просто это всё вынесено из сервера в клиенты


      1. 13werwolf13
        26.08.2021 14:52
        +3

        как-то странно видео выглядит.. почему окна на одном экране.. что за..


    1. rPman
      26.08.2021 18:51

      к сожалению на одной видеокарте просто не получится, решение там — запустить второй x-сервер xephyr, работающий в окне первого

      но да, при использовании двух видеокарт все очень и очень просто


    1. Tarik02
      27.08.2021 09:49

      Wayland не ограничивает эту возможность. Он просто отдает необходимость реализации этого функционала в реализацию сервера.


      1. 13werwolf13
        27.08.2021 09:50

        Речи про "ограничивает" и не шло. Просто пока не реализовано..


  1. event1
    26.08.2021 19:25
    -1

    Речь идет об IPv4 и X11. Если первый из них практически во всех аспектах уступает IPv6,

    Дальше читать не стал. Даже неискушённому читателю должно быть очевидно, что если и за 25 лет IPv6 так и не вытеснил IPv4, то не настолько он и лучше.


    1. thatsme
      26.08.2021 23:20
      +1

      У IPv6 страшный длинный адрес, не предназначенный для запоминания админом... Т.к. его внедрение "долгое и упорное", никак не станет массовым, уровень отлаженности стэка в разных фирмварях и осях очень разный, что не способствует дальнейшему продвижению. Странно, но в линуксе стэк IPv6 на удивление шустрый. Данных сейчас нет, в прошлом году очень удивился, что при переходе на IPv6 скорость значительно выросла (возможно это не от того, что IPv6 шустрый, а от того, что для него firewall-ов в сети настроено небыло, докапываться до причин тогда времени небыло). Со стороны программиста разница минимальная.


      1. nullc0de
        27.08.2021 00:13
        +3

        Тут уже было отвечено по поводу IPv6 и его внедрению habr.com/ru/company/ruvds/blog/574266
        IPv6 быстрее по двум основным причинам:
        1. Из заголовка пакета убрали контрольную сумму, она не нужна и довольно дорогая операция. Расчет контрольный суммы и его сверка переложена с протокола на клиент-серверное ПО. Контрольная сумма есть на канальном уровне, и сетевые устройства сверяют ее, незачем контрольная сумма на сетевом уровне, только лишняя дублирующая операция и нагрузка на железо.
        2. Не нужен NAT. NAT создает довольно большую нагрузку на оборудование.

        IPv6 на оборудование создает минимум на 30% меньше нагрузку на оборудование, отсюда меньше задержки.

        У меня лично большая часть трафика по IPv6 ходит.


        1. event1
          27.08.2021 13:06

          Из заголовка пакета убрали контрольную сумму

          В принципе вы правы, но на практике CRC считается на стороне железки и не стоит, практически ничего

          Не нужен NAT. NAT создает довольно большую нагрузку на оборудование.

          Не совсем так. Дело в том, что NAT состоит из двух частей: отслеживание соединений (conntrack в линуксе) и собственно трансляция адресов. Нетрудно догадаться, что отслеживание соединений куда более дорогая операция, чем трансляция. Ведь надо хранить собственно таблицу соединений и на каждый пакет бегать по ней. Так вот, отслеживание соединений всё-равно нужно, потому что мы не хотим пускать к пользователю любой мусор из интернета, имеющий адрес пользовательского терминала в своём пакете. Через это самая дорогая часть NATа останется с нами и в новом ipv6 мире, только теперь адреса там будут в 4 раза длиннее.


          1. nullc0de
            27.08.2021 13:39

            но на практике CRC считается на стороне железки

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

            Дело в том, что NAT состоит из двух частей: отслеживание соединений (conntrack в линуксе) и собственно трансляция адресов.

            Опять не совсем правильно. В IPv6 мы можем уменьшить количество промежуточных узлов, тем самым тоже уменьшить задержки. Изучайте стандарт. На нагруженных роутерах пропускную способность на практике удается повысить где-то на 30%. 30% это существенная экономия на оборудовании при масштабировании. В интернете можно найти графики крупных компаний, где показаны преимущество IPv6. Если не верите графикам, возьмите просто iperf и прогоните тест.
            IPv6 не дураки придумали и самое главное он развивается, и есть кучу улучшений.


            1. event1
              27.08.2021 13:55
              +1

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

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

              В IPv6 мы можем уменьшить количество промежуточных узлов, тем самым тоже уменьшить задержки

              Да пожалуйста. Но причём тут NAT?


              1. nullc0de
                27.08.2021 13:58

                event1 притом, что он ненужен в IPv6.


                1. event1
                  27.08.2021 14:11

                  Как уже было отмечено выше, самая дорогая часть NAT — отслеживание адресов — никуда не денется, так что выгоды от отмены NAT не такие уж и значительные


          1. kemm
            28.08.2021 00:05
            +1

            В принципе вы правы, но на практике CRC считается на стороне железки и не стоит, практически ничего

            Вы не путаете с чексуммой канального уровня? Я что-то не помню, чтобы карты считали чексуммы в IP самостоятельно… См., например, arch/x86/include/asm/checksum_64.h в линуксе (ip_fast_csum)


            1. event1
              28.08.2021 01:19
              +1

              Конечно по стандарту карты должны считать только суммы в датаграммах канального уровня. Однако, на практике, в современных картах столько мощи, что они могут делать всякое. Бывают даже встроенные ПЛИС для предобработки. Но это если по-дорогому. В обычных картах есть всякие техники известные под общим термином offload. В линуксах можно настроить/посмотреть с помощью ethtool -k.Например, на моей ( Marvell 88E8072 PCI-E Gigabit Ethernet Controller) вот так:

              event@tosh ~ $ ethtool -k enp7s0
              Features for enp7s0:
              rx-checksumming: on
              tx-checksumming: on
              	tx-checksum-ipv4: on
              	tx-checksum-ip-generic: off [fixed]
              	tx-checksum-ipv6: off [fixed]
              	tx-checksum-fcoe-crc: off [fixed]
              	tx-checksum-sctp: off [fixed]
              scatter-gather: on
              	tx-scatter-gather: on
              	tx-scatter-gather-fraglist: off [fixed]
              tcp-segmentation-offload: on
              	tx-tcp-segmentation: on
              	tx-tcp-ecn-segmentation: off [fixed]
              	tx-tcp-mangleid-segmentation: off
              	tx-tcp6-segmentation: off [fixed]
              generic-segmentation-offload: on
              generic-receive-offload: on
              large-receive-offload: off [fixed]
              rx-vlan-offload: on
              tx-vlan-offload: on
              ...
              

              rx-checksumming — это как раз проверка контрольной суммы входящих пакетов. Причём, по-моему, она протоколы 4-го уровня тоже проверяет сразу


              1. kemm
                28.08.2021 13:05

                Точно, там ж ещё проверка. Туплю, извините.


              1. Sheti
                12.09.2021 16:23

                раньше дешевые сетевые карты всё на процессор складывали. В случае сетевого шторма ПК вис из-за обработки пакетов. Лично наблюдал сие чудное явление. При этом на ПК с более умными сетевухами всё было отлично.


      1. event1
        27.08.2021 13:21
        +1

        Можно перечислять много особенностей и практически ни одну нельзя будет назвать однозначно позитивной: длинный адрес — трудно запомнить, ограничения на MTU — "а как посылать маленькие пакеты?", нет широковещания — "аналог ping 255.255.255.255?". Вместо простых и привычных ARP и DHCP, в ipv6 NDP, ICMPv6 и (иногда) DHCPv6. Единственное, что практически однозначно хорошо — убрали контрольные суммы. Достаточно тех что есть на канальном уровне и в протоколах верхних уровней. Но это улучшение, в общем-то незначительное.

        По-этому внедрение и идёт черепашьими темпами.


        1. nullc0de
          27.08.2021 13:44
          +2

          Вы пишете полный бред. IP адреса в здравом уме никто не запоминает. Даже в локальной сети все к серверам обращаются по имени. Роутеры и промежуточные узлы, зачастую имеют короткую форму в IPv6, которую запомнить не сложнее IPv4. Внедрение стопорится больше из-за мифов, типа тех, что распространяете вы и из-за безграмотности людей, и их психологических проблем.

          Скажи, насколько сложно запомнить?

          2606:4700:4700::64
          2606:4700:4700::6400


          1. event1
            27.08.2021 14:02
            +1

            IP адреса в здравом уме никто не запоминает

            Вы излишне категоричны. Если никто из вашего окружения не запоминает, это не значит что никто вообще не запоминает. Да и вы сами, наверняка, знаете, что такое 8.8.8.8 или 1.1.1.1, но не знаете их ipv6 аналогов.

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

            То есть, необходимость покупки провайдероми нового оборудования и разработки стратегии миграции при отсутствии внятного выхлопа — это фигня. А вот "мифы" — это да. Настоящая проблема.


            1. nullc0de
              27.08.2021 14:09

              То есть, необходимость покупки провайдероми нового оборудования и разработки стратегии миграции при отсутствии внятного выхлопа — это фигня. А вот «мифы» — это да. Настоящая проблема.

              Какое новое оборудование? Даже старое оборудование поддерживает IPv6. Вы же сами писали, что протоколу 25 лет. По вашему за 25 лет в оборудование не смогли завезти IPv6? Мы гоняли IPv6 еще в 2004 году…


              1. event1
                27.08.2021 14:23
                +1

                Ну, у себя дома вы могли гонять всё что угодно. У провайдеров другая история: оборудование дорогое, меняют его редко, а перенастраивать никто не любит, потому что дорого и простои. По-этому, кое-где присутствуют системы без поддержки ipv6. Может на коммутаторах этой проблемы и нету, но кроме коммутаторов, там куча всякого разного. Представляете, мы такие модные и молодёжные переехали на ipv6 а у нас биллинг сломался. Или аналитика. Будет обидно.


                1. nullc0de
                  27.08.2021 15:09

                  event1 работал в провайдеринге, и стоял у истоков интернета в своем городе.


                1. Sheti
                  12.09.2021 12:51

                  Тут скорее "перенастраивать не любит". Потому что мне сложно себе представить провайдера у которого за 25 лет оборудование не поменялось нигде.


            1. Starwalker
              27.08.2021 15:20

              Да и вы сами, наверняка, знаете, что такое 8.8.8.8 или 1.1.1.1, но не знаете их ipv6 аналогов

              Запомнить труднее, но все же можно: 2001:4860:4860::8888 ; 2606:4700:4700::1111

              Вопрос тут в другом - а зачем?


              1. event1
                27.08.2021 15:45
                +1

                ping 8.8.8.8 — это самый простой и надёжный способ проверить, подключена ли система к интернету. Эту команду легко запомнить и легко передать. Даже по телефону, даже непрофессионалу, даже если и мой и его английский оставляют желать лучшего.


                1. nullc0de
                  27.08.2021 16:21

                  Совсем с памятью плохо, что сложно запомнить 2606:4700:4700::64? Так память надо развивать, чтобы в старчестве снизить риск болезни паркинсона.


                  1. Worky
                    27.08.2021 16:25

                    Расскажете это бабушке- пользователю интернета!! Или бухгалтеру тети Клаве


                    1. nullc0de
                      27.08.2021 16:31

                      Worky а зачем им рассказывать, если есть DNS и DHCP? Честно говоря, в современном мире не видел ни одного провайдера или компании без DHCP и DNS.


                1. Starwalker
                  27.08.2021 18:05
                  +2

                  Давайте мух от котлет отделим.

                  Во-первых, 'ping 8.8.8.8' это несерьезно. Ну да, удобно. Но тогда уж давайте 'ping ok.ru' раз мы скатились на этот уровень ;-) Мы так и DNS заодно проверим. А вот мне интересно, вот говорите вы по телефону "плиз, тайп пинг, спейс, зен ейт дот ейт дот ейт дот ейт енд прес ентер... йес, зэт биг батон он зе райт сайд оф ьор кейборд, мэм". Ну тетка такая "Request timed out". И что? О чем это говорит? Возможных проблем - тьма. Куда копать в начале? Почему именно туда? Это в корне неверный подход, потеря времени. Легче просто спросить "фейсбук открывается?". Если нет, тогда начинать уже нормальный траблшутинг - ARP (ND для IPv6), routing table, traceroute, nslookup...

                  Во-вторых, а что ' ping -6 google.com' это как-то сложнее? Ну или 'traceroute -6 google.com'? Скажете "А если проблема с DNS?" Ну так и ошибка же будет "Name or service not known", сразу поймете что к чему. Да и nslookup в помощь.

                  Я к чему клоню - у вас привычки, которые вы не хотите менять и которые мешают вам работать с IPv6 сетями.


                  1. event1
                    27.08.2021 19:53

                    В вашем юзкейсе это действительно не важно. В каком-то другом это может быть удобно. Я же не утверждаю, что это прямо самая важная возможность при отладке сетей. Но, иногда это удобно. Особенно если DNS-а нет и не предполагается.


                    1. Starwalker
                      27.08.2021 20:31
                      +1

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


                      1. nullc0de
                        27.08.2021 20:37
                        +2

                        Starwalker так даже с IPv4 без DNS строить сеть это перебор, даже в страшном сне себе не могу представить ситуацию, когда мне надо будет запоминать IPv4 адреса: 172.20.77.36 Главбух, 172.22.38.65 — Генеральный директор и т.д… Мне приходилось работать в компаниях с 3000+ сотрудников. Даже если компьютеров всего 100 будет в сети их не запомнить!


                      1. Starwalker
                        27.08.2021 21:00
                        +2

                        Я сетевик, в основном на хосты не лажу, но согласен, DNS решает. Кстати, один раз наблюдал забавное. Огромная корпорация, новый датацентр готовится к запуску в продакшн, идут тесты. Что-то где-то не сходилось, не помню уже, но вроде EVPN на некоторых Leaf работал не так, как нужно. Ок, мы (саппорт вендора) с одной стороны, консультант, ответственный за сеть с другой. Ну вобщем запись сессии, все контролируется, пришлось через его комп лезть. Чтоб он видел что и почему мы делаем. Банальшина, нужен SSH к пятку устройств. Говорю ему: "давай, брат, нам доступ вот к этим устройствам... "

                        Увиденное превзошло все ожидания. Вобщем картина маслом - топология сети в Visio, на ней из полезной информации только хостнеймы устройств. Консультатнт находит в визио хост, копирует его хостнейм. Затем лезет в одну Excel таблицу, там в хреновой туче вкладок находит вкладку - таблица с айпишниками лупбеков и хостнеймами, ищет запись, копирует айпишник. Ок, открывает терминал. SSH, Ctrl+V, Enter. Коммутатор просит юзернейм и пароль. Консультант открывает опять какие-то Excel таблицы, там уже находит пароль, вводит... И так для каждого коммутатора.

                        Вот люди со стальными шарами - не ленятся как некоторые с такаксами да радиусами - отважно пароли хранят в эскеле... DNS себе ручной придумали через Excel. А вы тут разленились, 100 айпишников не хотите запомнить ;-)

                        P.S. Надеюсь перед запуском в продакшн там прошелся безопасник и каленым железом выжег это все. Но опыт подсказывает, что не факт ;-)


                      1. event1
                        27.08.2021 22:10

                        да, боже упаси меня вообще строить сети. Я ж программист, а не сетевик. Это клиенты проклятые. Думают, если сеть IoT, то DNS и не нужен. Там же людей нет, правильно? Я бы и рад им сказать: "ну раз вы такие дураки, то мы с вами бизнес не будем делать!" Но, меня за такое лишат довольствия, а мне без довольствия никак нельзя.


                      1. Starwalker
                        27.08.2021 22:23

                        Ну раз программист, тогда mDNS хотя бы. Тут, как говорится, уже все в ваших руках, так как реализация сего добра исключительно на клиентах.

                        Но он работает в рамках одного VLAN, если не городить на роутерах mDNS gateway ну или полноценную маршрутизируемую мультикаст сеть с PIM'ом и Join'ами ;-)


    1. Starwalker
      27.08.2021 15:18
      +1

      если и за 25 лет IPv6 так и не вытеснил IPv4, то не настолько он и лучше

      Как-то сомнительно звучит, как аргумент. Проблемы с имплементацией IPv6 вначале были в кривой поддержке протокола ASIC'ами. Сейчас все уже давно работает в line-rate, особых проблем с поддержкой IPv6 на нормальном оборудовании не встречал. На данном этапе проблема с внедрением IPv6 одна - люди.
      Люди, которые привыкли запоминать айпишники.
      Люди, которые "ниасилили" разные виды IPv6 адресов и им физически больно от отсутствия RFC1918 адресов в их уютной сеточке.
      Люди, которые не могут поднять нормальный DNS в сети.
      Люди, которые думают, что NAT это такой инструмент обеспечения безопасности.

      Я могу долго перечислять все проблемы, но root cause всегда один - человек.

      Выход - "бесчеловечные" сетки вроде всяческих SDN. Возможно, после их повсеместного внедрения ситуация с IPv6 изменится в лучшую (для прогресса) сторону.


      1. event1
        27.08.2021 16:04

        <sarcasm> Повсеместное внедрение линукса на десктопе тормозится из-за людей. Эти глупые пользователи просто не могу выучить несколько десятков простых команд и почему-то недовольны прекрасным чёрным терминалом с красивыми зелёненькими буквами </sarcasm>

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


        1. nullc0de
          27.08.2021 16:16
          +1

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


          1. event1
            27.08.2021 16:27

            Это, кстати, распространённая ошибка начинающих инженеров: мол сетевые протоколы, прошивки и ядра операционных систем разрабатываются некими магическими супер-программистами с двумя головами. На самом деле, там работают точно такие же обычные люди как мы с вами.


            1. nullc0de
              27.08.2021 16:33

              event1 если вы такой гений, что же тогда что-то свое не напишите и не представите миру? В современном ИТ очень много еще не решенных задач. Где можно увидеть ваши гениальные изобретения и алгоритмы?


        1. Starwalker
          27.08.2021 17:49

          Как типичный представитель фриков "btw, I use Arch" чуть не бомбанул, спасибо за теги ;-)

          Смотрите, что затратнее по-вашему - CG-NAT или IPv6 dual-stack? Кстати, сам я ответа не знаю, но CG-NAT вызывает рвотный рефлекс даже в виде схемы, как это чудо поддерживается провайдерами даже знать не хочу, надеюсь им больно. Вот скажите мне, чем можно объяснить неготовность провайдера городить NAT64 (что задумывалось как временное решение пока не перейдем на IPv6-only) но пионерское "Всегда готов!" городить это уродство CG-NAT, без сомнения являющееся тупиком? Вот в чем различие кроме неграмотности сетевиков?

          На мой взгляд сейчас есть проблема с дуал-стеком. На самом деле неприятно поддерживать 2 протокола, особенно если IPv6 мало пользуются. Я понимаю это, все же ресурсы ограничены и во многих коммутаторах ресурсы делятся между IPv4 и IPv6. Естественно нужно оправдание использования этих ресурсов под дополнительный протокол, без которого (будем честны) пока еще жить можно.Есть большие провайдеры, которые до сих пор для домашних потребителей не внедрили IPv6 и никто не чешется, никто не требует его внедрения. Замкнутый круг. IPv6 не используется, потому что многие провайдеры его не поддерживают. Провайдеры его не поддерживают, потому что IPv6 не используется.

          Но все же есть огромное психологическое неприятие IPv6 среди сетевиков, которые не привыкли к нему и не хотят меняться. Этот протокол им непонятен, некомфортен. Но если бы они вникли хоть немного, возможно что-то бы изменилось. А то, что вникать не хотят, это я знаю не понаслышке. Ну например когда вижу в сети OSPFv2 и OSPFv3 работающие параллельно. Зачем? Ну как, v2 для IPv4, v3 для IPv6 ... Шапито... :-D


          1. nullc0de
            27.08.2021 17:59

            Starwalker так все магистральные провайдеры его уже давно поддерживают, все уперлось в последнюю милю. Притом с каждом годом доля IPv6 растет во всем мире. Проблема внедрения сугубо психологическая. Протокол даже в чем-то проще IPv4. Но люди привыкли себе придумывать несуществующие проблемы на ровном месте, когда их нет. Сами не знают IPv6, но зато столько мифов про IPv6 могут рассказать.


            1. Starwalker
              27.08.2021 18:07

              Подписываюсь под каждым вашим словом, я именно это и пытаюсь коллеге объяснить. Все дело в закостенелых и ленивых сетевиках. Технически уже нет никаких проблем, даже на last mile, даже с клиентскими устройствами. Уже по-моему любой чайник поддерживает IPv6...


            1. Sheti
              12.09.2021 13:01

              цена на IPv4 адреса в конце концов сломает спину слона. Времена когда ещё была WinXP и теоретически могли быть проблемы давно прошли. Большинство клиентов провайдера сами не настраивают роутеры, а те кто настраивают могут и в IPv6. Так что остаётся только одна проблема - лень менять пока стоимость владения остаётся приемлемой.


          1. event1
            27.08.2021 21:20

            Смотрите, что затратнее по-вашему - CG-NAT или IPv6 dual-stack?

            Если CG-NAT уже есть, а DS надо строить? Тогда DS затратнее.

            Но все же есть огромное психологическое неприятие IPv6 среди сетевиков, которые не привыкли к нему и не хотят меняться

            Вот представьте, что я техдир какого-нибудь провайдера на миллион абонентов. И я, прям борец за IPv6. И вот, я прихожу в совет директоров и говорю, мол ребята, есть охренительная штука: новая версия IP-протокола. Там новые технологии, 21ый век и вообще всё отлично. Даже гугл рекомендует. Тогда совет директоров мне и говорит: "а сколько это стоит?". Я прикинул расходы на замену оборудования, обучение персонала и т.п. и такой говорю уверено: "лям!". А совет мне в ответ: "а сколько мы на этом заработаем? Будет ли у нас больше пользователей, или сможем ли мы повысить абонентскую плату". А я, такой: "нет не будет и не сможем. Пользователям всё равно какая версия IP протокола работает в их сетях. Они и слов таких не знают". А совет мне и отвечает: "не дадим мы тебе денег. Не нужен нам IPv6. Лучше будем ретроградами, но с лямом".


            1. nullc0de
              27.08.2021 21:25

              event1 бред полнейший. Читайте еще раз комментарии, не нужно новое оборудование. Выигрыш там от снижения затрат на масштабирование, часть трафика пойдет по IPv6 и разгрузит оборудование. Выиграют как пользователи так и сам провайдер.


            1. Starwalker
              27.08.2021 21:43

              Логика неправильная, скорее всего новое оборудование не понадобится.

              Хотя сама ситуация типичная, спорить не буду. Именно из за нее, как я уже упоминал, у многих даже больших провайдеров нет IPv6 для домашних потребителей. Замкнутый круг. Хотя есть надежда - в один момент айпишники закончатся, юзверей, которые хотят "белый" адрес станет много. Тогда может что-то поменяется. Жаль, конечно, потому что сама технология вполне ничего, много интересных идей. В том числе для провайдеров. К примеру идея о том, что next-hop не должен быть global unicast address. Сколько лет провайдеры лепили эти вечные 'ip unnumbered' на внутренних линках. Или даже IS-IS вообще без айпишников на линках. А тут тебе "искаробки" next-hop на link-local соседа. Суммаризация маршрутов на IPv6 - песня. Адресов - хренова туча, поэтому таблица маршрутизации может быть меньше на несколько порядков. Если только конечно сети не планировались заклятыми "четверочниками", которые делят /64 на сабнеты :))))


              1. event1
                27.08.2021 22:25

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

                С другой стороны, внедрение, конечно движется по-тихонечку. Но очень неспешно. У меня, например, ipv6 распространяется путём письма провайдеру с просьбой переключить на ipv6. Там DS-lite. В мобильных сетях у нас, да и в Европе (за исключением Германии) ipv6 пока редкий гость.


                1. romancelover
                  27.08.2021 23:16

                  Не такой уж и редкий, во многих странах (даже в России) есть IPv6 хотя бы у одного крупного оператора. Смотрел в регионе "Восточная Европа" на stats.labs.apnic.net/ipv6.
                  В России и Беларуси у МТС, в Польше - Orange, в Чехии O2 и Vodafone, в Венгрии Magyar Telekom / Vodafon / Telenor, в Румынии Digi. Только на Украине и в Болгарии всё плохо с IPv6.


            1. Sheti
              12.09.2021 13:06

              оборудование менять не придётся, а так же будет выигрыш от меньшей нагрузки на оборудования. Это не говоря о том, что можно будет выкинуть на свалку истории провайдерский NAT. А я даже боюсь представить стоимость такого NAT даже для городского провайдера средней руки при современных то нагрузках и потоковом видео.


              1. event1
                12.09.2021 16:12

                Как уже указывалось выше, самая толстая часть NAT — connection tracking — никуда не денется. Провайдеры просто не могут открыть конечных пользователей в дикий интернет. Кроме того, само отслеживание будет дороже, из-за более длинных адресов: раньше ключ (два адреса и два порта) в таблице соединений был 12 байт, а теперь 68 байт. Это 3 линии кэша, если что.


                1. Sheti
                  12.09.2021 16:16

                  Это почему провайдеры не могут выпустить пользователей? Достаточно примитивнейшей настройки фаервола, чтобы отрубить большинство ботов. А в остальных случаях NAT не поможет.


                  1. event1
                    12.09.2021 16:52

                    Достаточно примитивнейшей настройки фаервола, чтобы отрубить большинство ботов

                    Да, она называется "запретить инициировать соединения снаружи вовнутрь". Но чтобы её реализовать нужно отслеживать соединения


  1. temujin Автор
    05.09.2021 12:21

    Сеанс KDE на базе Wayland признан стабильным. Жду, когда появится на Генте.