Transmission Control Protocol (TCP)
Transmission Control Protocol (TCP) merupakan suatu protokol yang berada di lapisan transport (baik itu dalam tujuh lapis model referensi OSI atau model DARPA) yang berarah sambungan (connection-oriented) dan dapat diandalkan (reliable). TCP dispesifikasikan dalam RFC 793.
Sejarah
Ketika Vint Cerf dan Bob Kahn pertama menulis spesifikasi atas protokol ini tahun 1973, internet sedang merupakan media yang dilarang kepada kepentingan komersil. Di bulan May 1974, IEEE mempublikasikan makalah berjudul "Protokol kepada paket interkoneksi jaringan." Kepada penulis makalah tersebut, Cerf dan Kahn menjabarkan sebuah protokol interkoneksi kepada berbagi layanan dengan menggunakan pertukaran-paket selang node jaringan yang terhubung. Komponen pengontrol utama atas model ini dikata kepada "Program pengontrol transmisi" yang
menggabungkan adun pranala koneksi teriorientasi dan layanan datagram antar host. Program pengontrol transmisi monolitik ini yang belakang sekali dipecah ke dalam arsitektur modular yang terdiri atas Protokol pengontrol transmisi pada lapisan koneksi terorientasi dan Protokol internet pada lapisan datagram. Model ini lah yang yang belakang sekali dikenal dengan istilah TCP/IP, meski secara formal istilah yang dipergunakan merupakan Paket protokol internet.
Karakteristik TCP
TCP memiliki karakteristik kepada berikut:
- Berarah sambungan (connection-oriented): Sebelum data dapat ditransmisikan selang dua host, dua bagian yang berlangsung pada lapisan aplikasi wajib melaksanakan negosiasi kepada menciptakan sesi koneksi terlebih dahulu. Koneksi TCP ditutup dengan menggunakan bagian terminasi koneksi TCP (TCP connection termination).
- Full-duplex: Kepada setiap host TCP, koneksi yang terjadi selang dua host terdiri atas dua buah jalur, yakni jalur keluar dan jalur masuk. Dengan menggunakan teknologi lapisan yang bertambah rendah yang mendukung full-duplex, maka data pun dapat secara simultan diterima dan dikirim. Header TCP mempunyai pokoknya nomor urut (TCP sequence number) dari data yang ditransmisikan dan sebuah acknowledgment dari data yang masuk.
- Dapat diandalkan (reliable): Data yang dikirimkan ke sebuah koneksi TCP akan diurutkan dengan sebuah nomor urut paket dan akan mengharapkan paket positive acknowledgment dari penerima. Bila tidak berada paket Acknowledgment dari penerima, maka segmen TCP (protocol data unit dalam protokol TCP) akan ditransmisikan ulang. Pada pihak penerima, segmen-segmen duplikat akan diabaikan dan segmen-segmen yang datang tidak sesuai dengan urutannya akan diletakkan di belakang kepada mengurutkan segmen-segmen TCP. Kepada menjamin integritas setiap segmen TCP, TCP mengimplementasikan penghitungan TCP Checksum.
- Byte stream: TCP melihat data yang dikirimkan dan diterima melintasi dua jalur masuk dan jalur keluar TCP kepada sebuah byte stream yang berhampiran (kontigu). Nomor urut TCP dan nomor acknowlegment dalam setiap header TCP didefinisikan juga dalam bentuk byte. Meski demikian, TCP tidak mengetahui batas pesan-pesan di dalam byte stream TCP tersebut. Kepada melaksanakannya, hal ini diserahkan kepada protokol lapisan aplikasi (dalam DARPA Reference Model), yang wajib menerjemahkan byte stream TCP ke dalam "bahasa" yang ia pahami.
- Memiliki layanan flow control: Kepada mencegah data terlalu jumlah dikirimkan pada satu waktu, yang habis menciptakan "macet" jaringan internetwork IP, TCP mengimplementasikan layanan flow control yang dipunyai oleh pihak pengirim yang secara terus menerus memantau dan membatasi jumlah data yang dikirimkan pada satu waktu. Kepada mencegah pihak penerima kepada memperoleh data yang tidak dapat disangganya (buffer), TCP juga mengimplementasikan flow control dalam pihak penerima, yang mengindikasikan jumlah buffer yang sedang tersedia dalam pihak penerima.
- Melaksanakan segmentasi terhadap data yang datang dari lapisan aplikasi (dalam DARPA Reference Model)
- Mengirimkan paket secara "one-to-one": hal ini karena memang TCP wajib menciptakan sebuah sirkuit logis selang dua buah protokol lapisan aplikasi supaya saling dapat mengadakan komunikasi. TCP tidak menyediakan layanan pengiriman data secara one-to-many.
TCP umumnya dipergunakan ketika protokol lapisan aplikasi membutuhkan layanan transfer data yang bersifat andal, yang layanan tersebut tidak dipunyai oleh protokol lapisan aplikasi tersebut. Contoh dari protokol yang menggunakan TCP merupakan HTTP dan FTP.
Segmen TCP
Segmen-segmen TCP akan dikirimkan kepada datagram-datagram IP (datagram merupakan satuan protocol data unit pada lapisan internetwork). Sebuah segmen TCP terdiri atas sebuah header dan segmen data (payload), yang dienkapsulasi dengan menggunakan header IP dari protokol IP.
Bagian enkapsulasi data protokol TCP/IP: Data aplikasi + header TCP + header IP + header network interface (Ethernet, Token Ring, dll) + trailer network interface
Sebuah segmen dapat memiliki ukuran hingga 65495 byte: 216-(ukuran header IP terkecil (20 byte)+ukuran header TCP terkecil (20 byte)). Datagram IP tersebut akan dienkapsulasi lagi dengan menggunakan header protokol network interface (lapisan pertama dalam DARPA Reference Model) dijadikan frame lapisan Network Interface. Gambar berikut mengilustrasikan data yang dikirimkan ke sebuah host.
Di dalam header IP dari sebuah segmen TCP, field Source IP Address diatur dijadikan alamat unicast dari sebuah antarmuka host yang mengirimkan segmen TCP yang bersangkutan. Sementara itu, field Destination IP Address juga akan diatur dijadikan alamat unicast dari sebuah antarmuka host tertentu yang dituju. Hal ini dikarenakan, protokol TCP hanya mendukung transmisi one-to-one.
Header TCP
Ukuran dari header TCP merupakan bervariasi, yang terdiri atas beberapa field yang diperlihatkan dalam gambar dan tabel berikut. Ukuran TCP header sangat kecil (ketika tidak berada tambahan opsi TCP) merupakan 20 byte.
Format header TCP, dilengkapi dengan ukuran setiap field-nya
Nama field | Ukuran | Keterangan |
---|---|---|
Source Port | 2 byte (16 bit) | Mengindikasikan sumber protokol lapisan aplikasi yang mengirimkan segmen TCP yang bersangkutan. Gabungan selang field Source IP Address dalam header IP dan field Source Port dalam field header TCP dikata juga kepada socket sumber, yang berarti sebuah alamat global dari mana segmen dikirimkan. Lihat juga Port TCP. |
Destination Port | 2 byte (16 bit) | Mengindikasikan tujuan protokol lapisan aplikasi yang menerima segmen TCP yang bersangkutan. Gabungan selang field Destination IP Address dalam header IP dan field Destination Port dalam field header TCP dikata juga kepada socket tujuan, yang berarti sebuah alamat global ke mana segmen akan dikirimkan. |
Sequence Number | 4 byte (32 bit) | Mengindikasikan nomor urut dari oktet pertama dari data di dalam sebuah segmen TCP yang berhasrat dikirimkan. Field ini wajib selalu diset, walaupun tidak berada data (payload) dalam segmen.
Ketika memulai sebuah sesi koneksi TCP, segmen dengan flag SYN (Synchronization) diset ke nilai 1, field ini akan mempunyai pokoknya nilai Initial Sequence Number (ISN). Hal ini berarti, oktet pertama dalam arus byte (byte stream) dalam koneksi merupakan ISN+1. |
Acknowledgment Number | 4 byte (32 bit) | Mengindikasikan nomor urut dari oktet yang belakang sekali dalam arus byte yang diharapkan oleh kepada diterima oleh pengirim dari si penerima pada pengiriman yang belakang sekali. Acknowledgment number sangat dipentingkan bagi segmen-segmen TCP dengan flag ACK diset ke nilai 1. |
Data Offset | 4 bit | Mengindikasikan di mana data dalam segmen TCP dimulai. Field ini juga dapat berarti ukuran dari header TCP. Seperti halnya field Header Length dalam header IP, field ini merupakan angka dari word 32-bit dalam header TCP. Kepada sebuah segmen TCP terkecil (di mana tidak berada opsi TCP tambahan), field ini diatur ke nilai 0x5, yang berarti data dalam segmen TCP dimulai dari oktet ke 20 dilihat dari permulaan segmen TCP. Bila field Data Offset diset ke nilai maksimumnya (24=16) yakni 15, header TCP dengan ukuran terbesar dapat memiliki panjang hingga 60 byte. |
Reserved | 6 bit | Direservasikan kepada dipergunakan pada masa depan. Pengirim segmen TCP akan mengeset bit-bit ini ke dalam nilai 0. |
Flags | 6 bit | Mengindikasikan flag-flag TCP yang memang berada enam jumlahnya, yang terdiri atas: URG (Urgent), ACK (Acknowledgment), PSH (Push), RST (Reset), SYN (Synchronize), dan FIN (Finish). |
Window | 2 byte (16 bit) | Mengindikasikan jumlah byte yang tersedia yang dipunyai oleh buffer host penerima segmen yang bersangkutan. Buffer ini dikata kepada Receive Buffer, dipergunakan kepada menyimpan byte stream yang datang. Dengan mengimbuhkan ukuran window ke setiap segmen, penerima segmen TCP memberitahukan kepada pengirim segmen berapa jumlah data yang dapat dikirimkan dan disangga dengan berhasil. Hal ini dimainkan supaya si pengirim segmen tidak mengirimkan data banyakan dibandingkan ukuran Receive Buffer. Bila tidak berada tempat lagi di dalam Receive buffer, nilai dari field ini merupakan 0. Dengan nilai 0, maka si pengirim tidak akan dapat mengirimkan segmen lagi ke penerima hingga nilai field ini berubah (bukan 0). Tujuan hal ini merupakan kepada mengatur lalu lintas data atau flow control. |
Checksum | 2 byte (16 bit) | Mampu melaksanakan pengecekan integritas segmen TCP (header-nya dan payload-nya). Nilai field Checksum akan diatur ke nilai 0 selama bagian kalkulasi checksum. |
Urgent Pointer | 2 byte (16 bit) | Menandakan lokasi data yang dianggap "urgent" dalam segmen. |
Options | 4 byte (32 bit) | Berfungsi kepada penampung beberapa opsi tambahan TCP. Setiap opsi TCP akan memakan ruangan 32 bit, sehingga ukuran header TCP dapat diindikasikan dengan menggunakan field Data offset. |
Port TCP
Port TCP mampu mengindikasikan sebuah lokasi tertentu kepada menyampaikan segmen-segmen TCP yang dikirimkan yang diidentifikasi dengan TCP Port Number. Nomor-nomor di bawah angka 1024 merupakan port yang umum dipergunakan dan dipastikan oleh [[IANA|IANaplikasi, sementara port UDP merepresentasikan sebuah antrean pesan UDP kepada protokol lapisan aplikasi. Selain itu, protokol lapisan aplikasi yang menggunakan port TCP dan port UDP dalam nomor yang sama juga tidak wajib sama. Kepada contoh protokol Extended Filename Server (EFS) menggunakan port TCP dengan nomor 520, dan protokol Routing Information Protocol (RIP) menggunakan port UDP juga dengan nomor 520. Jelas, dua protokol tersebut sangatlah berbeda! Karenanya, kepada menyebutkan sebuah nomor port, sebutkan juga macam port yang dipergunakannya, karena hal tersebut mampu membingungkan (ambigu).
Lihat juga Port TCP dan UDP
TCP Flag
Sebuah segmen TCP dapat memiliki flag (tanda-tanda) khusus yang mengindikasikan segmen yang bersangkutan, seperti yang disebutkan dalam tabel berikut:
Susunan flag-flag TCP
Nama flag | Keterangan |
---|---|
URG | Mengindikasikan bahwa beberapa anggota dari segmen TCP mengandung data yang sangat penting, dan field Urgent Pointer dalam header TCP wajib dipergunakan kepada menentukan lokasi di mana data penting tersebut berada dalam segmen. |
ACK | Mengindikasikan field Acknowledgment mengandung oktet yang belakang sekali yang diharapkan dalam koneksi. Flag ini selalu diset, kecuali pada segmen pertama pada pembuatan sesi koneksi TCP. |
PSH | Mengindikasikan bahwa pokok dari TCP Receive buffer wajib diserahkan kepada protokol lapisan aplikasi. Data dalam receive buffer wajib mempunyai pokoknya sebuah blok data yang berurutan (kontigu), dilihat dari ujung sangat kiri dari buffer. Dengan kata lain, sebuah segmen yang memiliki flag PSH diset ke nilai 1, tidak bolah berada satu byte pun data yang lenyap dari arus byte segmen tersebut; data tidak dapat diberikan kepada protokol lapisan aplikasi hingga segmen yang lenyap tersebut datang. Normalnya, TCP Receive buffer akan dikosongkan (dengan kata lain, pokok dari buffer akan diteruskan kepada protokol lapisan aplikasi) ketika buffer tersebut mempunyai pokoknya data yang kontigu atau ketika dalam "proses perawatan". Flag PSH ini dapat mengubah hal seperti itu, dan menciptakan akan TCP segera mengosongkan TCP Receive buffer. Flag PSH umumnya dipergunakan dalam protokol lapisan aplikasi yang bersifat interaktif, seperti halnya Telnet, karena setiap penekanan tombol dalam sesi terminal virtual akan dikirimkan dengan sebuah flag PSH diset ke nilai 1. Contoh dari penggunaan yang lain dari flag ini merupakan pada segmen terakhir dari berkas yang ditransfer dengan menggunakan protokol FTP. Segmen yang dikirimkan dengan flag PSH aktif tidak wajib segera di-acknowledge oleh penerima. |
RST | Mengindikasikan bahwa koneksi yang dibuat akan digagalkan. Kepada sebuah koneksi TCP yang sedang berlangsung (aktif), sebuah segmen dengan flag RST diset ke nilai 1 akan dikirimkan kepada respons terhadap sebuah segmen TCP yang diterima yang ternyata segmen tersebut bukan yang dimohon, sehingga koneksi pun dijadikan gagal. Pengiriman segmen dengan flag RST diset ke nilai 1 kepada sebuah koneksi aktif akan menutup koneksi secara paksa, sehingga data yang disimpan dalam buffer akan dibuang (dihilangkan). Kepada sebuah koneksi TCP yang sedang dibuat, segmen dengan flag RST aktif akan dikirimkan kepada respons terhadap request pembuatan koneksi kepada mencegah percobaan pembuatan koneksi. |
SYN | Mengindikasikan bahwa segmen TCP yang bersangkutan mengandung Initial Sequence Number (ISN). Selama bagian pembuatan sesi koneksi TCP, TCP akan mengirimkan sebuah segmen dengan flag SYN diset ke nilai 1. Setiap host TCP yang lain akan memberikan jawaban (acknowledgment) dari segmen dengan flag SYN tersebut dengan menganggap bahwa segmen tersebut merupakan sekumpulan byte dari data. Field Acknowledgment Number dari sebuah segmen SYN diatur ke nilai ISN + 1. |
FIN | Menandakan bahwa pengirim segmen TCP sudah habis dalam mengirimkan data dalam sebuah koneksi TCP. Ketika sebuah koneksi TCP habis dibubarkan (akibat sudah tidak berada data yang dikirimkan lagi), setiap host TCP akan mengirimkan sebuah segmen TCP dengan flag FIN diset ke nilai 1. Sebuah host TCP tidak akan mengirimkan segmen dengan flag FIN hingga seluruh data yang dikirimkannya sudah diterima dengan adun (menerima paket acknowledgment) oleh penerima. Setiap host akan menganggap sebuah segmen TCP dengan flag FIN kepada sekumpulan byte dari data. Ketika dua host TCP sudah mengirimkan segmen TCP dengan flag FIN dan menerima acknowledgment dari segmen tersebut, maka koneksi TCP pun akan dibubarkan. |
TCP Three-way handshake
Bagian pembuatan koneksi (TCP Three way handshake)
Bagian pembuatan koneksi TCP dikata juga dengan "Three-way Handshake". Tujuan metode ini merupakan supaya dapat melaksanakan sinkronisasi terhadap nomor urut dan nomor acknowledgement yang dikirimkan oleh kedua pihak dan saling bertukar ukuran TCP Window. Bagiannya dapat digambarkan kepada berikut:
- Host pertama (yang bersedia menciptakan koneksi) akan mengirimkan sebuah segmen TCP dengan flag SYN diaktifkan kepada host kedua (yang berhasrat diajak kepada berkomunikasi).
- Host kedua akan meresponsnya dengan mengirimkan segmen dengan acknowledgment dan juga SYN kepada host pertama.
- Host pertama yang belakang sekali akan mulai saling bertukar data dengan host kedua.
TCP menggunakan bagian jabat tangan yang sama kepada mengakhiri koneksi yang dibuat. Hal ini menjamin dua host yang sedang terkoneksi tersebut sudah mendudukkan bagian transmisi data dan seluruh data yang ditransmisikan sudah diterima dengan adun. Itulah sebabnya, mengapa TCP dikata dengan koneksi yang reliable..
Rujukan
- W. Richard Stevens. TCP/IP Illustrated, Volume 1: The Protocols. ISBN 0-201-63346-9
- W. Richard Stevens and Gary R. Wright. TCP/IP Illustrated, Volume 2: The Implementation. ISBN 0-201-63354-X
- W. Richard Stevens. TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols. ISBN 0-201-63495-3
- ^ Irish Times Father of the Net adopts practical view of his child's future 16 January 2004
- ^ Vinton G. Cerf, Robert E. Kahn, A Protocol for Packet Network Intercommunication, IEEE Transactions on Communications, Vol. 22, No. 5, May 1974 pp. 637-648
Pranala luar
- RFC 675 - Specification of Internet Transmission Control Program, December 1974 Version
- RFC 793 - TCP v4
- RFC 1122 - includes some error corrections for TCP
- RFC 1323 - TCP-Extensions
- RFC 1379 - Extending TCP for Transactions—Concepts
- RFC 1948 - Defending Against Sequence Number Attacks
- RFC 2018 - TCP Selective Acknowledgment Options
- RFC 2988 - Computing TCP's Retransmission Timer
- RFC 4614 - A Roadmap for TCP Specification Documents
- RFC 5681 - TCP Congestion Control
- Oral history interview with Robert E. Kahn, Charles Babbage Institute, University of Minnesota, Minneapolis. Focuses on Kahn's role in the development of computer networking from 1967 through the early 1980s. Beginning with his work at Bolt Beranek and Newman (BBN), Kahn discusses his involvement as the ARPANET proposal was being written, his decision to become active in its implementation, and his role in the public demonstration of the ARPANET. The interview continues into Kahn's involvement with networking when he moves to IPTO in 1972, where he was responsible for the administrative and technical evolution of the ARPANET, including programs in packet radio, the development of a new network protocol (TCP/IP), and the switch to TCP/IP to connect multiple networks.
- IANA Port Assignments
- John Kristoff's Overview of TCP (Fundamental concepts behind TCP and how it is used to transport data between two endpoints)
- TCP fast retransmit simulation animated: slow start, sliding window, duplicated Ack, congestion window
- TCP, Transmission Control Protocol
- Checksum example
- Engineer Francesco Buffa's page about Transmission Control Protocol
- TCP tutorial
- Linktionary on TCP segments
- TCP Sliding Window simulation animated (ns2)
- Multipath TCP in Linux kernel