Difference between revisions of "TCP/IP: Transport Layer"
Onnowpurbo (talk | contribs) (New page: Transport Layer Dalam keluarga protocol TCP/IP ada dua (2) protocol yang kira-kira equivalent dengan lapisan transport dan session di OSI. Protokol ini di kenal sebagai Transmission Contr...) |
Onnowpurbo (talk | contribs) |
||
Line 1: | Line 1: | ||
− | + | Dalam keluarga protocol [[TCP/IP]] ada dua (2) [[protocol]] yang kira-kira equivalent dengan lapisan transport dan session di [[OSI]]. Protokol ini di kenal sebagai [[Transmission Control Protocol]] ([[TCP]]) dan [[User Datagram Protocol]] ([[UDP]]). Kedua [[protokol]] ini mengatur aliran data antara dua (2) [[host]] di [[Internet]] yang saling berkomunikasi secara reliable (andal). Kadang orang berargumentasi bahwa ada kesalahan penamaan dengan menyebutkan “aplikasi TCP/IP”, karena pada kenyataannya aplikasi akan berjalan di atas [[TCP]] atau [[UDP]]. Di samping [[TCP]] dan [[UDP]], ada beberapa [[protocol]] lain di juga berada di lapisan transport yang sering kita gunakan antara lain adalah [[Internet Message Control Protocol]] (ICMP) dan [[Open Shortest Path First]] ([[OSPF]]). | |
− | + | ==Port== | |
+ | |||
+ | Aplikasi di lapisan lapisan [[transport]] biasanya ditunjukan oleh nomor port di protocol [[TCP]]/[[UDP]]. Nomor port bersama [[IP address]] membentuk [[soket]], dalam sebuah komunikasi end-to-end antara dua mesin akan dapat secara unik di identifikasi di [[Internet]] dengan kombinasi empat ([[source port]], [[source IP address]], [[destination port]], [[destination IP address]]). | ||
− | |||
− | |||
Nomor port dibentuk oleh nomor 16-bit. Nomor port antara 0-1023 di kenal sebagai Well Known Ports. Nomor port ini di alokasi untuk server dari aplikasi, dan pada kebanyakan system, hanya dapat digunakan oleh proses yang mempunyai ijin yang paling tinggi (seperti root atau administrator). Nomor port antara 1024-49151 di kenal sebagai Registered Ports, dan nomor ini di definisikan dan di umumkan ke masyarakat Internet agar tidak terjadi konflik antar vendor. Sisa nomor, antara 49152-65535, di kenal sebagai Dynamic and/or Private Ports dan dapat secara bebas digunakan oleh klien / server. | Nomor port dibentuk oleh nomor 16-bit. Nomor port antara 0-1023 di kenal sebagai Well Known Ports. Nomor port ini di alokasi untuk server dari aplikasi, dan pada kebanyakan system, hanya dapat digunakan oleh proses yang mempunyai ijin yang paling tinggi (seperti root atau administrator). Nomor port antara 1024-49151 di kenal sebagai Registered Ports, dan nomor ini di definisikan dan di umumkan ke masyarakat Internet agar tidak terjadi konflik antar vendor. Sisa nomor, antara 49152-65535, di kenal sebagai Dynamic and/or Private Ports dan dapat secara bebas digunakan oleh klien / server. | ||
Beberapa nomor well-known port adalah: | Beberapa nomor well-known port adalah: |
Revision as of 15:12, 4 July 2010
Dalam keluarga protocol TCP/IP ada dua (2) protocol yang kira-kira equivalent dengan lapisan transport dan session di OSI. Protokol ini di kenal sebagai Transmission Control Protocol (TCP) dan User Datagram Protocol (UDP). Kedua protokol ini mengatur aliran data antara dua (2) host di Internet yang saling berkomunikasi secara reliable (andal). Kadang orang berargumentasi bahwa ada kesalahan penamaan dengan menyebutkan “aplikasi TCP/IP”, karena pada kenyataannya aplikasi akan berjalan di atas TCP atau UDP. Di samping TCP dan UDP, ada beberapa protocol lain di juga berada di lapisan transport yang sering kita gunakan antara lain adalah Internet Message Control Protocol (ICMP) dan Open Shortest Path First (OSPF).
Port
Aplikasi di lapisan lapisan transport biasanya ditunjukan oleh nomor port di protocol TCP/UDP. Nomor port bersama IP address membentuk soket, dalam sebuah komunikasi end-to-end antara dua mesin akan dapat secara unik di identifikasi di Internet dengan kombinasi empat (source port, source IP address, destination port, destination IP address).
Nomor port dibentuk oleh nomor 16-bit. Nomor port antara 0-1023 di kenal sebagai Well Known Ports. Nomor port ini di alokasi untuk server dari aplikasi, dan pada kebanyakan system, hanya dapat digunakan oleh proses yang mempunyai ijin yang paling tinggi (seperti root atau administrator). Nomor port antara 1024-49151 di kenal sebagai Registered Ports, dan nomor ini di definisikan dan di umumkan ke masyarakat Internet agar tidak terjadi konflik antar vendor. Sisa nomor, antara 49152-65535, di kenal sebagai Dynamic and/or Private Ports dan dapat secara bebas digunakan oleh klien / server. Beberapa nomor well-known port adalah:
Port # Protokol Servis
Port # Protokol Servis 7 TCP echo
80 TCP http 9 TCP discard
110 TCP pop3 13 TCP daytime
111 TCP sunrpc 19 TCP chargen
119 TCP nntp 20 TCP ftp-control
123 UDP ntp 21 TCP ftp-data
137 UDP netbios-ns 23 TCP telnet
138 UDP netbios-dgm 25 TCP smtp
139 TCP netbios-ssn 37 UDP time
143 TCP imap 43 TCP whois
161 UDP snmp 53 TCP/UDP dns
162 UDP snmp-trap 67 UDP bootps
179 TCP bgp 68 UDP bootpc
443 TCP https (http/ssl) 69 UDP tftp
520 UDP rip 70 TCP gopher
1080 TCP socks 79 TCP finger
33434 UDP traceroute
Daftar lengkap nomor port yang telah di alokasikan dapat dilihat di IANA list of Port Numbers (http://www.iana.org/assignments/port-numbers). Daftar nomor port dalam implementasi yang lebih spesifik dapat dilihat di file services. File ini biasanya dapat di lihat di /etc (Linux/Unix), c:\windows (Windows 9x, ME), atau c:\winnt\system32\drivers\etc (Windows NT, 2000).
TCP (Transmission Control Protocol)
TCP (Transmission Control Protocol), merupakan protokol yang terletak di layer transport. Protokol ini menyediakan service yang dikenal sebagai connection oriented, reliable, byte stream service.
Apakah yang dimaksud dengan pernyataan diatas? connection oriented berarti sebelum melakukan pertukaran data, dua aplikasi pengguna TCP harus melakukan pembentukan hubungan (handshake)terlebih dulu. Reliable berarti TCP menerapkan proses deteksi kesalahan paket dan pengiriman ulang / retransmisi. Byte Stream Service berarti paket dikirimkan dan sampai ke tujuan secara berurutan. TCP, di jelaskan di RFC 793 (http://www.isi.edu/in-notes/rfc793.txt), memberikan servis komunikasi virtual circuit (connection oriented) melalui jaringan. TCP mengatur cara memformat protocol, menghubungkan, dan memutuskan virtual circuit, pengurutan paket, flow control, dan perbaikan kesalahan. Sebagian besar aplikasi TCP/IP yang membutuhkan transport yang andal akan di berikan oleh TCP.
Apa sajakah yang dilakukan TCP agar reliabilitas pengiriman data terjamin? Untuk menjamin keandalan, TCP melakukan hal hal berikut:
1.Data yang diterima oleh aplikasi dipecah pecah menjadi segmen-segmen yang besarnya menurut TCP paling sesuai untuk mengirimkan data. 2.Ketika TCP menerima data dari mitranya, TCP mengirimkan acknowledgment (pemberitahuan bahwa ia telah menerima data) 3.Ketika TCP mengirimkan sebuah data, TCP mengaktifkan pewaktu (software timer) yang akan menunggu acknowledgement dari penerima segmen data tersebut. Jika sampai waktu yang ditentukan tidak diterima acknowledgement, data tersebut dikirimkan kembali oleh TCP. 4.Sebelum segmen data dikirim, TCP melakukan perhitungan checksum pada header dan data nya. Hal ini berbeda dengan protokol IP yang hanya melakukan perhitungan checksum pada headernya saja. Jika segmen yang diterima memiliki checksum yang tidak valid, TCP akan membuang segmen ini dan berharap sisi pengirim akan melakukan retransmisi. 5.Karena segmen TCP dikirim menggunakan IP, dan datagram IP dapat sampai ke tujuan dalam keadaan tidak berurutan, segmen TCP yang dikirimnya pun dapat mengalami hal yang sama. Karenanya sisi penerima paket TCP harus mampu melakukan pengurutan kembali segmen TCP yang ia terima (resequencing), dan memberikan data dengan urutan yang benar ke aplikasi penggunanya. 6.Karena paket IP dapat terduplikasi di perjalanan, penerima TCP harus membuang data yang terduplikasi. 7.Untuk mencegah agar server yang cepat tidak membanjiri server yang lambat, TCP melakukan proses flow control. Setiap koneksi TCP memiliki buffer dengan ukuran yang terbatas. Sisi penerima TCP hanya memperbolehkan sisi pengirim mengirimkan data sebesar buffer yang ia miliki.
Sebuah data unit TCP di sebut segment; nama ini digunakan karena TCP pada dasarnya tidak mengenal message, tapi hanya mengirimkan blok-blok byte antara pengirim dan penerima.
Kolom-kolom pada protocol TCP adalah:
Source Port dan Destination Port: menunjukan port sumber dan port tujuan untuk mengidentifikasi sambungan end-to-end dan aplikasi pada lapisan yang lebih tinggi.
Sequence Number: berisi nomor urut byte pertama dari segmen dari aliran byte yang dikirim. Karena nomor urut mengacu pada jumlah byte dan bukan jumlah segmen, nomor urut dalam TCP segmen biasanya tidak berurutan.
Acknowledgment Number: Digunakan oleh pengirim untuk memberikan acknowledge penerimaan data; kolom ini menunjukan nomor urut dari byte data selanjutnya yang diharapkan di terima.
Data Offset: Menunjuk pada byte data pertama dari segmen TCP; kolom ini menunjukan panjang header segmen TCP.
Control Flags: Sekumpulan bit yang mengontrol beberapa aspek dari sambungan virtual TCP. Bit control ini termasuk:
Urgent Pointer Field Significant (URG): Jika di set, menunjukan bahwa segmen yang dikirim berisi data urgent (atau prioritas tinggi) dan kolom Urgent Pointer adalah valid.
Acknowledgment Field Significant (ACK): Jika di set, menunjukan bahwa nilai yang ada di kolom Acknowledgment Number adalah valid. Bit ini biasanya di set, kecuali pada saat pertama kali sambungan dilakukan.
Push Function (PSH): Digunakan pada saat aplikasi sumber / pengirim menginginkan untuk memaksa TCP segera mengirimkan data yang saat ini ada di buffer tanpa menunggu buffer penuh; Hal ini sangat berguna untuk mengirimkan data pendek / kecil.
Reset Connection (RST): Jika di set, akan segera memutuskan sambungan TCP end-to-end.
Synchronize Sequence Numbers (SYN): Menset awal segmen pada saat proses / membentuk sambungan, menunjukan bahwa segmen tersebut membawa nomor urut awal.
Finish (FIN): Memohon untuk pemutusan hubungan TCP secara normal; agar hubungan benar-benar terputus kedua belah pihak harus mengirimkan segmen FIN.
Window: Digunakan untuk control flow, berisi nilai dari receive window size yang menentukan maksimum byte data / paket yang dapat di terima oleh penerima sekali kirim / sekaligus. Lebar kolom Windows ialah 16 bit (2 byte). Sehingga nilai maksimalnya ialah 65535 .
Checksum: Memberikan bit tambahan untuk mendeteksi kesalahan pada segmen TCP (termasuk header dan data).
Urgent Pointer: Data urgent adalah informasi yang telah di beri tanda sebagai data dengan prioritas tinggi oleh aplikasi di lapisan atas; data ini biasanya akan membypass urutan data TCP yang normal dan biasanya di letakan dalam segmen antara header dan data yang normal. Urgent Pointer yang hanya valid pada saat URG bit di set, menunjukan posisi dari octet pertama dari data yang tidak urgen dalam segmen.
Options: Digunakan pada saat negosiasi proses pembentukan hubungan. Ada banyak option yang dapat di negosiasi. Maximum Segment Size (MSS) adalah option yang paling sering di negosiasikan, dan jika tidak dilakukan maka nilai default MSS adalah 536. Option lain yang sering digunakan adalah Selective Acknowledgement (SACK), yang memungkinkan untuk menerima segmen yang tidak mengikuti urutan yang benar. IANA me-maintain daftar dari semua TCP Option Numbers ( http://www.iana.org/assignments/tcp-parameters).
UDP (User Datagram Protocol)
UDP (User Datagram Protocol) diterangkan di RFC 768 (http://www.isi.edu/in-notes/rfc768.txt). UDP merupakan protokol transport yang sederhana. Berbeda dengan TCP yang connection oriented, UDP memberikan servis datagram (connectionless) end-to-end yang tidak reliable (tidak andal). Dalam UDP tidak ada sequencing (pengurutan kembali) paket yang datang, acknowledgement terhadap paket yang datang, atau retransmisi jika paket mengalami masalah di tengah jalan.
Kemiripan UDP dengan TCP ada pada penggunaan port number. Sebagaimana digunakan pada TCP, UDP menggunakan port number ini membedakan pengiriman datagram ke beberapa aplikasi berbeda yang terletak pada komputer yang sama.
Karena sifatnya yang connectionless dan unreliable, UDP digunakan oleh aplikasi aplikasi yang membutuhkan servis sederhana dengan overhead protokol / overhead waktu transaksi yang rendah, seperti:
1.Secara periodik melakukan aktivitas tertentu (misalnya query routing table pada jaringan lokal), serta hilangnya satu data akan dapat diatasi pada query periode berikutnya. 2.Melakukan pengiriman data ke jaringan lokal. Pendeknya jarak tempuh datagram akan mengurangi resiko kerusakan data 3.Bersifat broadcasting atau multicasting. Pengiriman datagram ke banyak client sekaigus akan efisien jika prosesnya menggunakan metode connectionless.
Dengan kebutuhan yang sangat sederhana yang tidak membutuhkan keandalan. Kolom yang digunakan oleh datagram UDP adalah:
Source Port: Mengidentifikasi port UDP yang digunakan oleh pengirim datagram; penggunakan Source Port sifatnya optional dan dapat di set menjadi 0.
Destination Port: Mengidentifikasi port yang dituju di penerima datagram. receiver.
Length: Menunjukan panjang total datagram UDP.
Checksum: Memberikan bit tambahan untuk deteksi kesalahan di datagram (termasuk header dan data).
ICMP (Internet Control Message Protocol) Internet Control Message Protocol, dijelaskan di RFC 792 (http://www.isi.edu/in-notes/rfc792.txt), adalah pasangan bagi IP yang memberitahukan pengirim IP jika ada datagram yang bermasalah. ICMP sangat penting artinya di lingkungan connectionless seperti IP. ICMP bukan host-to-host protocol seperti TCP atau UDP, tapi host-tohost dalam artian sebuah alat (apakah itu router atau computer) mengirimkan berita ke alat yang lain (apakah itu router / komputer).
Pada kondisi normal, Protokol IP berjalan baik dan menghasilkan proses penggunaan memori serta sumber daya transmisi yang efisien. Namun ada beberapa kondisi dimana koneksi IP terganggu, misalnya karena router yang crash, putusnya kabel, atau matinya host tujuan.. Pada saat saat ini ICMP berperan membantu menstabilkan kondisi jaringan. Hal ini dilakukan dengan cara memberikan pesan pesan tertentu, sebagai respons atas kondisi tertentu yang terjadi pada jaringan tersebut.
Situasi yang sering terjadi dilapangan, misalnya, dalam hubungan antara router A dan B mengalami masalah, maka Router A akan secara otomatis mengirimkan paket ICMP Destination Unreachable ke host pengirim paket yang berusaha melewati host B menuju tujuannya. Dengan adanya pemberitahuan ini maka host tujuan tidak akan terus menerus berusaha mengirimkan paketnya melewati router B.
Contoh diatas hanya sebagian dari jenis pesan ICMP. Ada dua tipe pesan yang dapat dihasilkan oleh ICMP yaitu ICMP Error Message dan ICMP Querry Message. ICMP Error Message, sesuai namanya, dihasilkan jika terjadi kesalahan pada jaringan. Sedangkan ICMP Querry Message ialah jenis pesan yang dihasilkan oleh protokol ICMP jika pengirim paket menginginkan informasi tertentu yang berkaitan dengan kondisi jaringan.
Protokol ICMP terdefinisi dari header protokol IP dengan nilai satu (1) pada kolom protokol. Secara umum 32 bit pertama protokol ICMP yang akan menentukan fungsi yang di emban protokol ICMP seperti tampak pada gambar.
Keterangan dari masing-masing kolom adalah sebagai berikut:
Type: Menentukan format message ICMP (8 bits). Ada cukup banyak format ICMP yang di definisikan. Beberapa diantaranya terdapat dalam tabel.
Code: Menjelaskan lebih lanjut dari ICMP Message (8 bits).
Checksum: Digunakan untuk mencek apakah header ICMP yang diterima masih baik atau sudah korup (16 bit)..
Data: Berisi data yang spesifik seperti di indikasikan oleh kolom Type dan Field. Panjang data bervariasi.
IANA memaintain daftar lengkap dari ICMP Parameters (http://www.iana.org/assignments/icmp-parameters). Cuplikan berbagai tipe message ICMP dapat dilihat sebagai berikut:
Type Deskripsi 0 Echo reply. 3 Destination unreachable. 4 Source quench. 5 Redirect. 6 Alternate Host Address. 8 Echo request. 9 Router advertisement. 10 Router solicitation. 11 Time exceeded. 12 Parameter problem. 13 Timestamp request. 14 Timestamp reply. 15 Information request. 16 Information reply. 30 Traceroute. 33 IPv6 Where-Are-You. 34 IPv6 I-Am-Here.
ICMP Error Messages dibagi menjadi beberapa jenis. Diantaranya :
1.Destination Unreachable. Pesan ini dihasilkan oleh router jika pengiriman paket mengalami kegagalan akibat masalah putusnya jalur, baik secara fisik maupun secara logic. Destination Unreachable ini dibagi menjadi beberapa tipe. Beberapa tipe yang penting ialah : Network Unreachable, jika jaringan tujuan tak dapat dihubungi. Host Unreachable, jika host tujuan tak bisa dihubungi. Protocol At Destination is Unreachable, jika di tujuan tak tersedia protokol tersebut. Port is Unreachable, jika tidak ada port yang dimaksud pada tujuan. Destination Network is Unknown, jika network tujuan tak diketahui. Destination Host is Unknown, jika Host tujuan Tidak diketahui.
2.Time Exceeded. Paket ICMP jenis ini dikirimkan jika isi field TTL dalam paket IP sudah habis dan paket belum juga sampai ke tujuannya. Sebagaimana telah diterangkan pada bagian IP diatas, tiap kali sebuah paket IP melewati satu router, nilai TTL dalam paket tersebut dikurangi satu. TTL ini diterapkan untuk mencegah timbulnya paket IP yang terus menerus berputar putar di network karena suatu kesalahan tertentu, sehingga menghabiskan sumberdaya jaringan yang ada.
Field TTL ini pula yang digunakan oleh program traceroute untuk melacak jalannya paket dari satu host ke host lain. Program traceroute dapat melakukan pelacakan rute berjalannya IP dengan cara mengirimkan paket kecil UDP ke IP tujuan, dengan TTL yang di set membesar.
Saat paket pertama dikirim, TTL di set satu, sehingga router pertama akan membuang paket ini dan mengirimkan paket ICMP time exceeded. Kemudian paket kedua dikirim , dengan TTL dinaikkan. Dengan naiknya TTL, paket ini sukses melewati router pertama namun dibuang oleh router kedua. Router ini pun mengirimkan paket ICMP time exceeded. Dengan mendaftar nama nama router yang mengirimkan paket ICMP time exceeded ini, akhirnya didapat seluruh nama router yang dilewati oleh paket UDP ini. Traceroute adalah program yang menggunakan kemampuan ini, contoh keluaran di Linux adalah
[root@dodol ~]# traceroute www.vision.net.id traceroute to webhost2.vision.net.id (202.150.0.2), 30 hops max, 38 byte packets
1 192.168.0.10 (192.168.0.10) 0.277 ms 0.322 ms 0.205 ms 2 vnp-gtw.vision.net.id (202.150.10.31) 1.826 ms 3.054 ms 2.780 ms 3 202.150.1.1 (202.150.1.1) 110.270 ms 4.868 ms * 4 webhost2.vision.net.id (202.150.0.2) 333.681 ms 112.037 ms
[root@dodol ~]#
3.Parameter Problem. Paket ini dikirim jika terdapat kesalahan parameter pada header Paket IP 4.Source Quench. Paket ICMP ini basanya dikirim oleh router untuk memberitahukan bahwa dia mengalami kepadatan trafik dan datagram yang dikirim terpaksa di buang. Hal ini biasanya terjadi karena terbatasnya buffer di router. Sebagai respons atas paket ini, pihak pengirim paket harus memperlambat pengiriman paketnya 5.Redirect. Paket ini dikirimkan jika router merasa Host mengirimkan paket IP melalui router yang salah. paket ini seharusnya dikirimkan melalui router lain. Untuk alasan keamanan, biasanya message Redirect di blok oleh firewall.
Sedangkan ICMP Querry Messages terdiri dari :
1.Echo dan Echo Reply. Bertujuan untuk memeriksa apakah sistem tujuan dalam keadaan aktif. Program ping merupakan program pengirim paket ini. Responder harus mengembalikan data yang sama dengan data yang dikirimkan. 2.Timestamp dan Timestamp Reply. Message ini mirip dengan message Echo tapi menggunakan timestamp / pewaktu (dengan ketelitian milidetik) di messagenya. Hal ini memungkinkan kita menghitung berapa waktu yang dibutuhkan untuk sebuah mesin untuk memproses datagram, dan juga memberikan mekanisme bagi sebuah mesin untuk mensinkronkan waktu. 3.Address Mask. Untuk mengetahui berapa netmask yang harus digunakan oleh suatu host dalam suatu network.
Salah satu aplikasi ICMP yang paling sering digunakan adalah Echo Request (Type 8) yang di jawab menggunakan Echo Reply (Type 0), atau yang lebih kompleks menggunakan Timestamp (Type 13) dan Timestamp Reply (Type 14) sehingga kita dapat mengukur waktu yang dibutuhkan untuk mengirim ICMP Message tersebut.
Header ICMP untuk keperluan timestamp & timestamp reply memiliki beberapa tambahan kolom untuk memasukan nomor urut (Sequence Number) dan Timestamp. Tampak pada contoh adalah hasil keluaran yang dihasilkan.
[onno@yc0mlc ~]$ ping www.yahoo.com PING www.yahoo.akadns.net (66.94.230.48) 56(84) bytes of data. 64 bytes from p17.www.scd.yahoo.com (66.94.230.48): icmp_seq=0 ttl=47 time=253 ms 64 bytes from p17.www.scd.yahoo.com (66.94.230.48): icmp_seq=1 ttl=49 time=335 ms 64 bytes from p17.www.scd.yahoo.com (66.94.230.48): icmp_seq=2 ttl=49 time=345 ms 64 bytes from p17.www.scd.yahoo.com (66.94.230.48): icmp_seq=3 ttl=47 time=315 ms 64 bytes from p17.www.scd.yahoo.com (66.94.230.48): icmp_seq=4 ttl=48 time=232 ms 64 bytes from p17.www.scd.yahoo.com (66.94.230.48): icmp_seq=5 ttl=47 time=273 ms
--- www.yahoo.akadns.net ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 4999ms rtt min/avg/max/mdev = 232.316/292.573/345.372/42.271 ms, pipe 2 [onno@yc0mlc ~]$
Tampak bahwa dari mesin contoh ke www.yahoo.com dibutuhkan waktu bolak-balik rata-rata 290ms, dan cukup reliable karena tidak ada paket yang hilang (0% packet loss) di jalan.
Sebagai paket pengatur kelancaran jaringan, paket ICMP tidak diperbolehkan membebani network. Karenanya, paket ICMP tidak boleh dikirim saat terjadi problem yang disebabkan oleh :
1.Kegagalan pengiriman paket ICMP 2.Kegagalan pengiriman paket broadcast atau multicast
Logika Sambungan TCP dan ICMP
Sangat penting untuk menghayati bagaimana sambungan TCP terjadi untuk dapat merasakan bagaimana TCP beroperasi. Hubungan komunikasi TCP pada dasarnya terdiri atas tiga (3) bagian, yaitu: 1.Connection Establishment (pembuatan sambungan). 2.Data Exchange (pertukaran data). 3.Connection Termination (pemutusan sambungan). Dalam contoh di baeah adalah sambungan ke server POP3 (yang mendengarkan di TCP port 110) dengan klien-nya (yang menggunakan TCP port 1967).
CLIENT SERVER
syn, SEQ=800 1
> 1
src_port=1967, dst_port=110 1
1 syn, ack, SEQ=1567, ACK=801 1 CONNECTION
<--------------------------------------------------- 1
src_port=110, dst_port=1967 1 ESTABLISHMENT 1
ack, SEQ=801, ACK=1568 1
> 1
src_port=1967, dst_port=110 1
ack, SEQ=1568, ACK=801 2
<--------------------------------------------------- 2
src_port=110, dst_port=1967 2 DataLen=18 (POP3 Server V1.12\n) 2 2
ack, SEQ=801, ACK=1586 2
> 2
src_port=1967, dst_port=110 2 DataLen=5 (quit\n) 2 DATA
2 EXCHANGE ack, SEQ=1586, ACK=806 2
<--------------------------------------------------- 2
src_port=110, dst_port=1967 2 DataLen=9 (Sayonara\n) 2 2
ack, SEQ=806, ACK=1595 2
> 2
src_port=1967, dst_port=110 2
fin, ack, SEQ=806, ACK=1595 3
> 3
src_port=1967, dst_port=110 3
3 ack, SEQ=1595, ACK=807 3
<--------------------------------------------------- 3
src_port=110, dst_port=1967 3 CONNECTION 3 fin, ack, SEQ=1595, ACK=807 3 TERMINATION
<--------------------------------------------------- 3
src_port=110, dst_port=1967 3 3
ack, SEQ=807, ACK=1596 3
> 3
src_port=1967, dst_port=110 3
Pada fase connection establishment terdiri atas tiga fasa yang dikenal sebagai three way handshake (tiga fasa berjabatan) yang pada saat itu client dan server akan mempertukarkan nomor urut awal initial sequence number (ISN) dan acknowledge ISN dari mesin yang dituju.
Dalam contoh ini, client memulai hubungan dengan mengirimkan server TCP segmen dengan SYN bit di set dan nomor urut (Sequence Number) 800. Dengan menset SYN-bit memberitahukan si penerima (dalam hal ini server) bahwa si pengirim (dalam hal ini client) sedang dalam mode inisialisasi ISN dan ISN belum di konfirmasi. Nomor Acknowledgement di segmen tidak terlihat karena nilainya pada titik ini tidak valid.
Server merespond dengan segmen yang bit SYN dan ACK di set. Nomor urut (Sequence Number) 1567 dan Acknowledgement Number 801. SYN-bit dan ISN dari 1567 mempunyai arti yang sama dengan paragraph di atas. Bit ACK menunjukan bahwa isi dari kolom Acknowledgement Number adalah valid dan nilai ACK adalah 801, ini adalah cara server mengkonfirmasi ISN dari klien.
Bagian terakhir dari three-way handshake terjadi pada saat klien mengirimkan segmen TCP dengan bit ACK di set. Perhatikan bahwa isi kolom Acknowledgement Number (1568) adalah lebih besar satu (1) dari ISN server.
Three-way handshake ini kadang kala di kenal sebagai segmen pertukaran “syn, syn/ack, dan ack”. Hal ini sangat penting karena beberapa hal. Untuk seseorang yang melakukan sniffing dan melihat paket yang lewat, mengetahui three-way handshake ini adalah cara untuk menemukan mulainya sebuah hubungan komunikasi. Untuk firewall, proxy server, detector penyusup (intrusion detection), dan system lainnya, three-way handshake memberikan cara untuk mengetahui arah dari sambungan komunikasi TCP karena mungkin peraturan firewall untuk sambungan outbound (arah keluar) dan inbound (arah ke dalam akan berbeda.
Bagian kedua dari sambungan TCP adalah data exchange. Informasi yang ada di sini pada dasarnya hanya untuk contoh saja. Pada bagian data exchange terlihat POP server mengirimkan “banner” ke client dan client mengirimkan perintah “quit”, dan server memutuskan hubungan. Perlu di catat bahwa “\n” menunjukan akhir dari kalimat / “end-of-line”. Segmen yang dikirim memperlihatkan hubungan antara nomor urutan data & nomor acknowledgement antara client dan server.
Fase terakhir adalah connection termination. Meskipun sambungan TCP adalah full-duplex, artinya dapat sekaligus mengirim dan menerima secara bersamaan, pada dasarnya protocol TCP melihat sambungan-nya sebagai sepasang sambungan simplex. Simplex adalah sambungan dimana pada saat si pengirim mengirimkan data maka si penerima tidak boleh mengirimkan data. Oleh karena itu, untuk memutuskan hubungan komunikasi secara benar membutuhkan empat segmen. Dalam hal ini client mengirimkan segmen ke server denganbit FIN dan ACK di set. Server meresponds dengan segmen yang hanya bit ACK di set dan Acknowledgement Number di tambah satu. Server kemudian mengirimkan segmen ke client dengan bit FIN dan ACK di set.
Paragraph di atas menjelaskan scenario normal dalam komunikasi TCP antara klien dan server. Dua mesin dengan UDP akan berkomunikasi dengan cara yang hamper sama, salah satu mesin akan mengirimkan datagram UDP ke mesin yang lain dengan asumsi bahwa mesin tersebut mendengarkan pada port yang di tuju.
Akan tetapi apa yang terjadi jika mesin yang dituju ternyata tidak mendengarkan para port yang dituju, atau mesin ternyata tidak ada? Berikut adalah apa yang akan terjadi pada kondisi tidak normal:
Mesin tidak mendengarkan pada TCP port yang di tuju: Jika mesin A berusaha menghubung mesin B pada TCP port yang mesin B tidak mendengarkan, maka mesin B akan meresponds dengan segmen TCP yang berisi bit RST dan bit ACK di set.
Mesin tidak mendengarkan para UDP port yang dituju: Jika mesin A berusaha menghubungi mesin B pada UDP port yang mesin B tidak mendengarkan, maka mesin B akan mengirimkan ICMP port unreachable ke mesin A.
Mesin tidak ada: Jika mesin A berusaha menghubungi mesin B dan ternyata mesin B tidak ada (misalnya IP address B tidak ada atau mesin B sedang down), maka router di subnet jaringan tempat mesin B akan mengirimkan berita ICMP host unreachable ke mesin A.