19 poin oleh GN⁺ 2025-11-16 | 1 komentar | Bagikan ke WhatsApp
  • TCP (Transmission Control Protocol) adalah protokol inti internet yang memungkinkan transmisi data yang andal dan berurutan bahkan di lingkungan jaringan yang tidak stabil
  • Sementara IP hanya bertugas mengirimkan data antar host, TCP menangani komunikasi antarproses berbasis port serta pemulihan kesalahan, retransmisi, dan pengendalian urutan
  • Melalui flow control dan congestion control, TCP menyesuaikan pengiriman agar tidak melampaui batas buffer penerima atau bandwidth jaringan
  • Dengan contoh server TCP sederhana dan server HTTP yang diimplementasikan dalam bahasa C, dijelaskan secara konkret proses pembuatan socket, bind, listen, penerimaan koneksi, serta kirim-terima data
  • Struktur internal TCP seperti nomor sequence·ACK, window, checksum, dan flag (SYN/ACK/FIN/RST) merupakan fondasi utama yang memungkinkan internet modern bekerja secara stabil

Kebutuhan dan Peran TCP

  • IP hanya menangani pengiriman paket antar host, sedangkan untuk komunikasi antarproses dibutuhkan lapisan transport seperti TCP/UDP
    • Alamat IP diibaratkan sebagai ‘gedung’, dan port sebagai ‘apartemen’, sehingga tiap aplikasi berkomunikasi dengan melakukan bind ke port
  • TCP menyembunyikan ketidakstabilan jaringan seperti kehilangan paket, duplikasi, dan perubahan urutan, lalu menjamin keandalan dengan retransmisi dan checksum
  • Router tetap sederhana, dan keandalan diproses di kedua ujung komunikasi, sehingga kompleksitas infrastruktur jaringan dapat dikurangi
  • Berkat struktur ini, layanan internet utama seperti HTTP, SMTP, dan SSH dapat berjalan dengan stabil

Flow Control dan Congestion Control

  • Pihak penerima menyimpan data sementara melalui receive buffer di kernel, dan ukuran buffer diatur dengan net.ipv4.tcp_rmem
  • Pihak pengirim menerima informasi jumlah data yang dapat diterima pihak penerima melalui field window, lalu menyesuaikan volume pengiriman
  • Untuk mencegah congestion akibat perbedaan bandwidth di seluruh jaringan, TCP mengadopsi algoritme congestion control
    • Mekanisme back-off ditambahkan setelah insiden congestion collapse pada tahun 1986
    Iklan

Contoh Server TCP dan Server HTTP

  • Server echo TCP dasar yang ditulis dalam bahasa C menerima input dari klien lalu mengirimkannya kembali dengan tambahan “you sent:”
    • Menggunakan Berkeley sockets API seperti socket(), bind(), listen(), accept(), send(), dan recv()
    • Saat server berada dalam sleep(), data dari klien menunggu di receive buffer dan kemudian diproses secara berurutan
  • Dalam contoh server HTTP/1.1 sederhana, server menerima permintaan melalui koneksi TCP lalu mengirim header HTTP/1.1 200 OK beserta isi respons
    • Jumlah permintaan dihitung dengan i, dan saat menjalankan curl localhost:8080, respons ditampilkan dalam bentuk “[1] Yo, I am a legit web server”

Struktur Segmen TCP dan Field Inti

  • Segmen TCP terdiri dari port sumber·tujuan, nomor sequence, nomor ACK, ukuran window, checksum, dan flag
    • Port dialokasikan masing-masing 16 bit sehingga dapat menggunakan hingga 64K port
    • Koneksi diidentifikasi dengan 5-tuple (protokol, IP sumber, port sumber, IP tujuan, port tujuan)
    Iklan
  • Nomor sequence menunjukkan rentang byte yang dikirim, sedangkan nomor ACK menunjukkan byte yang telah diterima
    • Jika ada data yang hilang, ACK akan berhenti pada titik tersebut lalu diperbarui menjadi cumulative ACK setelah retransmisi
  • Bit flag mengendalikan status koneksi
    • SYN/ACK membentuk koneksi melalui 3-way handshake
    • FIN mengakhiri koneksi melalui 4-way handshake
    • RST langsung memutus koneksi saat terjadi penghentian abnormal atau kesalahan
  • Field window menunjukkan jumlah data yang dapat diterima, dan status buffer seperti rb131072, tb16384 dapat diperiksa dengan perintah ss
  • Checksum melakukan deteksi kesalahan dengan penjumlahan per unit 16 bit di dalam segmen

Kesimpulan

  • TCP menjamin keandalan, urutan, dan integritas, serta membantu aplikasi tetap berjalan normal bahkan di lingkungan internet yang tidak stabil
  • Beberapa dekade lalu mengirim beberapa KB saja sulit, tetapi kini streaming 4K sudah menjadi hal biasa
  • Ketelitian desain dan implementasi TCP yang memungkinkan komunikasi stabil inilah yang menjadi dasar pertumbuhan internet yang berkelanjutan

1 komentar

 
GN⁺ 2025-11-16
Opini Hacker News
  • Jika mencoba membangun aliran data yang andal di atas lapisan datagram yang tidak andal, hasilnya pada akhirnya akan sangat mirip dengan TCP
    Keterbatasan awal TCP adalah ukuran window yang kecil, penanganan paket hilang yang kurang baik, dan fakta bahwa ia hanya mengelola satu aliran saja
    Untuk mengatasi masalah ini, muncullah SCTP dan QUIC
    Algoritma kontrol kemacetan bukan bagian dari protokol, melainkan kode yang berjalan di kedua sisi setiap koneksi
    Algoritma awal seperti Reno dan Vegas sederhana, tetapi cukup efektif, dan setelah itu riset terus berlanjut untuk menangani buffer besar, RTT panjang, fairness, dan sebagainya

    • Saya juga merasa para pengembang web ikut bertanggung jawab karena tidak memanfaatkan multi-stream dengan baik
      Dulu saya pernah membuat pustaka JavaScript yang bisa mengendalikan prioritas dan fitur pembatalan untuk beberapa unduhan dalam satu aliran
      Dengan skrip GreaseMonkey, saya membuat situs kencan memuat thumbnail lebih dulu di latar belakang, lalu melakukan preload sesuai posisi scroll
      Hasilnya, beban server berkurang sambil meningkatkan pengalaman pengguna
      Menariknya, saya membagikan skrip itu kepada salah satu match, dan kami masih bersama sampai sekarang — bisa dibilang itu hampir seperti Tinder sebelum Tinder
    • Saat TCP dibuat, pola pikir circuit switching yang berpusat pada jaringan telepon masih dominan
      TCP adalah struktur yang menyediakan sirkuit virtual di atas jaringan packet switching, dan konsep mewujudkan keandalan lewat retransmisi berasal dari jaringan Cylades di Prancis
    • Salah satu cacat mendasar TCP adalah tidak mungkin diamankan sepenuhnya
      Penyerang dapat menyuntikkan (inject) data dari mana saja di jaringan atau memutus koneksi dengan paket RST
      Memblokir RST dengan firewall memang meningkatkan stabilitas, tetapi serangan desinkronisasi akibat nomor urut palsu tetap mungkin terjadi
      Karena itu, semua aplikasi harus mengimplementasikan fitur resume lewat koneksi terpisah, sekaligus ikut menanggung masalah slow start milik TCP
      Selain itu, saya juga menganggap konsep pemisahan alamat dan port itu sendiri tidak efisien
    • Beberapa aplikasi bekerja sangat baik hanya dengan satu koneksi TCP
      Misalnya pada DNS over TLS(DoT), beberapa kueri dapat dikirim sekaligus melalui satu koneksi TCP dan respons diterima tanpa bergantung urutan
      Ini lebih efisien dan lebih sopan daripada membuka banyak koneksi
      Saya tidak tahu apakah QUIC akan lebih cepat, tetapi dukungan servernya masih terbatas
      HTTP/1.1 pipelining juga melakukan hal serupa, tetapi respons datang secara berurutan
    • Fakta bahwa algoritma kontrol kemacetan TCP berada di luar protokol adalah hal yang sangat inovatif pada masanya
      Namun banyak kuliah universitas tidak menekankan hal ini, sehingga sering muncul kesalahpahaman bahwa TCP hanya punya satu algoritma tunggal
  • Ingin bertanya apakah ada yang punya rasa cinta terhadap SCTP
    SCTP adalah protokol yang menggabungkan sifat message-oriented milik UDP dengan keandalan TCP, serta mendukung multistreaming dan multihoming
    Beberapa aliran independen dapat dikirim secara paralel, sehingga teks dan gambar halaman web bisa dikirim bersamaan
    Untuk detailnya, lihat Wikipedia: Stream Control Transmission Protocol

    • SCTP hanya menyelesaikan setengah dari masalah, lalu memperkenalkan banyak cacat baru
      Pada akhirnya, jawaban terbaik adalah lapisan keandalan di atas UDP, yaitu QUIC
    • Sebagai orang yang senang memakai BSD dan bekerja dengan Erlang, saya sangat menyukai SCTP
  • Saya penasaran apakah mungkin mengirim paket langsung hanya dengan IP
    Sepertinya router di tengah akan menolak paket yang bukan TCP atau UDP

    • Kita bisa memanipulasi dan mengirim paket IP secara langsung
      Untuk IPv4, cukup tentukan salah satu nomor 0–255 dari daftar nomor protokol IANA
      Router inti tidak memeriksa field ini, tetapi perangkat NAT atau peralatan ISP bisa saja memeriksanya
      Antara dua server Linux, komunikasi bahkan bisa dilakukan dengan nomor eksperimen (253, 254)
    • Jangan lupakan ICMP. Di IPv6 ini bahkan lebih penting
      Protokol seperti IPsec, GRE, dan L2TP juga bukan TCP/UDP
      Di lingkungan firewall perusahaan atau NAT, protokol arbitrer bisa diblokir
      NAT merusak prinsip end-to-end, dan pada akhirnya orang mulai menumpangkan semuanya di atas TCP atau UDP, atau bahkan di atas HTTP
    • Jika tidak ada NAT atau load balancer, seharusnya tidak masalah, tetapi sekarang itu umum, jadi IPv6 mungkin lebih baik
    • Router adalah perangkat layer 3, jadi tidak peduli apakah paket itu TCP/UDP atau bukan
      Paling hanya ada dampak berupa berkurangnya entropi pada hash ECMP
      Pada akhirnya yang penting adalah apakah pihak lawan memahami protokol tersebut
    • TCP dan UDP hanyalah payload IP, dan router tidak menafsirkannya
      Nomor port hanyalah pengenal layanan di dalam node
  • RUDP(Plan9) adalah kompromi yang sangat baik antara TCP dan UDP
    Lihat Reliable User Datagram Protocol

  • Karena TCP menjadi default, ia dipakai begitu saja bahkan saat keandalan atau jaminan urutan sebenarnya tidak diperlukan
    Sekarang, dengan penyebaran HTTP/3(berbasis QUIC), situasinya mungkin bisa membaik
    Namun QUIC jauh lebih kompleks, dan kekuatannya hanya berguna bagi sebagian orang
    UDP + lapisan enkripsi sederhana ala WireGuard bisa menjadi alternatif yang lebih baik

  • TCP adalah salah satu penemuan besar umat manusia, tetapi ia tidak pernah mengantisipasi dominasi jaringan semi-terhubung(berbasis NAT)

    • Muncul pertanyaan, “Maksudmu NAT?”
    • Jika kita kembali ke tahun 1981 dan berkata, “Mari gunakan alamat dalam rentang terbatas alih-alih alamat global, lalu buat sebagian node tidak bisa diakses,”
      para insinyur saat itu kemungkinan akan bertanya mengapa harus membuat semuanya serumit itu
      Pada akhirnya, struktur link asimetris dan pemisahan klien–server saat ini berasal dari gagasan semacam itu
  • Algoritma kontrol kemacetan TCP memiliki efek menarik yang tidak banyak dipahami pengembang
    Saat mengirim data lewat koneksi baru, transmisi awal lambat, dan kenaikan kecepatannya ditentukan oleh latensi
    Di data center, hanya dengan mengurangi RTT beberapa mikrodetik saja, peningkatan kecepatan bisa sangat besar
    Sebagian besar stack TCP menghitung kenaikan laju berdasarkan unit segmen, bukan byte, sehingga dengan jumbo frame laju bisa naik 6 kali lebih cepat
    Karena alasan inilah AWS banyak berinvestasi pada latensi switching rendah dan dukungan jumbo frame
    Para ahli melakukan tuning seperti ini, tetapi kebanyakan orang hanya heran mengapa link 10Gbps tidak benar-benar menghasilkan 10Gbps

  • Membuat protokol sendiri di atas IP dulu adalah hal yang sangat mudah
    Bahkan 15 tahun lalu, orang bisa bereksperimen dengan Python sambil merakit paket secara langsung