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.

  1. Pelacakan Byte: Keandalan diimplementasikan dengan melacak jumlah byte yang dikirim menggunakan Sequence Number dan byte yang diterima menggunakan Acknowledgment Number.
  2. 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 LastByteAcked dan LastByteSent adalah data yang “in-flight” (sedang dalam perjalanan).
  • LastByteWritten: Byte terakhir yang ditulis oleh aplikasi ke dalam buffer TCP.

Berlaku LastByteAcked <= LastByteSent dan LastByteSent <= 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 <= NextByteExpected dan NextByteExpected <= 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.

  1. Penerima Mengiklankan Jendela: Sisi penerima memiliki buffer penerimaan (RcvBuffer). Ruang kosong di buffer ini dihitung sebagai RcvWindow.
  2. RcvWindow di Header: Nilai RcvWindow ini disertakan dalam setiap segmen ACK yang dikirim oleh penerima ke pengirim. Ini secara efektif “mengiklankan” sisa kapasitas buffernya.
  3. Pengirim Menyesuaikan Diri: Pengirim akan memastikan bahwa jumlah data yang belum di-ACK (unacknowledged data, yaitu LastByteSent - LastByteAcked) tidak akan pernah melebihi nilai AdvertisedWindow yang diterima dari penerima.

Formula Penting:

  • AdvertisedWindow = MaxRcvBuffer - (NextByteExpected - 1 - LastByteRead)
  • LastByteSent - LastByteAcked ≤ AdvertisedWindow

Formula Lain:

  • LastByteRcvd − LastByteRead ≤ MaxRcvBuffer
  • EffectiveWindow = AdvertisedWindow − (LastByteSent − LastByteAcked)
  • LastByteWritten − LastByteAcked ≤ MaxSendBuffer

Isu-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.

Summary

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.