Rekan saya percaya itu karena jarak fisik sementara saya pikir itu tidak penting. Pemahaman saya adalah sekali Anda telah melakukan jabat tangan awal dan aliran data telah dimulai, tidak masalah di mana server berada dan hasilnya harus hampir sama. Apakah saya melewatkan sesuatu di sini? Bagaimana cara kerjanya?
Anda berdua benar pada beberapa titik dalam sejarah, tetapi pemahaman Anda sebagian besar benar ... hari ini :). Ada beberapa faktor yang berubah antara jawaban yang diberikan teman Anda sebelumnya, dan kemampuan yang kami miliki saat ini.
- Penskalaan Jendela TCP
- Penyetelan penyangga host
Perbedaan dalam hasil yang Anda lihat dapat dipengaruhi oleh:
- Paket hilang
- Transfer TCP paralel
TCP Window Scaling: Efek bandwidth-delay
Seperti yang teman Anda sebutkan, implementasi TCP yang lebih lama menderita dari batasan yang diberlakukan oleh 16-bit asli yang menerima ukuran jendela di header TCP (ref RFC 793: Bagian 3.1 ); RWIN mengontrol berapa banyak data yang tidak diakui dapat menunggu dalam satu soket TCP. RWIN 16-bit menghargai jalur internet terbatas dengan produk penundaan bandwidth tinggi (dan banyak koneksi internet bandwidth tinggi saat ini akan dibatasi oleh nilai 16-bit).
Untuk nilai RTT yang tinggi, sebaiknya memiliki RWIN yang sangat besar. Misalnya, jika jalur Anda RTT dari Malaysia ke AS adalah sekitar 200 ms, TCP RWIN asli akan membatasi Anda hingga 2,6Mbps.
Throughput maks = Rcv_Win / RTT
* Throughput maks = 65535 * 8 / 0,200 *
Throughput maks = 2,6Mbps
RFC 1323 mendefinisikan beberapa "Opsi TCP" untuk mengatasi keterbatasan ini; salah satu dari Opsi TCP adalah "skala jendela". Ini memperkenalkan faktor skala, yang mengalikan nilai RWIN asli, untuk mendapatkan nilai jendela penerimaan penuh; menggunakan opsi penskalaan jendela memungkinkan RWIN maksimum 1073725440 byte. Menerapkan perhitungan yang sama:
Throughput maks = Rcv_Win / RTT
* Throughput maks = 1073725440 * 8 / 0,200 *
Throughput maks = 42,96Gbps
Perlu diingat bahwa TCP meningkatkan RWIN secara bertahap selama durasi transfer, asalkan packet loss tidak menjadi masalah. Untuk melihat kecepatan transfer yang sangat besar pada koneksi penundaan tinggi, Anda harus mentransfer file besar (sehingga TCP punya waktu untuk meningkatkan jendela) dan kehilangan paket tidak bisa menjadi masalah untuk koneksi.
Paket Hilang
Sirkuit internet di Samudra Pasifik terkadang sangat padat. Beberapa keluarga saya tinggal di Taiwan, dan kami secara rutin mengalami masalah ketika kami menggunakan Google Talk dengan mereka. Saya sering melihat paket loss lebih dari 0,5% ketika saya melakukan ping jalur DSL dari AS; jika Anda melihat sesuatu seperti kehilangan 0,5% ke server "lebih lambat", sangat mudah membatasi throughput pada satu soket TCP.
Streaming TCP paralel
FYI, beberapa situs web uji kecepatan menggunakan aliran TCP paralel untuk meningkatkan throughput ; ini mungkin mempengaruhi hasil yang Anda lihat, karena aliran TCP paralel secara dramatis meningkatkan throughput jika Anda memiliki beberapa paket-loss di jalan. Saya telah melihat empat stream TCP paralel sepenuhnya memenuhi modem kabel 5Mbps yang menderita kehilangan paket konstan 1%. Biasanya kehilangan 1% akan menurunkan throughput dari aliran TCP tunggal.
Bahan Bonus: Host Buffer tuning
Banyak implementasi OS yang lebih lama memiliki soket dengan buffer terbatas; dengan OS yang lebih lama (seperti Windows 2000), tidak masalah apakah TCP memungkinkan sejumlah besar data berada dalam penerbangan ... buffer socket mereka tidak disetel untuk mengambil keuntungan dari RWIN yang besar. Ada banyak penelitian yang dilakukan untuk mengaktifkan kinerja tinggi pada transfer TCP . Sistem operasi modern (untuk jawaban ini, kita dapat memanggil Windows Vista dan kemudian "modern") memasukkan mekanisme alokasi buffer yang lebih baik dalam implementasi buffer socket mereka.