Back to IF2230 Jaringan Komputer

Topic

Questions/Cues

  • Kapan TCP mengirim sebuah segmen?
  • Apa itu Maximum Segment Size (MSS)?
  • Apa itu Silly Window Syndrome?
  • Apa penyebab Silly Window Syndrome?
  • Bagaimana Nagle’s Algorithm bekerja?
  • Apa itu Adaptive Retransmission?
  • Apa masalah algoritma timeout original?
  • Apa itu retransmission ambiguity?
  • Apa solusi dari Karn/Partridge Algorithm?
  • Bagaimana Jacobson/Karels Algorithm bekerja?

Reference Points

  • Slides 55, 56
  • Slides 57-60
  • Slides 61-63
  • Slides 64-68

Kapan TCP Mengirim Data? (Triggering Transmission)

TCP harus memutuskan kapan waktu yang tepat untuk mengirim data yang telah ditulis oleh aplikasi ke dalam buffer. Ada tiga mekanisme utama yang memicu pengiriman segmen:

  1. Buffer Terisi hingga MSS: TCP akan mengirim segmen jika ia telah mengumpulkan data dari aplikasi sebanyak Maximum Segment Size (MSS). MSS adalah ukuran data terbesar yang bisa dimuat dalam satu segmen tanpa menyebabkan fragmentasi di level IP. Biasanya dihitung sebagai: MTU - (ukuran header TCP + ukuran header IP).
  2. Aplikasi Meminta PUSH: Aplikasi bisa secara eksplisit meminta TCP untuk segera mengirim semua data yang ada di buffer, terlepas dari ukurannya, dengan menggunakan operasi push.
  3. Timer Berakhir (Timer Fires): Jika data di buffer tidak mencapai MSS dan aplikasi tidak melakukan push, sebuah timer akan berjalan. Ketika timer ini berakhir, TCP akan mengirim data apa pun yang ada di buffer, meskipun ukurannya kecil.

Masalah Efisiensi: Silly Window Syndrome

Silly Window Syndrome (SWS) adalah sebuah masalah performa di mana jaringan dipenuhi oleh segmen-segmen yang sangat kecil (misalnya hanya berisi 1 byte data), membuat transmisi menjadi sangat tidak efisien karena overhead header (40 byte untuk TCP+IP) jauh lebih besar dari data yang dikirim.

Penyebab SWS bisa dari dua sisi:

  • Dari Sisi Pengirim: Pengirim yang terlalu agresif, langsung mengirim data begitu aplikasi menulisnya, bahkan jika hanya 1 byte.
  • Dari Sisi Penerima: Penerima yang memproses data dengan lambat dan terus-menerus mengiklankan jendela penerimaan (receive window) yang sangat kecil (misalnya hanya 1 byte). Pengirim yang “patuh” akan langsung mengirim 1 byte untuk mengisi jendela kecil tersebut.

Solusi Efisiensi: Nagle’s Algorithm

Algoritma Nagle adalah solusi elegan dari sisi pengirim untuk mencegah Silly Window Syndrome.

Aturan mainnya:

  • Jika ada data yang belum di-ACK di jaringan (“in flight”): Tahan data baru yang berukuran kecil. Jangan langsung dikirim. Kumpulkan data-data kecil ini di buffer.
  • Setelah ACK untuk data “in flight” tiba: Kirim semua data yang telah terkumpul di buffer dalam satu segmen besar.
  • Jika tidak ada data “in flight”: Kirim data kecil tersebut segera.

Intinya, algoritma ini menggunakan kedatangan ACK sebagai “jam” atau pemicu untuk mengirim data yang terkumpul, sehingga mencegah pengiriman segmen-segmen kecil secara beruntun.

Masalah Waktu: Adaptive Retransmission

Menentukan nilai timeout untuk retransmisi adalah hal yang sangat krusial. Jika terlalu cepat, TCP akan mengirim ulang segmen yang tidak perlu (yang sebetulnya masih di jalan), menambah beban jaringan. Jika terlalu lambat, aplikasi akan “freeze” terlalu lama saat ada paket yang benar-benar hilang.

Masalah Algoritma Original: Retransmission Ambiguity

  • Algoritma awal hanya menghitung rata-rata SampleRTT (waktu dari pengiriman segmen hingga menerima ACK-nya).
  • Masalahnya muncul saat retransmisi terjadi: Jika sebuah ACK datang setelah retransmisi, kita tidak tahu apakah ACK itu untuk pengiriman pertama atau untuk pengiriman kedua. Ini disebut retransmission ambiguity dan membuat perhitungan RTT menjadi tidak akurat.

Solusi Bertahap:

  1. Karn/Partridge Algorithm: e

    • Solusi Ambiguity: Jangan pernah menghitung SampleRTT untuk segmen yang diretransmisi. Abaikan saja.
    • Solusi Timeout: Setiap kali terjadi retransmisi untuk segmen yang sama, gandakan nilai timeout (disebut exponential backoff). Ini untuk mencegah pengiriman ulang yang agresif saat jaringan kemungkinan sedang padat.
  2. Jacobson/Karels Algorithm:

    • Ini adalah penyempurnaan yang digunakan saat ini. Algoritma ini sadar bahwa hanya mengetahui rata-rata RTT tidaklah cukup; kita juga perlu tahu seberapa besar variasi atau simpangan dari RTT tersebut.
    • Algoritma ini melacak dua hal:
      • EstimatedRTT: Rata-rata RTT yang dihaluskan (mirip sebelumnya).
      • Deviation: Ukuran variasi atau “jitter” dari RTT.
    • Formula Timeout: TimeOut = EstimatedRTT + 4 * Deviation.
    • Dengan adanya komponen Deviation, timeout menjadi lebih adaptif. Jika RTT stabil (variasi kecil), timeout akan dekat dengan rata-rata. Jika RTT tidak stabil (variasi besar), timeout akan ditambah secara signifikan untuk memberikan toleransi lebih.

    Rumus asli:

    Difference = SampleRTT - EstimatedRTT
    EstimatedRTT = EstimatedRTT + (δ × Difference)
    Deviation = Deviation + (δ × (|Difference| - Deviation))
    TimeOut = μ × EstimatedRTT + Φ × Deviation
    
    • Biasanya μ = 1 and Φ = 4.
    • δ adalah faktor pembobot (biasanya bernilai kecil, misalnya 1/8 atau 0.125). Ini adalah Exponentially Weighted Moving Average (EWMA). Artinya, EstimatedRTT yang baru adalah campuran dari perkiraan lama dan sedikit pengaruh dari pengukuran baru. Ini membuat EstimatedRTT menjadi nilai rata-rata yang dihaluskan (smoothed average) dan tidak akan melonjak liar hanya karena satu pengukuran RTT yang aneh.

Summary

Untuk efisiensi, TCP menggunakan Nagle’s Algorithm untuk mengumpulkan data kecil menjadi segmen yang lebih besar, sehingga menghindari masalah Silly Window Syndrome. Untuk performa, TCP tidak menggunakan nilai timeout yang statis, melainkan mekanisme Adaptive Retransmission yang canggih (seperti Jacobson/Karels Algorithm) yang memperhitungkan rata-rata dan variasi RTT untuk menentukan kapan harus mengirim ulang segmen yang hilang, membuatnya tangguh dalam menghadapi kondisi jaringan yang dinamis.