•  cahaya takoreh

TCSplitter

Terowong untuk memisahkan sambungan TCP atau UDP di pelbagai sambungan TCP

Matlamat

Bilakah anda mahu memisahkan satu sambungan TCP menjadi beberapa sambungan? Biasanya anda menggunakan a terowong untuk mencapai sebaliknya . Kes penggunaan saya adalah mengelakkan had lebar jalur dalam rangkaian mudah alih, jadi ujian dilakukan dengan kad sim tanpa data yang tersisa pada rancangannya[1].

Bagaimanakah ia berfungsi

The terowong ditulis dalam golang kerana cukup cepat, dan biasa digunakan untuk perkakas rangkaian. Cli hampir tidak dapat digunakan kerana kebanyakan pilihan dibuat semula ketika saya menguji kaedah yang berbeza.

Pada mulanya ada "flings" dan "lassos", untuk membagi jumlah sambungan untuk keluar (flinged) dan masuk (lassoed), tetapi ini adalah abstraksi yang tidak perlu kerana lebih baik menandakan paket dengan tujuannya, walaupun niat utamanya adalah untuk menawarkan had kadar yang berbeza untuk sambungan keluar dan masuk, jadi pemisahan tahap yang lebih tinggi antara naik / turun kelihatan praktikal.

Pelanggan harus membuat semua sambungan kerana kami menganggap bahawa pelayan tidak dapat membuka sambungan keluar. Apabila pelanggan menerima sambungan dari aplikasi pengguna, ia menyediakan kumpulan sambungan yang diperlukan dengan pelayan, dan apa sahaja data yang diterima, ia membaginya di antara sambungan khusus, mengikut had yang ditentukan pengguna.

Paket kemudian dihantar ke pelayan, yang harus menyusunnya kembali ke urutan yang betul, kerana sambungan TCP yang berbeza dapat menyelesaikan aliran data pada bila-bila masa (pesanan yang dikirim tidak dihormati, kerana penghalaan ), dan kemudian diteruskan ke aplikasi penerima.

Sambungan ditutup dan yang baru dibuka apabila had data yang dikonfigurasi setiap sambungan tercapai, serupa dengan caranya bayang-bayangdata terowong proksi di aliran yang berbeza dengan tujuan untuk menutupi tingkah laku aliran data, kecuali terowong kami melakukan itu sekerap mungkin.

Mengapa ia berfungsi

Tujuannya di sini adalah untuk mengawal berapa banyak data yang harus dikendalikan oleh setiap sambungan. Untuk tujuan kami, itu tidak pernah melebihi biasanya adalah MTU saiz tingkap. Anda boleh menganggap MTU sebagai batas atas sekeping data yang melintasi seluruh rangkaian, dan itu adalah sasaran kami kerana kami ingin melewati had kadar jalur lebar rangkaian berpagar. Untuk mengehadkan berapa banyak data yang dapat dilalui oleh pelanggan, anda perlu mengira ia betul? Sekiranya logik anda berfungsi dengan sesuatu sepertido-while

Maka anda perlu sekurang-kurangnya menerima apacket . Saya tidak pasti sama ada ini yang sebenarnya berlaku, atau sebab mengapa terowong saya berfungsi adalah yang lain. Mungkin sangat mungkin untuk memeriksa paket pertama, tetapi dari perspektif reka bentuk, ini bermakna anda harus memeriksa setiap sambungan tunggal, yang akan menjadikan sistem lebih lemah daripada serangan DOS, dan ya terowong saya dapat dengan mudah digunakan sebagai alat DOS / Stress yang cekap, kerana anda dapat membahagikan data ke paket yang sangat kecil (yang bermaksud sambungan TCP akan mempunyai tekanan kitar semula yang tinggi ) dan mempunyai kumpulan sambungan yang anda suka.

Pengujian ke atas pelabuhan yang berlainan juga menunjukkan bahawa ia hanya dapat dilakukan beberapa port, dan hadnya selalu berbeza antara port, dengan443 memberikan salah satu tingkap yang lebih tinggi, di sekitar20kb , meneka keranaTLS berjabat tangan memerlukan lebih banyak data, dan had kadar ini akan berubah berdasarkan waktu[2].

Keputusan

Saya mencuba penghapusan pengekodan dengan harapan dapat meningkatkan hasil data. Dengan menggunakan pustaka pengekodan penghapusan dan penyahkodan / penyahkodan data itu sendiri, dan juga dengan overlay KCP protokol atas protokol pemisahan saya. Mencuba KCP mungkin kelihatan sebagai pendekatan mundur, kerana ia memperdagangkan latensi yang lebih baik untuk throughput yang lebih rendah, tetapi anggapan awal saya adalah bahawa kemacetan saya dalam sambungan yang jatuh pertengahan transmisi, yang akan menyebabkan banyak paket rosak, jadi saya dapat mencapai yang lebih tinggi throughput dengan pembetulan ralat.

Ternyata itu hanya had kadar berapa banyak sambungan TCP yang dapat dihantar oleh pelanggan melalui rangkaian, jadi hanya perlindungan DOS yang tidak dapat saya lakukan. Selepas X jumlah sambungan adaSYN percubaan berhenti menerimanyaACK , mengisi tunggakan dan akhirnya membuat terowong terhenti. Percubaan dan kesilapan menunjukkan bahawa mungkin antara4-8[3] sambungan dibuka pada waktu tertentu, dan dengan MTU sebanyak500-1000 bait anda dapat mengekalkan aliran yang stabil sekurang-kurangnya128kbps , jika aliran berterusan bukan keperluan, anda dapat mencapai kelajuan yang lebih tinggi dalam jangka masa yang lebih pendek pada pecah banyak sambungan berdasarkan permintaan.

Sebaliknya, a (benar)DNS terowong hampir tidak dapat mendorong56kbps dan dapat cepat terkial-kial kerana saya rasa sebilangan besar permintaan DNS kelihatan lebih mencurigakan daripada permintaan TCP. Kita harus menyatakan bahawa atrue Terowong DNS mengekod (keluar) data melalui subdomain palsu dan menyahkod (masuk) data yang diterima dengan membuat pertanyaan pada rekod DNS, sedangkan kadang-kadang terowong DNS boleh dianggap sebagai sambungan UDP mentah melalui port DNS, yang mungkin suatu ketika dahulu, pelayan DNS dibenarkan dan dimajukan dengan betul.

Kesimpulannya

Saya tidak pasti berjaya mencapai matlamat saya utiliti bijaksana, kerana menjalankan terowong seperti ini dapat membuat telefon anda cukup panas, dan menghabiskan banyak bateri, tetapi menjadikannya sebagai sambungan sandaran dapat meyakinkan ... jika saya benar-benar bersusah payah menjadikannya cukup stabil :)

[1]biasanya apabila kad sim tidak mempunyai lebih banyak data untuk melayari web, permintaan web mengalihkan ke gerbang tangkapan (untuk memberitahu anda untuk membeli lebih banyak data)
[2]rancangan data mudah alih dapat memberikan sambungan yang lebih baik pada waktu malam
[3]Nombor ini, yang agak selaras dengan kiraan inti biasa, mungkin mendorong anda untuk mengesyaki bahawa kernel membatasi sambungan entah bagaimana, senario sambungan terowong yang dibuka pasti tidak biasa, tetapi tombol penalaan linux tidak pernah memberikan hasil yang lebih baik.

Tanda Pos: