Waktu gue masih muda ceile heheh gue sering melihat router hanya sebagai “black box” atau “node”. Maksudnya, gue dulu tidak tertarik untuk melihat proses switching paket di dalam router itu sendiri dan lebih fokus ke protokol komunikasi dan fitur yg dijalankan antar router. Sebenernya mungkin bukan tidak tertarik. Tapi kalo tidak bekerja di perusahaan yg membuat router, memang bisa kita mendapat informasi yg sangat mendetil tentang ini? Paling tidak sekarang gue punya kesempatan untuk mendalami arsitektur router secara lebih detil.
Dan memang sebenernya pengetahuan tentang proses di dalam router tidak selalu dibutuhkan dalam kehidupan network engineer sehari-hari. Bahkan para CCIE sekalipun bisa jadi hanya melihat router sbg box yg memiliki banyak interface, yg berfungsi mem forward paket ke router berikutnya berdasarkan routing table yg dibangun secara dynamic maupun static. Maka biasanya kita lebih memberi fokus ke komunikasi antar router untuk membangun routing table itu ketimbang proses switching paket dari satu interface ke interface lain di dalam router. Sebagai contoh di OSPF, diskusi tentang LSA, database, algoritma SPF dll bisa sangat membingungkan, terutama jika kita harus melakukan redistribusi dgn protokol IGP yg lain atau BGP dan sebagainya. Sehingga yg penting itu adalah kita bisa melihat routes atau prefix tujuan di routing table, dan jika tidak ada filter atau policy yg lain, biasanya kita mengasumsikan paket akan di proses oleh si black box dan di forward ke box berikutnya dan seterusnya. Kemudian kita akan berurusan dgn fitur lain maupun aplikasi yg dijalankan di atas routing, misalnya MPLS, Traffic Engineering, VPN dll.
Jadi buat kebanyakan orang mungkin sudah cukup untuk mengatakan proses switching paket di dalam router adalah dari interface input, biasa disebut ingress, ke interface output atau egress. Mungkin ketika belajar CCIE kita akan mendalami sedikit untuk mengerti urutan dari implementasi beberapa fitur ketika dijalankan secara bersamaan. Misal, apakah NAT duluan atau Access Control List? Bagaimana dgn Policy Based Routing yg bisa membuat routing table diabaikan? Dan sebagainya. Tapi kita tidak pernah benar-benar melihat komponen apa saja di dalam router dan fungsi mereka dalam mem forward paket.
Mengapa penting untuk mengerti proses switching packet internal?
Buat gue pribadi, untuk mengerti keterbatasan dari implementasi protokol dan fitur karena hardware. Dan gue pikir ini penting buat setiap network designer. Kita bisa saja membangun network design berdasarkan data sheet. Jadi kita bisa merekomendasikan jumlah dan tipe hardware untuk core router, aggregation, access dst. Kemudian kita bisa merekomendasikan protokol dan fitur apa yg harus dijalankan, lengkap dgn konfigurasinya yg kita ambil dari Configuration Guide di website vendor router. Kenyataannya, walaupun untuk protokol itu ada standar internasional spt IEEE maupun RFC, tapi implementasi tiap vendor bisa berbeda karena pengertian masing-masing terhadap standar itu. Bisa jadi juga karena vendor menemukan metoda sendiri ketika mengikuti standar. Dan untuk beberapa fitur, atau bagaimana suatu protokol di implementasikan, sangat tergantung dari arsitektur hardware router. Jadi setelah network yg kita design selesai dibangun dan sudah jalan, mungkin baru kita mulai melihat adanya limitasi di performance atau isu dgn skalabilitas ketika jumlah traffic di network tinggi maupun ketika ingin mengembangkan design tersebut.
Gambar di atas bisa digunakan untuk memahami proses switching paket yg sangat sederhana. Paket datang dari media network dan kabel tentunya dgn Layer 3 dan Layer 2 dari standar TCP/IP stack. Interface processor di router mampu untuk mengambil paket tsb, memeriksa header Layer 2 sekaligus membuang header tsb, dan mengirimkan paket tadi ke route processor utk diproses lebih lanjut. Sambil menunggu route processor melakukan lookup atau pencarian di routing table (dan forwarding table) tentunya paket itu harus disimpan di suatu buffer atau queue. Setelah next hop dari tujuan si paket ditemukan di table, maka route processor sekarang tahu ke interface mana paket harus dikirimkan. Kemudian paket dapat dipindahkan ke output queue, tempat untuk menunggu sebelum paket bisa dikirimkan ke media network, dan paket akan di re-write atau mendapat layer 2 header yg baru yg berisi informasi untuk next hop berikutnya, kemudian paket keluar dari router melalui interface. Input queue atau output queue ini bisa virtual, jadi si paket sebenarnya berada di memory fisik yg sama dan tidak pernah berpindah. Tapi dgn membuat dua kondisi yg berbeda ketika paket berada di input queue (sebelum dilakukan lookup) dan ketika sesudah berada di output (setelah lookup dan tahu paket harus dikirim ke interface yg mana), maka router bisa menjalankan fitur atau melakukan perlakuan yg berbeda terhadap si paket di dua kondisi tersebut.
Jadi kata kuncinya adalah: Layer 3 dan layer 2 header, routing table dan forwarding table, lookup, perpindahan packet ke lokasi atau queue yg berbeda, output queue, layer 2 re-write.
Mari kita melihat sekali lagi dgn lebih detil. Ini adalah gambar dari buku Inside Cisco IOS Architecture karangan Vijay Bollapragrada, untuk proses switching paket yg sederhana yg disebut process switching.
Ketika interface processor menerima paket dari network media di input interface atau ingress, paket tsb harus disimpan di buffer atau memory (1) dan di saat yg bersamaan harus meng-interrupt main processor (2) untuk memberi tahu ada paket yg harus diproses. Buku ini fokus ke arsitektur software, maka dijelaskan kalo processor akan memanggil proses yg disebut ip_input di Cisco (3) untuk melakukan lookup di routing dan forwarding table. Lookup ini menghasilkan ke interface output atau egress mana paket harus dikirmkan (4). Processor kemudian melakukan layer 2 re-write atau memberi layer 2 header baru ke paket (5) dan memindahkan paket tadi untuk diproses oleh processor di interface egress (6), sehingga akhirnya paket keluar lagi ke network media. Step 7 hanya menjelaskan bahwa main processor akan diberi tahu kalau paket sudah dikirimkan keluar, sehingga memory yg digunakan untuk menyimpan paket bisa dibebaskan dan counter di interface bisa dinaikkan sesuai dgn jumlah paket yg keluar.
Gue harus mengakui kalo gue tidak akan bisa menjelaskan sebagus Vijay (dan pengarang lainnya), jadi gue menyarankan untuk membaca buku ini buat yg masih penasaran. Tapi poin utama gue disini adalah untuk menekankan ada hal-hal lain yg harus dilakukan selain lookup di routing table, yaitu memindahkan paket itu sendiri dari interface ingress ke egress, re-write layer 2 header ke paket dll yg akan menjadi penting dalam diskusi berikutnya.
Jadi mengapa penting untuk mengerti proses internal untuk switching paket di dalam router? Biasanya kita memang selalu fokus ke proses interaksi antar router dgn protokol routing untuk memastikan routing table bisa dibangun. Setelah table tsb jadi, proses lookup Layer 3 itu sendiri dapat dilakukan dgn sangat cepat. Untuk setiap paket yg datang kita harus melakukan pencarian di database yg berisi daftar network tujuan yg diketahui dgn interface egress yg berhubungan. Proses lookup atau pencarian bisa dilakukan sgt cepat terutama karena vendor spt Cisco sudah mengembangkan mekanisme dan algoritma sehingga perbandingannya tidak perlu satu-satu di daftar dari atas sampai bawah. Dgn menggunakan Cisco Express Forwarding (CEF), input dari routing table akan menjadi dasar pembuatan struktur data mtrie seperti digambarkan di bawah. Dgn melakukan proses lookup seperti di gambar, ketika entry ditemukan maka akan ada pointer ke table lain yg disebut adjacency table, yg berisi informasi dari Layer 2 untuk next hop tujuan.
Gue tidak mau terlalu detil mendiskusikan masalah lookup di CEF ini, karena ada satu buku berjudul sama yg khusus didedikasikan untuk itu. Dan gue mau mendiskusikan lebih ke arah arsitektur router hardware ketimbang algoritma CEF, jadi gue sarankan untuk membaca buku Cisco Express Forwarding tersebut dan juga buku Vijay yg tadi.
Sekarang mari bicara tentang proses perpindahan paket dari interface ingress ke egress. Seperti sudah dijelaskan sebelumnya, paket bisa disimpan di central memory selama menunggu proses lookup dilakukan. Jadi interface ingress bisa mengirimkan paket ke sana, dan kemudian egress bisa mengambil paket tsb dari tempat yg sama. Dgn prinsip spt ini terlihat bahwa keterbatasan atau bottleneck dari si proses ada di performance central memory, dan juga kemampuannya untuk melayani beberapa request dari interface processor yg berbeda secara bersamaan.
Untuk meningkatkan performance memory, penggunaan local memory di interface bisa dilakukan. Jadi paket akan disimpan di local memory interface ingress, kemudian di copy ke central memory melalui komunikasi bus yg bisa diakses interface mana saja, dan kemudian egress tujuan akan meng-copy paket tsb ke local memory nya. Mungkin timbul pertanyaan, mengapa dari ingress local memory tidak langsung dikirimkan ke egress local memory? Tunggu dulu. Ini bisa saja dilakukan tapi berarti si interface processor di ingress harus lebih pintar dan melakukan proses lookup sendiri untuk menentukan ke interface egress mana paket harus dikirimkan. Ini akan gue diskusikan di bagian berikutnya.
Ketika kita membuka penutup router lama utk kelas mid-range atau menengah, kemungkinan kita akan melihat sesuatu yg mirip spt gambar di bawah. Main board adalah komponen dasar tempat meletakan semua komponen lain untuk saling dihubungkan. Ada central atau main route processor, central memory, network card untuk interface keluar, PCI bus untuk komunikasi dari network card ke route processor, dan komponen lain spt flash memory tempat menyimpan software image si router, boot ROM untuk menyimpan firmware atau program kecil yg digunakan untuk booting router sebelum software image bisa dijalankan, dan sebagainya.
Balik lagi ke kata kunci: Layer 3 dan layer 2 header ada di dalam paket. Input queue atau buffer bisa berada di local memory ingress network card atau di central memory. Routing table dan forwarding table dibangun oleh route processor dgn menggunakan protokol routing untuk berkomunikasi dgn router-router lain. Layer 3 lookup (dan juga proses pencarian informasi untuk layer 2 next hop tujuan) dilakukan oleh route processor dgn menggunakan algoritma yg membandingkan tujuan si paket dgn daftar di routing table dan forwarding table. Proses perpindahan paket antara lokasi atau queue yg berbeda, bisa berarti paket dari local memory ingress network card di copy ke central memory menggunakan PCI atau komunikasi bus, untuk kemudian di copy oleh engress network card ke local memory nya. Output queue bisa ada di local memory egress network card atau central memory. Layer 2 re-write untuk memberi header layer 2 yg baru ke paket dilakukan oleh route processor sebelum paket bisa dikirimkan keluar router. Fitur-fitur spt filter ataupun NAT dilakukan oleh route processor. Menjalankan fitur di interface ingress atau egress bisa berarti route processor akan menjalankan fitur ke paket untuk kondisi sebelum lookup dilakukan dan sesudah lookup dilakukan, ketika interface egress sudah diketahui.
Apakah gambar yg terakhir mengingatkan kita akan sesuatu? Ya, gambar itu mirip sekali dgn gambar skema dan komponen dari sebuah PC! Ini adalah alasan mengapa beberapa orang yg berbakat bisa membuat software router mereka sendiri, untuk dijalankan oleh PC normal, menambahkan beberapa network card, dan meng-klaim bahwa router bikinan mereka bisa mengalahkan router bikinan vendor yg dijalankan di hardware khusus.
Pendapat gue tentang ini: tergantung. Jika kita membandingkan router bikinan di atas PC tadi dgn router lama di kelas mid-range, ini bisa saja benar. Karena hampir semua hal dilakukan oleh cetral processor dan memory, seperti halnya PC, sehingga yg harus kita lakukan adalah membuat software router yg mampu melakukan lookup dan switching paket, dan melakukan optimisasi untuk memastikan resource tsb digunakan dgn lebih baik.
Tapi bagaimana dgn fitur-fitur baru di next generation network? Fitur-fitur tsb sangat kompleks dan membutuhkan kerja sama team, termasuk juga non-teknis untuk membuat keputusan bagaimana suatu protokol dan fitur harus diimplementasikan meskipun sudah ada standar. Dan di bagian kedua gue akan menjelaskan apa yg vendor sudah lakukan untuk membuat router modern atau next generation router. Karena tentunya tantangannya bukan lagi melakukan switching paket dari interface ingress ke egress, tapi bagaimana melakukan itu secara cepat. Dan ini harus dilakukan secara konsisten untuk paket dgn tipe yg berbeda-beda, dgn besar paket yg berbeda, dgn jumlah yg sangat besar untuk mengakomodasi besarnya traffic di network sekarang ini. Kemudian tantangan berikutnya adalah bagaimana untuk menjalankan beberapa fitur yg harus dilakukan di hardware, sbg contoh bagaimana memberikan perlakuan yg berbeda ke paket di interface egress berdasarkan prioritas untuk dikirimkan ke network media. Atau ketika proses re-write layer 2 di paket harus dilakukan di hardware supaya bisa mendapat performance yg maximum.
Jika sudah membaca sejauh ini dan merasa informasi yg dibutuhkan sudah cukup dalam kerjaan sehari-hari, dan merasa lebih penting untuk berfokus ke komunikasi antar router, atau protokol dan fitur yg harus dijalankan di beberapa router, maka silahkan untuk tetap melihat sebuah router itu sbg black box atau node dgn banyak interface untuk paket masuk dan keluar. Dan tidak perlu untuk membaca bagian berikutnya dimana gue akan mendiskusikan dgn lebih detil bagaimana proses switching paket di dalam paket bekerja.
Akhir dari bagian pertama.
No comments:
Post a Comment