Rumah > Tutorial sistem > LINUX > teks badan

Terangkan secara ringkas proses menghantar dan menerima paket data rangkaian dalam sistem Linux

WBOY
Lepaskan: 2024-02-12 21:54:33
ke hadapan
646 orang telah melayarinya

Apabila pelayan Linux menerima paket data rangkaian, apakah pemprosesan yang perlu dilakukan untuk memindahkan data ke proses aplikasi langkah demi langkah? Apabila proses aplikasi menghantar paket data, bagaimanakah Linux menghantar paket data keluar? Hari ini kita akan bercakap mengenai topik ini.

Sebelum ia bersedia untuk menerima paket data rangkaian, Linux perlu melakukan banyak kerja penyediaan, seperti: pemulaan subsistem rangkaian, pendaftaran timbunan protokol, permulaan pemacu kad rangkaian, memulakan kad rangkaian, dsb. Hanya apabila ini sedia boleh ia benar-benar Mula menerima paket rangkaian.

Timbunan protokol rangkaian


Sebelum memperkenalkan Linux untuk menghantar dan menerima paket data rangkaian, mari kita fahami susunan protokol rangkaian Linux dahulu.

Organisasi Antarabangsa untuk Standardisasi telah merumuskan Model Rujukan Interkoneksi Sistem Terbuka, iaitu model rangkaian OSI terutamanya mempunyai 7 lapisan, iaitu lapisan aplikasi, lapisan persembahan, lapisan sesi, lapisan pengangkutan dan lapisan rangkaian lapisan fizikal.

Oleh kerana model OSI terlalu kompleks, ia hanya model konsep dan teori dengan terlalu banyak lapisan, yang meningkatkan kerumitan kerja rangkaian, jadi ia tidak digunakan secara besar-besaran.
Yang paling biasa kami gunakan ialah model rangkaian TCP/IP Sistem Linux melaksanakan susunan protokol rangkaian mengikut model rangkaian ini.

Model rangkaian TCP/IP mempunyai 4 lapisan iaitu lapisan aplikasi, lapisan pengangkutan, lapisan rangkaian dan lapisan antaramuka rangkaian Fungsi setiap lapisan adalah seperti berikut:

1. Lapisan aplikasi Sesuai dengan lapisan atas model rujukan OSI, menyediakan pengguna dengan pelbagai perkhidmatan yang diperlukan, seperti: FTP, Telnet, DNS, SMTP, dll.

2. Lapisan pengangkutan Sesuai dengan lapisan pengangkutan model rujukan OSI, ia menyediakan fungsi komunikasi hujung ke hujung untuk entiti lapisan aplikasi, memastikan penghantaran paket data secara berurutan dan integriti data. Lapisan ini mentakrifkan dua protokol utama: Protokol Kawalan Penghantaran (TCP) dan Protokol Datagram Pengguna (UDP).

3. Lapisan rangkaian Sepadan dengan lapisan rangkaian model rujukan OSI dan terutamanya menyelesaikan masalah komunikasi hos-ke-hos. Ia mengandungi protokol yang direka untuk penghantaran logik paket data ke seluruh rangkaian. Ia memberi tumpuan kepada menetapkan semula alamat IP kepada hos untuk melengkapkan pengalamatan hos Ia juga bertanggungjawab untuk menghalakan paket data dalam pelbagai rangkaian. Terdapat tiga protokol utama dalam lapisan ini: Internet Protocol (IP), Internet Group Management Protocol (IGMP), dan Internet Control Message Protocol (ICMP).

4. Lapisan antara muka rangkaian Sepadan dengan lapisan fizikal dan lapisan pautan data dalam model rujukan OSI. Ia bertanggungjawab untuk memantau pertukaran data antara hos dan rangkaian. Malah, TCP/IP sendiri tidak mentakrifkan protokol lapisan ini Sebaliknya, setiap rangkaian yang mengambil bahagian dalam interkoneksi menggunakan lapisan fizikal dan protokol lapisan pautan datanya sendiri, dan kemudian menyambung ke lapisan akses rangkaian TCP/IP. Address Resolution Protocol (ARP) berfungsi pada lapisan ini, lapisan pautan data model rujukan OSI.
Terangkan secara ringkas proses menghantar dan menerima paket data rangkaian dalam sistem Linux

Terima paket rangkaian


Terangkan secara ringkas proses menghantar dan menerima paket data rangkaian dalam sistem Linux

Selepas paket data rangkaian mencapai kad rangkaian, ia disimpan dalam baris gilir penerimaan kad rangkaian dalam susunan FIFO Kad rangkaian menulis paket rangkaian ke alamat memori yang ditentukan (Ring Buffer) melalui teknologi DMA.

Ring Buffer dicipta dan dimulakan apabila pemacu kad rangkaian bermula, dan menyimpan deskriptor penimbal sk_buff (alamat fizikal dan saiz, dsb.).

Apabila paket rangkaian tiba, dapatkan deskriptor sk_buff yang tajam daripada Penampan Cincin dan tulis data ke alamat melalui DMA. Selepas data dalam sk_buff diserahkan kepada timbunan protokol atas untuk diproses, perihalan dalam Ring Buffer dikemas kini kepada sk_buff yang baru diperuntukkan.

Kemudian kad rangkaian memulakan gangguan perkakasan kepada CPU Apabila CPU menerima permintaan gangguan perkakasan, ia menemui fungsi pemprosesan gangguan berdaftar mengikut pendaftaran gangguan.

Fungsi pengendali gangguan perkakasan akan melakukan perkara berikut:

1. Gangguan kad rangkaian Shield

Tujuannya adalah untuk mengelakkan CPU daripada kerap terganggu dan tidak dapat mengendalikan tugasan lain. Gangguan masking memberitahu kad rangkaian bahawa ia sudah tahu bahawa terdapat data dalam memori Lain kali ia menerima paket data, ia hanya boleh menulis kepadanya memori secara langsung tanpa memberitahu CPU.

2 Mulakan gangguan lembut dan pulihkan gangguan yang baru disekat

Selepas benang ksoftirqd dalam kernel menerima gangguan lembut, ia akan memanggil fungsi pemprosesan gangguan lembut yang sepadan untuk mengundi dan memproses data, iaitu: dapatkan bingkai data daripada Penampan Cincin, diwakili oleh sk_buff, dan serahkan kepada protokol rangkaian sebagai paket rangkaian Timbunan diproses lapisan demi lapisan dari bawah ke atas.

Timbunan protokol rangkaian memproses paket rangkaian seperti berikut:

1. Lapisan antara muka rangkaian

Pertama, lapisan antara muka rangkaian menyemak kesahihan dan ketepatan mesej Jika ia menyalahi undang-undang atau pengesahan mesej tidak betul, buangnya. Jika tidak, ketahui jenis protokol lapisan atas (IPv4 atau IPv6), alih keluar pengepala bingkai dan treler bingkai, dan kemudian Biarkan pada lapisan atas, lapisan rangkaian, untuk diproses.

2. Lapisan rangkaian

Lapisan rangkaian mengeluarkan pengepala IP dan menentukan arah seterusnya paket rangkaian, sama ada ia dimajukan atau diserahkan kepada lapisan atas. Selepas mengesahkan bahawa paket rangkaian akan dihantar ke mesin tempatan, jenis protokol lapisan atas (seperti TCP atau UDP) dikeluarkan, pengepala IP dikeluarkan, dan kemudian diserahkan kepada lapisan pengangkutan untuk diproses.

3. Lapisan pengangkutan

Selepas lapisan pengangkutan mengeluarkan pengepala TCP atau pengepala UDP, ia mencari Soket yang sepadan berdasarkan empat tuple [IP sumber, port sumber, IP destinasi, port destinasi] dan menyalin data ke penimbal terima Soket.

4. Lapisan aplikasi

Akhir sekali, program lapisan aplikasi memanggil antara muka Socket untuk menyalin data dalam penimbal penerima Soket kernel ke penimbal lapisan aplikasi.

Pada ketika ini, proses penerimaan paket rangkaian telah tamat.

Hantar paket rangkaian


Selepas kita memahami proses penerimaan paket rangkaian, mudah untuk memahami proses penghantaran paket rangkaian. Arah penghantaran paket rangkaian adalah betul-betul bertentangan dengan arah penerimaan.

Pertama, aplikasi memanggil antara muka Soket untuk menghantar paket rangkaian. Ini ialah panggilan sistem yang akan jatuh dari mod pengguna ke lapisan soket mod kernel.

Lapisan soket akan digunakan untuk memori sk_buff mod kernel, menyalin data yang akan dihantar oleh pengguna ke memori sk_buff, dan menambahnya pada penimbal penghantaran Soket untuk menunggu pemprosesan oleh timbunan protokol rangkaian.

Memandangkan paket data rangkaian adalah data mentah apabila dihantar daripada aplikasi ke kernel, timbunan protokol mesti menambah konvensyen komunikasi kepada data mentah untuk memastikan data itu boleh dikenali dengan betul apabila ia sampai ke pelayan. Timbunan protokol rangkaian mengeluarkan paket data dari penimbal penghantaran Soket, dan kemudian memprosesnya lapisan demi lapisan dari atas ke bawah mengikut lapisan timbunan TCP/IP (lapisan pengangkutan, lapisan rangkaian, lapisan antara muka rangkaian). menukar pengepala protokol Maklumat dimasukkan secara berterusan ke dalam paket data.

Aliran pemprosesan timbunan protokol untuk menghantar paket data adalah seperti berikut:

1. Lapisan pengangkutan

Pada lapisan pengangkutan, pengepala TCP akan ditambahkan pada pelayan dan salinan baharu sk_buff akan disalin Ini kerana sk_buff akan dikeluarkan apabila ia mencapai kad rangkaian dan penghantaran selesai, dan protokol TCP menyokong penghantaran semula. . Untuk memastikan bahawa penghantaran paket rangkaian boleh dipercayai, sk_buff ini tidak boleh dipadamkan sebelum menerima ACK daripada pihak lain.

2. Lapisan rangkaian

Pada lapisan rangkaian, ia melakukan kerja-kerja berikut terutamanya: memilih laluan (mengesahkan IP lompatan seterusnya), mengisi pengepala IP, penapisan netfilter dan membahagikan paket data yang melebihi saiz MTU. Selepas memproses tugasan ini, ia akan diserahkan kepada lapisan antara muka rangkaian untuk diproses.

3. Lapisan antara muka rangkaian

Lapisan antara muka rangkaian akan melakukan pengalamatan alamat fizikal untuk mencari alamat MAC lompatan seterusnya, mengisi pengepala bingkai dan treler bingkai, dan meletakkannya dalam baris gilir penghantaran. Kemudian cetuskan gangguan lembut untuk memberitahu pemacu kad rangkaian: Terdapat paket rangkaian baharu dalam baris gilir yang perlu dihantar. Apabila pemandu menerima pemberitahuan, ia akan membaca bingkai rangkaian daripada baris gilir paket hantar melalui DMA, dan menulis data ke dalam baris gilir penghantaran FIFO kad rangkaian melalui DMA.

4. Peralatan kad rangkaian

Peranti kad rangkaian mengeluarkan paket data dari baris gilir penghantaran FIFO dan menghantarnya ke rangkaian apabila penghantaran selesai, peranti kad rangkaian akan mencetuskan gangguan keras untuk melepaskan memori, terutamanya untuk melepaskan memori sk_buff dan membersihkan RingBuffer; ingatan. Akhir sekali, apabila respons ACK mesej TCP ini diterima, lapisan pengangkutan akan mengeluarkan sk_buff asal.

Pada ketika ini, proses penghantaran paket rangkaian telah tamat.

Atas ialah kandungan terperinci Terangkan secara ringkas proses menghantar dan menerima paket data rangkaian dalam sistem Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:lxlinux.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!