Рубрика «tcp»

Пишем стек TCP-IP с нуля: Ethernet, ARP, IPv4 и ICMPv4 - 1

Часть 1: Ethernet и ARP

Написание собственного стека TCP/IP поначалу может показаться пугающей задачей. И в самом деле, за свой тридцатилетний срок жизни TCP впитал в себя множество спецификаций. Однако базовая спецификация остаётся относительно компактной1Читать полностью »

Дело всегда в TCP_NODELAY - 1


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

Но для начала давайте проясним, о чём вообще речь. Лучше всего нам в этом поможет документ RFC896, изданный Джоном Нейглом в 19841 году. Вот описание задачи:

Обработка малых пакетов сопряжена с одной специфичной проблемой. Когда для передачи односимвольных сообщений с клавиатуры используется TCP, обычно для отправки одного байта полезных данных задействуется пакет размером 41 байт (один байт данных и 40 байт заголовка). Такие издержки в 4 000%, конечно, раздражают, но в слабо нагруженных сетях ещё терпимы.

Если коротко, то Нейгл хотел сократить затраты на отправку TCP-заголовков, чтобы повысить пропускную способность сети — вплоть до 40х! Эти крохотные пакеты поступали из двух основных источников: интерактивных приложений вроде оболочек, где пользователь вводил по одному байту за раз, и плохо реализованных программ, которые передавали сообщения ядру через множество вызовов write(). Предложенное Нейглом исправление оказалось простым и продуманным.Читать полностью »

Всем привет, меня зовут Вадим Макеров, я работаю в iSpring бэкенд-разработчиком.

Мы разрабатываем систему управления обучением (LMS - learning management system) iSpring Learn. Внутри система представляет из себя модульный монолит на PHP с почти сотней микросервисов на Go. Мы используем Kubernetes, Service Mesh, gRPC и прочие модные технологии :) Сейчас я работаю во внутренней команде Core, которая занимается внутренними улучшениями нашей системы.

Читать полностью »

Меня зовут Александр Азимов, я руковожу группой сетевого R&D в Yandex Infrastructure — команде, которая в том числе создаёт системы управления трафиком всего Яндекса. Cегодня мы поговорим о том, как почти полностью избавиться от стейтов на L4-балансировщике.

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

Для тех, кому удобнее смотреть, — запись доклада на эту тему с прошлого Читать полностью »

Привет!

Если у вас уже есть некоторый опыт работы с веб-серверами, то вам наверняка доводилось попадать в классическую ситуацию «адрес уже используется»‬ (EADDRINUSE).

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

Если вам просто интересно, как именно работает системный вызов socket(2)Читать полностью »

В прошлом году на выставке Hot Chips 2023 компания Tesla представила свой суперкомпьютер Dojo. Для Tesla машинное обучение ориентировано на беспилотные автомобили. Обучение происходит с использованием видео, что может потребовать большой пропускной способности каналов ввода-вывода. Например, размер одного тензора может составлять 1,7 ГБ для приложений машинного зрения. Компания Tesla обнаружила, что пропускная способность ее суперкомпьютера Dojo может быть ограничена скоростью передачи данных на хост-машины, даже если хост-машины не делают ничего, кроме копирования данных через PCIe.

Читать полностью »
image

Друзья! А вы помните, какими были мобильные игры в 2000-х годах? Помните, как разработчики умудрялись уместить целые миры в устройство с небольшим дисплеем, аппаратной клавиатурой, весьма слабым железом и парой сотен килобайт памяти? Но задумывались ли вы, как в своё время работали эти сами игры «под капотом»? В сегодняшней статье-ретроспективе предлагаю вспомнить мобильный геймдев нулевых и узнать, как же работали 2D Java-игры, какие API были доступны и что из себя представлял средний телефон тех лет! Интересно? Тогда добро пожаловать под кат!Читать полностью »

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

/ unspalsh.com / Caleb Jack

/ unspalsh.com / Caleb Jack

Наследие

Читать полностью »

Приведу 7 отличий, которые было бы неплохо знать.

1. Connection-oriented vs connectionless

TCP vs UDP - 1

Существует два способа установить соединение перед отправкой данных с одного устройства на другое: с установлением соединения (connection-oriented) и без установления соединенияЧитать полностью »

В поисках причин, почему установленные соединения не разрываются в некоторых случаях, я набрёл на отличную статью в блоге Cloudflare. Которая, в итоге помогла найти не только решение моей проблемы, но и помогла лучше понять как работают таймауты TCP соединений в Linux

Надеюсь перевод этой статьи будет полезен многим читателям хабра.

Начало

Работая над нашим сервером Spectrum, мы заметили нечто странное: TCP-сокеты, которые, как мы думали, должны были быть закрыты, оставались на месте. Мы поняли, что не совсем понимаем, когда TCP-сокеты должны завершать работу!

Читать полностью »

https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js