[teknologia] Re: protocol yang diproses kernel

2004-11-05 Terurut Topik Monang Setyawan

On Fri, 5 Nov 2004 17:08:37 +0900, baskara [EMAIL PROTECTED] wrote:
 
 setelah ngobrol yang santai2, sekarang mau tanya agak berat sedikit:
 apakah protokol2 yang dikenali oleh kernel hanya TCP, UDP, IGMP, dan ICMP?
 ini dapat kesimpulan setelah baca tentang raw socket.
 

Maksudnya dikenali (atau diproses) kernel gimana ya? 

Kalau maksudnya dikenali adalah diterima, diproses, kemudian
diteruskan ke tempat lain oleh modul yang ada di kernel, berarti
tergantung modul yang terload di kernel kan. (CMIIW)

-- 
Demi masa..


[teknologia] Re: protocol yang diproses kernel

2004-11-05 Terurut Topik baskara

On Fri, 5 Nov 2004 16:55:04 +0700, Monang Setyawan [EMAIL PROTECTED] wrote:

 Kalau maksudnya dikenali adalah diterima, diproses, kemudian
 diteruskan ke tempat lain oleh modul yang ada di kernel, berarti
 tergantung modul yang terload di kernel kan. (CMIIW)

Dikenali = dibaca, diterjemahkan, diolah, dll pada level kernel.
Kalau nomor protokol adalah bukan 4 protokol itu = setelah dibaca
kernel (ternyata nomor protocolnya bukan UDP, TCP, IGMP atau ICMP),
kelanjutannya belum tahu (harus ditangkap oleh raw socket??)...apakah
diteruskan ke level user process atau langsung diforward (tergantung
destination address dan apakah ada socket yang match).

Saya ambil kutipan dari buku unix network programming (UNP):
...most kernels only process datagrams containing values of 1 (ICMP),
2 (IGMP), 6 (TCP) and 17 (UDP). The gated program that
implements OSPF must use a raw socket to read and write these IP
datagrams since they contain a protocol field the kernel knows nothing
about.

Ini asal mula pertanyaan saya tentang kernel knows nothing about.

Berarti semua IP datagram yang nomor protokolnya bukan 1,2,6,17, harus
dikirim/dibaca dari raw socket? Buku UNP itu hanya menjelaskan
demultiplexing kalau protokolnya yang 4 itu.. kalau yang lain tidak
disebut-sebut :(  dan kemudian muncul mengenai nomor protokol
lainnya di bab tentang raw socket (oleh karena itu, kesimpulan saya
sementara adalah hanya raw socket yang bisa menerimanya).

 --
 Demi masalah



[teknologia] Re: protocol yang diproses kernel

2004-11-05 Terurut Topik Monang Setyawan

On Fri, 5 Nov 2004 21:35:59 +0900, baskara [EMAIL PROTECTED] wrote:
 
 On Fri, 5 Nov 2004 16:55:04 +0700, Monang Setyawan [EMAIL PROTECTED] wrote:
 
  Kalau maksudnya dikenali adalah diterima, diproses, kemudian
  diteruskan ke tempat lain oleh modul yang ada di kernel, berarti
  tergantung modul yang terload di kernel kan. (CMIIW)
 
 Dikenali = dibaca, diterjemahkan, diolah, dll pada level kernel.
 Kalau nomor protokol adalah bukan 4 protokol itu = quotesetelah dibaca
 kernel/quote (ternyata nomor protocolnya bukan UDP, TCP, IGMP atau ICMP),
 kelanjutannya belum tahu (harus ditangkap oleh raw socket??)...apakah
 diteruskan ke level user process atau langsung diforward (tergantung
 destination address dan apakah ada socket yang match).

CMIIW

Menurut saya itu tergantung modul yang terload di kernel mas. Pada
umumnya, seperti yg biasa kita temui pada berbagai sistem komputer,
ada beberapa lapisan abstraksi yang akan berperan semenjak paket masih
di kernel space, hingga (most but not a must) nantinya paket sampai ke
user space (atau yg mas sebut sbg user process). Umumnya di *nix
seperti berikut (semakin ke bawah semakin dekat ke user space) :

- modul 1 : device driver, ini modul yang berurusan langsung dengan
hardware/NIC.

- modul 2 : device independent interface (or whatever its name),
fungsinya mirip2 HAL -- Hardware Abstraction Layer (atau memang HAL?).

- modul 3 : network protocol module, ini yang bertanggung jawab
menangani suatu network protokol. Jadi untuk 1 protokol dibutuhkan 1
modul. Bagaimana kalau tidak ada modul yang bertanggung jawab terhadap
suatu protokol? Modul 4 simply ignores that *unknown protocol* packet.

- modul 4 : protocol independence module, ini dipakai oleh
modul/subsistem kernel lain sehingga semua akses transparan terhadap
protokol dan hardware. Ada subsistem kernel yang bertanggung jawab
untuk suspend / resume proses baca tulis di sini.

- system call / virtual file system : di sinilah /proc/sys/net/ yang
dimaksudkan mas Yulian berada. User space application mengakses
network (via socket) dari sini. Bisa dikatakan di sini ada pemetaan 1
ke 1 antara modul 3 dengan tiap file yg ada di sini.

Kalau yang nggak umum / ekstrimnya, misalnya kita ingin memfungsikan
mesin kita cuma sebagai forwarder, kita bisa saja cuma pakai satu
modul (device driver) yang simply write(dest,read()). Ini yang saya
maksud dengan tergantung modul yang terload di kernel ;).

(nb : sebagai contoh, khttpd web server memungkinkan mesin kita untuk
tidak mengijinkan paket http sampai ke user space ;)

 Saya ambil kutipan dari buku unix network programming (UNP):
 ...most kernels only process datagrams containing values of 1 (ICMP),
 2 (IGMP), 6 (TCP) and 17 (UDP). The gated program that
 implements OSPF must use a raw socket to read and write these IP
 datagrams since they contain a protocol field the kernel knows nothing
 about.
 
 Ini asal mula pertanyaan saya tentang kernel knows nothing about.

Yup.. Pada kasus ini, analoginya mungkin begini : kernel itu seperti
kantor pos, kalau nggak ada pegawainya (modul), dia nggak ada gunanya
;)

 
 Berarti semua IP datagram yang nomor protokolnya bukan 1,2,6,17, harus
 dikirim/dibaca dari raw socket? Buku UNP itu hanya menjelaskan
 demultiplexing kalau protokolnya yang 4 itu.. kalau yang lain tidak
 disebut-sebut :(  dan kemudian muncul mengenai nomor protokol
 lainnya di bab tentang raw socket (oleh karena itu, kesimpulan saya
 sementara adalah hanya raw socket yang bisa menerimanya).

Maaf, saya masih bingung dengan istilah raw socket ini pak (maklum,
newbie euy). Ini maksudnya inet/bsd/application socket yang paketnya
mem-bypass beberapa abstraksi di atas? Kalau demikian, saya juga
sependapat mas. Jika tidak ada modul 3 yang bertanggung jawab terhadap
suatu protokol, maka modul 4 akan mengabaikannya dan tidak meneruskan
ke level sesudahnya. Jadi menurut saya satu-satunya cara membaca
adalah dengan membypass modul 3 dan 4 (kita langsung baca/tulis via
modul 2, atau bahkan langsung ke device driver)

 
  --
  Demi masalah
yang (kebanyakan) ada solusinya ;)
 
 


-- 
Demi masa..