Pengaturan Koneksi TCP
Saat kami menelusuri web, mengirim email, atau memutar game online, kami sering tidak memikirkan koneksi jaringan yang kompleks di belakangnya. Namun, langkah -langkah yang tampaknya kecil inilah yang memastikan komunikasi yang stabil antara kami dan server. Salah satu langkah terpenting adalah pengaturan koneksi TCP, dan inti dari ini adalah jabat tangan tiga arah.
Artikel ini akan membahas prinsip, proses, dan pentingnya jabat tangan tiga arah secara rinci. Langkah demi langkah, kami akan menjelaskan mengapa jabat tangan tiga arah diperlukan, bagaimana hal itu memastikan stabilitas dan keandalan koneksi, dan betapa pentingnya untuk transfer data. Dengan pemahaman yang lebih dalam tentang jabat tangan tiga arah, kami akan mendapatkan pemahaman yang lebih baik tentang mekanisme komunikasi jaringan yang mendasari dan pandangan yang lebih jelas tentang keandalan koneksi TCP.
Proses jabat tangan tiga arah TCP dan transisi negara bagian
TCP adalah protokol transportasi berorientasi koneksi, yang membutuhkan pembentukan koneksi sebelum transmisi data. Proses pembentukan koneksi ini dilakukan oleh jabat tangan tiga arah.
Mari kita lihat lebih dekat pada paket TCP yang dikirim dalam setiap koneksi.
Awalnya, klien dan server ditutup. Pertama, server secara aktif mendengarkan port dan berada dalam keadaan mendengarkan, yang berarti server harus dimulai. Selanjutnya, klien siap untuk mulai mengakses halaman web. Ini perlu membuat koneksi dengan server. Format paket koneksi pertama adalah sebagai berikut:
Ketika klien memulai koneksi, itu menghasilkan nomor urutan awal acak (Client_ISN) dan menempatkannya di bidang "Nomor Urutan" dari header TCP. Pada saat yang sama, klien menetapkan posisi bendera syn menjadi 1 untuk menunjukkan bahwa paket keluar adalah paket syn. Klien menunjukkan bahwa ia ingin membuat koneksi dengan server dengan mengirim paket syn pertama ke server. Paket ini tidak berisi data lapisan aplikasi (yaitu, data yang dikirim). Pada titik ini, status klien ditandai sebagai syn-sent.
Ketika server menerima paket syn dari klien, ia secara acak menginisialisasi nomor seri sendiri (Server_ISN) dan kemudian menempatkan nomor itu di bidang "Nomor Seri" dari header TCP. Selanjutnya, server memasukkan Client_ISN + 1 di bidang "Nomor Pengakuan" dan menetapkan Bit Syn dan ACK ke 1. Akhirnya, server mengirim paket ke klien, yang tidak berisi data lapisan aplikasi (dan tidak ada data untuk dikirim server). Pada saat ini, server berada dalam status SYN-RCVD.
Setelah klien menerima paket dari server, perlu melakukan optimisasi berikut untuk menanggapi paket balasan akhir: Pertama, klien menetapkan bit ACK dari header TCP dari paket balasan menjadi 1; Kedua, klien memasuki Nilai Server_ISN + 1 di bidang "Konfirmasi Nomor Jawaban"; Akhirnya, klien mengirim paket ke server. Paket ini dapat membawa data dari klien ke server. Setelah menyelesaikan operasi ini, klien akan memasuki negara yang mapan.
Setelah server menerima paket balasan dari klien, ia juga beralih ke status yang ditetapkan.
Seperti yang dapat Anda lihat dari proses di atas, saat melakukan jabat tangan tiga arah, jabat tangan ketiga diizinkan untuk membawa data, tetapi dua jabat tangan pertama tidak. Ini adalah pertanyaan yang sering ditanyakan dalam wawancara. Setelah jabat tangan tiga arah selesai, kedua belah pihak memasuki keadaan yang ditetapkan, menunjukkan bahwa koneksi telah berhasil ditetapkan, pada titik mana klien dan server dapat mulai mengirim data satu sama lain.
Mengapa tiga jabat tangan? Tidak dua kali, empat kali?
Jawaban umum adalah, "Karena jabat tangan tiga arah menjamin kemampuan untuk menerima dan mengirim." Jawaban ini benar, tetapi hanya alasan permukaan, tidak mengedepankan alasan utama. Berikut ini, saya akan menganalisis alasan triple handshake dari tiga aspek untuk memperdalam pemahaman kita tentang masalah ini.
Jabat tangan tiga arah dapat secara efektif menghindari inisialisasi koneksi yang diulang secara historis (alasan utama)
Jabat tangan tiga arah menjamin bahwa kedua belah pihak telah menerima nomor urutan awal yang andal.
Jabat tangan tiga arah menghindari pemborosan sumber daya.
Alasan 1: Hindari duplikat historis bergabung
Singkatnya, alasan utama jabat tangan tiga arah adalah untuk menghindari kebingungan yang disebabkan oleh inisialisasi koneksi duplikat lama. Dalam lingkungan jaringan yang kompleks, transmisi paket data tidak selalu dikirim ke host tujuan sesuai dengan waktu yang ditentukan, dan paket data lama dapat tiba di host tujuan terlebih dahulu karena kemacetan jaringan dan alasan lainnya. Untuk menghindari ini, TCP menggunakan jabat tangan tiga arah untuk membangun koneksi.
Ketika klien mengirim beberapa paket pendirian koneksi syn secara berurutan, dalam situasi seperti kemacetan jaringan, berikut ini dapat terjadi:
1- Paket Syn lama tiba di server sebelum paket syn terbaru.
2- Server akan membalas paket SYN + ACK ke klien setelah menerima paket Syn lama.
3- Ketika klien menerima paket SYN + ACK, ia menentukan bahwa koneksi adalah koneksi historis (nomor urutan kedaluwarsa atau timeout) sesuai dengan konteksnya sendiri, dan kemudian mengirimkan paket pertama ke server untuk membatalkan koneksi.
Dengan koneksi dua tangan, tidak ada cara untuk menentukan apakah koneksi saat ini adalah koneksi historis. Jabat tangan tiga arah memungkinkan klien untuk menentukan apakah koneksi saat ini adalah koneksi historis berdasarkan konteks ketika siap untuk mengirim paket ketiga:
1- Jika itu adalah koneksi historis (nomor urutan kedaluwarsa atau batas waktu), paket yang dikirim oleh jabat tangan ketiga adalah paket pertama untuk membatalkan koneksi historis.
2- Jika itu bukan koneksi historis, paket yang dikirim untuk ketiga kalinya adalah paket ACK, dan kedua pihak yang berkomunikasi berhasil membuat koneksi.
Oleh karena itu, alasan utama bahwa TCP menggunakan jabat tangan tiga arah adalah bahwa ia menginisialisasi koneksi untuk mencegah koneksi historis.
Alasan 2: Untuk menyinkronkan nomor urutan awal dari kedua belah pihak
Kedua sisi protokol TCP harus mempertahankan nomor urutan, yang merupakan faktor kunci untuk memastikan transmisi yang andal. Angka urutan memainkan peran penting dalam koneksi TCP. Mereka melakukan hal berikut:
Penerima dapat menghilangkan data duplikat dan memastikan keakuratan data.
Penerima dapat menerima paket dalam urutan nomor urutan untuk memastikan integritas data.
● Nomor urutan dapat mengidentifikasi paket data yang telah diterima oleh pihak lain, memungkinkan transmisi data yang andal.
Oleh karena itu, setelah membuat koneksi TCP, klien mengirimkan paket syn dengan nomor urutan awal dan mengharuskan server untuk membalas dengan paket ACK yang menunjukkan penerimaan yang sukses dari paket SYN klien. Kemudian, server mengirimkan paket syn dengan nomor urutan awal ke klien dan menunggu klien untuk membalas, sekali dan untuk semua, untuk memastikan bahwa nomor urutan awal disinkronkan secara andal.
Meskipun jabat tangan empat arah juga dimungkinkan untuk secara andal menyinkronkan nomor urutan awal dari kedua belah pihak, langkah kedua dan ketiga dapat digabungkan menjadi satu langkah, menghasilkan jabat tangan tiga arah. Namun, kedua jabat tangan hanya dapat menjamin bahwa nomor urutan awal satu pihak berhasil diterima oleh pihak lain, tetapi tidak ada jaminan bahwa jumlah urutan awal dari kedua belah pihak dapat dikonfirmasi. Oleh karena itu, jabat tangan tiga arah adalah pilihan terbaik yang harus diambil untuk memastikan stabilitas dan keandalan koneksi TCP.
Alasan 3: Hindari Sumber Daya Buang
Jika hanya ada "dua tangan", ketika permintaan Syn klien diblokir dalam jaringan, klien tidak dapat menerima paket ACK yang dikirim oleh server, sehingga syn akan dibenci. Namun, karena tidak ada jabat tangan ketiga, server tidak dapat menentukan apakah klien menerima pengakuan ACK untuk membuat koneksi. Oleh karena itu, server hanya dapat secara proaktif membuat koneksi setelah menerima setiap permintaan syn. Ini mengarah ke yang berikut:
Limbah sumber daya: Jika permintaan SYN klien diblokir, menghasilkan transmisi berulang dari beberapa paket syn, server akan membuat beberapa koneksi tidak valid yang berlebihan setelah menerima permintaan. Hal ini menyebabkan pemborosan sumber daya server yang tidak perlu.
Retensi Pesan: Karena kurangnya jabat tangan ketiga, server tidak memiliki cara untuk mengetahui apakah klien dengan benar menerima pengakuan ACK untuk membuat koneksi. Akibatnya, jika pesan macet di jaringan, klien akan terus mengirim permintaan syn berulang kali, menyebabkan server terus membuat koneksi baru. Ini akan meningkatkan kemacetan jaringan dan keterlambatan dan secara negatif mempengaruhi kinerja jaringan secara keseluruhan.
Oleh karena itu, untuk memastikan stabilitas dan keandalan koneksi jaringan, TCP menggunakan jabat tangan tiga arah untuk membangun koneksi untuk menghindari terjadinya masalah ini.
Ringkasan
ItuPialang Paket JaringanPembentukan koneksi TCP dilakukan dengan jabat tangan tiga arah. Selama jabat tangan tiga arah, klien pertama kali mengirim paket dengan bendera syn ke server, menunjukkan bahwa ia ingin membuat koneksi. Setelah menerima permintaan dari klien, server menjawab paket dengan bendera SYN dan ACK ke klien, menunjukkan bahwa permintaan koneksi diterima, dan mengirimkan nomor urutan awalnya sendiri. Akhirnya, klien menjawab dengan bendera ACK ke server untuk menunjukkan bahwa koneksi telah berhasil dibuat. Dengan demikian, kedua pihak berada dalam keadaan yang sudah mapan dan dapat mulai mengirim data satu sama lain.
Secara umum, proses jabat tangan tiga arah untuk pembentukan koneksi TCP dirancang untuk memastikan stabilitas dan keandalan koneksi, menghindari kebingungan dan pemborosan sumber daya atas koneksi historis, dan memastikan bahwa kedua belah pihak dapat menerima dan mengirim data.
Waktu posting: Jan-08-2025