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 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.
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.
Seperti disadur dari SeisComP, 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:
- Membuka koneksi
- Handshaking
- Pengiriman paket SeedLink
Membuka Koneksi
Untuk membuka koneksi, TCP/IP menggunakan handshake 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.
Handshaking
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 handshaking, 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.
Perintah yang dikirim oleh klien ketika proses handshaking dapat dibagi menjadi dua kategori: “action commands” dan “modifier commands“. Action commands adalah perintah SeedLink yang mengeksekui fungsi-fungsi tertentu, contohnya adalah memulai transfer data. Modifier commands digunakan untuk mengkhususkan atau memodifikasi fungsi-fungsi yang dieksekusi oleh action commands yang dilakukan kemudian. Ketika server SeedLink menerima modifier commands, maka server akan membalas dengan teks ASCII “OK” yang diikuti oleh karakter carriage return (<cr>
atau ASCII dengan kode 13) dan linefeed (<lf>
atau ASCII dengan kode 10) yang menandakan bahwa perintah sudah diterima oleh server. Gambar di bawah ini adalah contoh visualisasi carriage return dan linefeed menggunakan perangkat lunak Notepad++. Carriage return dan linefeed akan menghasilkan pergantian baris pada dokumen ASCII, selanjutnya disingkat dengan CR-LF
. Lain halnya ketika perintah yang dikirim oleh klien tidak dapat dikenali oleh server, maka teks ASCII “ERROR” akan dikirimkan oleh server, diikuti oleh CR-LF
.
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.
Bentuk dasar dari perintah SeedLink adalah text ASCII yang diikuti oleh angka 0 (nol) atau beberapa argumen masukan yang dipisahkan oleh spasi. Kemudian perintah ini diakhiri oleh CR-LF
. Text ASCII yang valid untuk digunakan sebagai perintah SeedLink dapat dibaca di bagian Daftar Perintah.
Pengiriman Paket SeedLink
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 “SL” yang diikuti oleh 6 (enam) digit bilangan hexadesimal yang menunjukkan urutan paket. Masing-masing stasiun seismik memiliki urutan paket yang berbeda-beda.
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 “DATA” dan “FETCH” untuk meminta server mengirim data tertentu.
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 (sequence gap) yang bisa saja diakibatkan oleh kesalahan alat ataupun perangkat lunak yang ada di server.
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 “END” dan akan menunggu klien menutup koneksinya. Pada kasus terakhir ini dinamakan mode dial-up.
Daftar Perintah
HELLO
: server akan menjawab dengan respon dua baris. Baris pertama adalah versi SeedLink diakhiri denganCR-LF
. Baris kedua berisi deskripsi stasiun atau data center yang dispesifikasikan pada konfigurasinya. Perintah ini umumnya digunakan untuk menguji server menggunakan telnet.CAT
: menunjukkan daftar stasion.BYE
: menutup koneksi.STATION kode stasiun [kode network]
: menghidupkan mode multi-station, 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 handshaking diakhiti dengan perintah END. Perintah STATION adalah perintah modifier, sehingga akan direspon dengan teks “OK” ketika berhasil atau “ERROR”ketika gagal. Perintah STATION memodifikasi fungsi SELECT dan perintah DATA, FETCH atau TIME.END
: mengakhiri handshaking pada mode multi-station. Ini adalah perintah aksi (action command) karena akan memulai pengiriman data. Tidak ada respon eksplisit yang akan dikirimkan oleh server.SELECT [pola]
: ketika digunakan tanpa menyebutkan pola (pattern), 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 (negative selector) 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). “LL”, “.T”, dan “LLCCC.” dapat diabaikan/dihilangkan. Hal tersebut akan diinterpretasikan sebagai “semua”. Dimungkinkan juga untuk menggunakan “?” di lokasi L dan C. SELECT adalah perintah modifier, sehingga akan direspon dengan teks “OK” ketika berhasil atau “ERROR”ketika gagal. Perintah STATION memodifikasi fungsi SELECT dan perintah DATA, FETCH atau TIME.DATA [n [waktu awal]]
: pada mode multi-station, perintah ini akan mengatur stasiun terpilih menjadi mode real-time dan nomor urut ke urutan n (opsional). Pada mode uni-station, perintah ini memulai pengiriman data secara real-time 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 “2021,07,19,07,50,50”). DATA adalah perintah modifier pada mode multi-station (direspon dengan “OK” atau “ERROR”). Pada mode uni-station, perintah DATA adalah action command (tidak ada respon eksplisit yang akan dikirimkan oleh server).FETCH [n [waktu awal]]
: mirip seperti perintah DATA, namun mengatur stasion ke mode dial-up, mode real-time.TIME [waktu awal [waktu akhir]]
: 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 “2021,07,19,07,50,50”).INFO level
: 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.