Những kiến thức cơ bản về phân tích gói tin và mạng máy tính

Giới thiệu
Hàng ngày, có hàng triệu vấn đề xảy ra trong 1 mạng máy tính, từ việc đơn giản là nhiễm Spyware cho đến việc phức tạp như lỗi cấu hình Router, và các vấn đề này không thể giải quyết tất cả ngay lập tức được. Tốt nhất chúng ta có thể hi vọng thực hiện các công việc đó bằng cách chuẩn bị đầy đủ các kiến thức và các công cụ chúng ta cần có để xử lý những dạng vấn đề như trên.
Tất cả các vấn đề trên mạng đều xuất phát ở mức gói tin, nơi mà không có gì có thể che giấu đối với chúng ta, không có thứ gì bị ẩn đi bởi các cấu trúc menu, các hình ảnh bắt mắt hoặc là các nhân viên không đáng tin cậy. Ở mức gói tin, không có gì bí mật, chúng ta có thể điều khiển được mạng và giải quyết các vấn đề. Đây chính là thế giới của phân tích gói tin.
Chúng tôi sẽ bắt đầu viết loạt bài về kỹ thuật phân tích gói tin với công cụ tiêu biểu mà chúng tôi muốn giới thiệu ở đây là Wireshark. Khi kết thúc loạt bài này, bạn sẽ có thể thực hiện các kỹ thuật phân tích gói tin ở trình độ advanced, lúc đó bạn sẽ có thể giải quyết các vấn đề khó ở trong mạng của chính mình.
Trong bài đầu tiên này, chúng ta sẽ khởi đầu với những kiến thức căn bản, tập trung vào truyền thông mạng máy tính.

Cơ bản về phân tích gói tin
Phân tích gói tin, hay còn thường được gọi là lắng nghe gói tin hoặc phân tích giao thức, mô tả quá trình bắt và diễn giải dữ liệu sống như là các luồng đang lưu chuyển trong mạng với mục tiêu hiểu rõ hơn điều gì đang diễn ra trên mạng. Phân tích gói tin thường được thực hiện bởi 1 packet sniffer, là 1 công cụ được sử dụng để bắt dữ liệu thô đang truyền trên đường dây.

Phân tích gói tin có thể giúp chúng ta:
- Hiểu được các đặc điểm của mạng (cấu tạo của mạng).
- Biết được ai đang ở trên mạng.
- Xác định được ai hay cái gì đang sử dụng băng thông.
- Xác định những thời điểm mà việc sử dụng mạng đạt cao điểm.
- Chỉ ra các khả năng tấn công và các hành vi phá hoại.
- Tìm ra các ứng dụng không được bảo mật.
Có 1 vài chương trình bắt gói tin, bao gồm cả chương trinh miễn phí và sản phẩm thương mại. Mỗi chương trình được thiết kế với các mục tiêu khác nhau. Một vài chương trình bắt gói tin phổ biến như là tcpdump, OmniPeek và Wireshark. tcpdump là 1 chương trình có giao diện dòng lệnh, 2 chương trình còn lại đều có giao diện đồ họa.

Đánh giá 1 chương trình bắt gói tin
Bạn phải cân nhắc về các yếu tố sau khi lựa chọn 1 chương trình bắt gói tin:
- Các giao thức hỗ trợ: tất cả các chương trình bắt gói tin có thể diễn giải các giao thức khác nhau. Hầu hết có thể diễn giải các giao thức mạng thông dụng (IPv4, ICMP), các giao thức tầng vận chuyển (TCP, UDP), và thậm chí các giao thức tầng ứng dụng (DNS, HTTP). Tuy nhiên, chúng có thể không hỗ trợ các giao thức không thông dụng hay là các giao thức mới (IPv6, SMBv2 và SIP). Khi lựa chọn 1 chương trình, hãy chắc chắn rằng nó hỗ trợ những giao thức mà bạn sẽ sử dụng đến.
- Tính dễ sử dụng: ở đây chúng ta phải xem xét đến bố cục của chương trình, tính dễ cài đặt, và hoạt động theo tiêu chuẩn. Chương trình bạn chọn phải phù hợp với trình độ chuyên môn của bạn. Ví dụ, nếu bạn có ít kinh nghiệm trong việc phân tích gói tin, bạn nên tránh dùng những công cụ có giao diện dòng lệnh như tcpdump. Khi bạn đã có kinh nghiệm với việc phân tích, thì bạn sẽ thấy việc kết hợp các chương trình bắt gói tin rất hữu ích và phù hợp với các tình huống cụ thể.
- Giá cả: một điều tuyệt vời về các chương trình bắt gói tin là có nhiều chương trình miễn phí có thể cạnh tranh với bất kỳ sản phẩm thương mại nào. Sự khác biệt đáng chú ý nhất giữa các sản phẩm thương mại và các lựa chọn thay thế miễn phí là công cụ báo cáo việc phân tích của chúng. Các sản phẩm thương mại thường có những báo cáo chi tiết về việc phân tích mạng để chúng ta dễ hình dung hơn, dễ nắm bắt vấn đề của mạng hơn, trong khi các sản phẩm miễn phí không có được điều này.
- Hỗ trợ kỹ thuật: thậm chí sau khi bạn đã nắm rõ tất cả những gì cơ bản nhất của chương trình bắt gói tin, thì thỉnh thoảng bạn vẫn cần hỗ trợ để giải quyết những vấn đề mới. Mặc dù hầu như sẽ không có sự hỗ trợ nào cho các chương trình miễn phí như Wireshark, nhưng cộng đồng người dùng sử dụng các ứng dụng đó sẽ thường xuyên cập nhật các vấn đề gặp phải.
- Hỗ trợ của hệ điều hành: không may là, không phải tất cả các chương trình bắt gói tin đều hỗ trợ tất cả các hệ điều hành. Hãy chọn 1 chương trình mà sẽ làm việc được trên tất cả các hệ điều hành mà bạn cần hỗ trợ.

Quá trình bắt gói tin
Quá trình bắt gói tin có thể chia thành 3 bước:
- Thu thập dữ liệu: đây là bước đầu tiên, chương trình bắt gói tin chuyển giao diện mạng được lựa chọn sang chế độ Promiscuous. Chế độ này cho phép card mạng có thể lắng nghe tất cả các gói tin đang lưu chuyển trên phân mạng của nó. Chương trình bắt gói tin sử dụng chế độ này cùng với việc truy nhập ở mức thấp để bắt các dữ liệu nhị phân trên đường truyền.
- Chuyển đổi dữ liệu: trong bước này, các gói tin nhị phân trên được chuyển đổi thành các khuôn dạng có thể đọc được.
- Phân tích: bước cuối cùng là phân tích các dữ liệu đã được bắt lại và được chuyển đổi.

Cơ bản về mạng
Giao thức
Các mạng ngày nay được tạo nên bởi nhiều hệ thống đa dạng chạy trên nhiều nền tảng khác nhau. Để có thể truyền thông, chúng ta phải sử dụng 1 tập hợp các giao thức. Các giao thức thông thường bao gồm: TCP, IP, ARP và DHCP. Một chồng giao thức là 1 nhóm logic các giao thức hoạt động cùng nhau.
Một trong những cách tốt nhất để hiểu được các giao thức là hãy nghĩ rằng chúng cũng tương tự như những quy tắc chi phối ngôn ngữ nói hay viết của con người. Mỗi ngôn ngữ đều có các quy tắc, ví dụ như các động từ nên được kết hợp như thế nào, cách con người chào hỏi nhau, hay thậm chí là cách cám ơn một ai đó. Các giao thức cho chúng ta thấy được các gói tin được truyền đi như thế nào, làm thế nào để bắt đầu một kết nối, và làm thế nào để xác nhận việc đã nhận được dữ liệu chuyển đến.

Mô hình OSI
Các giao thức tùy theo chức năng của nó mà được chia ra dựa trên mô hình tham chiếu OSI (Open System Interconnection). OSI là 1 mô hình phân lớp được bắt đầu phác thảo từ năm 1977 bởi tổ chức ISO và được công bố vào năm 1983. Mô hình này chia các lớp công việc thành 7 tầng và mỗi tầng lại có chức năng riêng của nó. Hình dưới đây minh họa mô hình tham chiếu OSI:


Bây giờ chúng ta sẽ cùng nhau điểm qua chức năng của từng tầng:
- Tầng vật lý: có chức năng truyền 1 dòng bit thô qua 1 đường truyền vật lý cụ thể nào đó. Để làm được điều này thì tầng vật lý định nghĩa ra các thủ tục về điện, cơ; các thủ tục chức năng, các đặc tính kỹ thuật cho việc thiết lập, duy trì và kết thúc 1 kết nối vật lý nào đó. Ví dụ như giữa PC và Switch chúng ta phải đấu nối bằng cáp gì, hay cự li của đoạn cáp mạng chỉ được dài tối đa là bao nhiêu... là do tầng vật lý quy định.
- Tầng liên kết dữ liệu: thực hiện chức năng điều khiển việc truy nhập vào đường truyền vật lý và thực hiện giao tiếp với tầng mạng ở trên nó. Để điều khiển việc truy nhập vào đường truyền vật lý thì nó phải định nghĩa ra dữ liệu được định dạng cho việc truyền như thế nào và làm thế nào để điều khiển việc truy nhập vào đường truyền vật lý. Tầng liên kết dữ liệu cũng được cung cấp luôn cơ chế dò lỗi.
- Tầng mạng: chịu trách nhiệm định tuyến gói tin dữ liệu, chọn ra đường đi tối ưu nhất để truyền dữ liệu. Lớp mạng cung cấp địa chỉ logic (địa chỉ IP) cho các máy chủ mạng. Nó cũng giải quyết vấn đề về phân mảnh gói tin và được cung cấp cơ chế dò lỗi trong một vài trường hợp.
- Tầng vận chuyển: xử lý các vấn đề truyền tải giữa các host, đảm bảo rằng dữ liệu được truyền tải một cách đáng tin cậy từ điểm này đến điểm kia trong mạng. Ngoài ra tầng vận chuyển còn đảm bảo việc thiết lập, duy trì, kết thúc các đường kết nối ảo và còn cung cấp thêm cơ chế dò lỗi và phục hồi thông tin bằng cách điều khiển luồng.
- Tầng phiên: có chức năng truyền thông liên host bằng cách thiết lập, quản lý và kết thúc các phiên giữa các ứng dụng.
- Tầng trình diễn: đảm bảo rằng dữ liệu gửi đi bởi đầu này có thể đọc được bởi đầu kia. Nhiệm vụ của tầng này là định dạng lại dữ liệu, cấu trúc lại dữ liệu, thương lượng các cú pháp truyền dữ liệu cho tầng ứng dụng và cung cấp cơ chế mã hóa.
- Tầng ứng dụng: cung cấp phương tiện cho người sử dụng truy nhập các thông tin và dữ liệu trên mạng thông qua chương trình ứng dụng. Tầng này là giao diện chính để người dùng tương tác với chương trình ứng dụng, và qua đó tương tác với mạng.
Bảng 1-1 dưới đây liệt kê một số giao thức phổ biến được sử dụng tại các tầng của mô hình OSI:


Vậy dữ liệu được truyền như thế nào qua mô hình OSI? Việc truyền dữ liệu trên 1 mạng được bắt đầu từ tầng ứng dụng của máy gửi. Dữ liệu được truyền từ tầng ứng dụng đi xuống dần qua các tầng dưới cho đến khi tới được tầng vật lý, thì lúc đó dữ liệu sẽ được truyền từ máy gửi sang máy nhận. Máy nhận sẽ nhận dữ liệu tại lớp vật lý và từ đó truyền dữ liệu lên dần qua các tầng đến khi tới được tầng ứng dụng.
Các giao thức ở các tầng tương ứng trên máy gửi và máy nhận bổ trợ cho nhau. Ví dụ, nếu 1 giao thức ở tầng 7 của máy gửi có nhiệm vụ mã hóa dữ liệu để gửi đi, thì giao thức tương ứng trên tầng 7 ở máy nhận sẽ phải có trách nhiệm giải mã dữ liệu đã được mã hóa đó.

Quá trình đóng gói dữ liệu
Khi 1 máy tính gửi dữ liệu trên mạng để đến 1 máy khác thì dữ liệu phải trải qua 1 quá trình đóng gói (Encapsulation).
Quá trình đóng gói này thực ra là việc dùng các thông tin về các giao thức để "bao quanh" dữ liệu sao cho mỗi lần dữ liệu đến từng tầng thì mỗi tầng sẽ hiểu và sẽ xử lý thông tin một cách tốt nhất.
Để truyền tải và trao đổi dữ liệu thì mỗi tầng sẽ sử dụng Protocol Data Unit. Mỗi khi dữ liệu xuống 1 tầng nào đó sẽ được thêm thông tin của tầng đó và tầng tương ứng ở phía host nhận dữ liệu sẽ đọc được thông tin này. Sau khi đọc xong thì thông tin đó sẽ được gỡ bỏ để đưa lên cho tầng phía trên.
Hình dưới đây cho ta thấy các PDU và cách chúng thêm thông tin cho mỗi tầng. Dữ liệu được di chuyển xuống tầng vận chuyển, sau đó dữ liệu được chia nhỏ ra thành các phần giống nhau và như vậy đã tạo ra một Header của tầng vận chuyển. Mỗi phần nhỏ sau khi chia ra sẽ được đánh thứ tự để bên nhận có thể sắp xếp đúng sau khi nhận dữ liệu.


Cũng ở trong hình ta có thể thấy đơn vị dữ liệu cho các tầng:
- Transport: Segment
- Network: Packet
- Data Link: Frame
- Physical: Bit
Các Segment sẽ được đưa xuống tầng mạng để thêm vào IP Header, mục đích của tầng mạng là đánh địa chỉ mạng và chỉ đường đi cho gói tin trên mạng. Địa chỉ mạng (ví dụ IP) có mục đích là đưa Segment đến đúng nơi nhận. Segment sau khi được thêm IP Header của tầng mạng thì được gọi là Packet hay Datagram.
Khi Packet xuống đến tầng liên kết dữ liệu thì sẽ được đóng gói thành các Frame. Frame Header mang theo thông tin về địa chỉ vật lý của host nguồn và host đích.
Ở trên ta thấy các Packet được đóng gói thành các Frame sẽ được đưa thêm vào 2 thông tin là LLC Header và MAC Header. Điều đó là do trong tầng liên kết dữ liệu có 2 Sublayer là Logical Link Control (LLC) và Media Access Control (MAC).


Lớp LLC liên kết với tầng mạng để xác định loại địa chỉ logic đang dùng là gì và sẽ đóng gói Frame theo kiểu tương ứng. Lớp MAC lại kết hợp với tầng cuối cùng là tầng vật lý để biết môi trường truyền dẫn bên dưới là gì để có cách thức sử dụng phù hợp.

Các thiết bị mạng
Hub
Hub là 1 loại thiết bị có nhiều cổng RJ-45, giống như loại trong hình dưới đây. Hub được thiết kế trong giới hạn từ 4 cổng cho đến 48 cổng.


Bởi vì Hub có thể tạo ra nhiều lưu lượng mạng không cần thiết và chỉ có thể hoạt động ở chế độ bán song công (chúng không thể gửi và nhận dữ liệu đồng thời cùng 1 lúc), cho nên chúng sẽ không được sử dụng trong các mạng hiện đại hoặc các mạng có mật độ cao (Switch sẽ được sử dụng thay thế). Tuy nhiên, bạn nên biết Hub hoạt động như thế nào, bởi vì nó có liên quan đến kỹ thuật "hubbing out" mà chúng ta sẽ nói đến ở trong bài tiếp theo.
Hub được coi là 1 Repeater có nhiều cổng, Hub hoạt động ở tầng vật lý trong mô hình OSI. Hub nhận dữ liệu từ 1 cổng và truyền dữ liệu đó tới tất cả các cổng của nó. Ví dụ, nếu 1 máy tính kết nối với cổng 1 của thiết bị Hub có 4 cổng, máy tính đó cần gửi dữ liệu cho 1 máy tính kết nối với cổng 2, thì Hub sẽ gửi các gói tin đến các cổng 1,2,3,4. Các máy kết nối với cổng 3 và cổng 4 kiểm tra trường MAC Address trong Ethernet Header của gói tin, và chúng nhận ra rằng gói tin đó không dành cho chúng, bởi vậy chúng drop gói tin đó. Hình dưới đây minh họa ví dụ máy A truyền dữ liệu cho máy B qua Hub:


Khi máy A gửi dữ liệu, tất cả máy tính kết nối với thiết bị Hub đều nhận được dữ liệu đó. Tuy nhiên chỉ có máy B chấp nhận dữ liệu, còn các máy khác sẽ loại bỏ dữ liệu đó đi. Bạn có thể thấy điều này dẫn đến việc truyền thông không cần thiết và rất tốn thời gian.
Sự thay thế tốt nhất của Hub trong các mạng có mật độ cao chính là Switch, là các thiết bị song công (có thể gửi và nhận dữ liệu đồng thời).

Switch
Về cơ bản thì Switch có thiết kế tương tự Hub. Tuy nhiên, không giống Hub là quảng bá dữ liệu tới tất cả các cổng, thì Switch chỉ gửi dữ liệu tới máy tính là đích đến của dữ liệu. Hình ảnh dưới đây minh họa cho thiết bị Switch:


Một vài loại Switch lớn hơn trên thị trường, được quản lý thông qua phần mềm chuyên dụng hoặc là giao diện web. Các Switch này thường được gọi với cái tên Managed Switch. Managed Switch cung cấp 1 vài tính năng có thể hữu ích trong việc quản lý mạng, bao gồm khả năng kích hoạt hoặc vô hiệu hóa cổng nào đó, xem chi tiết cụ thể cổng nào đó, thay đổi cấu hình và khởi động lại từ xa.
Switch cũng cung cấp tính năng nâng cao là việc xử lý các gói tin được truyền. Để có thể truyền thông trực tiếp với các thiết bị cụ thể, thì Switch phải có khả năng nhận diện các thiết bị dựa trên địa chỉ MAC của chúng, có nghĩa là Switch phải hoạt động ở tầng liên kết dữ liệu trong mô hình OSI.
Switch lưu trữ các địa chỉ lớp 2 của tất cả các thiết bị kết nối trong 1 bảng CAM, có thể nói vui là bảng CAM đó hoạt động như 1 cảnh sát giao thông. Khi 1 gói tin được truyền đi, Switch đọc thông tin Header lớp 2 trong gói tin, sử dụng bảng CAM để tham chiếu, và nó sẽ quyết định cổng nào để gửi gói tin đi. Switch gửi gói tin đến các cổng cụ thể, do đó làm giảm đáng kể lưu lượng mạng.
Hình dưới đây minh họa lưu lượng truyền qua 1 Switch. Trong hình này, máy A gửi dữ liệu tới máy nhận là máy B.


Router
Router là 1 thiết bị mạng tiên tiến với nhiều chức năng cao cấp hơn Switch hay Hub. Một Router có thể có nhiều kiểu dáng hình thức khác nhau, nhưng hầu hết đều có 1 vài đèn LED ở mặt trước và 1 số cổng mạng ở mặt sau, tùy thuộc vào kích thước mạng. Hình dưới đây cho thấy ví dụ về 1 Router.


Các Router hoạt động ở tầng 3 của mô hình OSI, nó có trách nhiệm chuyển tiếp các gói tin giữa 2 hay nhiều mạng. Quá trình điều khiển luồng lưu lượng giữa các mạng được gọi là định tuyến. Router sử dụng địa chỉ lớp 3 (địa chỉ IP) để nhận diện các thiết bị mạng.
Kích thước và số lượng của các Router trên mạng thường sẽ phụ thuộc vào kích thước của mạng và chức năng của mạng. Mạng cá nhân và văn phòng có thể chỉ cần 1 Router nhỏ nằm ở trung tâm của mạng. Một mạng doanh nghiệp lớn có thể có nhiều Router trải đều khắp các phòng ban khác nhau, tất cả cùng kết nối với 1 Router trung tâm lớn hoặc Switch lớp 3 (một loại Switch tiên tiến tích hợp chức năng hoạt động như 1 Router).

Phân loại Traffic
Traffic mạng có thể được phân thành 3 nhóm chính: Broadcast, Multicast và Unicast. Mỗi loại có 1 đặc điểm riêng biệt để xác định cách các gói tin trong nhóm đó dược xử lý bằng phần cứng mạng như thế nào.

Broadcast Traffic
Một gói tin Broadcast là gói tin được gửi đến tất cả các cổng trên 1 phân mạng, bất kể phân mạng đó sử dụng Hub hay Switch. Tuy nhiên không phải tất cả các Broadcast Traffic đều như nhau. Có 2 dạng của Broadcast Traffic: Broadcast Traffic lớp 2 và Broadcast Traffic lớp 3. Ví dụ, ở lớp 2, địa chỉ MAC FF:FF:FF:FF:FF:FF là địa chỉ Broadcast dành riêng, bất kỳ traffic nào gửi đến địa chỉ này sẽ được quảng bá cho toàn bộ phân mạng. Lớp 3 cũng có 1 địa chỉ Broadcast cụ thể.
Địa chỉ IP cao nhất trong 1 dải mạng IP được dành riêng sử dụng làm địa chỉ quảng bá. Ví dụ, trong 1 mạng được cấu hình với 1 loạt địa chỉ IP là 192.168.0.xxx cùng vời Subnet Mask là 255.255.255.0, thì địa chỉ 192.168.0.255 là địa chỉ quảng bá.
Trong mạng lớn với nhiều Hub hoặc Switch kết nối qua các môi trường khác nhau, các gói tin Broadcast gửi từ 1 Switch tới tất cả các cổng trên các Switch khác trong mạng. Phạm vi di chuyển của gói tin Broadcast được gọi là Broadcast Domain, đó là phân mạng mà bất kỳ máy tính nào cũng có thể trực tiếp truyền tin sang máy khác mà không cần phải thông qua 1 Router. Hình dưới đây cho thấy ví dụ về 2 Broadcast Domain của 1 mạng nhỏ. Vì phạm vi của mỗi Broadcast Domain chỉ được kéo dài cho tới Router, nên các gói tin Broadcast chỉ truyền trong Broadcast Domain nhất định của nó.


Multicast Traffic
Các gói tin được gửi từ 1 địa chỉ nguồn đến 1 nhóm các máy tính. Địa chỉ đích tượng trưng bằng các host muốn nhận traffic này. Mặc định, 1 Router hoặc 1 Switch lớp 3 sẽ không chuyển các gói tin này trừ khi phải cấu hình Multicast Routing. Một thiết bị Switch lớp 2 sẽ không thể nhận biết được vị trí của địa chỉ Multicast đích. Tất cả các gói sẽ được phát tán ra tất cả các cổng ở chế độ mặc định.

Unicast Traffic
Các gói tin được gửi từ 1 địa chỉ nguồn đến 1 địa chỉ đích. Một Router hoặc thiết bị lớp 3 sẽ chuyển các gói tin bằng cách tìm địa chỉ đích trong bảng định tuyến. Nếu là 1 thiết bị lớp 2, thì nó chỉ cần dựa vào địa chỉ MAC.

Bài này đã trình bày những điều cơ bản cốt lõi mà bạn cần như 1 nền tảng cho việc phân tích gói tin. Bài tiếp theo, chúng tôi sẽ xây dựng các khái niệm và thảo luận về các nguyên tắc truyền thông mạng chuyên sâu hơn.

2 nhận xét:

  1. quảng trị mạng có cần ngôn ngữ lập trình ko anh

    Trả lờiXóa
  2. quảng trị mạng có cần ngôn ngữ lập trình ko anh

    Trả lờiXóa