Mengapa membuat koneksi TCP baru dianggap mahal?


9

Saya tidak mengerti mengapa membuat koneksi TCP baru dianggap sebagai tugas yang mahal. Pada dasarnya pengaturan koneksi baru mengacu pada melakukan jabat tangan 3-arah TCP. Jadi itu mengirim dua paket dan menerima satu. Menimbang bahwa ribuan paket (data) akan mengikuti, jabat tangan tidak bisa menjadi bagian yang mahal. Bisa kah?


Mungkin karena penggunaan koneksi CPU dan memori?
joeqwerty

@ joeqwerty Saya mengerti bahwa koneksi TCP baru biasanya juga berarti membuat proses / utas baru pada misal server, tapi itu bukan karena TCP, tetapi karena aplikasi.

Jika ribuan paket data mengikuti, jabat tangan bukanlah bagian yang mahal. Tetapi mengapa tidak menggunakan koneksi TCP baru untuk setiap potongan data? Karena membuat koneksi TCP baru itu mahal. Itu sebabnya Anda membuat satu koneksi dan kemudian menggunakannya untuk ribuan potongan data.
David Schwartz

1
Juga pertimbangkan pembuatan koneksi baru mungkin tidak terbatas hanya pada jabat tangan TCP. Misalnya SSL menambahkan banyak negosiasi detail otentikasi dan enkripsi di atas.
Zoredache

Jawaban:


10

Saya percaya, secara umum, bahwa membuka koneksi TCP dianggap mahal jika dibandingkan dengan kemampuan untuk menggunakan kembali koneksi yang sudah terbuka dengan menjaganya tetap terbuka. Anda benar, membuka koneksi hanya membutuhkan 3 paket / putaran, tetapi waktu itu - 3 x RTT Anda - jauh melebihi biaya untuk menggunakan kembali koneksi yang sudah terbuka, yang jauh lebih dekat dengan 0. Disparitas tumbuh lebih cepat jika Anda Sedang sering membuka dan menutup koneksi.

Anda tentu benar, jika dibandingkan dengan jumlah putaran yang akan Anda lihat sebagai aplikasi "melakukan hal itu," 3 paket itu bisa tampak sangat kecil, tetapi sekali lagi, itu tergantung pada bagaimana Anda ingin membandingkan opsi DAN bagaimana aplikasi Anda berperilaku / berapa kali Anda berencana membuka koneksi.

Sunting Jika kita berbicara UDP vs TCP, Cheekaleek di sini adalah 100% benar - biaya overhead yang besar dalam jangka panjang jika dibandingkan dengan operasi tanpa koneksi UDP


1
Sebuah contoh yang baik yang saya lihat dalam paket-jejak: Koneksi MySQL yang digunakan kembali dapat mengubah pertanyaan dalam 2-5ms. Serangkaian kueri ElasticSearch mengubah kueri sekitar 17-25ms, sebagian besar waktu itu dalam pengaturan koneksi (termasuk pencarian DNS awal).
sysadmin1138

2

Ini tentu lebih mahal daripada mengirim paket UDP dan tidak peduli apa yang terjadi di masa lalu.

TCP juga dilengkapi dengan lebih banyak data header, dan mempertahankan status koneksi, yang akan menghabiskan sumber daya.

Jadi ya, dibandingkan dengan UDP, TCP lebih mahal, tetapi mahal adalah istilah yang relatif.

"Koneksi TCP adalah teman perempuan terbaik ???"


5
"TCP connections are a girl's best friend???" Tidak, mereka bukan. Saya punya ribuan gadis untuk ulang tahunnya dan yang dia lakukan adalah berhenti mengembalikan email saya. :(
HopelessN00b

2

Ini bukan hanya mengirim dan menerima paket. Memori tambahan harus dialokasikan dan pada tabel keadaan jaringan minimum diperbarui pada setiap langkah sampai sesi ditetapkan. Belum lagi pemeriksaan keamanan tambahan yang mungkin dilakukan (route spoof protection, dll).

Hanya menggunakan beberapa nomor contoh (karena kita tidak berbicara tentang sistem operasi tertentu) jika sebuah paket untuk sesi yang ditetapkan memiliki biaya CPU 1 unit, biaya sesi baru mungkin 10x atau 100x yang harganya dalam jumlah operasi dilakukan. Sebagian besar firewall perangkat keras yang pernah saya tangani dapat menangani urutan koneksi baru yang lebih kecil daripada yang bisa menangani sesi yang sudah ada.

Ini seringkali bukan masalah besar, terutama karena SYN-SYN / ACK-ACK terjadi dalam milidetik, tetapi untuk sistem besar dengan banyak pelanggan, sesi baru dapat berubah menjadi overhead yang signifikan .


2

Jumlah - atau jenis - masalah jauh lebih sedikit daripada kode yang terkait dengan sebenarnya mengalokasikan memori dan pelacakan terkait informasi negara. Jika Anda ingin mendapatkan gambaran yang kasar tentang implikasi ini, lihat jumlah kode di kernel Linux yang terkait dengan TCP vs yang terkait dengan UDP atau ICMP. Perbandingan yang sangat kasar menunjukkan TCP yang membutuhkan sekitar 10x jumlah baris kode yang ditemukan di UDP.

Dalam jaringan IP jumlah pemeliharaan negara yang diperlukan adalah salah satu penentu skalabilitas yang paling penting. Untuk titik akhir TCP, ini dinyatakan tidak hanya di SYN / ACK tetapi juga dalam pemeliharaan jendela geser, nomor urut, manajemen buffer dan tindakan QoS, dll. Periksa kompleksitas FSM untuk tcp dan pertimbangkan kurangnya inheren yang sama di UDP ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.