Back to IF2230 Jaringan Komputer
Topic
Questions/Cues
- Bagaimana TCP membuat kanal jadi andal?
- Apa itu protokol pipelined?
- Bagaimana TCP menangani segmen & ACK yang hilang?
- Apa itu cumulative acknowledgment?
- Apa itu algoritma Sliding Window?
- Apa variabel penting di pengirim & penerima?
- Bagaimana Flow Control bekerja di TCP?
- Bagaimana cara menghitung Advertised Window?
- Bagaimana TCP melindungi dari wraparound?
- Apa itu delay x bandwidth product?
Reference Points
- Slides 39-40
- Slide 41
- Slides 42-43
- Slides 44-46
- Slides 47-49
- Slides 50-52
- Slides 53-54
Prinsip Transfer Data Andal (Reliable Data Transfer)
Tujuan utama TCP adalah menyediakan kanal yang andal di atas jaringan yang tidak andal. Ini dicapai melalui beberapa mekanisme kunci.
- Pelacakan Byte: Keandalan diimplementasikan dengan melacak jumlah byte yang dikirim menggunakan Sequence Number dan byte yang diterima menggunakan Acknowledgment Number.
- Stop-and-Wait vs. Pipelined:
![]()
- Stop-and-wait adalah metode sederhana di mana pengirim mengirim satu paket dan berhenti sampai menerima ACK sebelum mengirim paket berikutnya. Ini sangat tidak efisien.
- TCP menggunakan metode pipelined, di mana pengirim dapat mengirim banyak segmen sekaligus tanpa menunggu ACK untuk setiap segmen. Ini memungkinkan “pipa” jaringan tetap terisi dan meningkatkan efisiensi secara drastis.
Penanganan Error:
- Segmen Hilang: Jika pengirim tidak menerima ACK untuk sebuah segmen dalam jangka waktu tertentu (disebut timeout), ia akan menganggap segmen tersebut hilang dan mengirimkannya kembali (retransmit).
- ACK Hilang: Jika sebuah ACK hilang, pengirim juga akan mengalami timeout dan mengirim ulang segmen. Namun, TCP memiliki mekanisme cerdas untuk ini.
- Cumulative Acknowledgment: ACK di TCP bersifat kumulatif. Jika penerima mengirim ACK=120, itu berarti semua byte hingga 119 telah diterima dengan baik. Ini sangat berguna. Jika ACK untuk segmen 100 hilang, tetapi ACK untuk segmen 120 tiba, pengirim tahu bahwa segmen 100 pasti sudah sampai dan tidak perlu mengirimnya ulang.
Algoritma Sliding Window
Sliding Window (Jendela Geser) adalah implementasi inti dari protokol pipelined di TCP. Ia berfungsi untuk menjamin pengiriman yang andal, memastikan urutan data, dan menerapkan flow control.
Di Sisi Pengirim (Sender):
Jendela ini melacak byte-byte yang dikirim. Ada tiga penanda penting:
- LastByteAcked: Byte terakhir yang telah dikonfirmasi penerimaannya melalui ACK.
- LastByteSent: Byte terakhir yang telah dikirim. Data antara
LastByteAckeddanLastByteSentadalah data yang “in-flight” (sedang dalam perjalanan).- LastByteWritten: Byte terakhir yang ditulis oleh aplikasi ke dalam buffer TCP.
Berlaku
LastByteAcked <= LastByteSentdanLastByteSent <= LastByteWritten.Di Sisi Penerima (Receiver):
Jendela di penerima melacak byte-byte yang diterima.
- LastByteRead: Byte terakhir yang telah dibaca oleh aplikasi dari buffer.
- NextByteExpected: Byte berikutnya yang diharapkan untuk diterima secara berurutan.
- LastByteRcvd: Byte terakhir yang telah tiba di buffer penerima (bisa jadi tidak berurutan).
Berlaku
LastByteRead <= NextByteExpecteddanNextByteExpected <= LastByteRcvd + 1.Flow Control: Mengatur Aliran Data
Flow Control adalah mekanisme untuk memastikan pengirim tidak mengirim data lebih cepat daripada kemampuan penerima untuk memprosesnya. Ini diimplementasikan langsung menggunakan Sliding Window.
- Penerima Mengiklankan Jendela: Sisi penerima memiliki buffer penerimaan (RcvBuffer). Ruang kosong di buffer ini dihitung sebagai RcvWindow.
- RcvWindow di Header: Nilai
RcvWindowini disertakan dalam setiap segmen ACK yang dikirim oleh penerima ke pengirim. Ini secara efektif “mengiklankan” sisa kapasitas buffernya.- Pengirim Menyesuaikan Diri: Pengirim akan memastikan bahwa jumlah data yang belum di-ACK (unacknowledged data, yaitu
LastByteSent - LastByteAcked) tidak akan pernah melebihi nilaiAdvertisedWindowyang diterima dari penerima.
Formula Penting:
AdvertisedWindow = MaxRcvBuffer - (NextByteExpected - 1 - LastByteRead)LastByteSent - LastByteAcked ≤ AdvertisedWindowFormula Lain:
LastByteRcvd − LastByteRead ≤ MaxRcvBufferEffectiveWindow = AdvertisedWindow − (LastByteSent − LastByteAcked)LastByteWritten − LastByteAcked ≤ MaxSendBufferIsu-Isu Lanjutan dalam Sliding Window
Melindungi dari Wraparound:
- Sequence Number TCP memiliki 32 bit, yang berarti ada sekitar 4.2 miliar nomor urut.
- Wraparound terjadi ketika nomor urut habis dan kembali ke 0. Ini berbahaya jika sebuah paket lama dari siklus sebelumnya tiba-tiba muncul di koneksi saat ini.
- Aturan dasarnya adalah Maximum Segment Lifetime (MSL) di Internet ditetapkan sekitar 120 detik. Kita harus memastikan nomor urut tidak habis dan berulang dalam waktu kurang dari 120 detik.
- Untuk jaringan berkecepatan sangat tinggi (misalnya di atas 2.5 Gbps), 32 bit bisa habis dalam hitungan detik. TCP memiliki mekanisme tambahan (seperti timestamps) untuk mengatasi ini, yang merupakan topik lanjutan.
Menjaga Pipa Tetap Penuh (Keeping the Pipe Full):
- Agar efisien, ukuran jendela (window size) harus cukup besar untuk menampung data sebanyak yang bisa ditampung oleh “pipa” jaringan.
- Ukuran ini dihitung dengan Delay x Bandwidth Product. Contoh: untuk RTT (delay) 100ms dan bandwidth 10 Mbps, diperlukan window sekitar 122 KB agar pengirim bisa terus mengirim data sambil menunggu ACK pertama tiba, sehingga tidak ada waktu yang terbuang.
- Field AdvertisedWindow di header TCP (16 bit) hanya bisa menampung nilai hingga 64 KB. Untuk jaringan modern, ini tidak cukup. TCP menggunakan opsi Window Scale di handshake awal untuk memperbesar ukuran jendela efektif ini.
TCP mencapai keandalan dan efisiensi melalui algoritma Sliding Window, sebuah implementasi dari protokol pipelined yang memungkinkan pengiriman banyak segmen sekaligus. Mekanisme ini menggunakan Sequence/ACK numbers untuk melacak data dan timeout untuk menangani kehilangan. Flow Control diimplementasikan secara elegan di dalam Sliding Window, di mana penerima mengiklankan kapasitas buffernya (RcvWindow) agar pengirim tidak mengirim data secara berlebihan.
Additional Information (Optional)
Go-Back-N vs. Selective Repeat
- Sliding Window adalah konsep umum. Ada dua strategi utama untuk retransmisi:
- Go-Back-N (GBN): Jika segmen N hilang, pengirim akan mengirim ulang semua segmen mulai dari N, meskipun segmen N+1, N+2, dst. sudah sampai di penerima. Ini lebih sederhana tetapi boros bandwidth.
- Selective Repeat (SR): Pengirim hanya akan mengirim ulang segmen yang benar-benar hilang. Penerima harus bisa menyimpan segmen yang datang tidak berurutan. Ini lebih efisien tetapi lebih kompleks.
- TCP secara klasik mirip dengan GBN karena ACK-nya kumulatif, tetapi dalam praktiknya ia merupakan hibrida. Dengan menggunakan opsi SACK (Selective Acknowledgment), penerima bisa memberitahu pengirim blok data mana saja yang sudah diterima, sehingga pengirim hanya perlu mengirim ulang blok yang hilang, mirip seperti SR.
Zero-Window Probing
- Apa yang terjadi jika penerima mengiklankan jendela berukuran 0 karena buffernya penuh? Apakah pengirim berhenti selamanya? Tidak. Untuk mencegah kebuntuan (deadlock), pengirim akan secara periodik mengirim segmen kecil (biasanya 1 byte) yang disebut Zero-Window Probe. Tujuannya adalah untuk “memancing” respons dari penerima yang berisi nilai window terbaru, dan akan terus melakukannya sampai jendela terbuka kembali.
Tujuan utama TCP adalah menyediakan kanal yang andal di atas jaringan yang tidak andal. Ini dicapai melalui beberapa mekanisme kunci.
Di Sisi Pengirim (Sender):
Formula Penting: