View Full Version : Quanta banda per gli acknowledgements?
gionnico
25-12-2007, 12:36
Vorrei sapere e gradirei molto se riusciste a trovarmi un link che spieghi approfonditamente, quanta banda in upload serve per scaricare ad una certa velocità in download, se si utilizza il protocollo TCP/IP.
Forse questa banda dipende anche dal numero di connessioni aperte più che dalla banda complessiva in download oppure dall'RWIN?
Queste ultime considerazioni le faccio solo a intuito, se qualcuno sapesse spiegarmi meglio la questione, apprezzerei.
Questo perché vorrei fare un fine-tuning della banda che rendo disponibile in upload nei software p2p, ma non vorrei una risposta tipo metti l'80% dell'up, perché non può essere corretto dato che per esempio:
a 2048/256 si hanno 51Kbit/s disponibili per 2048 kbps in download. Quindi un rapporto di 2.5:100
mentre a 20480/1024 (non guardatemi strano.. :ciapet: ) si avrebbero 205Kbit/s disponibili per 20480 kbps in download. Quindi un rapporto di 1:100
Mentre logicamente suppongo che questo rapporto dovrebbe avere un valore fisso o variabile secondo quello che ho supposto sopra e non secondo la banda che ti rende disponibile l'ISP. :rolleyes:
gionnico
26-12-2007, 02:17
Up per domattina.
Spero di trovare qualcuno esperto che abbia voglia di rispondere, appena sveglio. :sofico:
Più che allocare una certa quota della banda, secondo me sarebbe più utile assegnare una maggiore priorità ai pacchetti ACK in modo da poter essere smistati più velocemente rispetto agli altri, che poi è effettivamente quello che si vede fare in giro.
gionnico
26-12-2007, 19:51
Più che allocare una certa quota della banda, secondo me sarebbe più utile assegnare una maggiore priorità ai pacchetti ACK in modo da poter essere smistati più velocemente rispetto agli altri, che poi è effettivamente quello che si vede fare in giro.
Fantastica idea!!!! :cool:
Cosa intendi per "in giro"? E come viene realizzato?
Possibile con il ToS?
Ho un router compatibile con QoS e ToS per fortuna.
Mi chiede quale numero da 0 a 63 impostare con priorità alta.
Siccome il P2P che uso supporta il ToS, potrebbe essere proprio che lo prova a sfruttare per quello: come faccio a sapere qual'è il tipo di servizio tra questi 64?
Comunque aspetto ancora dei link per maggiori spiegazioni. :)
Dovresti leggere il manuale del tuo router, anche se credo che con quel range di valori si intenda assegnare priorità maggiore a valori minori.
Se ti interessa approfondire in generale sul Type of Service (ToS) puoi leggere la relativa RFC (http://www.ietf.org/rfc/rfc1349.txt)
Usando Gentoo potresti creare delle regole di Quality of Service (QoS) via software, sfruttando traffic control, vedi
http://www.netfilter.org/ the packet filtering framework inside Linux Kernel
http://lartc.org/ Linux Advanced Routing & Traffic Control
http://www.ipp2p.org/ peer-to-peer (P2P) data in IP traffic
http://l7-filter.sourceforge.net/ classifier for Linux's Netfilter
http://www.mastershaper.org/ network traffic shaper
http://www.faqs.org/docs/Linux-HOWTO/Traffic-Control-tcng-HTB-HOWTO.html Traffic-Control-tcng-HTB-HOWTO
http://luxik.cdi.cz/%7Edevik/qos/htb/ HTB Home
http://linux-net.osdl.org/index.php/Bonding Bonding
http://www.pluto.it/files/ildp/HOWTO/Bandwidth-Limiting-HOWTO/index.html Bandwidth-Limiting-HOWTO
http://www.docum.org/docum.org/ document for Lartc HOWTO
http://forums.gentoo.org/viewtopic-t-225863d.html Bandwidth limiting howto with Gentoo
Io per il mio computer che fa da router ho scritto questo script
#!/bin/sh
#
#************ DEFINIZIONI GENERICHE ************
# upload rate in kbit/s
# (Set 5% - 10% lower than *measured* line speed )
UPLOAD=384
echo 'Upload = '$UPLOAD
# absolute paths
IF=/sbin/ifconfig
IP=/sbin/iptables
TC=/sbin/tc
# network interfaces
ETH="eth0" # WAN interface
LAN="eth1" # LAN interface
# maximum transmission unit
MTU=1500
# length of burst buffers and udp packets
# (must be larger than kernel jiffy of 10ms)
DBURST_D=10
DBURST_U=10
UDP_LENGTH=128
#************ DEFINIZIONI PORTE ****************
# game ports
GAME_PORTS="27000:30000"
# p2p server ports
LOW_TCP_PORTS="4662,49000:49300"
LOW_UDP_PORTS="4672,4665,49000:49300"
# p2p client ports
LOW_TCP_PORTS2="4801,4901"
LOW_UDP_PORTS2="4802,4902"
#***********************************************
case $1 in
#**************** START ************************
start)
#***********************************************
echo ''
echo '****** Initialiazing bandwidth shaping ******'
echo ''
$IF $ETH txqueuelen 1000 mtu $MTU
#************ RESET QOS ***********************
echo 'Remove queuing disciplines from all interfaces'
sed -n 's/ *\(.*\):.*/\1/p' /proc/net/dev | while read INTERFACE; do
tc qdisc del dev $INTERFACE root >&- 2>&-
done
#***********************************************
echo ''
echo '****** Setting mangle table definitions ******'
echo ''
echo 'Restoring any saved connection mark if not already marked'
$IP -t mangle -A OUTPUT -m mark --mark 0 -j CONNMARK --restore-mark
#echo 'Setting normal priority for server unsorted traffic'
# $IP -t mangle -A OUTPUT -m mark --mark 0 -j MARK --set-mark 3
echo 'Setting high priority for client-to-server traffic'
$IP -t mangle -A PREROUTING -i $LAN -j MARK --set-mark 2
echo 'Setting highest priority for gaming'
$IP -t mangle -A POSTROUTING -p udp -m multiport --dport $GAME_PORTS -j MARK --set-mark 1
echo 'Setting ACK Packets'
$IP -t mangle -A OUTPUT -o $ETH -j MARK -p tcp -m length --length :128 --tcp-flags SYN,RST,ACK ACK --set-mark 1
$IP -t mangle -A POSTROUTING -o $ETH -j MARK -p tcp -m length --length :128 --tcp-flags SYN,RST,ACK ACK --set-mark 1
echo 'Setting highest priority for icmp protocol (ping)'
$IP -t mangle -A OUTPUT -p icmp -j MARK --set-mark 1
$IP -t mangle -A POSTROUTING -p icmp -j MARK --set-mark 1
echo 'Setting highest priority for TOS Minimize-Delay'
$IP -t mangle -A OUTPUT -j MARK -m tos --tos Minimize-Delay --set-mark 1
$IP -t mangle -A POSTROUTING -j MARK -m tos --tos Minimize-Delay --set-mark 1
echo 'Setting small UDP packets (most likely games)'
[ "$UDP_LENGTH" -gt 0 ] && $IP -t mangle -A POSTROUTING -p udp -m length --length :$UDP_LENGTH -j MARK --set-mark 1
echo 'Setting lowest priority for p2p'
$IP -t mangle -A POSTROUTING -j MARK -p tcp -m multiport --sports $LOW_TCP_PORTS2 --set-mark 4
$IP -t mangle -A POSTROUTING -j MARK -p udp -m multiport --sports $LOW_UDP_PORTS2 --set-mark 4
#$IP -t mangle -A POSTROUTING -j MARK -m ipp2p --edk --bit --set-mark 4
$IP -t mangle -A OUTPUT -j MARK -p tcp -m multiport --sports $LOW_TCP_PORTS --set-mark 4
$IP -t mangle -A OUTPUT -j MARK -p udp -m multiport --sports $LOW_UDP_PORTS --set-mark 4
#************ HFSC SCHEDULER **********************
echo ''
echo '****** Setting hfsc root ******'
echo ''
# Calculate MTU duration
DMTU_U=$((8*$MTU/$UPLOAD))
# Make sure burst duration is at least MTU
[ $DBURST_U -lt $((1*$DMTU_U)) ] && DBURST_U=$((1*$DMTU_U))
echo 'Attaching egress queuing discipline to QoS interface'
tc qdisc add dev $ETH root handle 1: hfsc default 40
tc class add dev $ETH parent 1: classid 1:1 hfsc sc rate ${UPLOAD}kbit ul rate ${UPLOAD}kbit
tc class add dev $ETH parent 1:1 classid 1:10 hfsc sc m1 $(($UPLOAD*10/10))kbit d ${DBURST_U}ms m2 $(($UPLOAD*5/10))kbit
tc class add dev $ETH parent 1:1 classid 1:20 hfsc sc m1 $(($UPLOAD*8/10))kbit d ${DBURST_U}ms m2 $(($UPLOAD*2/10))kbit
tc class add dev $ETH parent 1:1 classid 1:30 hfsc sc m1 $(($UPLOAD*5/10))kbit d ${DBURST_U}ms m2 $(($UPLOAD*2/10))kbit
tc class add dev $ETH parent 1:1 classid 1:40 hfsc sc m1 $(($UPLOAD*0/10))kbit d ${DBURST_U}ms m2 $(($UPLOAD*1/10))kbit
echo 'Setting sfq queque'
tc qdisc add dev $ETH parent 1:10 sfq quantum $MTU perturb 10
tc qdisc add dev $ETH parent 1:20 sfq quantum $MTU perturb 10
tc qdisc add dev $ETH parent 1:30 sfq quantum $MTU perturb 10
tc qdisc add dev $ETH parent 1:40 sfq quantum $MTU perturb 10
echo 'Setting traffic control filter'
tc filter add dev $ETH parent 1: prio 1 protocol ip handle 1 fw flowid 1:10
tc filter add dev $ETH parent 1: prio 2 protocol ip handle 2 fw flowid 1:20
tc filter add dev $ETH parent 1: prio 3 protocol ip handle 3 fw flowid 1:30
tc filter add dev $ETH parent 1: prio 4 protocol ip handle 4 fw flowid 1:40
;;
#************* STOP ****************************
stop)
echo '****** Stopping bandwidth shaping ******'
echo 'Cleaning mangle table and reset traffic control'
$IP --table mangle --flush
$TC qdisc del dev $ETH root
;;
#************* SHOW SETUP **********************
show)
echo ""
echo "eth0:"
$TC qdisc show dev $ETH
echo ""
$TC class show dev $ETH
echo ""
$TC filter show dev $ETH
echo ""
;;
#************* SHOW STATISTICS *****************
show-s)
echo ""
echo "eth0:"
$TC -s qdisc show dev $ETH
echo ""
$TC -s class show dev $ETH
echo ""
$TC -s filter show dev $ETH
echo ""
;;
#***********************************************
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
#***********************************************
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|show|show-s}" >&2
echo "Eg: invoke-rc.d tc start" >&2
exit 1
;;
#***********************************************
esac
exit 0
#************** END ****************************
Tuttavia, appena uscirà il kernel 2.6.24 installerò adsl-optimizer, vedi firma ;)
gionnico
27-12-2007, 11:47
Bene, ora ho un bel po'di materiale da studiarmi!! :D
Adsl-optimizer lo metterò anche io!!
Penso che mi iscriverò a quel thread!
Grazie Devil! !
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.