How to Control the Bandwidth of a Network?

| | 2 min read

Network emulation is used for testing the performance of real applications over a virtual network. It is the act of introducing a device to a test network that alters packet flow in such a way as to mimic the behavior of a network. Netem is a network emulator tool provides functionality for testing protocols. It will emulate the network properties of wide-area networks.

Netem is already enabled in the kernel and a current version of iproute2. The netem kernel component is enabled under:

  1. Networking
  2. Networking Options
  3. QoS and/or fair queuing
  4. Network emulator

Iproute2 is a collection of utilities for controlling TCP/IP networking and traffic control in Linux. Netem is controlled by the command line tool 'tc' and it is part of the iproute2 package of tools.

Commands for network emulation:

Note: Here, I have used ethe1 for the interface in the examples below; you should use the name of your specific Ethernet card

  1. To add constant delay to every packet going out through a specific interface:
    $tc qdisc add dev ethe1 root netem delay 80ms
    A ping test to this host should show an increase of 80ms in the delay to replies.
  2. To add random variance
    $tc qdisc change dev ethe1 root netem delay 80ms 10ms
  3. The following command will add +/- 10 ms of jitter to the 80ms of delay:
    $tc qdisc add dev ethe1 root netem delay 80ms 10ms
  4. To turn off/delete the qdisc from a specific interface (in this case, ethe1):
    $tc qdisc del dev ethe1 root
  5. Typically, the delay in a network is not uniform. It is more common to use a normal distribution to describe the variation in delay. Netem can accept a non-uniform distribution:
    $tc qdisc change dev ethe1 root netem delay 100ms 20ms distribution normal

Please get in touch with us if any queries