Komdat
Komdat
Komdat
M NIM : 201210370311300
Tugas 2 : Komunikasi Data TRANSMISSION CONTROL PROTOCOL DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION
1. PENDAHULUAN 1.1. Motivasi Sistem komunikasi komputer kini semakin penting peran dalam militer, pemerintahan, dan lingkungan sipil. Sebagai jaringan komunikasi komputer yang dikembangkan dan digunakan secara strategis dan taktis, sangatlah penting untuk menyediakan sarana interkoneksi antara mereka dan untuk memberikan standar interprocess protokol komunikasi yang dapat mendukung berbagai aplikasi. Dalam mengantisipasi kebutuhan untuk standar tersebut, Deputy Undersecretary of Defense for Research and Engineering memiliki Transmission Control Protocol (TCP) yang dijelaskan di sini untuk menjadi dasar protokol komunikasi DoD-wide inter-process standardisasi. TCP merupakan protokol berorientasi koneksi yang dapat diandalkan, end-to-end yang dirancang untuk masuk ke dalam hirarki berlapis protokol yang mendukung multi-network aplikasi. TCP didasarkan pada konsep pertama yang dideskripsikan oleh Cerf dan Kahn di [1]. TCP cocok menjadi arsitektur protokol berlapis di atas dasar Internet Protocol [2] yang memberikan suatu cara untuk TCP mengirim dan menerima segmen panjang- variabel informasi yang tertutup dalam internet datagram "amplop". internet protocol juga berkaitan dengan fragmentasi apapun atau reassembly segmen TCP diperlukan untuk mencapai transportasi dan pengiriman melalui beberapa jaringan dan gateway interkoneksi. Protokol internet juga membawa informasi yang diutamakan, klasifikasi keamanan dan compartmentation dari segmen TCP, sehingga informasi ini dapat dikomunikasikan end-to-end di beberapa jaringan.
Protocol Layering +---------------------+ | higher-level | +---------------------+ | TCP | +---------------------+ | internet protocol | +---------------------+ |communication network| +---------------------+ Figure 1
Sebagian besar dokumen ini ditulis dalam konteks implementasi TCP yang adalah co-penduduk dengan protokol tingkat yang lebih tinggi di host komputer. 1.2. Cakupan TCP dimaksudkan untuk menjadi protokol host-to-host umum digunakan dalam beberapa jaringan. 1.3. Tentang dokumen ini Dokumen ini merupakan spesifikasi dari perilaku yang diperlukan dari setiap implementasi TCP, baik dalam interaksinya dengan tingkat yang lebih tinggi protokol dan dalam interaksinya dengan TCP lainnya. 1.4. Interface TCP interface di satu sisi untuk pengguna atau proses aplikasi dan pada sisi lain ke tingkat yang lebih rendah seperti Internet Protocol. Interface antara proses aplikasi dan TCP diilustrasikan secara rinci. Interface ini terdiri dari satu set panggilan seperti panggilan sistem operasi menyediakan sebuah Proses aplikasi untuk memanipulasi file. Interface antara TCP dan protokol tingkat yang lebih rendah pada dasarnya adalah tidak ditentukan kecuali diasumsikan ada mekanisme dimana dua tingkat asynchronous dapat menyampaikan informasi satu sama lain. 1.5. Operation Untuk menyediakan layanan ini di sistem komunikasi membutuhkan fasilitas dalam bidang berikut: Basic Data Transfer Reliability Flow Control Multiplexing Connections Precedence and Security
Basic Data Transfer : TCP mampu mentransfer terus menerus arus di setiap octet antara pengguna dengan kemasan beberapa jumlah oktet ke segmen untuk transmisi melalui sistem internet. Reliability : TCP harus pulih dari data yang rusak, hilang, digandakan, atau disampaikan rusak oleh sistem komunikasi internet. Ini dapat dicapai dengan menetapkan nomor urut untuk setiap octet ditransmisikan, dan membutuhkan pengakuan positif (ACK) dari menerima TCP. Flow Control : TCP menyediakan sarana untuk menerima dan mengatur jumlah data yang dikirim oleh pengirim. Hal ini dicapai dengan kembali ke"window" dengan setiap ACK menunjukkan kisaran angka urutan yang diterima di luar segmen terakhir berhasil diterima. Multiplaxing : Untuk memungkinkan berbagai macam proses dalam Host tunggal menggunakan TCP fasilitas komunikasi yang secara bersamaan, TCP menyediakan satu set alamat atau port dalam setiap host. Digabungkan dengan jaringan dan alamat host dari lapisan komunikasi internet. Connections : Mekanisme kontrol keandalan dan aliran yang dijelaskan di atas memerlukan TCPs untuk menginisialisasi dan memelihara informasi status tertentu di setiap aliran data. Kombinasi informasi ini, termasuk sockets, nomor urut, dan ukuran window, yang disebut koneksi. Precedence and Security : Pengguna TCP dapat mengindikasikan keamanan dan meutamakan dari komunikasi mereka. Penyisihan dilakukan untuk nilai default yang akan digunakan saat fitur ini tidak diperlukan.
2. FILASOFI 2.1. Elemen dari Sistem Internetwork Lingkungan internetwork terdiri dari host yang terhubung ke jaringan yang pada akhirnya saling berhubungan melalui gateway. Diasumsikan di sini bahwa jaringan dapat berupa jaringan lokal (misalnya, ETHERNET) atau jaringan yang besar (misalnya, ARPANET), tetapi dalam hal apapun didasarkan pada packet switching teknologi. Istilah paket digunakan secara umum di sini berarti data dari satu transaksi antara host dan jaringan. Format blok data dipertukarkan dalam jaringan umumnya tidak akan menjadi perhatian kita. Host adalah komputer yang melekat ke jaringan, dan dari komunikasi jaringan titik pandang, adalah sumber dan tujuan paket. Proses dipandang sebagai elemen aktif dalam komputer host (Sesuai dengan definisi yang umum dari proses sebagai sebuah program dalam pelaksanaan). Bahkan terminals dan file atau perangkat lain I / O dianggap saling berkomunikasi melalui penggunaan proses. 2.2. Model Operasi Proses mengirimkan data dengan memanggil jaringan TCP dan melewati buffer data sebagai argumen. Paket-paket TCP data dari buffer ini ke dalam segmen dan memanggil modul internet untuk mengirimkan setiap segmen untuk tujuan TCP. Model komunikasi internet adalah bahwa ada modul internet protokol yang terkait dengan setiap TCP yang menyediakan interface ke jaringan lokal. Modul Paket Internet segmen TCP ini di dalam datagrams internet dan rute datagram ini untuk tujuan modul internet atau gateway menengah. Pada pintu gerbang antara jaringan, datagram internet "dibuka" dari paket lokal dan diteliti untuk menentukan melalui mana jaringan datagram internet berikutnya harus perjalanan. Internet datagram kemudian "dibungkus" ke dalam paket lokal sesuai dengan jaringan berikutnya dan diteruskan ke gateway berikutnya, atau ke tujuan akhir. Sebuah gateway diperbolehkan untuk memecah datagram internet menjadi lebih kecil jika hal ini diperlukan untuk transmisi melalui jaringan berikutnya. Untuk melakukan hal ini, gateway menghasilkan satu set datagrams internet, masing-masing membawa sebuah fragmen. Fragmen mungkin selanjutnya dipecah menjadi fragmen yang lebih kecil pada gateway berikutnya. Model sederhana Ini dari operasi glosses atas banyaknya detail. Satu Fitur penting adalah jenis layanan. Ini menyediakan informasi ke gateway (atau modul Internet) untuk memandu dalam memilih parameter layanan yang akan digunakan dalam melintasi jaringan berikutnya.
2.3. Lingkungan Host TCP diasumsikan modul dalam sistem operasi. Para pengguna mengakses TCP seperti mereka akan mengakses sistem file. TCP mungkin memanggil fungsi sistem operasi lain, misalnya, untuk mengelola struktur data. Mekanisme TCP tidak menghalangi pelaksanaan TCP dalam front-end processor. Namun, dalam pelaksanaan tersebut, seorang protokol host-to-front-end harus menyediakan fungsionalitas untuk mendukung jenis TCP-user interface yang dijelaskan dalam dokumen ini. 2.4. Interface TCP / user interface memberikan panggilan yang dibuat oleh pengguna pada TCP OPEN atau CLOSE suatu koneksi, untuk SEND atau RECEIVE data, atau untuk mendapatkan STATUS tentang sambungan. Panggilan ini seperti panggilan lain dari pengguna program pada sistem operasi, misalnya, panggilan untuk membuka, membaca dari, dan menutup file. TCP / internet menyediakan alat interface panggilan untuk mengirim dan menerima datagram ditujukan kepada modul TCP pada host mana saja di internet sistem. 2.5. Hubungan dengan Protokol lain Diagram berikut menggambarkan tempat dari TCP dalam hirarki protokol :
+------+ +-----+ +-----+ +-----+ |Telnet| | FTP | |Voice| ... | | Application Level +------+ +-----+ +-----+ +-----+ | | | | +-----+ +-----+ +-----+ | TCP | | RTP | ... | | Host Level +-----+ +-----+ +-----+ | | | +-------------------------------+ | Internet Protocol & ICMP | Gateway Level +-------------------------------+ | +---------------------------+ | Local Network Protocol | Network Level +---------------------------+ Protocol Relationships Figure 2.
Diharapkan bahwa TCP akan mampu mendukung tingkat yang lebih tinggi protokol efisien. Hal ini akan mudah untuk interface tingkat yang lebih tinggi protokol seperti ARPANET Telnet atau AUTODIN II THP ke TCP.
2.6. Komunikasi Handal Sebuah aliran data yang dikirim pada koneksi TCP disampaikan andal dan dalam agar di tempat tujuan. Transmisi dibuat handal melalui penggunaan nomor urut dan pengakuan. Secara konseptual, setiap oktet data yang diberikan nomor urut. Nomor urut dari oktet pertama dari data dalam segmen ditransmisikan dengan segmen itu dan disebut segmen nomor urut. Pengakuan oleh TCP tidak menjamin bahwa data telah dikirimkan ke pengguna akhir, tetapi hanya bahwa penerima TCP telah tanggung jawab untuk melakukannya. 2.7. Koneksi Establishment and Clearing Untuk mengidentifikasi aliran data terpisah TCP dapat menanganinya, TCP menyediakan identifier pelabuhan. Sejak pengidentifikasi pelabuhan yang dipilih mandiri oleh masing-masing TCP mereka mungkin tidak unik. Untuk menyediakan alamat unik dalam setiap TCP. Untuk menyediakan alamat unik dalam setiap TCP, kami menggabungkan alamat internet mengidentifikasi TCP dengan identifier pelabuhan untuk membuat soket yang akan menjadi unik di seluruh jaringan yang terhubung bersama-sama. TCP bebas untuk mengasosiasikan port dengan proses yang mereka pilih. Namun, beberapa konsep dasar diperlukan dalam setiap pelaksanaan. Harus ada sockets ternama yang asosiasi TCP dengan yang "sesuai" proses melalui beberapa cara. Sebuah koneksi ditentukan dalam panggilan OPEN oleh port lokal dan argumen soket asing. Sebagai imbalannya, TCP memasok (pendek) lokal nama koneksi dimana pengguna mengacu pada sambungan dalam panggilan berikutnya. Ada beberapa hal yang harus diingat tentang koneksi. Untuk menyimpan informasi ini kita membayangkan bahwa ada adalah struktur data yang disebut Transmission Control Block (TCB). Permintaan OPEN pasif berarti bahwa proses ingin menerima masuk permintaan sambungan daripada mencoba untuk memulai sambungan. Seringkali proses yang meminta OPEN pasif akan menerima koneksi permintaan dari setiap pemanggil. sockets dikenal sebagai mekanisme yang nyaman untuk sebuah priori mengasosiasikan alamat soket dengan standar pelayanan. Misalnya, "Telnet-Server" proses secara permanen ditugaskan untuk tertentu soket, dan soket lain yang disediakan untuk File Transfer, Remote Job Masuk, Text Generator, Echoer, dan Sink proses (tiga terakhir yang untuk tujuan pengujian). Sebuah alamat soket mungkin disediakan untuk akses ke "Dengar-Up" layanan yang akan kembali soket tertentu di mana layanan baru dibuat akan disediakan. Proses Open pasif dapat mengeluarkan dan menunggu untuk pencocokan Open aktif dari proses lainnya dan diinformasikan oleh TCP ketika koneksi memiliki telah didirikan. Dua proses yang mengeluarkan Open aktif untuk masing-masing lain pada saat yang sama akan terhubung dengan benar.
Ada dua kasus utama untuk pencocokan soket asing di Opens lokal pasif dan Opens aktif. Dalam kasus pertama, Opens lokal pasif telah sepenuhnya ditentukan soket asing. dalam hal ini kasus, harus sama persis. Dalam kasus kedua, Opens lokal pasif telah meninggalkan soket asing yang tidak ditentukan. Dalam hal ini, setiap soket asing dapat diterima asalkan soket local cocok. Jika ada beberapa yang tertunda Opens pasif (dicatat dalam TCBS) dengan soket lokal yang sama, OPEN asing yang aktif akan dicocokkan dengan TCB dengan soket asing tertentu di OPEN aktif asing, jika seperti TCB ada, sebelum memilih TCB dengan soket asing yang tidak ditentukan. Sebuah koneksi diprakarsai oleh pertemuan dari segmen yang tiba mengandung SYN dan entri dan setiap TCB menunggu yang diciptakan oleh pengguna perintah OPEN. Pencocokan sockets lokal dan asing menentukan ketika Koneksi telah dimulai. Pembersihan suatu koneksi juga melibatkan pertukaran segmen, dalam hal ini membawa bendera kontrol FIN. 2.8. Komunikasi Data Data yang mengalir pada suatu koneksi dapat dianggap sebagai aliran oktet. Pengirim pengguna menunjukkan di setiap panggilan SEND apakah data dalam panggilan itu (dan panggilan preceeding) harus segera mendorong melalui penerimaan pengguna dengan pengaturan bendera PUSH. Sebuah pengiriman TCP diperbolehkan untuk mengumpulkan data dari pengiriman dan mengirim data dalam segmen untuk kenyamanan sendiri, sampai push Fungsi ditandai, maka harus mengirim semua data yang terkirim. Ketika penerima TCP melihat bendera PUSH, tidak harus menunggu lebih banyak data dari pengirim TCP sebelum melewati data ke proses penerimaan. Tujuan dari fungsi mendorong dan bendera PUSH adalah untuk mendorong data melalui dari pengguna mengirim ke user penerima. Ini tidak memberikan layanan perekam. TCP juga menyediakan sarana untuk berkomunikasi dengan penerima data yang di beberapa titik lebih jauh dalam aliran data dari penerima sedangkan pembaca sedang ada data mendesak. TCP tidak berusaha untuk mendefinisikan apa yang user khusus tidak diberitahu ada Data tertunda, tetapi pendapat umum adalah bahwa proses penerimaan akan mengambil tindakan untuk memproses data dengan cepat mendesak. 2.9. Precedence dan Keamanan TCP memanfaatkan jenis protokol internet bidang pelayanan dan Opsi keamanan untuk memberikan diutamakan dan keamanan pada per sambungan dasar kepada pengguna TCP. TCP modul yang beroperasi dalam lingkungan yang aman bertingkat harus menandai segmen keluar dengan keamanan, kompartemen, dan diutamakan.
2.10. Robustness Prinsip Implementasi TCP akan mengikuti prinsip umum ketahanan: menjadi konservatif dalam apa yang Anda lakukan, menjadi liberal dalam apa yang Anda terima dari yang lain. 3. SPESIFIKASI FUNGSIONAL 3.1. Format Header Segmen TCP dikirim sebagai datagram internet. Internet Protocol Header membawa beberapa bidang informasi, termasuk sumber dan host tujuan alamat
TCP Header Format 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP Header Format Note that one tick mark represents one bit position. Figure 3.
Sumber Pelabuhan: 16 bit Nomor port sumber. Destination Port: 16 bit Nomor port tujuan. Sequence Number: 32 bit Nomor urut dari oktet data yang pertama di segmen ini (kecuali ketika SYN hadir). Jika SYN hadir nomor urutan adalah nomor urut awal (ISN) dan data pertama oktet ini ISN +1. Nomor Pengakuan: 32 bit Jika bit kontrol ACK diatur bidang ini berisi nilai dari nomor urut berikutnya pengirim segmen mengharapkan untuk terima. Setelah sambungan dibuat ini selalu dikirim.
Data Offset: 4 bit Jumlah 32 bit kata dalam header TCP. Ini menunjukkan di mana data dimulai. TCP header (bahkan satu termasuk opsi) adalah jumlah integral 32 bit panjang. Reserved: 6 bit Dicadangkan untuk penggunaan masa depan. Harus nol. Control Bits: 6 bits (from left to right): URG: Urgent Pointer field significant ACK: Acknowledgment field significant PSH: Push Function RST: Reset the connection SYN: Synchronize sequence numbers FIN: No more data from sender Window: 16 bit Jumlah oktet data yang diawali dengan salah satu tujuan dalam lapangan pengakuan yang pengirim segmen ini bersedia untuk menerima. Checksum: 16 bit Jika segmen berisi ganjil header dan teks oktet menjadi checksummed, oktet terakhir ini diisi di sebelah kanan dengan nol untuk membentuk sebuah kata 16 bit untuk tujuan checksum. Checksum juga mencakup 96 bit semu Header konseptual yang diawali ke header TCP. Header semu ini mengandung Sumber Alamat, Alamat tujuan, Protokol, dan panjang TCP.
+--------+--------+--------+--------+ | Source Address | +--------+--------+--------+--------+ | Destination Address | +--------+--------+--------+--------+ | zero | PTCL | TCP Length | +--------+--------+--------+--------+
TCP Panjang adalah panjang header TCP ditambah panjang data dalam oktet (ini bukan kuantitas eksplisit menular, tetapi dihitung), dan tidak menghitung 12 oktet pseudo Header. Urgent Pointer: 16 bit Bidang ini mengkomunikasikan nilai saat ini dari pointer mendesak sebagai offset positif dari nomor urut di segmen ini.
Pilihan: variabel Pilihan dapat menempati pada ruang akhir header TCP dan panjangnya merupakan kelipatan dari 8 bit. Ada dua kasus untuk format pilihan: Kasus 1: Sebuah octet tunggal opsi-kind. Kasus 2: Sebuah oktet opsi-kind, oktet opsi-panjang, dan oktet pilihan-data aktual. Sebuah TCP harus mengimplementasikan semua pilihan. Pilihan saat ini didefinisikan termasuk (jenis yang ditunjukkan dalam octal):
Kind ---0 1 2 Length -----4 Meaning -----End of option list. No-Operation. Maximum Segment Size.
Pilihan ini kode menunjukkan akhir dari daftar pilihan. Ini digunakan pada akhir semua pilihan, bukan akhir dari masing-masing pilihan, dan hanya perlu digunakan jika akhir pilihan tidak akan dinyatakan bertepatan dengan akhir TCP Header.
No-Operation +--------+ |00000001| +--------+ Kind=1
Pilihan ini kode dapat digunakan antara pilihan, misalnya, untuk menyelaraskan awal pilihan berikutnya pada batas kata.
Maximum Segment Size +--------+--------+---------+--------+ |00000010|00000100| max seg size | +--------+--------+---------+--------+ Kind=2 Length=4
Maximum Segment Size Option Data: 16 bits Jika opsi ini hadir, maka komunikasi secara maksimal menerima ukuran segmen pada TCP yang mengirimkan segmen ini. Padding: variabel Header TCP padding digunakan untuk memastikan bahwa header TCP berakhir dan data dimulai pada batas 32 bit. Padding terdiri dari nol.
3.2. Terminologi Diantara variabel yang disimpan dalam TCB adalah nomor soket lokal dan remote, keamanan dan didahulukan dari koneksi, pointer ke pengguna mengirim dan menerima buffer, pointer ke antrian retransmit dan segmen saat ini. Selain beberapa variabel yang berhubungan dengan mengirim dan menerima nomor urut akan disimpan dalam TCB tersebut.
Send Sequence Variables SND.UNA - send unacknowledged SND.NXT - send next SND.WND - send window SND.UP - send urgent pointer SND.WL1 - segment sequence number used for last window update SND.WL2 - segment acknowledgment number used for last window update ISS - initial send sequence number
Receive Sequence Variables RCV.NXT - receive next RCV.WND - receive window RCV.UP - receive urgent pointer IRS - initial receive sequence number
Diagram berikut dapat membantu untuk menghubungkan beberapa variabel tersebut untuk ruang berurutan.
Send Sequence Space 1 2 3 4 ----------|----------|----------|--------SND.UNA SND.NXT SND.UNA 1 2 3 4 +SND.WND old sequence numbers which have been acknowledged sequence numbers of unacknowledged data sequence numbers allowed for new data transmission future sequence numbers which are not yet allowed Send Sequence Space Figure 4.
Receive Sequence Space 1 2 3 ----------|----------|--------RCV.NXT RCV.NXT +RCV.WND 1 - old sequence numbers which have been acknowledged 2 - sequence numbers allowed for new reception 3 - future sequence numbers which are not yet allowed Receive Sequence Space Figure 5.
Jendela pengirim adalah bagian dari ruang barisan berlabel 3 di figure 5. Ada juga beberapa variabel yang sering digunakan dalam diskusi yang mengambil nilai-nilai mereka dari bidang segmen kali ini.
Current SEG.SEQ SEG.ACK SEG.LEN SEG.WND SEG.UP SEG.PRC Segment Variables - segment sequence number - segment acknowledgment number - segment length - segment window - segment urgent pointer - segment precedence value
Sambungan berlangsung melalui serangkaian bagian, bagian-bagian tersebut adalah: LISTEN, SYN-SENT, SYN-DITERIMA, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LASTACK, TIME-WAIT, dan bagian fiksi CLOSED. LISTEN - mewakili menunggu permintaan sambungan dari setiap terpencil TCP dan port. SYN-SENT - mewakili menunggu permintaan koneksi pencocokan setelah mengirim permintaan sambungan. SYN-DITERIMA - mewakili menunggu koneksi mengkonfirmasikan permintaan pengakuan setelah keduanya menerima dan mengirim permintaan koneksi. ESTABLISHED - mewakili koneksi terbuka, data yang diterima dapat disampaikan kepada pengguna. Keadaan normal untuk fase transfer data dari koneksi. FIN-WAIT-1 - mewakili menunggu permintaan pemutusan koneksi dari remote TCP, atau pengakuan dari koneksi permintaan penghentian dikirim sebelumnya. FIN-WAIT-2 - mewakili menunggu permintaan pemutusan koneksi dari remote TCP. CLOSE-WAIT - mewakili menunggu permintaan pemutusan koneksi dari pengguna lokal. CLOSING - mewakili menunggu permintaan pemutusan koneksi pengakuan dari remote TCP. LAST-ACK - mewakili menunggu pengakuan dari permintaan penghentian koneksi sebelumnya dikirim ke remote TCP (yang mencakup pengakuan pemutusan sambungan permintaan). TIME-WAIT - mewakili menunggu waktu yang cukup untuk lulus untuk memastikan remote TCP menerima pengakuan dari sambungan permintaan penghentian. CLOSED - mewakili state tidak hubungannya sama sekali.
Diagram bagian pada gambar 6 menggambarkan hanya perubahan bagian, bersama-sama dengan peristiwa yang menyebabkan dan menghasilkan tindakan, tapi alamat tidak kondisi kesalahan atau tindakan yang tidak terhubung dengan bagian perubahan. Pada bagian selanjutnya, lebih detail ditawarkan sehubungan dengan reaksi TCP untuk acara.
+---------+ ---------\ | CLOSED | \ +---------+<---------\ \ | passive OPEN | ------------ | create TCB | V ^ | CLOSE \ \ \ \
+---------+ | LISTEN |
CLOSE
snd SYN
------------------>| |
|<-----------------------------------------------| | |-----------------rcv ACK of SYN -------------x \ | | V | | V / snd ACK | -------------------| rcv SYN,ACK ---------snd ACK
+---------+ | | | | CLOSE
+---------+
+---------+ | ESTAB |
------------------>| |
| WAIT-1
+---------+ CLOSE |
+---------+ +---------+ +---------+ |FINWAIT-2| | CLOSING | | LAST-ACK| +---------+ +---------+ +---------+ | rcv ACK of FIN | rcv ACK of FIN | | rcv FIN -------------- | Timeout=2MSL -------------- | | ------x V -----------x V \ snd ACK +---------+delete TCB +---------+ ------------------------>|TIME WAIT|------------------>| CLOSED | +---------+ +---------+ TCP Connection State Diagram
Figure 6.
3.3. Nomor Urut Sebuah gagasan mendasar dalam desain adalah bahwa setiap oktet data yang dikirim melalui koneksi TCP memiliki nomor urut. Karena setiap octet sequencing, masing-masing dapat diakui. Penomoran octet dalam segmen adalah bahwa oktet pertama data segera setelah header adalah bernomor terendah, dan oktet berikut nomor urut. Sangat penting untuk diingat bahwa ruang nomor urutan yang sebenarnya terbatas, meskipun sangat besar. Ruang ini berkisar 0-2 ** 32-1. Karena ruang terbatas, semua aritmatika yang berhubungan dengan urutan nomor harus dilakukan Modulo 2 ** 32. Ini unsigned aritmatika mempertahankan hubungan nomor urut karena siklus dari 2 ** 32 - 1 to 0 lagi. Jenis-jenis ciri khas perbandingan nomor urut yang harus TCP melakukan meliputi: (a) Menentukan bahwa sebuah pengakuan merujuk pada beberapa urutan Jumlah dikirim tetapi belum diakui. (b) Menentukan bahwa semua nomor urut diduduki oleh segmen telah diakui (misalnya, untuk menghapus segmen dari antrian retransmisi). (c) Menentukan bahwa segmen yang masuk berisi nomor urut yang diharapkan (yaitu, bahwa segmen "tumpang tindih" yang menerima window). Dalam menanggapi pengiriman data TCP akan menerima ucapan terima kasih. Perbandingan berikut ini diperlukan untuk memproses pengakuan. SND.UNA = tertua nomor urut diakui SND.NXT = nomor urut berikutnya yang akan dikirim SEG.ACK = pengakuan dari penerima TCP (urutan berikutnya jumlah yang diharapkan oleh penerima TCP) SEG.SEQ = nomor urut pertama segmen SEG.LEN = jumlah oktet ditempati oleh data dalam segmen (menghitung SYN dan FIN) SEG.SEQ + SEG.LEN-1 = terakhir nomor urutan segmen Segmen pada antrian retransmisi sepenuhnya diakui jika jumlah dari nomor urut dan panjang kurang atau sama dengan nilai acknowledgement di segmen masuk. Ketika data diterima diperlukan perbandingan berikut ini: RCV.NXT = nomor urut berikutnya diharapkan pada segmen yang masuk, dan adalah tepi kiri atau bawah jendela receive RCV.NXT + RCV.WND-1 = terakhir nomor urut diharapkan pada masuk segmen, dan tepi kanan atau atas dari jendela penerimaan SEG.SEQ = nomor urut pertama ditempati oleh segmen masuk SEG.SEQ + SEG.LEN-1 = nomor urut terakhir ditempati oleh masuk ruas
Sebuah segmen yang dinilai menempati sebagian dari urutan receive valid ruang jika : RCV.NXT = <SEG.SEQ <RCV.NXT + RCV.WND atau RCV.NXT = <SEG.SEQ + SEG.LEN-1 <RCV.NXT + RCV.WND Segmen Menerima Uji panjang Jendela -------------------------------------------------- ------0 0 SEG.SEQ = RCV.NXT 0> 0 RCV.NXT = <SEG.SEQ <RCV.NXT + RCV.WND > 0 0 tidak dapat diterima > 0> 0 RCV.NXT = <SEG.SEQ <RCV.NXT + RCV.WND atau RCV.NXT = <SEG.SEQ + SEG.LEN-1 <RCV.NXT + RCV.WND Perhatikan bahwa ketika jendela penerimaan adalah nol tidak ada segmen harus diterima kecuali segmen ACK. Jadi, adalah mungkin untuk TCP mempertahankan nol menerima jendela sementara transmisi data dan menerima ACK. Namun, bahkan ketika jendela penerimaan adalah nol, TCP harus proses RST dan bidang URG dari semua segmen yang masuk. Sequence Number Seleksi Awal Protokol tidak menentukan batasan pada koneksi tertentu yang sedang digunakan berulangulang. Sambungan didefinisikan oleh sepasang soket. Kasus baru dari koneksi akan disebut sebagai inkarnasi dari koneksi. Untuk menghindari kebingungan kita harus mencegah segmen dari satu inkarnasi dari sambungan dari yang digunakan saat nomor urut yang sama mungkin masih akan hadir di jaringan dari inkarnasi sebelumnya. Ketika koneksi baru diciptakan, nomor urutan (ISN) Generator awal bekerja yang memilih 32 bit ISN. Generator terikat dengan (mungkin fiktif) 32 Jam bit yang rendah urutan bit bertambah kira-kira setiap 4 mikrodetik. Dengan demikian, siklus ISN kira-kira setiap 4,55 jam. Bagi koneksi yang akan ditetapkan atau diinisialisasi, dua TCP harus melakukan sinkronisasi pada nomor urut awal masing-masing. Hal ini dilakukan dalam pertukaran koneksi membentuk segmen membawa sedikit control disebut "SYN" (untuk sinkronisasi) dan nomor urut awal. Sebagai singkatan, segmen membawa bit SYN juga disebut "SYNs". Sinkronisasi mengharuskan setiap sisi untuk mengirim awal yang itu sendiri adalah nomor urut dan untuk menerima konfirmasi dalam acknowledgement dari sisi lain.
1) 2) 3) 4) A A A A --> <-<---> B B B B SYN ACK SYN ACK my sequence number is X your sequence number is X my sequence number is Y your sequence number is Y
Sebuah cara jabat tangan tiga diperlukan karena nomor urut tidak terkait dengan jam global dalam jaringan, dan TCP mungkin memiliki berbeda mekanisme untuk memilih ISN itu. Mengetahui Kapan Tetap Tenang Untuk memastikan bahwa TCP tidak membuat segmen yang membawa nomor urut yang dapat diduplikasi oleh segmen tua yang tersisa di jaringan, TCP harus tetap tenang untuk seumur hidup maksimum segmen (MSL) sebelum menugaskan setiap nomor urut setelah memulai atau pulih dari kecelakaan di mana memori nomor urut yang digunakan adalah hilang. TCP Quiet Konsep Waktu Spesifikasi ini menyatakan bahwa host yang "kecelakaan" tanpa mempertahankan pengetahuan tentang nomor urut terakhir ditransmisikan pada masing aktif (yaitu, tidak tertutup) koneksi akan menunda memancarkan apapun Segmen TCP untuk setidaknya disepakati Maksimum Lifetime Segmen (MSL) dalam sistem internet yang host adalah bagian. Dalam kondisi normal, TCP melacak nomor urutan berikutnya untuk memancarkan dan menunggu acknowledgement tertua sehingga untuk menghindari kekeliruan menggunakan nomor urut atas sebelum digunakan pertama memiliki telah diakui. Ini saja tidak menjamin bahwa duplikat tua Data dikeringkan dari internet, sehingga ruang rangkaian telah dilakukan sangat besar untuk mengurangi probabilitas bahwa duplikat berkeliaran akan menimbulkan masalah pada saat kedatangan. Pada 2 megabit / detik. dibutuhkan 4,5 jam untuk menggunakan sampai 2 ** 32 oktet ruang barisan. Karena segmen maksimum seumur hidup dalam jaring tidak mungkin melebihi beberapa puluh detik, ini dianggap perlindungan yang cukup untuk jaring mendatang, bahkan jika data yang tarif meningkat untuk l0 tentang megabit / detik. Pada 100 megabit / detik, waktu siklus adalah 5,4 menit yang mungkin sedikit pendek, tapi masih dalam alasan. Dasar duplikat deteksi dan algoritma sequencing di TCP dapat dikalahkan, namun, jika sumber TCP tidak memiliki memori nomor urut yang terakhir digunakan pada koneksi yang diberikan. Sebagai contoh, jika TCP adalah untuk memulai semua koneksi dengan urutan angka 0, maka setelah menabrak dan restart, TCP akan kembali membentuk sebelumnya koneksi (mungkin setelah resolusi koneksi setengah terbuka) dan memancarkan paket dengan nomor urut identik dengan atau tumpang tindih dengan paket masih dalam jaringan yang dipancarkan pada awal inkarnasi dari koneksi yang sama. Bahkan host yang dapat ingat kapan waktu dan menggunakannya untuk memilih nilai nomor urut awal tidak bisa lepas dari masalah ini (yaitu, bahkan jika waktu hari digunakan untuk memilih urutan awal nomor untuk setiap inkarnasi sambungan baru).
Salah satu cara mengatasi masalah ini adalah dengan sengaja menunda memancarkan segmen untuk satu MSL setelah sembuh dari kecelakaan-ini adalah "cukup waktu "spesifikasi. Host yang lebih memilih untuk menghindari menunggu adalah bersedia mengambil risiko kebingungan kemungkinan paket lama dan baru di diberikan tujuan dapat memilih untuk tidak menunggu "cukup waktu". Untuk meringkas: setiap segmen dipancarkan menempati satu atau lebih urutan nomor dalam ruang barisan, nomor diduduki oleh segmen adalah "sibuk" atau "digunakan" sampai MSL detik telah berlalu, setelah menabrak sebuah blok ruang-waktu ditempati oleh oktet yang terakhir dipancarkan segmen, jika koneksi baru dimulai terlalu cepat dan menggunakan salah satu nomor urut dalam jejak ruang-waktu dari segmen terakhir dari inkarnasi koneksi sebelumnya, ada urutan potensial Sejumlah daerah overlap yang dapat menyebabkan kebingungan pada penerima. 3.4. Membuang Koneksi "Three-way handshake" adalah prosedur yang digunakan untuk membangun koneksi. Prosedur ini biasanya dimulai oleh salah satu TCP dan ditanggapi oleh yang lain TCP. Prosedur ini juga bekerja jika dua TCP bersamaan memulai prosedur. Three-way handshake mengurangi kemungkinan koneksi palsu. Ini adalah implementasi dari trade-off antara memori dan pesan untuk memberikan Informasi untuk pemeriksaan ini. Yang paling sederhana three-way handshake ditunjukkan pada gambar 7 di bawah ini.
1. 2. 3. 4. 5. TCP A CLOSED SYN-SENT --> ESTABLISHED <-ESTABLISHED --> ESTABLISHED --> Basic 3-Way TCP B LISTEN <SEQ=100><CTL=SYN> --> SYN-RECEIVED <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED Handshake for Connection Synchronization Figure 7.
Pada baris 2 dari gambar 7, TCP A dimulai dengan mengirimkan segmen SYN menunjukkan bahwa ia akan menggunakan nomor urut dimulai dengan urutan nomor 100. baris 3, TCP B mengirimkan SYN dan mengakui SYN itu diterima dari TCP A. Perhatikan bahwa bidang pengakuan menunjukkan TCP B sekarang mengharapkan untuk mendengar urutan 101, mengakui SYN yang diduduki urutan 100. Pada baris 4, TCP A merespon dengan segmen kosong yang berisi ACK untuk TCP B SYN, dan di baris 5, TCP A mengirimkan beberapa data. Perhatikan bahwa nomor urutan segmen sejalan 5 adalah sama seperti di baris 4 karena ACK tidak menempati ruang nomor urut (jika itu terjadi, kita akan berakhir acking ACK itu).
Inisiasi simultan hanya sedikit lebih kompleks, seperti yang ditunjukkan pada gambar 8.
1. 2. 3. 4. 5. 6. 7.
TCP A TCP B CLOSED CLOSED SYN-SENT --> <SEQ=100><CTL=SYN> ... SYN-RECEIVED <-- <SEQ=300><CTL=SYN> <-- SYN-SENT ... <SEQ=100><CTL=SYN> --> SYN-RECEIVED SYN-RECEIVED --> <SEQ=100><ACK=301><CTL=SYN,ACK> ... ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED ... <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED Simultaneous Connection Synchronization Figure 8.
Alasan prinsip untuk Three-way handshake adalah untuk mencegah duplikat inisiasi koneksi dari menyebabkan kebingungan. Untuk menghadapi ini, pesan kontrol khusus, reset, telah dirancang. kasus yang sedang terkoneksi "half-open" di bawah ini.
1. 2. 3. 4. 5. 6. 7. 8. TCP A CLOSED SYN-SENT (duplicate) SYN-SENT SYN-SENT TCP B LISTEN
--> <SEQ=100><CTL=SYN> ... ... <SEQ=90><CTL=SYN> --> SYN-RECEIVED <-- <SEQ=300><ACK=91><CTL=SYN,ACK> <-- SYN-RECEIVED --> <SEQ=91><CTL=RST> --> LISTEN ... <SEQ=100><CTL=SYN> --> SYN-RECEIVED SYN-SENT <-- <SEQ=400><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED ESTABLISHED --> <SEQ=101><ACK=401><CTL=ACK> --> ESTABLISHED Recovery from Old Duplicate SYN Figure 9.
Half-Open Koneksi dan Anomali Lain Koneksi didirikan dikatakan "setengah terbuka" jika salah satu TCP telah ditutup atau dibatalkan sambungan di ujungnya tanpa pengetahuan yang lain, atau jika kedua ujung sambungan harus menjadi desynchronized karena kecelakaan yang mengakibatkan hilangnya memori. Sambungan tersebut secara otomatis akan menjadi ulang jika upaya dilakukan untuk mengirim data di kedua arah. Jika di situs Sambungan tidak ada lagi, maka upaya oleh pengguna di situs B untuk mengirim data apapun di atasnya akan mengakibatkan situs B TCP menerima pesan kontrol ulang.
Asumsikan bahwa dua proses pengguna A dan B berkomunikasi dengan satu sama lain ketika kecelakaan terjadi menyebabkan hilangnya memori untuk A TCP. Tergantung pada sistem operasi yang mendukung A TCP, kemungkinan bahwa beberapa mekanisme pemulihan kesalahan ada. Ketika TCP lagi, A kemungkinan untuk memulai lagi dari awal atau dari pemulihan titik. Akibatnya, A mungkin akan mencoba untuk OPEN koneksi lagi atau mencoba untuk KIRIM pada sambungan yang dianggap terbuka. Setelah TCP A crash, pengguna mencoba untuk kembali membuka koneksi. TCP B, sementara itu, berpikir sambungan tersebut terbuka.
1. 2. 3. 4. 5. 6. 7. TCP A (CRASH) CLOSED SYN-SENT (!!) SYN-SENT SYN-SENT SYN-SENT TCP B (send 300,receive 100) ESTABLISHED <SEQ=400><CTL=SYN> --> (??) <SEQ=300><ACK=100><CTL=ACK> <-- ESTABLISHED <SEQ=100><CTL=RST> --> (Abort!!) CLOSED <SEQ=400><CTL=SYN> --> Half-Open Connection Discovery Figure 10.
Ketika SYN tiba di jalur 3, TCP B, berada dalam keadaan sinkron, dan segmen yang masuk di luar jendela, merespon dengan pengakuan yang menunjukkan apa urutan di samping mengharapkan untuk mendengar (ACK100). TCP A melihat bahwa segmen ini tidak mengakui apa pun yang dikirim dan, yang tidak sinkron, mengirimkan reset (RST) karena memiliki mendeteksi koneksi setengah terbuka. TCP B dibatalkan pada baris 5. TCP A akan terus berusaha untuk membuat sambungan, masalahnya sekarang dikurangi menjadi dasar 3-way handshake tokoh 7. Kasus alternatif yang menarik terjadi ketika TCP A crash dan TCP B mencoba untuk mengirim data tentang apa yang dianggapnya adalah koneksi disinkronisasi. Hal ini diilustrasikan pada Gambar 11.
1. 2. 3.
TCP A TCP B (CRASH) (send 300,receive 100) (??) <-- <SEQ=300><ACK=100><DATA=10><CTL=ACK> <-- ESTABLISHED --> <SEQ=100><CTL=RST> --> (ABORT!!) Active Side Causes Half-Open Connection Discovery Figure 11.
Pada gambar 12, kita menemukan dua TCP A dan B dengan koneksi pasif menunggu SYN.
1. 2. 3. 4. 5. TCP A TCP B LISTEN LISTEN ... <SEQ=Z><CTL=SYN> --> SYN-RECEIVED (??) <-- <SEQ=X><ACK=Z+1><CTL=SYN,ACK> <-- SYN-RECEIVED --> <SEQ=Z+1><CTL=RST> --> (return to LISTEN!) LISTEN LISTEN Old Duplicate SYN Initiates a Reset on two Passive Sockets Figure 12.
Reset Generation Sebagai aturan umum, reset (RST) harus dikirim setiap kali segmen tiba yang tampaknya tidak dimaksudkan untuk sambungan saat ini. ulang A tidak harus dikirim jika tidak jelas bahwa hal ini terjadi. Ada tiga kelompok states: 1. Jika koneksi tidak ada (CLOSED) maka reset dikirim dalam menanggapi setiap segmen masuk kecuali ulang lain. Di tertentu, SYNs ditujukan kepada koneksi tidak ada yang ditolak dengan cara ini. 2. Jika sambungan di setiap state non-disinkronkan (DENGARKAN, SYN-SENT, SYN-DITERIMA), dan segmen yang masuk mengakui sesuatu yang belum dikirim (segmen membawa ACK diterima), atau jika segmen masuk memiliki tingkat keamanan atau kompartemen yang tidak sama persis dengan tingkat dan kompartemen diminta untuk koneksi, reset dikirim. 3. Jika sambungan dalam keadaan disinkronisasi (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSEWAIT, PENUTUP, TERAKHIR-ACK, WAKTU-WAIT), setiap segmen dapat diterima (dari nomor urut jendela atau jumlah pengakuan unacceptible) harus memperoleh hanya kosong Segmen pengakuan berisi nomor send-urutan saat ini dan pengakuan menunjukkan nomor urutan berikutnya diharapkan yang akan diterima, dan koneksi tetap di states yang sama. Pengolahan ulang Di semua states kecuali SYN-SENT, semua reset (RST) segmen divalidasi dengan memeriksa SEQladang mereka. Ulang adalah sah jika nomor urut yangdalam jendela. Di state SYN-SENT (RST diterima dalam menanggapi ke SYN awal), RST dapat diterima jika bidang ACK mengakui SYN. 3.5. Penutup Koneksi Pada dasarnya terdapat tiga kasus: 1) Pengguna memulai dengan mengatakan TCP untuk CLOSE sambungan tersebut 2) Remote TCP memulai dengan mengirimkan sinyal kontrol FIN 3) Kedua pengguna CLOSE bersamaan Kasus 1: Local user initiates the close Dalam kasus ini, segmen FIN dapat dibangun dan ditempatkan pada keluar segmen antrian. Tidak mengirimkan lebih lanjut dari pengguna akan diterima oleh TCP, dan memasuki FIN-WAIT1 state.
Kasus 2: TCP receives a FIN from the network Jika FIN tidak diminta datang dari jaringan, penerima TCP bisa ACK dan memberitahu pengguna bahwa sambungan menutup. Itu pengguna akan merespon dengan suatu CLOSE, yang di atasnya TCP dapat mengirim FIN ke TCP lainnya setelah mengirim data yang tersisa. TCP kemudian menunggu sampai FIN sendiri diakui dimana akan menghapus koneksi. Jika ACK tidak akan datang, setelah batas waktu pengguna sambungan tersebut dibatalkan dan pengguna iceritakan. Kasus 3: both users close simultaneously Ketika semua segmen sebelum sirip telah diproses dan diakui, masing-masing TCP dapat ACK FIN itu telah menerima. Keduanya akan, setelah menerima ACK ini, hapus koneksi.
1. 2. 3. 4. 5. 6.
TCP A ESTABLISHED (Close) FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> FIN-WAIT-2 <-- <SEQ=300><ACK=101><CTL=ACK> TIME-WAIT TIME-WAIT (2 MSL) CLOSED <-- <SEQ=300><ACK=101><CTL=FIN,ACK> --> <SEQ=101><ACK=301><CTL=ACK> Normal Close Sequence Figure 13.
TCP B ESTABLISHED --> CLOSE-WAIT <-- CLOSE-WAIT (Close) <-- LAST-ACK --> CLOSED
1. 2.
3. 4.
TCP A ESTABLISHED (Close) FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> ... <-- <SEQ=300><ACK=100><CTL=FIN,ACK> <... <SEQ=100><ACK=300><CTL=FIN,ACK> --> CLOSING --> <SEQ=101><ACK=301><CTL=ACK> ... <-- <SEQ=301><ACK=101><CTL=ACK> <... <SEQ=101><ACK=301><CTL=ACK> --> TIME-WAIT (2 MSL) CLOSED Simultaneous Close Sequence Figure 14.
3.6. Precedence dan Keamanan Tujuannya adalah koneksi diperbolehkan hanya antara port operasi dengan tepat keamanan yang sama dan nilai-nilai kompartemen dan pada lebih tinggi dari tingkat didahulukan diminta oleh dua port. Sebuah usaha koneksi dengan keamanan / kompartemen nilai serasi atau nilai diutamakan rendah harus ditolak dengan mengirimkan ulang. Menolak koneksi karena terlalu rendah diutamakan hanya terjadi setelah pengakuan SYN telah diterima. Perhatikan bahwa modul TCP yang beroperasi hanya pada nilai default diutamakan masih harus memeriksa mendahului masuk segmen dan mungkin meningkatkan tingkat diutamakan mereka gunakan pada koneksi. Paramaters keamanan dapat digunakan bahkan di lingkungan tidak-aman (nilai akan menunjukkan data yang unclassified), sehingga host di lingkungan non-aman harus siap untuk menerima keamanan parameter, meskipun mereka tidak perlu mengirim mereka. 3.7. Komunikasi Data Data Setelah sambungan dibuat dikomunikasikan oleh pertukaran segmen. Karena segmen mungkin hilang karena kesalahan (kegagalan uji checksum), atau kemacetan jaringan, TCP menggunakan retransmisi (setelah batas waktu) untuk memastikan pengiriman setiap segmen. Segmen duplikat mungkin tiba karena jaringan atau TCP retransmission. Pengirim data melacak nomor urutan berikutnya untuk digunakan dalam variabel SND.NXT. Penerima data melacak berikutnya nomor urut yang diharapkan dalam RCV.NXT variabel. Pengirim data melacak tertua nomor urut diakui dalam variabel SND.UNA. Ketika pengirim menciptakan segmen dan mengirimkan kemajuan pengirimSND.NXT. Setelah penerima menerima segmen itu kemajuan dan RCV.NXT mengirimkan sebuah pengakuan. Ketika pengirim data yang menerima pengakuan itu kemajuan SND.UNA. retransmisi Timeout Karena variabilitas dari jaringan yang membentuk sebuah sistem internetwork dan berbagai keperluan koneksi TCP timeout pengiriman ulang harus dinamis ditentukan. Contoh Retransmisi Prosedur Timeout SRTT = (ALPHA * SRTT) + ((1-ALPHA) * RTT) dan berdasarkan ini, menghitung retransmission timeout (RTO) sebagai: RTO = min [UBound, max [LBOUND, (BETA * SRTT)]]
di mana UBound adalah batas atas batas waktu (misalnya, 1 menit), LBOUND adalah batas bawah pada batas waktu (misalnya, 1 detik), ALPHA adalah faktor smoothing (misalnya, 0,8-0,9), dan BETA adalah varians penundaan Faktor (misalnya, 1,3-2,0). 3.8. Interface Tentu saja ada dua interface menjadi perhatian : user / interface TCP dan interface TCP / tingkat rendah. Kami memiliki model yang cukup rumit dari user / interface TCP , tetapi interface ke tingkat yang lebih rendah Modul protokol yang tersisa tidak ditentukan di sini, karena akan ditentukan secara rinci dengan spesifikasi protokol tingkat rendah. Untuk tingkat yang lebih rendah adalah IP kami mencatat beberapa nilai parameter yang mungkin menggunakan TCP . 3.9. Pengolahan Acara Pengolahan digambarkan dalam bagian ini adalah contoh dari satu kemungkinan implementasi. Implementasi lain mungkin memiliki sedikit pengolahan urutan berbeda, tetapi mereka harus berbeda yang dalam hal ini hanya Bagian secara rinci , tidak dalam substansi . Peristiwa yang terjadi : Panggilan pengguna BUKA SENT MENERIMA TUTUP ABORT STATUS tiba Segmen SEGMEN TIBA timeout PENGGUNA TIMEOUT timeout pengiriman ulang WAKTU - WAIT TIMEOUT Model TCP / user interface adalah bahwa perintah pengguna menerima segera kembali dan mungkin respon tertunda melalui suatu peristiwa atau interupsi semu . Dalam uraian berikut , Istilah "sinyal " berarti menimbulkan respon tertunda . Tanggapan Kesalahan diberikan sebagai karakter string. Sebagai contoh, pengguna koneksi referensi perintah yang tidak ada menerima " error: sambungan tidak terbuka " . Ketika segmen tumpang tindih sudah menerima segmen kita segmen merekonstruksi untuk mengisi data baru , dan menyesuaikan field header untuk konsisten . Perhatikan bahwa jika tidak ada perubahan state yang disebutkan TCP tetap di sama state.
Panggilan dibuka Jika penelepon tidak memiliki akses ke soket lokal ditentukan , kembali " error: sambungan ilegal untuk proses ini " . Jika ada tidak ada ruang untuk membuat koneksi , kembali " kesalahan baru : sumber daya cukup " . Jika aktif dan soket asing yang ditentukan, kemudian mengubah sambungan dari pasif menjadi aktif , pilih ISS . SENT segmen SYN, mengatur SND.UNA ke ISS , SND.NXT ke ISS +1 . Masukkan SYN SENT state. Data yang terkait dengan SENT dapat dikirimkan dengan segmen SYN atau antri untuk transmisi setelah memasuki state ESTABLISHED . bit itu mendesak jika diminta dalam perintah harus dikirim dengan data segmen dikirim sebagai hasil dari perintah ini . Jika tidak ada ruang untuk antrian permintaan , merespon dengan "kesalahan : sumber daya yang memadai " . Jika soket asing tidak ditentukan , kemudian kembali " error: soket asing yang tidak ditentukan " . Panggilan terkirim Jika pengguna tidak memiliki akses ke koneksi tersebut , kemudian kembali " error: sambungan ilegal untuk proses ini " .Jika tidak, kembali " error: koneksi tidak ada " . Jika soket asing yang ditentukan, maka mengubah sambungan dari pasif menjadi aktif , pilih ISS . SENT segmen SYN , mengatur SND.UNA ke ISS , SND.NXT ke ISS +1 . Masukkan SYN - SENT state. Data terkait dengan SENT dapat dikirimkan dengan segmen SYN atau antri untuk transmisi setelah memasuki state ESTABLISHED . The mendesak bit jika diminta dalam perintah harus dikirim dengan segmen data yang dikirim sebagai hasil dari perintah ini . Jika tidak ada ruang untuk antrian meminta , merespon dengan "kesalahan : sumber daya yang memadai " . jika Soket asing tidak ditentukan , kemudian kembali " error: soket asing yang tidak ditentukan " . MENERIMA Panggilan Jika pengguna tidak memiliki akses ke koneksi tersebut , kembali " error: sambungan ilegal untuk proses ini " . Jika tidak kembali " error: koneksi tidak ada " . Antrian untuk memproses setelah memasuki state ESTABLISHED . Jika ada adalah tidak ada ruang untuk antrian permintaan ini , merespon dengan " error: sumber daya yang memadai " . TUTUP Panggilan Jika pengguna tidak memiliki akses ke koneksi tersebut , kembali " error: sambungan ilegal untuk proses ini " . Jika tidak, kembali " error: koneksi tidak ada " . Setiap menerima beredar kembali dengan " error: penutupan " tanggapan . Hapus TCB , masukkan status CLOSED , dan kembali . batalkan Panggilan Jika pengguna tidak harus memiliki akses ke koneksi tersebut , kembali " error: sambungan ilegal untuk proses ini " . Jika tidak kembali " error: koneksi tidak ada " . Setiap menerima beredar harus dikembalikan dengan " error: koneksi ulang " tanggapan . Hapus TCB , masukkan status CLOSED , dan kembali . STATUS Panggilan Jika pengguna tidak harus memiliki akses ke koneksi tersebut , kembali " error: sambungan ilegal untuk proses ini " . Jika tidak kembali " error: koneksi tidak ada " .
SEGMEN TIBA Jika state is CLOSED (yaitu , TCB tidak ada ) maka semua data di segmen yang masuk akan dibuang . sebuah masuk Segmen yang mengandung RST dibuang . Sebuah segmen masuk tidak mengandung RST menyebabkan RST yang akan dikirim dalam respon . nilai bidang pengakuan dan urutan yang dipilih untuk membuat urutan ulang yang diterima oleh TCP yang dikirim yang menyinggung segmen. Segmen diproses secara berurutan . Tes awal pada saat kedatangan digunakan untuk membuang duplikat tua , tetapi pengolahan lebih lanjut dilakukan dalam rangka SEG.SEQ . Jika isi suatu segmen mengangkang batas antara lama dan baru , hanya bagian-bagian baru harus diproses . Ada empat kasus untuk uji penerimaan untuk masuk segmen : Segmen Menerima Uji panjang Jendela -------------------------------------------------- ------0 0 SEG.SEQ = RCV.NXT 0 > 0 RCV.NXT = < SEG.SEQ < RCV.NXT + RCV.WND > 0 0 tidak dapat diterima > 0 > 0 RCV.NXT = < SEG.SEQ < RCV.NXT + RCV.WND atau RCV.NXT = < SEG.SEQ + SEG.LEN - 1 < RCV.NXT + RCV.WND Jika RCV.WND adalah nol , tidak ada segmen akan diterima , namun tunjangan khusus harus dibuat untuk menerima ACK valid, dan URGs RSTS . Jika segmen yang masuk tidak dapat diterima , pengakuan harus dikirim dalam balasan ( kecuali bit RST diset , jika demikian penurunan segmen dan pulang) : <SEQ=SND.NXT> <ACK=RCV.NXT> <CTL=ACK> Setelah mengirim pengakuan , drop segmen tidak dapat diterima dan kembali . SEGMEN TIBA Berikut ini diasumsikan bahwa segmen adalah ideal segmen yang dimulai di RCV.NXT dan tidak melebihi jendela. Satu bisa segmen aktual penjahit sesuai asumsi ini dengan pemangkasan dari setiap bagian yang berada di luar jendela (termasuk SYN dan FIN ) , dan hanya memproses lebih lanjut jika segmen kemudian dimulai pada RCV.NXT . Segmen dengan urutan awal yang lebih tinggi nomor dapat diadakan untuk waktu pemrosesan . kedua memeriksa bit RST , STATE SYN - DITERIMA Jika bit RST diset Jika hubungan ini dimulai dengan OPEN pasif ( yaitu , berasal dari state mendengarkan ) , kemudian kembali koneksi ini untuk Mendengarkan state dan kembali . Pengguna tidak perlu diberitahu . jika hubungan ini dimulai dengan OPEN aktif ( yaitu , datang dari SYN - SENT state ) maka koneksi ditolak , sinyal pengguna " koneksi menolak " . Dalam kedua kasus , semua segmen pada antrian transmisi harus dihapus . Dan di Kasus OPEN aktif , masukkan status CLOSED dan menghapus TCB tersebut , dan kembali . ESTABLISHED FIN - WAIT - 1 FIN - WAIT - 2 TUTUP - TUNGGU Jika bit RST diset kemudian , setiap beredar menerima dan SENT harus menerima tanggapan " reset" . Semua antrian segmen harus memerah . Pengguna juga harus menerima seorang
jenderal yang tidak diminta "reset koneksi " sinyal. Masukkan status CLOSED , menghapus TCB , dan kembali . PENUTUP STATE STATE TERAKHIR - ACK WAKTU - WAIT Jika bit RST diatur maka , masukkan status CLOSED , menghapus TCB , dan kembali . pemeriksaan keamanan ketiga dan prioritas SYN - DITERIMA Jika keamanan / kompartemen dan diutamakan dalam segmen tidak sama persis dengan keamanan / kompartemen dan diutamakan di TCB kemudian mengirim ulang , dan kembali . menstabilkan state Jika keamanan / kompartemen dan diutamakan dalam segmen tidak sama persis dengan keamanan / kompartemen dan diutamakan di TCB kemudian mengirim ulang , setiap beredar menerima dan SENT harus menerima tanggapan " reset" . Semua antrian segmen harus memerah . Pengguna juga harus menerima seorang jenderal yang tidak diminta "reset koneksi " sinyal. Masukkan status CLOSED , menghapus TCB , dan kembali . Catatan cek ini ditempatkan mengikuti urutan memeriksa untuk mencegah segmen dari koneksi lama antara port tersebut dengan keamanan yang berbeda atau prioritas dari menyebabkan batalkan dari koneksi saat ini . keempat , periksa bit SYN , SYN - DITERIMA STATE ESTABLISHED FIN - WAIT STATE - 1 FIN - WAIT STATE - 2 TUTUP - TUNGGU STATE PENUTUP STATE STATE TERAKHIR - ACK WAKTU - WAIT STATE Jika SYN dalam jendela itu adalah kesalahan , mengirim ulang , setiapberedar menerima dan SENT harus menerima tanggapan " reset" ,semua antrian segmen harus memerah , pengguna juga harus menerima " koneksi ulang " umum sinyal yang tidak diinginkan , masukkan state CLOSED , menghapus TCB , dan kembali . Jika SYN tidak dalam jendela langkah ini tidak akan tercapai dan aksi akan dikirim pada langkah pertama ( urutan nomor cek ) . kelima memeriksa field ACK , jika bit ACK off menjatuhkan segmen dan kembali jika bit ACK pada STATE SYN - DITERIMA Jika SND.UNA = < SEG.ACK = < SND.NXT kemudian enter DIDIRIKAN state dan melanjutkan pemrosesan . Jika pengakuan segmen tidak dapat diterima , membentuk ulang segmen , <SEQ=SEG.ACK> <CTL=RST> dan mengirimkannya . menstabilkan state Jika SND.UNA < SEG.ACK = < SND.NXT kemudian , set SND.UNA < - SEG.ACK . Setiap segmen pada antrian transmisi yang demikian seluruhnya diakui dihapus . Pengguna harus menerima pengakuan positif untuk buffer yang telah DIKIRIM dan sepenuhnya diakui ( yaitu , SENT penyangga harus dikembalikan dengan respon " ok " ) . Jika ACK adalah duplikat ( SEG.ACK < SND.UNA ) , dapat diabaikan . Jika acks ACK sesuatu yang belum dikirim ( SEG.ACK > SND.NXT ) kemudian mengirim ACK , menjatuhkan segmen , dan kembali . Jika SND.UNA < SEG.ACK = < SND.NXT , jendela send harus diperbarui . Jika ( SND.WL1 < SEG.SEQ
atau ( SND.WL1 = SEG.SEQ dan SND.WL2 = < SEG.ACK ) ) , set SND.WND < - SEG.WND , ditetapkan SND.WL1 < - SEG.SEQ , dan set SND.WL2 < - SEG.ACK . Perhatikan bahwa SND.WND adalah offset dari SND.UNA , bahwa SND.WL1 mencatat jumlah urutan segmen terakhir digunakan untuk memperbarui SND.WND , dan bahwa SND.WL2 mencatat jumlah pengakuan segmen terakhir digunakan untuk memperbarui SND.WND . Cek di sini mencegah menggunakan segmen lama untuk memperbarui jendela. FIN - WAIT - 1 STATE Selain pengolahan untuk state ESTABLISHED , jika FIN kami sekarang diakui kemudian masukkan FIN - WAIT - 2 dan melanjutkan pengolahan di state itu . FIN - WAIT - 2 STATE Selain pengolahan untuk state ESTABLISHED , jika antrian transmisi kosong , TUTUP pengguna dapat mengakui ( " ok " ) tetapi jangan hapus TCB tersebut . TUTUP - TUNGGU STATE Lakukan proses yang sama seperti untuk state ESTABLISHED . PENUTUP STATE Selain pengolahan untuk state ESTABLISHED , jika ACK mengakui FIN kami kemudian masukkan state TIME- WAIT , jika tidak mengabaikan segmen . STATE TERAKHIR - ACK Satu-satunya hal yang dapat tiba di state bagian ini adalah pengakuan FIN kami . Jika FIN kami sekarang diakui , menghapus TCB , masukkan status CLOSED , dan kembali. WAKTU - WAIT STATE Satu-satunya hal yang dapat tiba dalam keadaan ini adalah retransmission FIN terpencil. Mengakuinya , dan restart 2 MSL timeout. keenam, periksa bit URG , STATE ESTABLISHED FIN - WAIT - 1 STATE FIN - WAIT - 2 STATE Jika bit URG diatur , RCV.UP < - max ( RCV.UP , SEG.UP ) , dan sinyal pengguna bahwa sisi remote memiliki data yang mendesak jika mendesak pointer ( RCV.UP ) adalah di muka dari data yang dikonsumsi . Jika pengguna telah mengisyaratkan ( atau masih dalam " mendesak mode " ) untuk ini urutan data terus menerus mendesak , jangan sinyal pengguna lagi . TUTUP - TUNGGU STATE PENUTUP STATE STATE TERAKHIR - ACK WAKTU - WAIT Hal ini seharusnya tidak terjadi , karena FIN telah diterima dari sisi remote . Abaikan URG tersebut . ketujuh , proses teks segmen , STATE ESTABLISHED FIN - WAIT - 1 STATE FIN - WAIT - 2 STATE Setelah di state ESTABLISHED , adalah mungkin untuk memberikan segmen teks ke pengguna MENERIMA buffer . Teks dari segmen dapat dipindahkan ke dalam buffer sampai baik buffer penuh atau segmen adalah kosong. Jika segmen mengosongkan dan membawa bendera PUSH , maka pengguna informasi , saat buffer dikembalikan , bahwa suatu PUSH telah diterima . Ketika TCP bertanggung jawab untuk memberikan data ke pengguna juga harus mengakui penerimaan data . Setelah TCP bertanggung jawab untuk data uang muka RCV.NXT atas data diterima , dan menyesuaikan RCV.WND sebagai ketersediaan buffer saat . Total RCV.NXT dan RCV.WND tidak harus dikurangi .
Harap dicatat saran manajemen jendela di bagian 3.7 . SENT pengakuan dalam bentuk: <SEQ=SND.NXT> <ACK=RCV.NXT> <CTL=ACK> Pengakuan ini harus piggybacked pada segmen yang ditransmisikan jika mungkin tanpa menimbulkan penundaan. TUTUP - TUNGGU STATE PENUTUP STATE STATE TERAKHIR - ACK WAKTU - WAIT STATE Hal ini seharusnya tidak terjadi , karena FIN telah diterima dari sisi remote . Abaikan teks segmen . kedelapan , periksa bit FIN , Jangan mengolah FIN jika state tersebut ditutup , DENGARKAN atau SYN - SENT karena SEG.SEQ tidak dapat divalidasi , menjatuhkan segmen dan kembali . Jika bit FIN diset , sinyal pengguna " penutupan koneksi " dan kembali setiap tertunda menerima dengan pesan yang sama , muka RCV.NXT lebih FIN , dan mengirim pengakuan untuk FIN . Perhatikan bahwa FIN menyiratkan PUSH untuk setiap segmen teks belum disampaikan kepada pengguna . STATE SYN - DITERIMA STATE ESTABLISHED Masukkan state CLOSE- WAIT . FIN - WAIT - 1 STATE Jika FIN kami telah ACK (mungkin di segmen ini ) , maka masukkan WAKTU - WAIT , mulai waktu menunggu timer, matikan timer lainnya, jika memasuki keadaan PENUTUP . FIN - WAIT - 2 STATE Masukkan state TIME- WAIT . Mulai waktu - tunggu timer, mengubah off timer lainnya . TUTUP - TUNGGU STATE Tetap dalam keadaan CLOSE- WAIT . PENUTUP STATE Tetap dalam keadaan PENUTUP . STATE TERAKHIR - ACK Tetap dalam keadaan TERAKHIR - ACK . WAKTU - WAIT STATE Tetap dalam keadaan TIME- WAIT . Restart 2 MSL waktu - waktu tunggu habis dan kembali Untuk setiap state jika timeout pengguna berakhir , siram semua antrian , sinyal pengguna " error: koneksi dibatalkan karena timeout pengguna " pada umumnya dan untuk setiap panggilan yang luar biasa , menghapus TCB , masukkan CLOSED state dan kembali . timeout pengiriman ulang Untuk setiap state jika retransmission timeout berakhir pada segmen di antrian transmisi , mengirim segmen di depan antrian transmisi lagi , menginisialisasi ulang timer pengiriman ulang , dan kembali . WAKTU - WAIT TIMEOUT Jika timeout waktu menunggu berakhir pada koneksi menghapus TCB tersebut , memasuki kondisi TERTUTUP dan kembali .