Задать вопрос
  • Как связаны TCP-сегменты и пакеты? Один сегмент состоит из нескольких пакетов или наоборот?

    @res2001
    bbrother92,
    Понял, а что еще из нетворкинга нужна знать бекендеру?

    и не только бэкэндеру, но любому, кто пытается самостоятельно что-то делать с сетью:
    1. Принципы инкапсуляции протоколов - модель OSI
    2. Азы Ethernet адресация, Понимать как протокол нижнего уровня выбирает протокол верхнего уровня для передачи входящих пакетов на обработку. Над уровнем Ethernet не обязательно есть только IP, там может быть еще целая пачка других протоколов, которые для транспорта то же используют Ethernet (и так почти для любого уровня протоколов из модели OSI)
    3. Понимание IP адресации, маски адреса (зачем она), как разделить сеть на подсети, IP маршрутизация
    4. Понимание работы фаервола - они есть сейчас в каждом чайнике, который подключен к сети. Сюда же понимание работы NAT.
    5. Умение настроить пп.3-4 в используемой вами ОС. Достаточно попрактиковаться на одной ОС для закрепления навыков, на других ОС изменятся применяемые инструменты, но принципы будут теми же.

    Оптимизация стека - это обычно удел сис.админов, у прикладного программиста обычно нет таких задач.
    Написано
  • Как связаны TCP-сегменты и пакеты? Один сегмент состоит из нескольких пакетов или наоборот?

    @res2001
    Mors Clamor, bbrother92,
    У самого IP тоже есть параметр, который определяет максимальный размер пакета, который может пройти через канал (MTU).

    MTU есть не у IP - это параметр сетевого интерфейса, т.е. уровня Ethernet, но он задает максимальный размер данных вышестоящего протокола в Ethernet фрейме. Ethernet заголовок и CRC не включается в MTU. Соответственно IP использует значение MTU как максимальный размер IP пакета.
    Написано
  • Как корректно использовать функцию system при компиляции из GCC?

    @res2001
    hitakiri,
    Думаю дело тут всё же в компиляторе. Т.к. в справке по функции есть пометка :

    Винда не POSIX система, к ней ваша цитата не относится. Дело не в компиляторе. system - находится в стандартной библиотеке, она уже скомпилирована и обычно не вами.
    Написано
  • Как корректно использовать функцию system при компиляции из GCC?

    @res2001
    MVV, hitakiri, Только надо запускать cmd.exe /с file.bat
    Смотрите справку по ключам: cmd /?
    Сам по себе батник - это не исполняемый файл, его выполняет cmd.exe, т.е. батник может и завершаться при этом, но cmd.exe может продолжать ждать команд - и это ее стандартное поведение, которое в вашем случае не нужно и надо его изменить ключами.

    Вообще функция system() из стандартной библиотеки реально не используется, это какая-то затычка для студентов, которым лень разбираться как решать вопросы правильно.
    Написано
  • Как называется такая структура данных?

    @res2001
    Никак не называется - это 2 структуры - хэш таблица и массив.
    Хэш таблица используется для быстрого поиска в массиве по некоторому ключу. Таких дополнительных хэшей может быть несколько, если поиск должен быть по разным критериям.
    В этом есть смысл, если элементов в массиве достаточно много.
    Написано
  • Как реализовать алгоритм на С++?

    @res2001
    HabrArkady, Значит вы что-то пишете синтаксически не правильно вот и все.
    Давайте код и текст ошибки.
    Написано
  • Как реализовать алгоритм на С++?

    @res2001
    HabrArkady,
    Оператор delete будет стоять перед new.

    Все правильно. Какие там ухищрения? Если ошибка/сегфол или еще что - пишите сюда. Проблема не ясна. Она явно не в повторном использовании имен. Приведите код и ошибку.
    Написано
  • Как скомпилировать программу с библиотекой gtk?

    @res2001
    Natriom, Помимо добавления пути в PATH, нужно еще установить переменную окружения: MINGW_HOME=c:\msys64\mingw64
    и жедательно MSYS_HOME=c:\msys64\usr
    Сам пользуюсь такими настройками.

    Начал компилировать через msys2 mingw64. Использовал команды: cd c:\capps; ...

    Тут видно, что вы компилируете не в командной строке msys2, а просто в виндовой cmd. Для того что бы в cmd утилиты из msys2 видели правильно свое окружение установите вышеприведенные переменные окружения Windows.
    Если собирать из командной строки msys2, то, вероятно, результат может быть и положительным, если библиотека все таки установлена правильно, т.к. в этом случае окружение уже доступно для утилит.
    Написано
  • Как разделить весь путь?

    @res2001
    dim5x, ИВАН, Не стоит использовать переменную с именем PATH, т.к. это системная переменная окружения.
    В приведенном примере проблем не будет. Но если этот рецепт войдет как составляющая в таком же виде в скрипт большего размера, то вероятны неприятные побочные эффекты.
    Написано
  • Как разделить весь путь?

    @res2001
    ИВАН, Ты задаешь вопросы достаточно простые, которые можно решить самому просто прочитав нужную документацию.
    Читай про модификаторы для работы с подстроками тут: set /?
    Модификаторы для работы с путями: for /?
    Написано
  • Нахождения первой папки в пути?

    @res2001
    Оно работает, только делает немного не то что вам нужно - выдает последнюю папку, а не первую.
    Но таким способом (через модификаторы) можно получить любой каталог в пути, рекурсивно раскручивая путь, только вместо цикла в этом случае надо использовать процедуры - для аргументов процедур так же можно использовать модификаторы. Примерно так:
    @echo off
    setlocal enabledelayedexpansion
    
    :: Путь передается первым параметром скрипта
    set "path=%~1"
    
    call:GetPathPart "%path%"
    
    goto:eof
    
    :: Рекурсивная процедура, выводящая на экран все имена в переданном в первом параметре  процедуры пути
    :GetPathPart
    if "%~1" equ "" exit /b 0
    if "%~1" equ "\" exit /b 0
    :: извлекаем имя файла (последнюю часть пути) и выводим ее на экран
    set "getfile=%~nx1"
    echo %getfile%
    :: убираем имя диска и имя файла
    set "tmpath=%~p1"
    :: убираем последний слэш из пути, оставшийся после предыдущей операции
    if "%tmpath:~-1%" equ "\" set "tmpath=%tmpath:~0,-1%"
    :: рекурсивно вызываем себя же, с обновленным аргументом
    call:GetPathPart "%tmpath%"
    exit /b 0


    Этот код то же делает не то, что вам нужно - он выводит все составляющие части пути, кроме имени диска.

    Справка по модификатором содержится: for /?
    Справка по модификаторам для выделения подстрок и т.п.: set /?
    Написано
  • В чём преимущество Clang перед GCC? Что использовать для кросс-компиляции?

    @res2001
    Vamp,
    Полагаю, гугл выкинул gcc не из-за того, что не смог разобраться в парочке опций компилятора.

    Полагаю гугл выкинул gcc из-за того, что лично он, гугл, начал вплотную финансировать шланг. И это в корне меняет его отношение к конкурентным продуктам: https://foundation.llvm.org/sponsors Не смог сходу найти спонсоров gcc/gnu, так что вполне может быть, что гугл и там то же присутствует.
    Впрочем это вопрос дискуссионный, не буду тут разводить холивар, к тому же, я то же не сильно разбираюсь в вопросе. Но лично у меня в конторе используется GCC.

    Шланг, как более новый компилятор, возможно, написан более "красиво" и современно, но по той же причине, наверняка, у него меньше поддерживаемых аппаратных платформ и на выходе код чуть менее оптимизирован. Это лично мое мнение, основанное на информации, которую где-то когда-то видел в интернете, ссылок на которую дать не могу и за достоверность которой не ручаюсь, не претендую ни на что, просто для размышления ТСу, возможно захочет более детально разобраться в вопросе и, может быть, тут написать свои выводы :)
    Написано
  • В чём преимущество Clang перед GCC? Что использовать для кросс-компиляции?

    @res2001
    Особо не занимался сравнениями, но на мой взгляд:
    1. GCC дополнительными опциями то же можно заставить строже относиться к стандартам. Так что не вижу тут большой разницы, конечно могут быть нюансы в разных местах и разные трактовки тонких мест стандарта. Кроме того clang поддерживает многие расширения GCC, т.к. многие крупные продукты предполагают наличие подобных расширений (например ядро линукс).
    2. Основное отличие - лицензия. У шланга она BSD-like, т.е. можно делать все что угодно с ним. У GCC - GPL - можешь делать все что угодно, но будь любезен исходники своего изделия открывай. Тут имею ввиду не исходники твоей программы, которую ты собрал компилем, а исходники тобой измененного компилятора. Возможно поэтому большим производителям железок шланг удобней.
    Написано
  • Что за вкладка Hostname в настройках DHCP сервера?

    @res2001
    В DHCP целая куча разнообразных опций, подробней можно посмотреть в RFC2132, а так же в документации на ПО, реализующем функционал DHCP сервера в вашем конкретном случае.
    Чаще всего разнообразные GUI конфигурилки DHCP или вообще не поддерживают доп.опций или поддерживают какой-то их ограниченный набор на собственное усмотрение.
    Ваш вариант похож на опцию 12 - hostname из RFC. C ней в паре обычно идет еще опция 15 - domain name.
    В GUI конфигурилке вполне вероятно опция задается как одна строка FQDN, а потом она программно разделяется на hostname и domain name.
    Написано
  • Как обойти блокировку 80 и 443 порта Ростелеком?

    @res2001
    Александр Касаткин,
    всё-таки проблема на стороне РТ

    Второй то роутер наверное то же ваш и вы его настраивали примерно так же, поэтому и проблемы там примерно одинаковые.
    Попробуйте для эксперимента, раз уж у вас 2 роутера, сбросьте настройки одного из них на заводские. В большинстве домашних роутеров по умолчанию все роутерские примочки слушают только локальный интерфейс, поэтому в заводских настройках все (или почти все) внешние порты должны быть доступны. Настройте только подключение к провайдеру и проброс порта на сервер на стандартном 80/443 порту.

    Помимо того, что порт на роутере может быть занят, трафик можно блокировать фаерволом, проверьте настройки фаервола роутера и сервера. Для тестов можно отключить фаервол, но когда заработает обратно его включить и донастроить при необходимости.
    Написано
  • Как обойти блокировку 80 и 443 порта Ростелеком?

    @res2001
    Александр Касаткин,
    проброс портов работает

    Если внешний порт занят (например веб морда самого роутера выпущена в интренет со стандартными портами), то проброс портов в NATе вы настроить сможете, но вот запросы из интернета будет получать веб сервер роутера, а не NAT и по факту проброс портов работать не будет. При этом nat loopback, вполне вероятно, работать будет.
    В своем первом комментарии я спрашивал:
    Что-то открывается или браузер ошибку показывает?

    Как раз предположил такой вариант с занятым портом. Возможно порт занимает не веб морда, а что-то другое, что в браузере не увидеть.
    По хорошему проверять соединение для начала лучше не в браузере, а, например, в телнете - там можно просто проверить сам факт подключения, которое должно быть в любом случае и не важно какая служба висит на TCP порту - веб сервер, ssh или еще что-то.
    Написано
  • Как обойти блокировку 80 и 443 порта Ростелеком?

    @res2001
    Александр Касаткин,
    я думаю, что не совсем из интернета. это вроде как называется nat loopback.

    Тогда это не совсем корректный тест, т.к. трафик приходит на роутер из внутренней сети и уходит во внутреннюю сеть - в роутере отрабатывают немногодругие цепочки, по сравнению с вариантом, когда запрос приходит с внешнего интерфейса.
    Для экспериментов можно взять где-нибудь VPS, многие операторы VPS предоставляют тестовый период с минимальной конфигурацией, вам будет достаточно для проверки работоспособности. Но с другой стороны тест с телефона через мобильный интернет вполне заслуживает доверия.
    Написано
  • Как обойти блокировку 80 и 443 порта Ростелеком?

    @res2001
    Александр Касаткин,
    когда открываю на компьютере, всё открывается. захожу на телефоне с мобильного - сайт не загружается

    На компьютере из интернета открываете и открывается? Порты 80/443?

    вот некоторые пруфы

    В возможности операторов блокировать порты я нисколько не сомневаюсь. Они вообще могут делать с вашим трафиком все что угодно.
    Я сомневаюсь в том, что оператор блокирует именно IPv4 80/443, при этом оставил IPv6 80/443.

    и страничка с сайта version6, обратите внимание

    Сайт посвящен IPv6, на страничке указано, что IPv6 ростелекомом официально не поддерживается и проблемы с http там указаны относительно IPv6. Кстати, не знаю насколько эта страничка актуальна, я бы ей не сильно доверял. У вас же по IPv6 как раз все открывается.

    Посмотрите комментарий Alexey Dmitriev, я думаю так же.
    Написано
  • Как обойти блокировку 80 и 443 порта Ростелеком?

    @res2001
    веб страницы на других портах без проблем открываются с мобильного интернета.

    Но, что интересно, по IPv6 порты не блокируют. К сожалению, этим сервером буду пользоваться не только я, так что доступ по IPv4 всё таки должен быть.

    Вот из-за этого я сильно сомневаюсь, что ростелеком заблокировал только порты 80/443 на IPv4. Ему ничего не стоит точно так же заблокировать и IPv6 и это было бы сделано, реши они вдруг блокировать порты.
    К тому же реши они блокировать все службы, которые может развернуть у себя клиент они бы могли просто блокировать TCP:SYN пакеты с клиентским адресом назначения и не заниматься ерундой с блокировкой отдельных портов. Этим бы заблокировали вообще все службы, которые работают поверх TCP не важно на каком порту они висят. При этом приложения-киленты работали бы нормально.

    Вы как ходите на ваш сайт снаружи? В браузере что указываете IP или имя (DDNS)? Что-то открывается или браузер ошибку показывает? Проброс портов в NAT на роутере настраивали? При пробросе внутренний адрес сервера и порт верно указываете?
    Написано
  • Как маршрутизировать обернутый в https трафик WireGuard?

    @res2001
    PPTP умеют идентифицировать, да.
    Да, согласен, GRE не вписывается, не прав тут.
    Была мысль избавиться еще от одного уровня шифрования, можно поискать другие решения. На линуксе есть несколько вариантов нешифрованных туннелей поверх UDP: https://developers.redhat.com/blog/2019/05/17/an-i...
    Не знаю можно ли завернуть UDP в stunnel :)
    Написано