Bagaimana port “mendengarkan”, menarik atau mendorong?

9

Ketika Anda menulis kode untuk mendengarkan dari port, seperti 80 misalnya, apa yang terjadi di bawah tenda? Apakah metode yang digunakan OS untuk mendengarkan adalah menarik, atau mendorong? Dengan kata lain, apakah OS memeriksa port itu setiap x milidetik misalnya?

Saya tidak mengerti. Semakin saya memikirkannya, semakin saya merasa tidak bisa melakukan apa pun selain menarik.

Maksudku, bahkan jika OS mengatur fungsi panggilan balik, masih ada yang harus memahami bahwa informasi baru telah tiba untuk memanggil fungsi panggilan balik itu. Itu sesuatu yang masih harus menggunakan tarik untuk memahami kedatangan data baru.

Bagaimana port mendengarkan?

Saeed Neamati
sumber

Jawaban:

14

Secara teoritis, ini tergantung pada spesifikasi OS dan perangkat keras jaringan. Dalam praktiknya, arus utama OS dan perangkat keras menggunakan model push berdasarkan interupsi untuk interaksi antara perangkat keras dan OS (dan semua perangkat lunak yang dikendalikan oleh OS).

Pada dasarnya, interupsi adalah mekanisme level yang sangat, sangat rendah di mana perangkat keras periferal dapat memberi sinyal kepada CPU bahwa ada peristiwa yang perlu ditangani (seperti paket jaringan telah tiba, kunci telah ditekan, dll.). CPU bereaksi terhadap ini dengan menangguhkan apa pun yang dilakukannya pada waktu itu dan menjalankan interrupt handler sebagai gantinya.

Penanganan interupsi biasanya dilakukan oleh OS atau setidaknya dimulai oleh OS dan diserahkan ke kode aplikasi yang lebih spesifik yang telah terdaftar sebagai tertarik pada jenis acara tertentu.

Michael Borgwardt
sumber
maksud Anda port adalah perangkat keras periferal yang pada saat kedatangan paket jaringan baru, mengirimkan interupsi ke CPU. OK, tapi bagaimana port memahami bahwa paket jaringan baru telah tiba? Melalui mekanisme tarikan? atau melalui listrik? Bagaimana?
Saeed Neamati
1
Kartu jaringan adalah perangkat keras periferal. Port adalah murni perangkat lunak yang membangun protokol TCP / IP. OS akan bereaksi terhadap interupsi perangkat keras, sebut TCP / IP stack, yang memiliki semacam registry yang didengarkan oleh aplikasi. Jika tidak ada pendengar terdaftar, paket akan diabaikan atau respons kesalahan dikirim. Jika ada pendengar, itu akan disebut.
Michael Borgwardt
maaf mengikuti rantai yang ketat, :). Tetapi bagaimana kartu jaringan memahami bahwa paket baru telah tiba. Saya hanya mencoba mencari tahu apakah perangkat asli dalam rantai ini (aplikasi, OS, perangkat keras, kabel jaringan) menggunakan tarikan, atau dorong. Terima kasih sudah tinggal bersamaku, sobat. :)
Saeed Neamati
1
@ Saeed: Saya tidak yakin bahwa perbedaan "tarikan vs dorong" masuk akal di tingkat perangkat keras. Dan itu tergantung pada detail teknologi jaringan. Misalnya, firmware ethernet atau kartu WiFi harus terus memantau semua lalu lintas WiFi hingga menemukan paket yang alamat MAC-nya cocok dengan miliknya, pada titik mana ia akan mengirim interupsi. Saya tidak akan menyebutnya "tarik", karena kartu hanya mendengarkan secara pasif. Tetapi perangkat keras jaringan yang didasarkan pada koneksi point-to-point dapat bekerja sepenuhnya berbeda.
Michael Borgwardt
1
"Tetapi bagaimana kartu jaringan memahami bahwa paket baru telah tiba"? Tegangan. Serius. Sinyal datang baik melalui radio atau melalui kabel. Aktivitas sinyal tegangan yang diterjemahkan oleh kartu sebagai bit. Ini mengganggu CPU untuk mengindikasikan bit telah tiba.
S.Lott
8

OK, saya bukan insinyur perangkat keras Ethernet, tapi saya pikir saya bisa menusuk pertanyaan Anda. Ketika Anda menulis kode untuk mendengarkan dari port, hal berikut terjadi:

  • Kode aplikasi Anda memblokir / tidur / "memilih" / polling hingga OS memberi sinyal bahwa suatu paket telah tiba (dengan beberapa bit di header IP yang menunjukkan bahwa paket tersebut terkait dengan "port" tertentu dan dengan demikian dengan aplikasi Anda yang mendengarkannya. port itu)
  • OS biasanya tidak memilih (dalam arsitektur x86 / PC) untuk paket baru, hanya berjalan dengan gembira sampai menerima interupsi dari perangkat keras jaringan Ethernet (diteruskan oleh driver jaringan Ethernet, antarmuka OS / perangkat keras).
  • Perangkat keras jaringan Ethernet itu sendiri di bawah penutup biasanya berisi pengontrol Ethernet dan beberapa "penerima penyangga" alias "penyangga paket". Driver jaringan Ethernet akan mengelola detail dengan memperhatikan bahwa buffer sudah penuh dan OS harus diberitahukan; Saya tidak benar-benar jelas apakah ini biasanya mendorong atau menarik dalam perangkat keras Ethernet, tetapi saya curiga ini didorong oleh interupsi, atau beberapa register pada chip diatur ketika buffer siap. Tapi apa yang membuat buffer?
  • Bagian yang lebih rendah lagi dari perangkat keras Ethernet mengisi buffer (atau paket DMA ke memori utama secara langsung). Logika level sangat rendah sebenarnya mengenali perubahan tegangan (atau pensinyalan optik) dan menerjemahkannya sebagai "bit" dan menempatkan hasilnya ke dalam buffer penerima paket (dan mungkin menetapkan nilai register dalam perangkat Ethernet). (Sidenote: kembali sebelum Kartu Antarmuka Jaringan, ketika orang menggunakan koneksi port serial / paralel, satu byte yang masuk dapat menghasilkan interupsi perangkat keras (IRQ) ke OS; lihat paragraf empat http://zone.ni.com/devzone / cda / tut / p / id / 4052 )
  • Bagaimana perangkat keras tingkat terendah tahu apa yang merupakan "sedikit"? Ya, Ethernet , setidaknya sebagian besar yang lebih tua / umum, gunakan Manchester Coding untuk memecahkan kode ayunan tegangan sebagai bit. Apa artinya itu? Nah, seperti yang disebutkan halaman itu, ada asumsi yang mendasari bahwa setiap bit ditransmisikan dalam waktu yang tetap, sebuah sinyal clock implisit. (Inilah sebabnya mengapa kecepatan Ethernet dalam standar ditetapkan pada 10Mb / dtk, 100Mb / dtk, 1000Mb / dt dll. Dan tidak sepenuhnya variabel; kedua sisi koneksi ethernet harus menyetujui kecepatan transmisi melalui konfigurasi atau mekanisme jabat tangan awal ketika kabel Ethernet dicolokkan. Ada sirkuit jam aktual dalam perangkat keras pada kedua sisi kawat yang mendukung satu atau lebih dari frekuensi tersebut. Kadang-kadang laju jam ini disebut frekuensi atau laju pensinyalannya.) Sementara saya ingin sebut saja pengambilan sampel, bukan polling / penarikan,

Jadi intuisi Anda bahwa "menarik" terjadi adalah, pada tingkat perangkat keras terendah, mungkin benar ... rangkaian Ethernet "menarik" apa tingkat tegangan pada interval tertentu. (Tetapi istilah "tarikan" dapat benar-benar salah jika seseorang berbicara pada level OS.) Tentu saja, jika Anda mulai berbicara tentang level tegangan dan bagaimana hal-hal dipicu, baik fisika listrik maupun optik tidak akan menggunakan istilah "push" "atau" tarik "untuk menggambarkan medan listrik dan potensi, tetapi mari kita asumsikan kita semua programmer, bukan fisikawan di sini. :-)

GregW
sumber
3

Kode yang mendengarkan port hanya menunggu pesan dari jaringan.

Setiap kali chip Ethernet menerima pesan, gangguan muncul. Kernel menangani gangguan ini dan meneruskan pesan ke driver jaringan. Pesan itu melewati tumpukan TCP / IP dan disaring atau diteruskan ke kode yang mendengarkan port.

mouviciel
sumber
masalahnya ada di sini. Bagaimana chip Ethernet menerima pesan? Apakah itu hanya tarikan lain? Apakah chip Ethernet memeriksa tegangan kabel jaringan pada interval tertentu, misalnya?
Saeed Neamati
4
Ini adalah pada tingkat listrik. Bagaimana bola lampu merasakan keadaan saklarnya? Ini bukan polling berkala. Meskipun detailnya lebih kompleks dalam chip Ethernet, ini pada dasarnya sama.
mouviciel
"Bagaimana chip Ethernet menerima pesan". Tegangan. Elektron pada kabel atau gelombang radio di udara. Chip menjadi diaktifkan oleh tegangan masuk dan mengumpulkan bit. Ini kemudian mengganggu CPU untuk menunjukkan keberadaan bit. CPU harus berhenti melakukan apa pun yang dilakukan dan mengumpulkan bit sebelum lebih banyak tiba. Tegangan.
S.Lott
3

Perangkat keras Ethernet akan menjadi satu polling kabel fisik (atau nirkabel). Ketika memiliki alasan 'cukup baik', itu akan mengganggu prosesor. Prosesor akan menentukan driver yang tepat kami yang akan menangani interupsi. Handler interrupt akan menangani acara (baca / tulis data). Sopir juga akan memberitahu Os untuk membangunkan utas menunggu ..

vrdhn
sumber
Bagaimana kawat fisik jajak pendapat Ethernet hardware? Dan jika mereka polling, tarikan yang sebenarnya digunakan, ya? Apakah mereka menonton kawat setiap 10 milidetik atau lebih?
Saeed Neamati