2017-11-12 6 views
3

내 코드에서 TCP 연결 대역폭을 제한하고 싶습니다. This 질문에는 몇 가지 단서가 있지만 정확히 내가 원하는 것은 아닙니다. 유사한 접근법을 사용하여 표준 lib (net/tcp 패키지)로 이동하는 src 코드를 해킹하려했지만 실패했습니다. 필자의 주요 아이디어는 여하튼 syscall에서 내부 버퍼로 데이터를 천천히 작성하여 OS가 TCP 패킷을 삭제하도록하는 것입니다.Golang에서 tcp 다운로드 속도 제한

+1

로컬 TCP 버퍼에서 천천히 읽을지라도 커널은 한 번에'/ proc/sys/net/ipv4/tcp_rmem' (세 번째 숫자는 최대 버퍼 크기입니다)까지 가져올 수 있습니다. 오래 지속되는 연결의 경우 시간이 지남에 따라 평균을 구할 수 있습니다 (버퍼가 버스트로 채우고 천천히 소비, 버퍼 다시 채우기 등). 대역폭을 실제로 제한하려면 Go가 아니라 OS 계층에서해야합니다. https://unix.stackexchange.com/a/28203/40168을 참조하십시오. –

답변

0

의견에서 말했듯이, 가장 쉬운 방법은 경이적인 도구를 사용하여 OS 수준에서 수행하는 것입니다. 'wondershaper'스크립트를 보면 'iproute2'패키지의 '/ sbin/tc'명령을 사용합니다. 정확히 무엇을하고 싶지는 않지만 os.exec()를 사용하여 소스 코드에서 'tc'명령을 실행하면 더 낮은 수준으로 갈 수 있습니다. 자신의 "트래픽 제어"알고리즘을 구현하는 것은 너무 많은 작업 일 수 있으며 목표에 필요하지 않을 수 있습니다.