Kali ini akan dibahas lebih mendalam lagi mengenai karakteristik komunikasi interproses beserta UDP dan TCP yang dilihat dari sisi programmer. Program aplikasi antarmuka pada UDP menyediakan pengiriman pesan secara abstraksi, bentuk sederhana dari komunikasi interprocess. Hal ini memungkinkan proses pengiriman untuk mengirimkan satu pesan ke proses penerimaan. Paket independen yang mengandung pesan-pesan ini disebut datagrams. Dalam Java dan UNIX API, pengirim akan menentukan menentukan tujuan menggunakan socket. Sedangkan program aplikasi antarmuka untuk TCP memberikan abstraksi dari dua arah streaming antara proses. Informasi yang dikomunikasikan terdiri dari aliran item data tanpa adanya masssage boundaries. Server dan client akan membentuk sepasang proses dimana proses yang pertama adalah untuk memproduksi barang-barang data dan proses yang kedua adalah untuk menggunakan data tersebut. Item data akan dikirim oleh server ke client yang sebelumnya telah mengantri hingga client siap untuk menerima data yang akan dikirim. Client juga harus menunggu hingga item data yang diinginkan tersedia. Jika antrian data sudah penuh, maka server pun harus menunggu untuk bisa mengirimkan data tersebut.
Karakteristik Komunikasi Interproses
Synchronous and asynchronous communication
Sebuah antrian akan dihubungkan dengan masing-masing tujuan pengiriman pesan. Pengiriman sebuah proses akan menyebabkan pesan masuk ke antrian dan setelah proses diterima, maka pesan akan dihapus dari antrian tersebut. Komunikasi antara proses pengiriman dan penerimaan dapat berupa sinkron atau asinkron.
Synchronous : proses pengiriman dan penerimaan akan saling terkait pada setiap pesan yang ada. Setiap pengiriman pesan yang dilakukan, proses pengiriman akan diblok hingga pesan tersebut diterima dan sebaliknya.
Asynchronous : proses pengiriman diperbolehkan untuk dilakukan setelah pesan pertama yang dikirim telah disalin ke buffer lokal, dan transmisi pesan akan diproses secara paralel. Prose penerimaan pesan terdapat variasi blocking dan non-blocking. Pada bagian non-blocking, proses penerimaan dilakukan setelah mendapat pemberitahuan bahwa terdapat pesan yang telah dikirim.
Sebuah port lokal merupakan tujuan pengiriman sebuah pesan dalam komputer. Sebuah port akan terdapat tepat satu receiver, tetapi dengan banyak pengirim. Proses dapat menggunakan beberapa port untuk menerima pesan. Setiap proses yang mengetahui nomor sebuah port akan dapat mengirim pesan melalui port tersebut. Secara umum, server akan memberitahukan nomor port yang bisa digunakan untuk berkomunikasi dengan client.
Pelayanan pesan point to point akan dapat dikatakan handal jika pesan yang dikirim terjamin akan sampai ke tujuan walaupun terdapat paket yang lost dalam jumlah yang masih wajar. Sebaliknya, jika pesan tersebut lost dalam jumlah besar atau bahkan seluruhnya, maka pelayanan tersebut tidak bisa dihandalkan. Dalam segi interitas, pesan tersebut harus tiba tanpa ada kerusakan ataupun redudansi.
Pada sejumlah aplikasi, pengiriman pesan memerlukan adanya perintah untuk mengirim sebuah pesan. Dimana perintah ini dikeluarkan oleh pengirim. Jika pengiriman pesan dilakukan tanpa adanya perintah dari pengirim, maka ini akan dianggap sebagai kesalahan pada aplikasi.
Kedua bentuk komunikasi baik UDP maupun TCP menggunakan soket abstraksi, yang
memberikan titik akhir untuk komunikasi antara proses. Komunikasi interprocess terdiri dari transmisi pesan antara soket dalam satu proses dengan soket dalam proses lain, seperti yang diilustrasikan pada gambar dibawah ini.
Sebuah proses dapat menggunakan leih dari satu port untuk menerima pesan, namun ports tersebut tdak dapat digunakan secara bersama atau sharing dengan proses yang lain pada komputer yang sama.
Sebuah datagram yang dikirim oleh UDP dikirimkan dari proses pengiriman ke proses penerimaan tanpa adanya acknowledgement. Sehingga jika terjadi kegagalan, pesan bisa saja tidak akan diterima. Sebuah datagram dikirimkan antara proses ketika satu proses mengirimkannya dan yang lain menerimanya. Saat proses pengiriman atau penerimaan server akan menghubungkan soket ke port yang dimiliki server hingga klien mengenalinya dan dapat saling mengirimkan pesan. Terdapat beberapa isu yang berhubungan dengan komunikasi datagram, yaitu :
Ukuran pesan, ketika sebuah pesan emiliki ukuran yang lebih besar dari array yang ada, maka pesan tersebut akan terpotong pada saat pesan sampai.
Blocking, dalam komunikasi datagram socket biasanya menyediakan non-bloking send dan bloking receives. Pesan yang dikirimkan akan dimasukkan ke dalam antrian pada port tujuan. Sehingga pengiriman pesan tersebut dapat dilakukan terus menerus tanpa memperhatikan pesan tersebut sudah diterima atau belum. Sedangkan penerimaan pesan akan dilakukan satu persatu hingga pesan tersebut diterima terlebih dahulu dan mengrimkan balasannya untuk dapat menerima pesan yang lain.
Timeouts, dalam pengiriman sebuah pesan beberapa program membatasi waktu permintaan hingga penerimaan pesan. Hal ini disebabkan karena jika pesan yang diterima terlalu lama, maka diperkirakan pesan tersebut ada yang hilang. Oleh karena itu waktu timeouts dapat diatur pada socket untuk memastikan bahwa pesan yang dikirimkan sesuai.
Komunikasi datagram UDP memiliki beberapa kegagalan pada saat pengiriman pesan. Salah satunya adalah omission failure, yaitu kegagalan pengiriman pesan yang disebabkan karena pesan yang dibuang ketika buffer tujuan sudah penuh. Selain itu, kegagalan lain yang mungkin terjadi adalah adanya pengiriman yang dilakukan tanpa adanya perintah dari pengirim. Untuk beberapa aplikasi dapat menerima terjadinya omission failure, contohnya adalah DNS pada internet dan juga VOIP yang juga berjalan di atas UDP. UDP datagram merupakan sebuah pilihan yang digunakan karena dalam UDP tidak mengalami overhead.
Java API menyediakan komunikasi datagram melalui dua kelas, yaitu DatagramPacket and DatagramSocket. Dalam kelas DatagramPacket tersedia konstruktor yang membuat sebuah instance dari sebuah array dari pesan. DatagramPacket dapat digambarkan sebagai berikut :
Sedangkan DatagramSocket akan mendukung soket untuk mengirim dan menerima UDP datagrams. Kelas ini menyediakan konstruktor yang mengambil nomor port sebagai argumen, untuk digunakan oleh proses yang pada port tertentu. Hal ini juga menyediakan konstruktor tanpa argumen yang memungkinkan sistem untuk memilih port lokal gratis. Konstruktor ini bisa melempar SocketException jika port yang dipilih sudah digunakan.
API yang digunakan untuk protokol TCP yang berasal dari BSD INIX 4.x dapat memberikan abstrakssi aliran byte yang dapat ditulis dan di baca. Beberapa karateristik jaringan tersembunyi antara lain :
Aplikasi dapat memilih berapa banyak data yang dapat di tulis atau di baca di stream. Dalam hal ini TCP yang menetukan dan memutuskan banyaknya data harus dikumpulkan sebelum dikirimkan sebagai satu atau lebih paket IP.
akhir pengiriman menyimpan catatan setiap paket IP dikirim dan penerima mengakui semua pendatang. Jika pengirim tidak menerima pengakuan dalam timeout, itu mentransmisikan pesan
Protokol TCP mencoba untuk mencocokkan kecepatan proses yang dibaca dari dan ditulis ke stream.
Message duplication and ordering
Pengidentifikasi pesan yang terkait dengan setiap paket IP, yang memungkinkan penerima untuk mendeteksi dan menolak duplikat, atau untuk menyusun ulang pesan yang tidak tiba dalam urutan pengirim.
Pengidentifikasi pesan yang terkait dengan setiap paket IP, yang memungkinkan penerima untuk mendeteksi dan menolak duplikat, atau untuk menyusun ulang pesan yang tidak tiba di pengirim pasangan order.
Berikut ini adalah beberapa masalah yang terkait dengan aliran komunikasi:
Dua proses berkomunikasi perlu saling setuju dengan isi dari data yang dikirimkan melalui aliran/stream.
Failure model : untuk memenuhi properti integritas komunikasi yang handal, TCP stream menggunakan checksum untuk mendeteksi dan menolak paket yang korup dan nomor urut untuk mendeteksi dan menolak paket duplikat.
External Data Representation : sebuah strandart untuk merepresentasikan struktur data dan primitive value.
Marshaling : sebuah proses untuk mengumpulkan data item dan memasangnya ke dalam bentuk yag tepat dari transmisi di pesan.
Unmarshalling : sebuah proses melepaskan data item saat kedatangan untuk menghasilkan data yang setara dengan item data dari tempat tujuan. Dengan begitu penyusunnya terdiri dari penjabaran item data terstruktur dan nilai-nilai primitif menjadi representasi data eksternal. Dengan demikian marshaling terdiri dari penjabaran item data terstruktur nilai-nilai primitive ke representasi data eksternal. Demikian dengan unmarshaling terdiri geberasi nilai- nilai primitive dari representasi data eksternal dan pembangunan kembali struktur data.
Tiga Alternatif untuk pendekatan eksternal data representation dan marshaling anatar lain CORBA’s, Java’s, and XML.
CORBA’s Common Data Representation
eksternal representasi data yang telah didefinisikan di CORBA 2.0. CDR dapat merepresentasikan semua tipe data yang dapat digunkan sebagai argument dan menegembalikan nilai ke sedikit pengiriman di CORBA. Terdapat 15 tipe primitive.
Tipe primitive pada CDR mendefinisikan representasi untuk kedua big-endian dan little-endian orderings. Nilai ditransmisikan dalam memesan pengirim, yang ditentukan di setiap pesan.
Tipe Konstruksi nilai-nilai primitif yang terdiri dari masing-masing jenis dibangun ditambahkan ke urutan byte dalam urutan tertentu.
Marshaling in CORBA. Marshaling dapat menggeneret secara otomatis dari spesifik tipe darai sebuah data untuk ditransmisikan ke sebuah pesan.
Java Object Serialization
Pada java RMI, kedua objek dan nilai-nilai data primitif dapat dilewatkan sebagai argumen dan hasil metode. Sebuah objek adalah instance dari kelas Java. Di Java, serialisasi menunjuk pada aktivitas perataan suatu obyek atau satu set objek terhubung ke dalam bentuk serial yang cocok untuk menyimpannya pada disk atau transmisi dalam pesan, misalnya, sebagai argumen atau hasil dari RMI.
mampu meminta keterangan seperti nama/tipe dari variabel dan method
memungkinkan membuat kelas dari nama dan konstruktor dengan memberi tipe atributnya
mampu melakukan serialisasi dan deserialisasi
pada serialisasi, reflection digunakan untuk mengetahui nama kelas, tipe dan nilai dari objek yang diserialisasi
pada deserialisasi, nama kelas dari proses serialisasi digunakan untuk membangun kelas dan membuat konstruktor yang spesifik serta membuat objek baru dengan nilai yang dibaca dari dari form serialisasi
eXtensible Markup Language (XML)
merupakan markup language untuk keperluan umum web yang disarankan oleh W3C. Markup language merepresentasikan teks dan detail dari struktur atau tampilan halaman web. XML dan HTML berasal dari Standardized Generalized Markup Language, sebuah markup language yang sangat komplek. HTML digunakan untuk memperindah tampilan sedangkan XML digunakan untuk menyusun struktur penulisan dokumen dari halaman web.
digunakan agar klien dapat berkomunikasi dengan web service
mendefinisikan interface dan properti lain dari web service
dapat dikembangkan, user dapat membuat tag sendiri
Contoh XML dalam mendefinisikan Person
<name>Smith</name>
<place>London</place>
<year>1984</year>
<!-- a comment -->
Elemen, berisi karakter yang diawali dan diakhiri oleh suatu tag. Misalnya <nama> ... </nama>. Untuk tag kosong penulisannya diakhiri /> seperti berikut <european/>
Atribut, sama seperti pada HTML atribut diikuti dengan tanda sama dengan dan nilanya berada diantara kutip, contohnya id = "12345". Untuk atribut ganda dipidahkan dengan spasi.
Dokumen XML harus tersusun dengan baik, strukturnya mengikuti aturan yang ada. Aturan-aturan ini membuat penerahan parser untuk dokumen XML menjadi sederhana. Ketika parser membaca dokumen XML yang tidak tersusun dengan baik, akan melaporkan kesalahan tersebut.
CDATA : Parser XML, mengurai isi dari elemen karena mereka mungkin mengandung struktur nested.
XML Prolog : Setiap dokumen XML pasti memiliki prolog dibaris pertamanya.
<?XML version = "1.0" encoding = "UTF-8" standalone = "yes"?>
Note : UTF-8 merupakan encoding default
xmlns:pers = "http://www.cdk5.net/person"
Note : XML namespace menunjukkan URL rujukan, mengijinkan aplikasi untuk menggunakan beberapa set definisi eksternal dalam namespace yang berbeda tanpa risiko terjadi bentrok.
identifier untuk remote objek yang berlaku di seluruh sistem terdistribusi.
Representasi remote objek
Coulouris, George, et al. Distributed System : Concept and Design 5th Edition.