== Sejarah ==
[[Berkas:TCP state diagram.png|jmpl|272x272px]]
Saat Vint Cerf dan Bob Kahn pertama menulis spesifikasi atas protokol ini tahun 1973, internet masih merupakan media yang dilarang untuk keperluan komersial.<ref>Irish Times ''Father of the Net adopts practical view of his child's future'' 16 January 2004</ref> Di bulan May 1974, [[IEEE]] mempublikasikan makalah berjudul "''Protokol sebagai paket interkoneksi jaringan.''"<ref>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</ref> Sebagai penulis makalah tersebut, Cerf dan Kahn menjabarkan sebuah protokol [[interkoneksi]] untuk berbagi layanan dengan memanfaatkan pertukaran-paket antara [[node]] jaringan yang terhubung. Komponen pengontrol utama atas model ini disebut sebagai "''Program pengontrol transmisi''" yang
menggabungkan baik [[tautan]] koneksi teriorientasi dan layanan datagram antar ''[[host]]''. Program pengontrol transmisi monolitik ini kemudian dipecah ke dalam arsitektur modular yang terdiri atas ''Protokol pengontrol transmisi'' pada lapisan koneksi terorientasi dan ''Protokol internet'' pada lapisan [[datagram]]. Model inilah yang kemudian dikenal dengan istilah ''TCP/IP'', meski secara formal istilah yang digunakan adalah ''Paket protokol internet''.
== Karakteristik TCP ==
TCP memiliki karakteristik sebagai berikut:
* Berorientasi sambungan (''connection-oriented''): Sebelum [[data]] dapat ditransmisikan antara dua host, dua proses yang berjalan pada lapisan aplikasi harus melakukan negosiasi untuk membuat [[sesi]] koneksi terlebih dahulu. Koneksi TCP ditutup dengan menggunakan proses terminasi koneksi TCP (TCP connection termination).
* ''[[Duplex|Full-duplex]]'': Untuk setiap host TCP, koneksi yang terjadi antara dua host terdiri atas dua buah jalur, yakni jalur keluar dan jalur masuk. Dengan menggunakan teknologi lapisan yang lebih rendah yang mendukung full-duplex, maka data pun dapat secara berkesinambungansimultan diterima dan dikirim. Header TCP berisi beberapa bilangan aslinomor urut (TCP sequence number) dari data yang ditransmisikan dan sebuah [[ACK|acknowledgment]] dari data yang masuk.
* Dapat diandalkan (''reliable''): Data yang dikirimkan ke sebuah koneksi TCP akan diurutkan dengan sebuah bilangan aslinomor urut paket dan akan mengharapkan paket ''[[ACK|positive acknowledgment]]'' dari penerima. Jika tidak ada 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 untuk mengurutkan segmen-segmen TCP. Untuk menjamin integritas setiap segmen TCP, TCP mengimplementasikan penghitungan TCP [[Checksum]].
* ''Byte stream'': TCP melihat data yang dikirimkan dan diterima melalui dua jalur masuk dan jalur keluar TCP sebagai sebuah ''byte stream'' yang berdekatan (kontigu). Bilangan asliNomor urut TCP dan nomor acknowlegment dalam setiap header TCP didefinisikan juga dalam bentuk byte. Meski demikian, TCP tidak mengetahui batasan pesan-pesan di dalam byte stream TCP tersebut. Untuk melakukannya, hal ini diserahkan kepada protokol lapisan aplikasi (dalam DARPA Reference Model), yang harus menerjemahkan byte stream TCP ke dalam "bahasa" yang ia pahami.
* Memiliki layanan ''flow control'': Untuk mencegah data terlalu banyak dikirimkan pada satu waktu, yang akhirnya membuat "macet" jaringan [[internetwork]] [[IP]], TCP mengimplementasikan layanan ''[[flow control]]'' yang dimiliki oleh pihak pengirim yang secara terus menerus memantau dan membatasi jumlah data yang dikirimkan pada satu waktu. Untuk mencegah pihak penerima untuk memperoleh data yang tidak dapat disangganya (''buffer''), TCP juga mengimplementasikan ''flow control'' dalam pihak penerima, yang mengindikasikan jumlah ''buffer'' yang masih tersedia dalam pihak penerima.<!--buffer berlebih akan menyebabkan denial of service-->
* Melakukan segmentasi terhadap data yang datang dari lapisan aplikasi (dalam ''[[DARPA Reference Model]]'')
* Mengirimkan paket secara "''one-to-one''": hal ini karena memang TCP harus membuat sebuah sirkuit logis antara dua buah protokol lapisan aplikasi agar saling dapat berkomunikasi. TCP tidak menyediakan layanan pengiriman data secara ''one-to-many''.
|