{"id":242,"date":"2021-10-12T11:03:17","date_gmt":"2021-10-12T04:03:17","guid":{"rendered":"https:\/\/iot-geosains.mipa.ugm.ac.id\/?p=242"},"modified":"2021-10-12T11:03:17","modified_gmt":"2021-10-12T04:03:17","slug":"cara-kerja-protokol-seedlink","status":"publish","type":"post","link":"https:\/\/iot-geosains.mipa.ugm.ac.id\/?p=242","title":{"rendered":"Cara kerja protokol SeedLink"},"content":{"rendered":"<p>Dalam protokol SeedLink terdapat dua pihak yang terlibat, yaitu server dan klien. Setiap koneksi menggunakan protokol SeedLink diinisiasi oleh pihak klien. Saat klien menginisiasi koneksi, maka akan terjadi proses <em>handshake<\/em> yang mana klien dapat meminta pengiriman data dari stasiun dan data tertentu menggunakan perintah sederhana dalam format <a href=\"https:\/\/en.wikipedia.org\/wiki\/ASCII\">ASCII<\/a>. Setelah proses handshake selesai, maka server akan mengirimkan 520 byte paket SeedLink. Paket ini terdiri dari 8 byte SeedLink header yang diikuti oleh 512 byte data rekaman yang disimpan dalam format Mini-SEED. Ilustrasi paket SeedLink dapat dilihat pada gambar di bawah.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-248 aligncenter\" src=\"https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-1024x288.png\" alt=\"Gambar Paket SeedLink\" width=\"465\" height=\"131\" srcset=\"https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-1024x288.png 1024w, https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-300x84.png 300w, https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-768x216.png 768w, https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-1536x432.png 1536w, https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-2048x577.png 2048w, https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/paket_seedlink-825x232.png 825w\" sizes=\"auto, (max-width: 465px) 100vw, 465px\" \/><\/p>\n<p>Paket data dari masing-masing stasiun seismik akan selalu dikirimkan berdasarkan sesuai dengan waktu perekamannya. Sehingga data yang belum terkirim akan diprioritaskan untuk terlebih dahulu daripada data yang direkam kemudian. Hal ini sangat penting mengingat SeedLink didesain untuk mengirimkan data dalam runtun waktu, dimana kontinuitas data adalah hal yang krusial.<\/p>\n<p>Seperti disadur dari <a href=\"https:\/\/www.seiscomp.de\/seiscomp3\/doc\/seattle\/2012.279\/apps\/seedlink.html\">SeisComP<\/a>, sesi SeedLink dimulai dari dibukanya koneksi TCP\/IP dan diakhiri dengan menutup koneksi TCP\/IP. Selama sesi SeedLink berlangsung, langkah-langkah berikut dilakukan sesuai dengan urutan:<\/p>\n<ol>\n<li>Membuka koneksi<\/li>\n<li><em>Handshaking<\/em><\/li>\n<li>Pengiriman paket SeedLink<\/li>\n<\/ol>\n<p><!--more--><\/p>\n<p><strong>Membuka Koneksi<\/strong><\/p>\n<p>Untuk membuka koneksi, TCP\/IP menggunakan\u00a0<em>handshake<\/em> khusus. Sebelum klien mencoba menghubungkan diri dengan server, server harus memantai port jaringan tertentu dan bersiap-siap untuk menerima koneksi. Ketika server telah siap, klien dapat mencoba menghubungkan diri dengan server.<\/p>\n<p><strong>Handshaking<\/strong><\/p>\n<p>Ketika koneksi TCP\/IP antara klien dan server terbuka, server tidak akan serta merta mengirim paket SeedLink, namun akan menunggu perintah dari klien. Saat proses <em>handshaking<\/em>, klien diharapkan mengirim perintah SeedLink. Perintah ini dikirim dalam format ASCII dan berfungsi untuk menentukan jenis koneksi, memilih data, meminta nomor urut paket SeedLink, dan memulai transmisi data.<\/p>\n<p>Perintah yang dikirim oleh klien ketika proses <em>handshaking<\/em> dapat dibagi menjadi dua kategori: &#8220;<em>action commands<\/em>&#8221; dan &#8220;<em>modifier commands<\/em>&#8220;.\u00a0<em>Action commands<\/em> adalah perintah SeedLink yang mengeksekui fungsi-fungsi tertentu, contohnya adalah memulai transfer data.\u00a0<em>Modifier commands<\/em> digunakan untuk mengkhususkan atau memodifikasi fungsi-fungsi yang dieksekusi oleh\u00a0<em>action commands<\/em> yang dilakukan kemudian. Ketika server SeedLink menerima\u00a0<em>modifier commands<\/em>, maka server akan membalas dengan teks ASCII &#8220;OK&#8221; yang diikuti oleh karakter\u00a0<em>carriage return<\/em> (<code>&lt;cr&gt;<\/code> atau ASCII dengan kode 13) dan <em>linefeed<\/em> (<code>&lt;lf&gt;<\/code> atau ASCII dengan kode 10) yang menandakan bahwa perintah sudah diterima oleh server.\u00a0 Gambar di bawah ini adalah contoh visualisasi <em>carriage return<\/em> dan\u00a0<em>linefeed<\/em> menggunakan perangkat lunak Notepad++.\u00a0<em>Carriage return\u00a0<\/em>dan\u00a0<em>linefeed<\/em> akan menghasilkan pergantian baris pada dokumen ASCII, selanjutnya disingkat dengan <code>CR-LF<\/code>. Lain halnya ketika perintah yang dikirim oleh klien tidak dapat dikenali oleh server, maka teks ASCII &#8220;ERROR&#8221; akan dikirimkan oleh server, diikuti oleh <code>CR-LF<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-254\" src=\"https:\/\/iot-geosains.mipa.ugm.ac.id\/wp-content\/uploads\/sites\/1512\/2021\/07\/crlf.png\" alt=\"\" width=\"248\" height=\"63\" \/><\/p>\n<p>Klien tidak dianjurkan untuk mengirim perintah lagi sebelum mendapatkan respon dari server untuk menghindari tingginya beban server. Ketika terjadi kesalahan jaringan ataupun timeout, maka klien sebaiknya menutup koneksi yang lama, dan membuat koneksi yang baru. Proses pengiriman data hanya akan dimulai ketika server menerima perintah DATA, FETCH, TIME atau END. Ketika proses pengiriman data sedang berlangsung, selayaknya tidak boleh ada perintah lain yang dikirim ke server selain perintah INFO.<\/p>\n<p>Bentuk dasar dari perintah SeedLink adalah\u00a0text ASCII yang diikuti oleh angka 0 (nol) atau beberapa argumen masukan yang dipisahkan oleh spasi. Kemudian perintah ini diakhiri oleh <code>CR-LF<\/code>. Text ASCII yang valid untuk digunakan sebagai perintah SeedLink dapat dibaca di bagian Daftar Perintah.<\/p>\n<p><strong>Pengiriman Paket SeedLink<\/strong><\/p>\n<p>Paket SeedLink yang dikirimkan oleh server memiliki panjang 520 byte, dengan header 8 byte di awal paket. Header yang dikirim adalah 2 (dua) teks ASCII &#8220;SL&#8221; yang diikuti oleh 6 (enam) digit bilangan hexadesimal yang menunjukkan urutan paket. Masing-masing stasiun seismik memiliki urutan paket yang berbeda-beda.<\/p>\n<p>Apabila terdapat banyak stasiun yang terhubung pada satu channel TCP, maka kita harus melihat header dari masing-masing data Mini-SEED yand diterima untuk menentukan stasiun mana yang sedang diterima. Nomor urutan data ini adalah nomor urut yang digunakan juga sebagai input perintah &#8220;DATA&#8221; dan &#8220;FETCH&#8221; untuk meminta server mengirim data tertentu.<\/p>\n<p>Nomor urut paket SeedLink memiliki nilai maksimal di FFFFFF dalam hexadesimal atau 16777215 dalam desimal. Setelah itu nomor urutnya akan kembali lagi menjadi 0. Keberadaan nomor urut ini dapat dimanfaatkan oleh klien untuk mendeteksi adanya jeda (<em>sequence gap<\/em>) yang bisa saja diakibatkan oleh kesalahan alat ataupun perangkat lunak yang ada di server.<\/p>\n<p>Data dikirimkan secara kontinu tanpa adanya deteksi error atau kontrol alur karena proses transfer data dilakukan menggunakan protokol TCP. Hal ini menjamin bahwa kita dapat menggunakan kecepatan pengiriman data tertinggi yang memungkinkan dengan mempertimbangkan limitasi perangkat keras dan implementasi TCP\/IP. Tentunya, rerata kecepatan pengiriman data sebaiknya lebih tinggi daripada daripada rerata datangnya data baru di server. Apabila kasus ini yang terjadi, maka cepat atau lambat, semua data yang ada di server akan terkirim ke klien. Ketika ini terjadi, maka server hanya akan mengirimkan data baru begitu datanya tersedia dan siap dikirim. Kasus lain apabila tidak ada proses perekaman data lagi di pihak server, maka server akan mengirimkan teks ASCII &#8220;END&#8221; dan akan menunggu klien menutup koneksinya. Pada kasus terakhir ini dinamakan mode\u00a0<em>dial-up<\/em>.<\/p>\n<p><strong>Daftar Perintah<\/strong><\/p>\n<ul>\n<li><code>HELLO<\/code>: server akan menjawab dengan respon dua baris. Baris pertama adalah versi SeedLink diakhiri dengan <code>CR-LF<\/code>. Baris kedua berisi deskripsi stasiun atau\u00a0<em>data center<\/em> yang dispesifikasikan pada konfigurasinya. Perintah ini umumnya digunakan untuk menguji server menggunakan\u00a0<em>telnet<\/em>.<\/li>\n<li><code>CAT<\/code>: menunjukkan daftar stasion.<\/li>\n<li><code>BYE<\/code>: menutup koneksi.<\/li>\n<li><code>STATION kode stasiun [kode network]<\/code>: menghidupkan mode\u00a0<em>multi-station<\/em>, digunakan untuk mengirim data dengan banyak stasiun pada satu channel TCP. Perintah STATION dikuti dengan SELECT (opsional), dan perintah FETCH, DATA atau TIME diulangi untuk stiap stasion. Kemudian\u00a0<em>handshaking\u00a0<\/em>diakhiti dengan perintah END. Perintah STATION adalah\u00a0perintah\u00a0<em>modifier<\/em>, sehingga akan direspon dengan teks &#8220;OK&#8221; ketika berhasil atau &#8220;ERROR&#8221;ketika gagal. Perintah STATION memodifikasi fungsi SELECT dan perintah DATA, FETCH atau TIME.<\/li>\n<li><code>END<\/code>: mengakhiri\u00a0<em>handshaking<\/em> pada mode\u00a0<em>multi-station<\/em>. Ini adalah perintah aksi (<em>action command<\/em>) karena akan memulai pengiriman data. Tidak ada respon eksplisit yang akan dikirimkan oleh server.<\/li>\n<li><code>SELECT [pola]<\/code>: ketika digunakan tanpa menyebutkan pola (<em>pattern<\/em>), tidak ada kriteria khusus yang digunakan untuk memilih data. Apabila bagian pola terisi, maka server akan mencocokkan dengan data yang tersedia. Pola juga dapat digunakan untuk mencegah terkirimnya suatu data dengan spesifikasi tertentu (<em>negative selector<\/em>) dengan cara menambahkan ! (tanda seru) di awal pola. Format umum polanya adalah LLCCC.T, dimana LL ada lokasi, CCC adalah channel, dan T adalah tipenya. Tipe yang dimaksud dapat berupa D,E,C,O,T,L yang dapat diartikan sebagai Data, Event, Callibration, Blockette, Timing, dan Log records). &#8220;LL&#8221;, &#8220;.T&#8221;, dan &#8220;LLCCC.&#8221; dapat diabaikan\/dihilangkan. Hal tersebut akan diinterpretasikan sebagai &#8220;semua&#8221;. Dimungkinkan juga untuk menggunakan &#8220;?&#8221; di lokasi L dan C. SELECT adalah perintah\u00a0<em>modifier<\/em>, sehingga akan direspon dengan teks &#8220;OK&#8221; ketika berhasil atau &#8220;ERROR&#8221;ketika gagal. Perintah STATION memodifikasi fungsi SELECT dan perintah DATA, FETCH atau TIME.<\/li>\n<li><code>DATA [n [waktu awal]]<\/code>: pada mode\u00a0<em>multi-station<\/em>, perintah ini akan mengatur stasiun terpilih menjadi mode\u00a0<em>real-time<\/em> dan nomor urut ke urutan n (opsional). Pada mode\u00a0<em>uni-station<\/em>, perintah ini memulai pengiriman data secara\u00a0<em>real-time<\/em> dari paket n atau dari paket selanjutnya yang tersedia di server (apabila digunakan tanpa disertai argumen). Apabila parameter waktu awal digunakan, maka paket-paket yang lebih lama daripada waktu awal tidak akan dikirimkan. Waktu awal harus dituliskan dalam format 6 (enam) angka desimal yang dipisahkan oleh tanda koma dalam susunan: tahun,bulan,hari, jam,menit,detik (contoh &#8220;2021,07,19,07,50,50&#8221;). DATA adalah perintah\u00a0<em>modifier<\/em> pada mode\u00a0<em>multi-station<\/em> (direspon dengan &#8220;OK&#8221; atau &#8220;ERROR&#8221;). Pada mode\u00a0<em>uni-station<\/em>, perintah DATA adalah\u00a0<em>action command<\/em> (tidak ada respon eksplisit yang akan dikirimkan oleh server).<\/li>\n<li><code>FETCH [n [waktu awal]]<\/code>: mirip seperti perintah DATA, namun mengatur stasion ke mode\u00a0<em>dial-up<\/em>, mode\u00a0<em>real-time<\/em>.<\/li>\n<li><code>TIME [waktu awal [waktu akhir]]<\/code>: meminta data yang terletak pada rentang waktu awal dan waktu akhir. Waktu awal dan waktu akhir harus dituliskan dalam format 6 (enam) angka desimal yang dipisahkan oleh tanda koma dalam susunan: tahun,bulan,hari, jam,menit,detik (contoh &#8220;2021,07,19,07,50,50&#8221;).<\/li>\n<li><code>INFO level<\/code>: perintah untuk meminta paket INFO ke server yang berisi data XML yang digabungkan dalam rekaman Mini-SEED. Argumen level harus dipilih dari beberapa pilihan, yaitu ID, CAPABILITIES, STATIONS, STREAMS, GAPS, CONNECTIONS, ALL. Informasi yang dikirim tergantung konfigurasi dari server SeedLink.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Dalam protokol SeedLink terdapat dua pihak yang terlibat, yaitu server dan klien. Setiap koneksi menggunakan protokol SeedLink diinisiasi oleh pihak klien. Saat klien menginisiasi koneksi, maka akan terjadi proses handshake yang mana klien dapat meminta pengiriman data dari stasiun dan data tertentu menggunakan perintah sederhana dalam format ASCII. Setelah proses handshake selesai, maka server akan [&hellip;]<\/p>\n","protected":false},"author":295,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[15],"class_list":["post-242","post","type-post","status-publish","format-standard","hentry","category-component-and-protocol","tag-seedlink"],"_links":{"self":[{"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=\/wp\/v2\/posts\/242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=\/wp\/v2\/users\/295"}],"replies":[{"embeddable":true,"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=242"}],"version-history":[{"count":0,"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=\/wp\/v2\/posts\/242\/revisions"}],"wp:attachment":[{"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iot-geosains.mipa.ugm.ac.id\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}