Kiến trúc của WinPCap

Một phần của tài liệu khảo sát các thư viện bắt gói lớp 2 và lớp 3 (Trang 33 - 38)

1.6.2.a. Tổng quan về kiến trúc.

Bởi vì BPF có kiến trúc mạnh mẽ và vững chắc, do đó kiến trúc cơ bản c a WinPCap (đ ợc trình bày trong hình d i) còn giữ lại những mô đun quan trọng nhất nh : một máy lọc, hai bộ đệm (ở mức ng ời dùng và nhân) và một cặp th viện tại mức ng ời dùng. Tuy nhi n, WinPCap có vài điểm khác nhau thực tế trong cấu trúc và trong hành vi c a chồng giao thức bắt gói, và có thể xem nh phát triển c a BPF.

Hình 1.8 WinPCap và NPF

Quá trình lọc đ ợc bắt đầu bởi một thành phần mức ng ời dùng mà có thể chấp nhận một bộ lọc đ ợc định nghĩa bởi ng ời dùng ( ví dụ nh là bắt tất cả những gói UDP), bi n dịch chúng đến một tập các chỉ thị mã giả (chẳng hạn nếu gói tin là gói IP và tr ờng protocol type bằng 17, nó sẽ trả lại là “true”), sau đó gửi

khả năng thực hiện đ ợc những chỉ thị này; do đó, nó phải có “BPF virtual machine”, cái mà tạm hiểu là máy ảo BPF v i khả năng thực thi những mã giả tr n những gói tin đến. Máy lọc t ơng thích BPF b n trong nhân là một điểm quan trọng để thu đ ợc hiệu suất tốt nhất.

Một điểm khác nhau quan trọng giữa BPF và NPF là việc lựa chọn một bộ đệm vòng ở mức nhân. Việc triển khai bộ đệm vòng có thể tối u hóa việc sao những khối c a gói tin tại cùng một thời điểm. Cơ chế này khó quản lý hơn bởi vì dữ liệu sao ch p không có kích th c cố định (libpcap sử dụng cùng một kích th c cho bộ đệm c a nhân và bộ đệm ng ời dùng, và bằng 32KB) và vì số l ợng c a byte cần sao ch p đ ợc cập nhật trong quá trình chuyển dữ liệu từ không gian nhân và không gian ng ời dùng. Thực vậy, quá trình sao ch p (đ ợc bắt đầu từ mức ng ời dùng) giải phóng một phần bộ đệm đã sẳn sàng truyền bởi vì phần hạt nhân bắt gói có thể bị ngắt nó, do nó chạy ở mức u ti n cao hơn và nó có thể chiếm độc quyền thời gian CPU. Việc triển khai bộ đệm này cho ph p tất cả bộ nh đ ợc sử dụng để l u trữ khi mạng bùng nổ, trong khi một cặp bộ đệm đ ợc chuyển đổi (nh trong BPF) cho ph p chỉ một nữa bộ nh đ ợc sử dụng.

Toàn bộ bộ đệm nhân th ờng đ ợc sao ch p bởi một lệnh đơn read(), do dó giảm số lời gọi hệ thống và d n đến số l ợng chuyển đổi ngữ cảnh giữa chế độ ng ời dùng và chế độ nhân. Do chuyển đổi ngữ cảnh y u cầu l u trạng thái c a nhiệm vụ ( mô tả CPU, đoạn trạng thái nhiệm vụ, khoảng chừng vài trăm byte), chuyển l n giảm chi phí c a quá trình. Tuy nhi n, bộ đệm ng ời sử dụng quá l n sẽ không mang đến lợi thế bởi vì chi phí chuyển đổi ngữ cảnh trở n n không đáng kể trong khi bộ nh đ ợc cấp phát tăng l n tuyến tính.

Bộ đệm nhân WinPCap th ờng l n h n so v i bộ đệm nhân BPF, khoảng 1MB. Một bộ đệm ảnh h ởng quá trình bắt gói, đặc biệt trong tr ờng hợp ứng dụng không có thể đọc nhanh nh trình điều khiển bắt gói có thể làm trong một thời gian lấy m u hạn chế. Nh trạng thái đó là th ờng thấy khi dữ liệu đ ợc truyền đến disk hoặc mạng có l u l ợng bùng nổ. Ng ợc lại, bộ đệm ng ời dùng nhỏ hơn và giá trị mặc định là 256KB. Cả bộ đệm nhân và bộ đệm ng ời dùng có thể thay đổi tịa thời điểm đang chạy.

Kích th c c a bộ đệm ng ời dùng rất quan trọng bởi vì nó quyết định giá trị l n nhất c a dữ liệu mà có thể đ ợc truyền từ không gian nhân t i không gian ng ời dùng trong một lời gọi hệ thống đơn. Mặc khác, chúng ta cũng cần chú ý rằng giá trị nhỏ nhất c a dữ liệu mà đ ợc sao ch p trong một lời gọi hệ thống là vô cùng quan trọng. Trong tr ờng hợp giá trị này l n, nhân sẽ đợi th m vài gói tin đến nữa tr c khi sao ch p dữ liệu đến ng ời dùng. Điều này đảm bảo số l ợng thấp c a lời gọi hệ thống, tức là sự chiếm dụng xử lý thấp, nó chính là một thiết lập tốt cho ứng dụng bắt gói. Mặc khác,dữ liệu nhỏ có nghĩa là nhân sẽ sao ch p ngay gói tin khi mà ứng dụng sẳn sàng để nhận nó. Điều này tốt cho việc ứng dụng thời gian thực

(giống nh một ARP redirector) mà cần tính đáp ứng tốt hơn từ nhân. Một phần l n c a trình điều khiển bắt gói tồn tại có một hành vi tĩnh mà mà có một đặc quyền trong hai khía cạnh đó. Hơn nữa, NPF hoàn toàn có thể cấu hình và cho ph p sử dụng để chọn giữa hiệu quả tốt nhất hoặc tính đáp ứng tốt nhất (hoặc một vài hành vi trung gian). WinPCap bao gồm một cặp lời gọi hệ thống mà có thể sử dụng cho việc thiết lập cả thời gian timeout sau việc đọc hết hạn và số l ợng nhỏ nhất c a dữ liệu mà có thể chuyển đến ứng dụng. Những gói tin đ ợc sao ch p hoặc khi số l ợng nhỏ nhất c a dữ liệu đ ợc sẳn sàng hoặc hết thời gian timeout. Mặt định, thời gian time out là 1 giây và giá trị nhỏ nhất c a dữ liệu là 16K. Khả năng này th ờng đ ợc gọi là “delayed write”.

Việc sao ch p bộ nh chung giữ thấp nhất bởi vì tổng phí c a nó. WinPCap có cùng sao ch p tổng phí c a libpcap/BPF gốc và những gói tin đ ợc sao ch p trong hai khoảng thời gian ( từ trình điều khiển mạng đến nhân, sau đó t i không gian ng ời dùng). Hơn nữa, bộ lọc đ ợc thực hiện khi mà gói tin v n ở trong bộ nh trình điều khiển mạng, do đó tránh một vài sao ch p những gói tin không cần thiết trong cách t ơng tự nh hàm BSD bpf-tap() đã làm.

1.6.2.b. Những mô đun của WinPCap.

WinPCap đ ợc tạo ra từ ba mô đun, một mô đun tại mức nhân,và hai mô đun tại mức ng ời dùng. Mô đun trong không gian ng ời sử dụng đ ợc cung cấp d i dạng một th viện liên kết động (DLLs).

Theo nh hình b n d i, tại mức thấp nhất, đó là card mạng. Nó đ ợc sử dụng để bắt gói mà truyền trên mạng. Nó có thể thiết lập ở chế độ “promiscuous mode”, có nghĩa là nó có thể chấp nhận tất cả gói tin thậm chí những gói tin đó không phải là c a máy tính đang làm việc.

Mô đun đầu tiên là một phần c a nhân (NPF) ( một tập tin VXD trong hệ điều hành Windows 95/98/ME và một tập tin SYS trong NT/2000), nó lọc gói tin và phân phối chúng mà không chạm t i mức ng ời dùng và cung cấp một vài mã hệ điều hành đặc biệt (quản lý nhãn thời gian) tốt nhất. Trình điều khiển bắt gói (Packet Capture Driver) là mức phần mềm thấp nhất c a cấu trúc bắt gói. Đây là một phần c a nhân và t ơng tác v i card mạng để thu thập những gói tin bắt đ ợc. Nó cung cấp cho ứng dụng một tập các hàm sử dụng đọc hoặc viết dữ liệu từ mạng tại l p data-link.

Mô đun thứ hai, packet.dll , đ ợc tạo ra cung cấp một giao tiếp chung đến trình điều khiển gói tin trong nền tảng Win32. Thực ra, mỗi phiên bản Windows cung cấp một giao tiếp khác nhau giữa những mô đun c a nhân và những ứng dụng ng ời dùng: packet.dll giao thiệp v i những thành phần khác nhau này, cung cấp một API độc lập v i hệ thống. Ch ơng trình dựa trên packet.dll có thể bắt những gói trên mỗi nền tảng Win32 mà không cần biên dịch lại. Packet.dll bao gồm việc thêm một vài hàm. Nó thực hiện một tập hoạt động mức thấp giống nh việc thu thập tên c a adapter hoặc liên kết động c a trình điều khiển, và nó có khả năng lấy một vài thông tin đặc biệc c a hệ thống giống nh là netmask c a máy và một vài bộ đếm phần cứng ( số đụng độ trên Ethernet, …). Cả DLL này và NPF là độc lập v i hệ điều hành và có thể thay đổi giữa Windows 95/98 và NT/2000 bởi vì kiến trúc khác nhau c a các hệ điều hành.

Packet.dll làm việc tại mức ng ời sử dụng, nh ng nó đ ợc tách ra từ ứng dụng bắt gói. Nó là một th viện liên kết động, cái mà không li n quan đến ứng dụng cho trình điều khiển bắt gói cung cấp một giao tiếp bắt gói độc lập v i hệ thống. Nó cho phép ứng dụng c a ng ời dùng thực thi trên những hệ điều hành khác nhau mà không cần biên dịch lại. Nó miêu tả một tập các hàm API để có thể sử dụng truy cập trực tiếp t i trình điều khiển bắt.

Mô đun thứ ba , Wpcap.dll (Winpcap.dll), nó không phụ thuộc vào hệ điều hành và chứa một vài hàm mức cao hơn nh là sinh ra bộ lọc và bộ đệm ng ời dùng, thêm vào những tính năng nâng cao nh thống k và ti m gói tin. Do đó, ng ời lập trình có thể truy cập t i hai loại c a API: một tập các hàm thô, chứa trong packet.dll, mà ánh xạ trực tiếp đến lời gọi mức nhân, và một tập các hàm mức cao hơn mà cung cấp bởi Wpcap.dll và thân thiện v i ng ời sử dụng hơn cũng nh mạnh mẻ hơn. DLL sau sẽ gọi cái tr c một cách tự động, mọt lời gọi mức cao có thể đ ợc dịch sang trong vài lời gọi hệ thống NPF. Ng ời lập trình sẽ sử dụng Wpcap.dll bình th ờng, chỉ trực tiếp truy cập đến packet.dll trong một vài tr ờng hợp hạn chế.

Winpcap.dll là một th viện tĩnh đ ợc sử dụng bởi một phần bắt gói c a ứng dụng. Nó sử dụng những dịch vụ đ ợc cung cấp bởi Packet.dll, và cung cấp những

ứng dụng ở mức cao hơn và một giao tiếp bắt gói mạnh mẽ. Nó là một liên kết tĩnh, điều đó có nghĩa nó chính là một phần c a ứng dụng mà đang sử dụng nó.

Giao tiếp ng ời dùng ở phần cao nhất c a ứng dụng bắt gói. Nó quản lý tính t ơng tác v i ng ời dùng và hiển thị kết quả c a bắt gói.Ứng dụng c a ng ời dùng nhận thông tin và biểu diễn nó d i dạng dữ liệu có ý nghĩa v i ng ời dùng. Bởi vì đối v i phần l n giao thức giao tiếp, ứng dụng c a ng ời dùng sẽ đ ợc linh hoạt và mô đun hóa.

Một điều cần l u ý chính là việc sử dụng thuật ngữ packet (gói tin) là ch a thực sự chính xác nh ng hầu hết nó có ý nghĩa. Quá trình bắt gói đ ợc thực hiện tại l p Datalink và PDU (Protocol Data Units) cho l p này đó chính là frame (khung) theo mô hình ISO/OSI).

CHƯƠNG 2. CÁC GIAO THỨC VÀ KHUÔN DẠNG DỮ LIỆU CHÍNH

Một phần của tài liệu khảo sát các thư viện bắt gói lớp 2 và lớp 3 (Trang 33 - 38)