Вопрос или проблема
ss -tm
показывает детальную информацию о памяти для каждой TCP-сессии. Я обнаружил, что некоторые TCP-сессии отображают sock_drop
, вот одна из них:
ESTAB ***** здесь некоторая незначительная информация ****
skmem:(r0,rb3446699,t0,tb87040,f0,w0,o0,bl0,d222)
d222
в skmem, согласно мануалу, это количество sock_drop.
Но ip -s link
(или ifconfig
) показывает 0 потерянных пакетов.
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:d9:fb:52 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
79371129016 110948258 0 0 0 0
TX: bytes packets errors dropped carrier collsns
78030205763 96204113 0 0 0 0
Итак, вот мой вопрос: В чем разница между потерянными пакетами, показанными в ip -s link
, и sock_drop, показанным в ss -tm
? Каковы возможные причины, вызывающие потерю пакетов и sock_drop? Связан ли sock_drop с повторной передачей TCP?
Ответ или решение
Ответ на вопрос о различиях между "packet drops" из команды ip -s link
и "socket drops" из команды ss -tm
Разница между "потерями пакетов" (packet drops) из вывода команды ip -s link
и "потерями сокетов" (sock drops) из вывода команды ss -tm
заключается в разных уровнях, на которых эти потери фиксируются, а также в причинах, их вызывающих.
1. Объяснение packet drops
(потери пакетов)
Команда ip -s link
предоставляет информацию о состоянии сетевых интерфейсов на уровне канала передачи данных.
- Потеря пакетов на этом уровне указывает на то, что пакеты не были обработаны сетевым интерфейсом по различным причинам, включая:
- Переполнение очереди (например, если скорость поступления трафика превышает возможность его обработки).
- Ошибки на уровне аппаратного обеспечения.
- Проблемы с драйверами сетевых интерфейсов.
Если в выводе ip -s link
указано, что потеря пакетов равна 0, это свидетельствует о том, что сетевой интерфейс способен обрабатывать весь поступающий трафик без задержек и потерь.
2. Объяснение sock drops
(потери сокетов)
С другой стороны, команда ss -tm
показывает информацию о текущих сокетах TCP, включая использование памяти для каждого соединения.
- Потеря сокетов (sock_drop) указывает на пакеты, которые были отброшены на уровне стека TCP/IP, потому что:
- Сокет (или очередь) был переполнен, и пакет не мог быть обработан (причиной может быть, например, превышение накапливаемых последовательностей).
- Соединение, возможно, было закрыто или недоступно на момент получения пакета.
- Потеря может быть связана с неправильно настроенными параметрами TCP (например, неэффективные тайм-ауты или размеры окон).
3. Возможные причины потерь
Конфликты и проблемы, вызывающие потери пакетов и сокетов, могут быть разными:
- Потеря пакетов на уровне сетевого интерфейса:
- Высокий уровень трафика и переполнение буферов сетевых интерфейсов.
- Сетевые ошибки, такие как повреждение пакетов.
- Потеря сокетов на уровне TCP:
- Проблемы с управлением памятью или настройками сокетов.
- Недостаток ресурсов, таких как память, для обработки входящих соединений.
- Неправильно настроенные параметры TCP и потеря пакетов, возникающих из-за переполненных очередей на уровне приложения.
4. Связь между sock_drop
и TCP-ретрансляцией
Sock_drop
может быть связан с TCP-ретрансляцией. Когда TCP-соединение не может обрабатывать входящие данные из-за переполнения или других проблем, возвращает уведомление об ошибке и инициирует процесс ретрансляции. Это может привести к ненужной задержке и дополнительному бэкенд-трафику.
Таким образом, обе команды предоставляют полезную информацию о состоянии сети, но с разных уровней абстракции: ip -s link
демонстрирует состояние на уровне сетевого интерфейса, а ss -tm
предоставляет данные о состоянии соединений на уровне приложений и стека TCP/IP.