ChatTCP adalah implementasi protokol TCP di atas UDP. Proyek ini terdiri dari dua bagian utama:
-
Implementasi fitur TCP di atas UDP - Mengimplementasikan mekanisme TCP seperti three-way handshake, flow control, error detection, dan segmentasi data
-
Aplikasi chat room sederhana - Chat room berbasis command line yang menggunakan protokol TCP buatan sendiri
✅ TCP Segments: Segmentasi data dengan payload maksimal 64 bytes per segment
✅ Three-Way Handshake: Koneksi establishment dengan sequence number acak
✅ Flow Control: Implementasi Selective Repeat ARQ untuk pengiriman data yang efisien
✅ Error Detection: Checksum 16-bit untuk verifikasi integritas data
✅ Connection Termination: FIN-ACK handshake untuk penutupan koneksi
✅ Multi-client support: Server dapat menangani multiple client secara bersamaan
✅ Real-time messaging: Pengiriman dan penerimaan pesan secara real-time
✅ Heartbeat mechanism: Deteksi client yang terputus (timeout 30 detik)
✅ Special commands: Command khusus untuk disconnect, kill server, dan change username
✅ User management: Tracking user online dan notifikasi join/leave
✅ GUI Client: Interface grafis menggunakan Tkinter (opsional)
- Python 3.13 atau lebih baru
- Package manager uv (recommended) atau pip
- Sistem operasi: Windows, Linux, atau macOS
git clone https://github.com/labsister22/tugas-besar-if2230-jaringan-komputer-jarjarjarkom.git
cd tugas-besar-if2230-jaringan-komputer-jarjarjarkom# Install uv jika belum ada
# Ikuti panduan di: https://docs.astral.sh/uv/getting-started/installation/
uv python install 3.13
uv python pin 3.13
# Initialize project
uv initpython --version
# Output harus: Python 3.13.xuv run --link-mode=copy -m src.app.server 127.0.0.1 -p 55555uv run --link-mode=copy -m src.app.client <server_ip> -p <port> -n <username>
uv run --link-mode=copy -m src.app.client 127.0.0.1 -p 55555 -n Owouv run client_gui.py
# Masukkan server IP, port, dan username melalui interface!disconnect - Keluar dari chat room!kill <password> - Mematikan server (password: admin123)!change <nama_baru> - Mengubah username!heartbeat - Heartbeat message (otomatis setiap 1 detik)Setiap segment memiliki header dengan format:
- Source Port (16 bit)
- Destination Port (16 bit)
- Sequence Number (32 bit)
- ACK Number (32 bit)
- Data Offset + Reserved (8 bit)
- Flags (8 bit) - SYN, ACK, FIN
- Window Size (16 bit)
- Checksum (16 bit)
- Urgent Pointer (16 bit)
Menggunakan Selective Repeat ARQ dengan window size 4:
- Sender dapat mengirim multiple segment dalam window
- Receiver mengirim ACK untuk setiap segment yang diterima
- Automatic retransmission untuk segment yang timeout
- Window sliding setelah menerima ACK
- Client → Server
- Server → ClientServer → Client
- Client → Server
# Simulasi jaringan buruk
sudo tc qdisc add dev lo root netem delay 100ms 50ms reorder 8% corrupt 5% duplicate 2% 5% loss 5%
# Reset konfigurasi
sudo tc qdisc del dev lo root netem delay 100ms 50ms reorder 8% corrupt 5% duplicate 2% 5% loss 5%- Download Clumsy dari: https://jagt.github.io/clumsy/
- Jalankan clumsy.exe sebagai administrator
- Konfigurasi: Lag 100±50ms, Drop 5%, Duplicate 2%, Reorder 8%
| Nama | NIM | Pembagian Kerja |
|---|---|---|
| Muh. Rusmin Nurwadin | 13523068 | Implementasi Flow Control |
| Muhammad Iqbal Haidar | 13523111 | Implementasi Client |
| Guntara Hambali | 13523114 | Implementasi Server |
| Reza Ahmad Syarif | 13523119 | Three-Way Handshake, Checksum |
