Apakah ada batas keras 65536 koneksi TCP terbuka per alamat IP di linux?

23

Apakah ada batas keras 65536 koneksi TCP terbuka per alamat IP di linux? Saya membaca di suatu tempat bahwa ada, tetapi seseorang meminta konfirmasi dan saya tidak dapat menemukannya.

Sepertinya saya ingat itu sesuatu tentang deskriptor file menjadi bilangan bulat 16 bit yang entah bagaimana membatasi?

Atau apakah ini hokum, dan apakah tidak ada batasan selain seberapa gemuk servernya?

Chris
sumber

Jawaban:

35

Anda mungkin memikirkan jumlah port. Ada 65536 port yang tersedia di TCP dalam versi IPv4 saat ini. Ini bukan hanya batasan Linux, ini adalah bagian dari protokol. Alamat IP Anda mengidentifikasi mesin Anda, dan port mengidentifikasi program di mesin Anda.

Tetapi, jumlah koneksi tidak dibatasi oleh itu. Sambungan terdiri dari 5 buah info, di geek berbicara 5-tuple. Itu ditentukan oleh protokol (TCP, UDP), alamat IP lokal dan port, dan alamat IP jarak jauh dan port. Jadi, ambil server web. Ini dapat melayani banyak koneksi pada port yang sama (kemungkinan besar 80). Server web Anda bahkan dapat mendukung beberapa koneksi ke mesin klien yang sama. Katakanlah, Anda terhubung ke google.com dari dua jendela. Mesin Anda akan memilih port yang tidak digunakan untuk setiap koneksi. Jadi, server google harus melacak (TCP, google.com, 80, yourmachine, som1) dan (TCP, google.com, 80, yourmachine, someport2). Pada titik tertentu Anda akan menemukan batas, tetapi ini bukan batas yang sulit, dan sangat bergantung pada sistem.

Dan ya, setiap soket adalah deskriptor file, tetapi tidak semua mesin menggunakan celana pendek untuk tabel fd. Di sistem saya, sistem yang tidak disetel sama sekali, cat /proc/sys/fs/file-maxmemberikan 323997. Saya yakin saya bisa meningkatkannya jika perlu.

Jadi, ada batas 65336, tetapi itu ada hubungannya dengan pengalamatan, bukan jumlah koneksi. Jumlah koneksi terbatas, tetapi lebih banyak berdasarkan konfigurasi sistem, dan berapa banyak memori yang dimilikinya.

Homolka yang kaya
sumber
2
Jadi, ulangi 5-tuple: meskipun saya terbatas pada port 65536, itu hanya membatasi saya untuk koneksi 64k per alamat IP yang masuk , apakah itu benar? Jadi satu-satunya batasan adalah deskriptor file, tetapi mereka belum tentu 16 bit? Jadi pada dasarnya yang Anda katakan adalah tidak ada batasan?
Chris
1
iya nih. Lihat juga: en.wikipedia.org/wiki/Transmission_Control_Protocol bagian "Penggunaan sumber daya"
user12889
3
@ Chris: koneksi 64k per alamat IP yang masuk pada satu port lokal , ya.
grawity
@ Chris apa yang dikatakan grawity. 5-tuple akan memiliki hingga (tetapi tidak pernah mencapai) 65536 kombinasi dengan mesin lainnya. Pada kenyataannya, Anda tidak akan pernah sampai di sana karena mesin tidak dapat menggunakan port lama untuk koneksi - beberapa dicadangkan untuk alasan tertentu.
Rich Homolka