TCP / IP 용어로 사무실에서 다운로드 속도 제한 기는 어떻게 작동합니까?


8

사람들이 사무실이라고 가정하면 HTTP 다운로드를 인터넷 연결 속도의 최대 40 % 대역폭으로 제한하여 다른 트래픽을 차단하지 않기를 원합니다.

우리는 "방화벽에서 지원되지 않습니다"라고 말하고 피할 수없는 라인 "우리는 Netgear / DLink / DrayTek과 함께 사용할 수있었습니다"라고 말합니다.

그것에 대해 생각하면 다운로드는 다음과 같습니다.

HTTP GET request
Server sends file data as TCP packets
Client acknowledges receipt of TCP packets
Repeat until download finished.

속도는 서버가 데이터를 얼마나 빨리 전송하고 얼마나 빨리 데이터를 인식하는지에 따라 결정됩니다.

따라서 다운로드 속도를 제한하려면 다음 두 가지 중에서 선택할 수 있습니다.

1) 서버에게 데이터를 더 느리게 보내도록 지시하십시오-TCP 또는 HTTP에서 프로토콜을 요청하는 프로토콜 기능이 없다고 생각합니다.

2) 업로드 속도를 제한하고 업로드 속도를 떨어 뜨림으로써 패킷을보다 느리게 인식합니다.

장치가이 제한을 어떻게 수행합니까? 표준적인 방법이 있습니까?


방화벽에서 LAN으로 수신 된 패킷이 얼마나 빨리 허용되는지를 제한하면 승인 속도가 느려지고 송신 서버의 TCP 스택에서 정체 처리가 전송 속도를 다시 조절합니다. 감사. 테스팅으로 그렇게 작동하게 할 수 있습니다. 여러 답변을 올렸지 만 답변으로 만 표시 할 수 있습니다.
TessellatingHeckler

답변:


11

TCP 자체는 혼잡 제어를 구현합니다.

이러한 속도 제한 기는 단순히 제한을 넘어서 패킷을 버립니다. TCP는이를 처리하여 패킷이 모두 도착하고 모두 순서대로 도착하도록합니다. 클라이언트는 손실 된 패킷을 ACK하지 않으며 서버에서 다시 보냅니다.

서버의 TCP 스택은 패킷을 다시 보내고, 클라이언트와 클라이언트 사이에 혼잡이 있는지 파악하기 때문에 전송 속도로 비트를 다시 다이얼합니다. 속도 제한 기가 패킷을 다시 떨어 뜨릴 때까지 속도가 빨라집니다.


방화벽이 / LAN / 인터페이스에서 HTTP 트래픽을 얼마나 빨리 내뿜는 지 제한하는 QoS 정책 속도를 적용해야합니까? 그런 다음 TCP가 처리하도록하십시오. "이것은 또한 전송 속도에 약간의 전화를 걸 것입니다"는 내가 놓친 또 다른 부분입니다.
TessellatingHeckler

2
네 맞습니다. 서버 링크에 데이터를 계속 던져서 QoS가 적용되기 전에 포화 상태로 만들 수 있습니다. 그러나 TCP 시민이 양호하다면 전송 속도는 데이터가 실제로 전달되는 속도와 대략적인 균형을 이룰 것입니다. 속도 제한.
Shane Madden

예, TCP는 자체 혼잡 제어를 구현하지만 반드시 그렇게 효과적인 것은 아닙니다. 급류에 대한 경험이있는 사람이라면 누구나 이것을 알고 있습니다. 기본적으로 TCP 혼잡 제어의 대부분의 구현은 네트워크에 수백 개의 활성 연결이있을 때 고장납니다.
user606723

1
@ user606723 토렌트에 문제가있는 경우, 송신시 패킷 셰이퍼를 사용하여 해당 트래픽을 삭제해야합니다. 이렇게하면 토커를 트래커에서 차단하고 다른 사람들이 같은 토렌트를 다운로드하여 연결로 홍수를 범하지 않도록합니다. 문제 해결됨.
MDMarra

1
@ user606723 예, 빠른 시작 TCP를 사용하여 수천 개의 연결이 항상 시작되면 정체 제어에 문제가 생길 수 있습니다. 새로운 연결은 구축중인 연결 상태를 전혀 모르기 때문입니다. 그래도 수백 개의 활성 연결이 있습니까? 아마 홈 링크가 느려질 것입니다.
Shane Madden

5

TCP의 고유 스로틀 방법을 이해했다고 들었던 최고의 설명은 최근 Security Now 팟 캐스트 에서 벗어났습니다 . Steve Gibson을 인용하려면 :

따라서 보편적 인 합의에 의해 TCP는이 매우 영리한 프로토콜이므로 "느린 시작"이라고합니다. 일반적으로 승인없이 몇 개의 패킷을 보낼 수있는 권한이 부여됩니다. 아이디어는 바로 여기로 이동하도록하겠습니다. 일반적으로이 숫자는 2입니다. 따라서 TCP가 시작되면 두 개의 패킷을 하나씩 전송할 수 있습니다. 첫 번째는 인정하지 않고 두 번째는 전송합니다. 그러나 기다립니다. 스로틀 링 규칙은 수신 할 때마다 수신 확인할 수없는 패킷 수가 하나씩 증가하도록 허용하는 것입니다.

생각해 보도록하겠습니다. 수신 확인할 때마다 수신 확인되지 않은 패킷 수를 하나씩 늘릴 수 있습니다. 따라서 합의 된 시작에 따라 두 개의 패킷을 먼저 보냅니다. 그들은 인정받습니다. 그래서 우리는 첫 승인을 받았습니다. 우리는 둘을 보내도록 허용했다. 이제이 첫 번째 승인을 받으면 1 ~ 3 씩 증가시킵니다. 따라서 이제 더 이상 승인하지 않고 3 개의 패킷을 더 보낼 수 있습니다. 이전에 보낸 내용에 대해 승인이 다시 오면 4로 증가시킵니다. 이것을 "혼잡 창"이라고합니다. 그것은 라인으로 전송 된 윈도우가 아닙니다. 즉 수신 윈도우와는 다릅니다. 수신 윈도우와는 다릅니다.이 윈도우는 우리가 전송할 수있는 데이터의 양을 알려주는 TCP 헤더의 16 비트입니다. 이것은 창입니다. 그것'

승인되지 않은 패킷의 수를 계속 늘리면 승인을받을 때마다 하나씩 보낼 수 있습니다. 어느 시점에서 한도에 도달 할 것입니다. 그리고이 시스템의 장점은 라우터 사이에서 가장 약한 링크보다 문자 그대로 링크를 빨리 보내려고 시도 할 때 어떤 점에서 가장 약한 링크가 깨지는 지점을 발견한다는 것입니다. 보내려고하는 패킷을 너무 빨리 보내려고하므로 삭제합니다. 따라서 데이터가 더 이상 통과하지 않기 때문에 다른 쪽 끝의 승인이 중지됩니다.

그리고 TCP가 수신하지 못한 경우 TCP가하는 ​​일은 전략에 따라 다릅니다. 시간이 지남에 따라 전략, 실제 혼잡 방지 전략은 많이 달라졌습니다. Tahoe와 Reno와 같은 이름과 다른 행동이 있는지 구체적으로 나타내는 인터넷 검색 및 Wikipediaing을 수행하는 경우 볼 수있는 다른 것들이 있습니다. 그러나 발신자가 수신 확인이 누락되어 데이터가 더 이상 통과하지 않는다는 것을 인식하면 전송 속도가 빠르게 줄어든다는 아이디어입니다. 일반적으로 반으로 나눕니다. 따라서 크기를 크게 줄인 다음 다시 늘립니다.

따라서 이것이 의미하는 바는 패킷 손실이 "우리는 더 이상 데이터를 더 빨리 전송할 수 없습니다"라는 신호 기능이며, 인터넷을 통해 연결의 각 끝에있는 TCP 발신자는 항상 일종의 것입니다. ' 두 끝점 사이에서 사용할 수있는 최대 속도, 즉 가장 약한 링크, 즉 어디에서든지 항상 더 빠른 속도로 이동하려고 시도하며 항상 한계에 도달합니다. 따라서 패킷 전송 능력보다 약한 지점이 있다면 패킷을 펌핑하기 때문에 찾을 것입니다. 전송할 데이터가 있고 높은 대역폭 연결을 유지하는 한, 발신자는 전송 속도, 즉 미해결 패킷 수, 즉 승인으로 즉시 전송 될 수있는 패킷을 증가시킵니다. 돌아와, 그 숫자가 너무 멀어 질 때까지 그 숫자를 계속 위쪽으로 이동시킵니다. 그런 다음 많이 후퇴 한 다음 다시 앞으로 이동합니다.

그래서 이것은 실제로 TCP 연결 사이에서 일어나는 일입니다. 아마도 몇 퍼센트인지 모르지만 인터넷에서 트래픽의 대부분은 TCP 연결을 통해 발생합니다. 커널에있는 모든 운영 체제 (소위 TCP 스택)에는 이러한 카운터가 있습니다. 파일을 보낼 때, 큰 파일을 올리거나 웹 페이지를받을 때 다른 쪽 서버도 같은 일을합니다. 개별 연결을 기준으로 아직 승인되지 않은 많은 패킷을 푸시하여 실패하거나 중단되는 지점에 도달 할 때까지 패킷 속도를 높입니다. 그런 다음 다시 복구하고 복구 할 수 있도록 백업을 다시 시작합니다.

그래서 그것은 일종의 자체 조절 시스템으로 끝납니다. 제약 조건을 감안할 때, 그것은 실제로 일종의 펑키하고 조잡한 것 같습니다. "


3

따라서 다운로드 속도를 제한하려면 다음 두 가지 중에서 선택할 수 있습니다.

1) 서버에게 데이터를 더 느리게 보내도록 지시하십시오-TCP 또는 HTTP에서 프로토콜을 요청하는 프로토콜 기능이 없다고 생각합니다.

2) 업로드 속도를 제한하고 업로드 속도를 떨어 뜨림으로써 패킷을보다 느리게 인식합니다.

3) 라우터 / 방화벽 장치는 들어오는 데이터를 QoS 버킷에 넣고 요청한 속도로 해당 버킷 만 비 웁니다. 내부의 컴퓨터는 해당 속도의 수신 확인 만 볼 수 있으므로 들어오는 데이터는 해당 속도에 적응합니다. 또한 가끔 의도적으로 삭제 된 패킷이 연결 속도를 늦추는 데 효과적입니다.

이를 처리하는 장치를 찾으려면 구성 / 설명서에서 QoS (Quality of Service)를 찾으십시오. Linux (또는 BSD) 상자도이 작업에 편리합니다.


그것은 거의 말이됩니다-그래서 기술은 승인 속도를 제한하고 서버가 실제로보다 느리게 보내는 LAN 장치를 가장하여 그렇게하는 것입니까? 그래서 처음에는 연결을 채우는 버스트가있을 것입니다.
TessellatingHeckler

1
@TessellatingHeckler 그렇습니다. 또한 "버스트"는 en.wikipedia.org/wiki/Slow-start 의 매우 큰 버스트가되어서는 안됩니다 .
Jeff Ferland

2

QoS (서비스 품질) 제한을 지원하는 방화벽 또는 장치를 사용합니다.

사무실 게이트웨이 역할을하는 Linux 시스템을 구축하고이를 위해 트래픽 쉐이핑을 사용할 수 있습니다. 여러 개의 NIC가 설치되어 있으면 모든 시스템이 게이트웨이로 지정됩니다.

또한 트래픽을 쉽게 처리 할 수 ​​있도록 프록시 서버를 구성 할 수 있습니다. 오징어와 같은 것. 이 작업을 수행 할 수있는 턴키 라우팅 어플라이언스 배포가있을 수 있습니다.


QoS는 어떻게 도움이됩니까? 장치가 다운로드에 QoS를 적용 할 때까지 들어오는 트래픽이 이미 인터넷 연결을 통해 도착하여 차단하는 동안 차단 될 수 있습니다. QoS는 발신 트래픽에 적용 할 수 있지만 트래픽을 볼 때 너무 늦기 때문에 수신 트래픽에 대해서는 아무 것도 할 수 없습니다.
TessellatingHeckler

3
그것은 당신이 그것을 통제 할 수있는 교통을 형성 할 수 있습니다. 원격 서버에 데이터를 가져 오는 속도를 제한하도록 지시 할 수는 없지만 수신 지점에서 데이터 속도를 낮출 수 있습니다. 그렇지 않으면 네트워크에서 피드에 대한 트래픽 형성에 대해 공급자에게 문의해야합니다.
바트 실버 스트림

또한 프록시 서버는 혼잡을 완화하는 데 도움이 될 수 있습니다. 그러나 그렇지 않으면 진입 지점에서 모양을 만들어야합니다.
바트 실버 스트림

내 원래의 질문은 : 트래픽이 병목 현상을 겪은 후에 적용 할 수있는 제어가 발생하기 때문에 진입 지점에서 형성 할 수없는 것 같습니다. 어떻게 기술이 처리합니까? "예를 들어 Linux에 QoS 적용"과 "트래픽 형성 사용"은 실제로해야 할 일이지만, 이것이 어떻게 도움이 될 수 있는지에 대한 설명을 찾고있었습니다. (이제 다른 답글이 있습니다).
TessellatingHeckler

@TessellatingHeckler : 나는 또한 좋아하는 방법은 실제로 ECN의 사용 가능 하지 패킷을 삭제하지 않고 천천히 보내는 서버에게 있습니다. 이 방법은 WAN 인터페이스에서 수신 필터를 사용하는 대신 LAN 인터페이스에서 나가는 패킷에 RED와 같은 속도 제한기를 적용하는 것입니다.
Zan Lynx

2

HTTP 프로토콜은 사용 된 대역폭을 제한하는 기능을 제공하지 않으며 네트워크 대역폭이 제한되어 있어도 네트워크 관리자가 제어 할 수없는 클라이언트 측 설정이됩니다.

대역폭 제한 ( "서비스 품질"이라고도 함)은 대개 라우터 / 방화벽에서 관리되며 네트워크로 들어오고 나가는 모든 트래픽을 처리합니다. 이를 지원하는 정책을 통해 일반적으로 "단일 클라이언트 컴퓨터가 사용 가능한 모든 대역폭의 최대 10 %를 사용하도록 허용"또는 "FTP보다 SMTP 우선 순위를 부여하여 누군가가 많은 다운로드를 수행하는 경우에도 이메일을 전송할 수 있도록" ".

이 작업을 정확히 수행하는 방법은 사용되는 라우터 / 방화벽에 따라 다르지만 가장 기본적인 방법은 구성된 제한을 초과하는 패킷을 버리는 것입니다. TCP는 재전송을 보장하고 결국 병목 현상을 통과 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.