당황스럽지만 Ubuntu 시스템에 대한 SSH 연결에 대해 실수로 영구 대역폭 제한을 설정한 것 같습니다.
파일을 전송할 때~에서scp
sftp
다운로드 속도는 , 또는 원격 서버를 통해 2MB/s로 제한됩니다 rsync
. 파일을 전송할 때도착하다업로드 속도가 무제한인 원격 서버입니다. 동일한 네트워크에 있는 다른 컴퓨터, 동일한 원격 서버에서 동일한 파일을 전송하여 다운로드 대역폭을 완전히 포화시킬 수 있습니다.
이 일은 약 3주 전부터 시작되었으며 그 이전에는 몇 년 동안 이 원격 서버에서 자주 파일을 전송해 왔습니다. 때때로 나는 rsync
다운로드 속도를 제한하기 위해 '플래그'를 사용합니다 --bwlimit
.
그것은가능한술에 취한 동안 다른 메커니즘을 통해 대역폭을 제한했지만 이 작업을 수행한 기억이 없으며 명령 기록에서 이를 나타내는 어떤 것도 찾을 수 없습니다.
라우터의 QOS 설정을 여러 번 확인했는데 완전히 비활성화되었습니다. 라우터의 나머지 설정 인터페이스(Tomato FWIW를 실행 중)를 자세히 살펴봤지만 소용이 없었습니다.
특정 컴퓨터의 다운로드 속도를 제한하는 요인은 무엇입니까?
내가 확인한 사항:
ionice
또는 사용법nice
- 용법
wondershaper
- 용법
trickle
- 라우터 설정
확인해야 할 사항이나 디버깅 방법에 대한 다른 아이디어가 있는 사람이 있습니까?
답변1
최근 나의 임무는 애플리케이션 서버와 특정 단일 IP 간의 트래픽이 160kb/초로 전달되는 반면, 두 시스템의 다른 모든 트래픽은 10-100Mbits/초인 이유를 확인하는 것이었습니다.
제한 사항은 서로 통신하는 두 끝점에 고유합니다.
나는 모든 명백한 트래픽 형성 및 트래픽 제어 솔루션을 확인했지만 성공하지 못했습니다.
마지막으로 일부 패킷 캡처를 분석한 후 ECN 플래그가 이 두 엔드포인트 간의 전송에만 설정된다는 것을 확인했습니다.
클라이언트는 명시적인 혼잡 알림(ECN)을 요청하고 모든 SYN 패킷에 혼잡 경험(CE)을 설정하여 서버가 혼잡을 완화하기 위해 전송 속도를 낮추게 하는 것으로 나타났습니다. CE 마크는 차별화된 서비스 필드의 유효한 숫자에 설정됩니다.
다음 명령을 사용하여 Linux 서버 설정(/proc/sys/net/ipv4/tcp_ecn)을 확인할 수 있습니다.
sysctl -a | grep _ecn
다음 명령을 사용하여 tcp_ecn을 설정합니다.
sysctl net.ipv4.tcp_ecn=2
가능한 값은 다음과 같습니다:
0 - ECN이 비활성화됩니다. ECN이 시작되거나 승인되지 않습니다.
1 - 들어오는 연결 요청에 대해 ECN을 활성화하고 나가는 연결 시도에 대해 ECN을 요청합니다.
2 - 들어오는 연결 요청에 대해 ECN을 활성화하지만 나가는 연결에 대해서는 ECN을 요청하지 않습니다.기본값: 2
CE 코드가 실제로 전송되고 있는지 확인하기 위해 tcpdump와 WireShark를 사용했습니다.
tcpdump를 사용하여 캡처를 시작하고 이를 pcap 파일에 저장하고 캡처 요청을 시작한 다음 Ctl+c를 사용하여 캡처를 중지합니다.
tcpdump -I any -w my_capture.pcap
그런 다음 WireShark에서 이 pcap을 열고 필터를 사용하여 이런 일이 발생하는지 확인할 수 있습니다.
ECN을 사용하는 모든 패킷:
tcp.flag.ecn==1
모든 전송 정체 패킷:
ip.dsfield.ecn==3
이것이 이 특정 문제를 해결하는지 잘 모르겠지만 OP는 어떤 가능성을 요청했습니다. 무엇을 확인해야 할지 모르겠는 이 기사를 읽는 누군가가 이 정보가 유용하다고 생각하고 구성 파일을 확인하는 데 며칠을 소비하지 않기를 바랍니다.
마침내 서버 tcp_ecn을 0으로 설정하자 대역폭이 즉시 정상 범위로 돌아왔습니다. 이는 클라이언트가 SYN 패킷에서 CE 플래그를 보내는 이유를 확인하는 동안 임시 수정 사항입니다. 나는 이것이 일부 시스템이 ECN을 사용하도록 협상하는 방식일 수 있다는 것을 읽었지만 이는 또 다른 주제입니다.