Jump to content
Калькуляторы

задержка пакета перед отправкой в сеть как в linux задержать сетевой пакет перед отправкой

Есть задача - перед отправкой пакета на определенный ip(а еще лучше с определенного udp порта) задерживать его на 20 мсек. Как в linux это можно реализовать? netem нагуглил но! не нравится он тем что нужно использовать tc filter и нет возможности классифицировать пакеты по порту отправителя. Может есть что то более подходящее.

Заранее спасибо всем ответившим.

Edited by adron2

Share this post


Link to post
Share on other sites

adron2

Используйте iptables для раскраски(внутренней маркировки) трафика:

 

http://lartc.org/howto/lartc.qdisc.filters.html :

On fwmark

You can mark packets with either ipchains or iptables and have that mark survive routing across interfaces. This is really useful to for example only shape traffic on eth1 that came in on eth0. Syntax:

 

# tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1

Note that this is not a u32 match!

You can place a mark like this:

 

# iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

The number 6 is arbitrary.

If you don't want to understand the full tc filter syntax, just use iptables, and only learn to select on fwmark. You can also have iptables print basic statistics that will help you debug your rules. The following command will show you all the rules that mark packages in the mangle table, also how many packages and bytes have matched.

 

# iptables -L -t mangle -n -v

Share this post


Link to post
Share on other sites

В tc есть возможность классифицировать пакеты по порту. См. u32. Но вообще лучше воспользоваться iptables, и дальше классифицировать по fwmark.

Share this post


Link to post
Share on other sites

Есть задача - перед отправкой пакета на определенный ip(а еще лучше с определенного udp порта) задерживать его на 20 мсек. Как в linux это можно реализовать? netem нагуглил но! не нравится он тем что нужно использовать tc filter и нет возможности классифицировать пакеты по порту отправителя. Может есть что то более подходящее.

Заранее спасибо всем ответившим.

Расскажите, а в чем практическая польза? Может кому-то из коллег тоже такое надо...

Share this post


Link to post
Share on other sites

MMM

Практическая польза - проверка работы различного ПО в условиях задержек(эмуляция "плохого" канала). Ещё netem можно использовать чтобы мешать работать VoIP оператора-конкурента. Тупо задропать 5% трафика это будет палевно, а сделать reorder RTP-трафика - булькание обеспечено, при этом потерь типа нет

Share this post


Link to post
Share on other sites

Есть задача - перед отправкой пакета на определенный ip(а еще лучше с определенного udp порта) задерживать его на 20 мсек. Как в linux это можно реализовать?

Через ipfw pipe delay можно. Вроде порт для linux существует. Им же и потери эмулировать можно.

Share this post


Link to post
Share on other sites

Ага, я тоже подумал про voip сразу, но вдруг что-то еще?

Недавно как раз воспользовался netem-ом для улучшения работы с некой железкой.

Железка дропает пакеты если они ходят чаще чем пакет в секунду (плата DECT в АТС).

Работа через управляющую программу с этой платой было сущее мучение (тормозило из-за постоянных повторов дропнутых пакетов).

В итоге более менее удалось это решить с помощью задержки в 1 секунду для пакетов в сторону железки. Да это не устраняло полностью проблему, но в этом случае более менее можно было работать (PIN-код генерировался за 5-10 секунд, а не по минуте).

Раньше использовал http://www-x.antd.nist.gov/nistnet/ на новом сервере воспользовался netem.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.