Em suma, existem três casos.
1. A interface física limita o rendimento.
Se a interface de rede é limitada, então esse é o limite (duh: p) e a latência não importa, como diz @Ramhound.
2. Janela limitada
Se a janela máxima configurada do TCP em qualquer uma das extremidades estiver limitando,
T <= min(rwnd,cwnd)/RTT
3. Perda de pacotes limitada
A perda de pacotes também pode limitar o rendimento (limitando a janela de envio). Aprendemos com O comportamento macroscópico do algoritmo de prevenção de congestionamento TCP que podemos obter o limite superior na taxa de transferência
T <= (MSS / RTT) * C/sqrt(p),
onde p é a taxa de perda de pacotes, e C é uma constante (veja o artigo para explicação). Isso não é exato, há uma série de suposições importantes, e sabores TCP diferentes também afetam isso - mas vemos que a perda de pacotes afeta o throughput.
Eu não entendo como isso ajuda você a escrever um programa em C #, mas espero que isso lhe dê algo:)