tc를 사용하여 TCP와 UDP가 동일한 버퍼를 사용하기를 원합니다.

tc를 사용하여 TCP와 UDP가 동일한 버퍼를 사용하기를 원합니다.

두 가지 유형의 트래픽이 있습니다.

  1. 전송 제어 프로토콜
  2. UDP 프로토콜

UDP에 1Mbps b/w, TCP에 7Mbps b/w라는 2가지 다른 필터를 적용하고 싶습니다.

하지만 트래픽이 100개 패킷 크기의 공통 버퍼를 사용하기를 원합니다.

나는 다음 스크립트를 작성했습니다

#!/bin/bash

#Size of the queue
qlen=$1

#Delay per link
sdelay=$3

tcp_rate=7Mbit
udp_rate=1Mbit
total_rate=8Mbit

function add_qdisc {

    # deleting default qdisc
    dev=$1
    tc qdisc del dev $dev root
    echo qdisc removed

    # adding custom qdisc
    tc qdisc add dev $dev root handle 1:0 htb default 1
    echo qdisc added

    # creating classes for tcp and udp traffic
    tc class add dev $dev parent 1:0 classid 1:1 htb rate $total_rate ceil $total_rate
    tc class add dev $dev parent 1:1 classid 1:11 htb rate $udp_rate ceil $udp_rate
    tc class add dev $dev parent 1:1 classid 1:12 htb rate $tcp_rate ceil $tcp_rate
    echo classes created

    # creating link delays and queues
    tc qdisc add dev $dev parent 1:1 handle 10: netem delay $sdelay limit $qlen
    echo "delay and queue added"

    # matching the tcp/udp traffic to the appropriate class
    tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x11 0xff flowid 1:11
    tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x06 0xff flowid 1:12
    tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x01 0xff flowid 1:12

    echo filters added

}

add_qdisc s1-eth1
add_qdisc s1-eth2

add_qdisc s3-eth1
add_qdisc s3-eth2

add_qdisc s6-eth1
add_qdisc s6-eth2

RTNETLINK answers: Invalid argument하지만 tc 트리 노드에 버퍼 크기를 추가하면 오류가 발생합니다.1:1

1:1예를 들어 하위 항목에 대한 버퍼를 추가하면 1:11스크립트가 제대로 실행됩니다.

1:1두 트래픽 모두 공통 버퍼를 사용하기를 원하므로 버퍼 크기를 추가할 수 있습니까?

추신: 방금 tc 명령을 배우기 시작했습니다.

편집하다udp_rate1Mbps로 업데이트됨

답변1

tc의 두 qdisc 간에 버퍼를 공유할 수 없습니다.
그러나 대역폭이 고정되어 있으므로 12패킷과 88패킷으로 분할하여 하드코딩하는 것이 좋습니다.

tc qdisc add dev $dev parent 1:11 handle 9: netem delay $sdelay limit $qlen_udp
tc qdisc add dev $dev parent 1:12 handle 10: netem delay $sdelay limit $qlen_tcp

UDP 패킷이 작은 경우 버퍼링 용량을 유지하고 대기 시간을 낮게 유지하려면(netem 작업 전) 이 값을 12에서 20~30으로 조정해야 할 수 있습니다.

netem 및 버퍼 공유를 사용하여 이 함수를 작성하는 이유는 무엇입니까? 무엇을 보여주고 싶나요?

관련 정보