2008-11-03 5 views
11

대기 시간이 긴 환경 (연결 당 트래픽 셰이핑이 없다는 가정하에 거리가 넓은 공용 인터넷 또는 그와 유사한 것)에서 여러 개의 병렬 TCP 연결을 통해 더 나은 데이터 전송 속도를 달성 할 수 있습니까? 아니면 TCP가 단일 연결로 전체 대역폭을 사용할 수 있습니까? ?TCP를 사용하면 여러 연결로 더 높은 전송률을 얻을 수 있습니까?


수신자가 0 개의 창 크기로 버퍼 혼잡을보고하지 않으면 TCP는 가능한 빨리 데이터를 전송합니까? 따라서 RTT가 예를 들어 60 초와 같은 경우 속도에 전혀 영향을주지 않습니까? 일부 최대 창 크기 또는 속도를 제한하는 다른 항목이 있습니까?

답변

15

멀티플 동시 연결 이주는 장점 중 하나는 비둘기와 브라이언이 언급 한 동일한주의 사항에 따라 TCP 수신 창이 너무 작아지는 문제를 더 잘 극복 할 수 있다는 것입니다.

이 원리는 bandwidth delay product입니다. (자세한 설명은 here입니다.)

간략한 요약 : 대기 시간이 긴 고 대역폭 환경에서 TCP와 같은 안정적인 통신은 주어진 시간에 비행중인 데이터의 양에 의해 제한되는 경우가 많습니다. 대역폭 지연 제품이 각 연결에 개별적으로 적용되므로 여러 연결이이 문제를 해결하는 한 가지 방법입니다.

자세한 내용은 다음을 고려하십시오. 초당 10^8 비트 (10 메가 비트/초)의 대역폭과 100ms (0.1 초)의 왕복 지연이 있습니다. 따라서 첫 번째 비트의 확인 응답이 보낸 사람에게 돌아 오기 전에 최대 10^7 비트 (10 메가 비트 = ~ 1.25MB)의 데이터가 전송 될 수 있습니다.

이것은 OS의 TCP 스택에 따라 다르지만 일반적으로 TCP 수신 창 크기는 64KB입니다. 이는 엔드 투 엔드 대역폭을 최대한 활용할 수있을만큼 너무 작습니다. 일단 64kbytes (512kbits)의 데이터가 보내지면, 송신 프로세스는 수신자로부터 어떤 데이터가 소비되었다는 것을 알리는 창 업데이트를 기다렸다가 더 이상의 데이터를 유선에 전송합니다.

여러 개의 TCP 세션을 열면 각 TCP 세션마다 고유 한 보내기/받기 버퍼가 있다는 사실로이 문제를 해결할 수 있습니다.

물론 인터넷에서 TCP 창 크기, 경합 등으로 인해 실제 사용 가능한 종단 간 대역폭을 결정하기가 어렵습니다. 몇 가지 샘플 수치를 제공 할 수 있다면 더 많은 것을 돕는다.

다른 옵션은 소켓을 만들 때 OS 설정을 사용하여 전체적으로 또는 소켓 옵션을 사용하여 소켓별로 기본 수신 창을 설정하는 것입니다.

1

예 (그렇지만 구현이 반드시 쉬운 것은 아닙니다.) akamai와 같은 CDN은 신뢰할 수있는 전용 파이프로 인해 일반적으로 전송되는 것보다 큰 패킷을 압축하여 성능을 향상시킵니다. 응용 프로그램을 더 많이 알지 못해도 더 자세하게 설명하기 어렵습니다.

+0

내 응용 프로그램은 응용 프로그램 수준의 대화가 필요없이 데이터를 단방향으로 전송합니다. 데이터를 원격 소켓으로 밀어 넣기 만하면됩니다. – JtR

+0

나는 아마 여기서 외출 할 것이지만, 그렇게 어려운 것이 아니라면 가장 확실한 방법은 재판을 준비하는 것이다. 그것은 가능성이 거기에있는 것처럼 확실히 들린다. 주어진 한 가지 방법이다. – dove

+0

안정적인 (연결 기반) 소켓을 찾으십니까? 그렇지 않은 경우 TCP가 아닌 UDP를 사용하는 것이 도움이 될 수 있습니까? – AshtonKJ

7

링크에있는 유일한 사람이라면 오버 헤드가 증가하고 속도가 감소합니다. 그러나 다른 사용자와 완전히 포화 된 링크를 공유하는 경우 시스템을 게임하고 전체 속도를 높일 수 있습니다 (각 연결은 하나의 연결보다 느리지 만 합계는 더 빠릅니다). "시간 슬롯"(기술 용어는 무엇입니까? 그것은 당신에게 할당 된 지금은 나를 도망칩니다).

+0

대기 시간은 어떻게됩니까? 요금에 어떤 영향을 줍니까? 충분히 큰 버퍼가 사용되면 대기 시간이 속도에 영향을 미치지 않습니까? – JtR

+0

TCP 창의 크기에 따라 버퍼가 훨씬 덜 중요합니다. –

1

Muz's description of the issue이 점재합니다.

해당 기능을 사용하려면 운영 체제의 TCP 구현에 따라 달라질 수 있습니다. 특히 최상의 결과를 얻으려면 Window Scale 옵션을 지원하는 TCP 스택 (RFC 1323)이 필요합니다.

또한이 기능을 사용하려면 일부 OS 설정을 조정해야 할 수 있습니다. Windows에서 조정해야 할 수도있는 이라는 레지스트리 설정이 있습니다. Microsoft KB Article 224829: Description of Windows 2000 and Windows Server 2003 TCP Features은이를 수행하는 방법을 설명합니다.