Flowchart untuk TCP Connections dan penjelasan singkat
Di sini saya menggunakan istilah “salah satu sisi” dan “sisi lain nya”, karena bisa saja yang melakukan sebuah kondisi adalah client atau server (kedua system bisa melakukan hal yang sama). Jadi untuk mengeneralisasi, saya menggunakan istilah tersebut.
Sebagai contoh, sisi server melakukan telnet ke client. atau sisi client melakukan telnet ke server, kedua system (client dan server) mampu melakukan hal yang sama. Dari sini kita bisa melihat bahwa jika kita menggunakan istilah server dan client saja, maka kita menganggap sebuah system tidak bisa melakukan hal yang sama, yang mana hal itu akan membatasi definisi dan akan semakin mempersulit pemahaman.
Setiap keterangan yang ada di dalam kotak, kita biasa menyebutnya sebuah states, TCP state bisa satu dari beberapa keadaan di bawah ini (hanya boleh ada satu state dalam satu waktu untuk satu port) :
- CLOSED: Kondisi dimana sebuah sesi (session) komunikasi telah selesai (port dalam keadaan inactive) dan tidak ada lagi transmisi data yang bisa dilakukan.
- LISTEN: Kondisi port di salah satu sisi dalam keadaan terbuka (open) dan sedang menunggu koneksi masuk dari luar (sisi lain nya) melalui jaringan.
- SYN_RECVD (Synchronize Received): Kondisi salah satu sisi telah menerima paket synchronize (SYN) dari salah satu sisi lain nya, dan salah satu sisi mengirimkan SYN_ACK ke salah satu sisi lain nya. SYN adalah paket data yang mengandung informasi tentang sebuah sesi baru (new session) yang akan dibuat antara kedua sistem (three-way TCP open hand-shake).
- SYN_SENT (Synchronize Sent): Kondisi salah satu sisi telah mengirimkan permintaan synchronize ke salah satu sisi lain nya, tetapi belum menerima response.
- ESTABLISHED: Kondisi ini menunjukkan bahwa koneksi di salah satu sisi sudah benar dan dapat digunakan untuk berkomunikasi (mengirim dan menerima data).
- FIN_WAIT_1: Tahap pertama, dimana salah satu sisi koneksi menutup koneksi nya, dan mengirimkan signal FIN (finish) dan menunggu FIN dari sisi yang lain nya, namun belum ada konfirmasi dari penerima bahwa koneksi telah ditutup. Karena itulah pada tahap ini, salah satu sisi akan menunggu konfirmasi dari penerima, sebelum menutup sesi.
- FIN_WAIT_2: Tahap kedua, dimana salah satu sisi koneksi sudah mengirimkan FIN (finish) dan menerima ACK (acknowledge) dari sisi lain nya. Kondisi ini menunjukkan bahwa salah satu sisi telah mengirimkan permintaan untuk menutup koneksi kepada salah satu sisi lain nya, dan sekarang menunggu konfirmasi dari salah satu sisi lain nya bahwa koneksi telah benar-benar ditutup.
- CLOSE_WAIT: Kondisi ini menunjukkan bahwa socket di salah satu sisi telah menerima paket FIN dari sisi lain nya, di waktu yang sama salah satu sisi juga mengirim paket FIN ke sisi lain nya, Ini adalah keadaan di mana salah satu sisi sedang menunggu paket ACK dari sisi lain nya, sebelum menutup koneksi.
- CLOSING: Kondisi ini menunjukkan koneksi telah ditutup dan salah satu dari kedua ujung sesi telah mengirimkan pesan FIN (finish) untuk mengakhiri koneksi (semua data yang dikirimkan telah diterima oleh tujuan dan tidak ada lagi yang dikirimkan). Yang mana salah satu sisi yang berada di state FIN_WAIT_1 sudah berhasil di shutdown, dan dari salah satu sisi yang menerima FIN signal akan mengirimkan ACK dari FIN tersebut, di waktu yang sama juga menunggu sisi lain nya untuk mengirimkan final ACK.
- TIME_WAIT: Satu sisi dari koneksi mengirim final ACK. Koneksi menunggu selama periode tertentu untuk memastikan bahwa sisi lainnya telah berakhir dengan sempurna.
- RST_ACT (Reset Active): Kondisi dimana satu sisi koneksi mengirim final FIN dan menunggu final ACK dari sisi lain nya dari koneksi. Setelah menerima final ACK, koneksi akan ditutup.
English Version : Flowchart of TCP Connections and their definition