Вчера я получил новое и блестящее соединение VDSL2 дома! Он рассчитан на 100 Мбит /10 Мбит, и, кажется, довольно близко к отметке.
Теперь у меня есть Debian Linux, работающий как домашний NAS и маршрутизатор. Это работает shorewall, с включенным NAT и tc. У меня также есть рабочая станция OSX, подключенная через коммутатор к указанному маршрутизатору Linux:
Рабочая станция OSX <-> Switch <-> Маршрутизатор Debian <-> Модем VDSL2 <-> Интернет <-> Сервер
Я провел тесты на моем быстром сервере в интернете:
На роутере Linux, TCP:
$ iperf -c server -p 3333
------------------------------------------------------------
Client connecting to server, TCP port 3333
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local xxx.yyy.bbb.ccc port 41982 connected with xxx.yyy.bbb.ccc port 3333
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.89 MBytes 2.42 Mbits/sec
На вышесказанном есть проблема. Восходящий канал должен быть ~ 10 Мбит, а не 2,4 Мбит. Ниже вы можете увидеть, что UDP работает нормально.
На роутере Linux, UDP:
$ iperf -u -c server -p 60008 -b 9M
------------------------------------------------------------
Client connecting to server, UDP port 60008
Sending 1470 byte datagrams
UDP buffer size: 1.00 MByte (default)
------------------------------------------------------------
[ 3] local xxx.yyy.bbb.ccc port 56484 connected with xxx.yyy.bbb.ccc port 60008
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 10.7 MBytes 9.00 Mbits/sec
[ 3] Sent 7658 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 10.7 MBytes 9.00 Mbits/sec 0.251 ms 0/ 7657 (0%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
И на рабочей станции OSX (за NAT) TCP:
$ iperf -c server -p 3333
------------------------------------------------------------
Client connecting to server, TCP port 3333
TCP window size: 65.0 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.9.141 port 54388 connected with xxx.yyy.bbb.ccc port 3333
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.0 sec 13.2 MBytes 11.1 Mbits/sec
OSX позади маршрутизатора linux, кажется, не затронуты проблемами на маршрутизаторе linux. Как это может случиться? UDP тоже работает нормально.
И на рабочей станции OSX (за NAT) UDP:
$ iperf -u -c server -p 60008 -b 9M
------------------------------------------------------------
Client connecting to server, UDP port 60008
Sending 1470 byte datagrams
UDP buffer size: 9.00 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.9.141 port 64588 connected with xxx.yyy.bbb.ccc port 60008
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.0 sec 10.7 MBytes 9.00 Mbits/sec
[ 5] Sent 7658 datagrams
[ 5] Server Report:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 5] 0.0-10.0 sec 10.7 MBytes 9.00 Mbits/sec 0.133 ms 0/ 7658 (0%)
Как видите, окно linux застряло на исходящем TCP со скоростью 2,5 Мбит / с. UDP работает нормально, а рабочая станция за маршрутизатором работает нормально.
Чтобы упростить ситуацию, я изменил свой Shorewall TC до базового уровня. Я также попытался полностью отключить TC от shorewall без какого-либо эффекта. :
tcdevices:
#INTERFACE IN-BANDWITH OUT-BANDWIDTH
eth0 - 12000kbit
tcclasses:
#INTERFACE MARK RATE CEIL PRIORITY OPTIONS
eth0 1 full full 1 default
tcrules:
#MARK SOURCE DEST PROTO PORT(S) CLIENT USER
1:F 0.0.0.0/0 0.0.0.0/0 icmp echo-request
1:F 0.0.0.0/0 0.0.0.0/0 icmp echo-reply
У вас есть идеи, где может быть проблема? Единственное, что не используется по умолчанию в Debian - это ядро 3.2.0 из backports. Это мощная машина Xeon с большим количеством оперативной памяти и сетевых карт Intel. Все тесты были выполнены в короткие сроки практически без другого сетевого трафика. И повторяется несколько раз. Где я могу начать отладку?