Saya membaca manual Apache httpd online dan menemukan arahan untuk mengaktifkan ini. Temukan deskripsi di halaman manual untuk tcp
:
TCP_DEFER_ACCEPT (since Linux 2.4)
Allow a listener to be awakened only when data arrives on the
socket. Takes an integer value (seconds), this can bound the
maximum number of attempts TCP will make to complete the
connection. This option should not be used in code intended
to be portable.
Kemudian saya menemukan artikel ini tetapi saya masih tidak jelas jenis pekerjaan apa yang akan berguna untuk ini. Saya berasumsi bahwa jika httpd
memiliki opsi khusus untuk ini, itu harus memiliki relevansi dengan server web. Saya juga berasumsi dari fakta bahwa ini merupakan pilihan dan bukan hanya bagaimana httpd
koneksi jaringan, bahwa ada kasus penggunaan di mana Anda menginginkannya dan yang lainnya di mana Anda tidak menginginkannya.
Bahkan setelah membaca artikel itu, saya tidak jelas apa keuntungan dari menunggu jabat tangan tiga cara untuk menyelesaikan akan. Kelihatannya menguntungkan untuk memastikan itu tidak perlu ditukar-dalam httpd
contoh yang relevan dengan melakukannya sementara jabat tangan masih berlangsung alih-alih berpotensi menyebabkan penundaan setelah koneksi terbentuk.
Untuk artikel itu, bagi saya sepertinya juga tidak masalah TCP_DEFER_ACCEPT
status soket, Anda masih akan membutuhkan empat paket (berjabat tangan lalu data dalam setiap kasus). Saya tidak tahu bagaimana mereka menghitung sampai tiga, atau bagaimana hal itu memberikan peningkatan yang berarti.
Jadi pertanyaan saya pada dasarnya: Apakah ini hanya opsi usang atau ada kasus penggunaan aktual untuk opsi ini?
sumber
Jawaban:
(untuk meringkas komentar saya di OP)
Jabat tangan tiga arah yang mereka maksudkan adalah bagian dari koneksi TCP, opsi yang dipermasalahkan tidak terkait secara khusus dengan ini. Juga perhatikan bahwa pertukaran data bukan bagian dari jabat tangan tiga arah, ini hanya menciptakan koneksi TCP dalam keadaan terbuka / mapan.
Mengenai keberadaan opsi ini, ini bukan perilaku tradisional dari sebuah soket, biasanya utas penangan soket terbangun ketika koneksi diterima (yang masih setelah jabat tangan tiga cara selesai), dan untuk beberapa aktivitas protokol dimulai di sini ( misalnya server SMTP mengirimkan 220 baris ucapan), tetapi untuk HTTP, pesan pertama dalam percakapan adalah browser web yang mengirim baris GET / POST / etc, dan hingga ini terjadi, server HTTP tidak tertarik pada koneksi (selain waktu itu keluar), sehingga membangunkan proses HTTP ketika soket menerima selesai adalah kegiatan yang sia-sia karena proses akan segera tertidur lagi menunggu data yang diperlukan.
Walaupun tentu saja ada argumen bahwa bangun proses idle dapat membuat mereka 'siap' untuk diproses lebih lanjut (saya secara khusus ingat membangun terminal login pada mesin yang sangat lama dan meminta mereka untuk menukar dari swap), tetapi Anda juga dapat berdebat bahwa mesin apa pun yang memiliki menukar kata proses sudah membuat tuntutan pada sumber dayanya, dan membuat tuntutan lebih lanjut yang tidak perlu secara keseluruhan dapat mengurangi kinerja sistem - bahkan jika kinerja nyata masing-masing thread Anda meningkat (yang juga mungkin tidak, mesin yang sangat sibuk akan mengalami hambatan pada IO disk yang akan memperlambat hal-hal lain jika Anda bertukar, dan jika itu sibuk, tidur langsung mungkin menukar kembali keluar). Tampaknya menjadi pertaruhan, dan akhirnya pertarungan 'serakah' tidak selalu menghasilkan pada mesin yang sibuk,
Saran umum saya mengenai tingkat penyesuaian kinerja adalah untuk tidak membuat keputusan terprogram tentang apa yang terbaik, tetapi untuk memungkinkan administrator sistem dan sistem operasi untuk bekerja sama untuk menangani masalah manajemen sumber daya - itu adalah pekerjaan mereka dan mereka jauh lebih cocok untuk memahami beban kerja seluruh sistem dan seterusnya. Berikan opsi dan pilihan konfigurasi.
Untuk menjawab pertanyaan secara khusus, opsi ini bermanfaat untuk semua konfigurasi, bukan ke level yang mungkin Anda perhatikan kecuali di bawah beban lalu lintas HTTP yang ekstrem, tetapi secara teoretis merupakan cara "benar" untuk melakukannya. Ini adalah pilihan karena tidak semua rasa Unix (bahkan tidak semua Linux) memiliki kemampuan itu, dan dengan demikian untuk portabilitasnya dapat dikonfigurasi agar tidak dimasukkan.
sumber
Jabat tangan tiga arah adalah protokol umum dalam telepon suara:
Mereka penting dalam TCP untuk memastikan bahwa saluran dibuat. Jika Klien mulai mengirim badan panggilan sebelum mendengar (3) ada kemungkinan bahwa Server tidak mendengarkan atau tidak siap. Pendengaran (3) tidak menjamin bahwa Server tidak segera mengalami pembakaran spontan setelah transmisi tetapi meningkatkan kepercayaan bahwa Server siap untuk menerima.
Seperti yang tercantum dalam Wikipedia tentang Jabat Tangan :
Jadi, jika Anda ingin melepaskan sedikit kepastian tambahan bahwa server sudah siap, Server dapat melewati langkah (3) dan klien hanya akan menganggap bahwa server sudah siap. Ini mengubah pertukaran protokol di atas menjadi:
sumber