Lebih dari 65.536 koneksi TCP di Linux


11

Saya buntu mencoba mengatur lebih dari 65536 koneksi TCP keluar dari kotak Linux (RedHat5).

Saya telah mengonfigurasi kotak keluar dan penerima untuk memungkinkan cukup deskriptor file.

Saya tidak percaya ada masalah di sisi penerima - saya memiliki beberapa kotak target, masing-masing dengan beberapa alamat IP dan saya menggunakan beberapa port.

Di sisi keluar saya tidak percaya saya memukul batas per alamat IP - Saya menggunakan beberapa alamat IP dan port (saya membuka koneksi dari port 30.000 - 60.000 untuk masing-masing dari beberapa alamat IP).

Apakah ada beberapa parameter Linux kernel yang bisa saya lewatkan? Atau batas mendasar dalam TCP?

Kegagalannya adalah aplikasi saya untuk membuka koneksi tergantung pada panggilan connect ().

Terima kasih atas bantuannya, NickB


Berapa batas yang Anda tekan? Apa kesalahannya ketika Anda mencapai batas itu?
nos

terhubung () hang.
NickB

1
Apa yang ada di antara IP sumber dan destiniasi Anda? Apakah Anda mungkin mengisi tabel NAT beberapa perangkat?

Jawaban:


10

Berikut adalah blog tempat seseorang mendapat> 1.000.000 outbound dari sebuah kotak.

  • Richard Jones, MetaBrew.com, 2008-11-04, Aplikasi Juta Pengguna dengan Mochiweb, Bagian 3 , bagian Mengubahnya hingga 1 Juta (Diarsipkan di sini .)

Di Bagian 1, kami menetapkan rentang ke "1024 65535" - artinya ada 65535-1024 = 64511 port yang tidak tersedia tersedia. Beberapa dari mereka akan digunakan oleh proses lain, tetapi kita tidak akan pernah mendapatkan lebih dari 64511 koneksi klien, karena kita akan kehabisan port.

...

Jadi mari kita bawa 17 alamat IP baru, dengan maksud membuat 62.000 koneksi dari masing-masing - memberi kami total 1.054.000 koneksi


Terima kasih! Itu bekerja untuk saya. Secara khusus, segel sysctl dari metabrew.com/article/… memungkinkan saya untuk mengatur lebih dari 65.536 koneksi TCP.
NickB

1

Protokol TCP hanya menggunakan 16 bit untuk port tujuan dan sumber. Tidak akan ada cara untuk membuka lebih dari 65536 port sekaligus - bahkan dengan Linux.


3
Ini hanya berlaku untuk satu alamat IP tunggal. Jika Anda menggunakan lebih dari satu, setiap alamat IP harus dapat memiliki 65536 port terbuka.
Pekerjaan

1
benar, port lokal diperlukan untuk setiap koneksi keluar. IIRC, port apa pun yang sudah digunakan tidak dapat digunakan untuk koneksi ini. jadi, misalnya, jika Anda menjalankan telnet / ftp / http, port bernomor 21/23/80 tidak tersedia sebagai port lokal.
KevinDTimm

1
Anda juga dapat memiliki banyak koneksi ke port yang sama.
gtrak

@ Pekerjaan - Ya, karena TCP ditumpuk di atas IP - Saya hanya berbicara tentang satu alamat IP.

4
Setiap koneksi diidentifikasi oleh tuple yang terdiri dari alamat dan port jarak jauh dan alamat dan port lokal. Jadi> 65536 koneksi masuk dari host jarak jauh yang berbeda dimungkinkan. > 65.536 koneksi keluar dari satu antarmuka pada sebuah host tidak dimungkinkan dan Anda akan dibatasi sedikit lebih sedikit dari itu karena akan selalu ada beberapa port yang digunakan.
Len Holgate

0

Dalam konteks ini, "antarmuka tunggal" berarti perawatan jaringan tunggal dengan satu alamat IP yang ditugaskan padanya. Setiap koneksi TCP keluar terikat ke port terpisah, jadi contoh Anda tidak mungkin.

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.