Implementasi TCP 3-Way Handshake dengan Python Socket

Mekanisme TCP 3-Way Handshake pada Python

TCP 3-way handshake adalah proses fundamental dalam protokol TCP untuk membangun koneksi yang andal antara klien dan server. Dalam Python, modul socket menangani proses ini secara otomatis saat Anda memanggil metode connect() pada sisi klien dan accept() pada sisi server. Pengembang tidak perlu melakukan manipulasi paket secara manual kecuali menggunakan pustaka tingkat rendah seperti Scapy.

Proses ini melibatkan pertukaran tiga paket: SYN (Synchronize), SYN-ACK (Synchronize-Acknowledgment), dan ACK (Acknowledgment). Berikut adalah tabel alur kerja koneksi TCP:

LangkahPengirimPaketTujuan
1KlienSYNMemulai koneksi dengan ISN (Initial Sequence Number)
2ServerSYN-ACKKonfirmasi SYN dan mengirim ISN server
3KlienACKKonfirmasi penerimaan SYN-ACK

Implementasi Kode Python

Berikut adalah contoh implementasi standar menggunakan pustaka socket untuk membangun koneksi TCP.

Server (Listener)

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))
server.listen(1)
print("Menunggu koneksi...")
conn, addr = server.accept()
print(f"Koneksi diterima dari {addr}")
conn.close()

Client (Initiator)

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))
print("Handshake selesai, koneksi aktif.")
client.close()

Analisis Teknis

Saat client.connect() dijalankan, sistem operasi (OS) melakukan 3-way handshake di balik layar. Jika Anda ingin mengamati proses ini secara real-time, gunakan alat bantu seperti Wireshark atau tcpdump pada antarmuka loopback (lo). Anda akan melihat urutan paket berikut:

  • SYN: Klien mengirim paket dengan flag SYN aktif.
  • SYN-ACK: Server merespons dengan flag SYN dan ACK aktif.
  • ACK: Klien mengirim paket dengan flag ACK aktif.

Jika koneksi gagal, biasanya disebabkan oleh Connection Refused (port tidak terbuka) atau Connection Timeout (firewall memblokir paket SYN). Pastikan port yang digunakan tidak sedang digunakan oleh proses lain dengan perintah netstat -ano | findstr :8080 di Windows atau lsof -i :8080 di Linux.