2010-12-16 7 views
1

TcpClient를 사용하여 대역폭 추정 도구를 만들고 싶습니다. 문제는 내가 미리 정의 된 시간에 측정을 수행하려는 것입니다 (전송할 버퍼 데이터 길이를 미리 정의하는 대신). 루프 (데이터의 작은 덩어리를 반복적으로 전송)를 사용하면 성능이 저하됩니다 (수동 조각화 대 자동 조각화).TcpClient 대역폭 추정

답변

1

Nagle 알고리즘을 사용 중지할지 여부에 따라 다릅니다. 당신이 그렇다면, 당신은 스스로를 조각 낼 것입니다. 그렇지 않으면 데이터를 실제로라고 생각할 때 쓸 수 없기 때문에 목표를 달성 할 수 없습니다. 연결의 다른 쪽 끝이 물론 최종 "ack"를 보내지 않는 한.

거친 속도를 알아보기 위해 작은 샘플을 사용한 다음 그 샘플을 기반으로 더 큰 샘플을 만들어 예측 시간을 예측하는 것이 좋습니다. 당신은 어쨌든 시간을 측정 할 필요가 있습니다. 정확한 시간을 지나칠 것 같지 않으므로 너무 많은 차이를 만들어서는 안됩니다. 어쨌든 어느 정도는 크기를 조정할 수 있습니다. 느린 네트워크가 아니라면 패킷을 충분히 보내지 않을 것으로 예상됩니다. 따라서 300K 대신 200K 만 보내면 중간에 결정할 수 있습니다. 별 차이가 없어야합니다.

당연히 원래의 제안처럼 들릴지 모르겠지만, 저는 전화 당 "상당히 큰"덩어리를 보내는 것에 대해서만 말하고 있습니다 ... 16K라고 말하십시오. (어쨌든 패킷 크기보다 훨씬 큽니다.) 조각화에 많은 영향을 미치지는 않지만 계속 진행하면서 다소 조정할 수 있습니다. 작고 작은 패킷을 보낼 것을 권하지 않습니다.

+0

나는 용서해 주지만, 나는 정말로 이해하지 못한다. 틀 렸으면 고쳐줘. 만약 내가 독수리 알고리즘을 사용하지 않으면, 수동으로 데이터의 작은 덩어리를 반복적으로 보내서 내 데이터를 조각해야합니다. 독수리 알고리즘을 사용하지 않으면 내 데이터가 자동 조각화됩니다. 내가 dawle 알고리즘을 사용하지 않는다면, 나는 실제로 그것이 수신되었다고 생각했을 때 전송 된 데이터가 실제로 수신되지 않을 수 있기 때문에 내 목표 (대역폭 추정치)를 달성 할 것 같지 않다. 여기 혼란스러워. –

+0

@publicENEMY : 연결의 다른 쪽 끝을 응용 프로그램 수준에서 효과적으로 볼 수 있도록 모든 것을 받았을 때 어떤 가치를 제공 할 수 있다면 분명히해야합니다. 그러면 괜찮을 것입니다. 송신 측에서의 계산 능력면에서 비효율적이지만, 네트워크 타이밍과 비교하여 중요하지는 않습니다. –

+0

여기에 나는 TCP가 안정적이라고 생각했다. nagle을 사용하지 않으면 보낸 데이터가 수신된다는 보장이 없다고 말하고 있습니까? –