SỬ DỤNG KỸ THUẬT LẬP TRÌNH SOCKET XÂY DỰNG CHƯƠNG TRÌNH SCAN IP
Trang 1TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN
HỮU NGHỊ VIỆT-HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN MÔN HỌC LẬP TRÌNH MẠNG NÂNG CAO
ĐỀ TÀI
SỬ DỤNG KỸ THUẬT LẬP TRÌNH SOCKET XÂY
DỰNG CHƯƠNG TRÌNH SCAN IP
SVTH : Nguyễn Đức Trung
Trương Văn Đông
Tô Thị Thu Thủy Lớp : CCMM03C
Niên khóa : 2009 – 2012
CBHD : Ths Nguyễn Vũ
Đà Nẵng, tháng 3 năm 2012
Trang 2và kiến trúc của các phần mềm mạng Từ đó, hiểu và biết cách viết các chương trình ứng dụng trong một hệ thống mạng quy mô nhỏ cũng như mạng Internet.
C# là một ngôn ngữ mềm dẻo và rất phổ biến Nó sử dụng hệ thống kiểu/đối tượng trong.NET mà ở đó, các chương trình C# có thể giao tiếp với nhiều ngôn ngữ khác trong NET mà không gặp rắc rối nào về kiểu Dựa trên kiến thức lập trình mạng với C#, cộng với sự đa dạng của các dịch vụ mạng với nhiều tính năng hỗ trợ cao Từ ý tưởng xây dựng một chương trình scan IP có khả năng quét cổng, có khả năng quét các địa chỉ trong phạm
vi bất kỳ, cũng như bất kỳ các cổng Chương trình ScanIP được xây dựng với một số tính năng hoàn chỉnh như: xác định địa chỉ MAC, quét cổng v.v…
Mục tiêu của đồ án là tìm hiểu về mạng máy tính và kỹ thuật lập trình socket với ngôn ngữ lập trình C#, trên cơ sở đó xây dựng một chương trình quét cổng trên mạng nội bộ Bao gồm ba chương:
Chương I Tổng Quan Về Lập Trình Mạng
Chương II Lập Trình Mạng Với Socket
Chương III Thiết kế Và Xây Dựng Chương Trình
Trong quá trình xây dựng chương trình do thời gian ngắn và chưa đủ kiến thức, nên không tránh khỏi sai sót Kính mong thầy cô cùng các bạn đóng góp ý kiến xây dựng để nhóm hoàn thiện hơn Cuối cùng, nhóm em xin chân thành cảm ơn thầy Nguyễn Vũ đã hỗ trợ và tạo điều kiện giúp chúng em hoàn thành đồ án này
Đà Nẵng, tháng 3 năm 2012
MỤC LỤC
Trang 3MỤC LỤC i
DANH MỤC HÌNH ẢNH i
CHƯƠNG 1 TỔNG QUAN VỀ LẬP TRÌNH MẠNG ii
1.1.GIỚI THIỆU VỀ NGÔN NGỮ C# ii
1.2.KIẾN TRÚC NET ii
1.3.NGÔN NGỮ C# iv
1.4.MÔ HÌNH THAM CHIẾU OSI v
1.5.CHỒNG GIAO THỨC TCP/IP viii
1.6.MÔ HÌNH TRUYỀN THÔNG TRONG CẤU TRÚC MẠNG x
1.6.1.Nguyên tắc truyền thông x
1.6.2.Nguyên tắc của phương pháp phân tầng xi
1.6.3.Địa chỉ IP – Các địa chỉ IP dành riêng xii
1.7.GIAO THỨC ICMP xii
1.7.1.Giới thiệu ICMP xiii
1.7.2.Cấu trúc xiii
1.7.3.Danh sách các thông điệp điều khiển của giao thức ICMP xiv
CHƯƠNG 2 LẬP TRÌNH MẠNG VỚI SOCKET xvi
2.1.GIỚI THIỆU VỀ LẬP TRÌNH VỚI SOCKET xvi
1.8.SỬ DỤNG RAW SOCKET xvii
CHƯƠNG 3 THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH xxiv
1.9.PHÂN TÍCH YÊU CẦU xxiv
1.10.PHÂN TÍCH CÁC CHỨC NĂNG xxiv
1.10.1.Phương thức hoạt động của ứng dụng xxiv
1.10.2.Xây dựng chức năng xxiv
1.11 XÂY DỰNG CHỨC NĂNG xxv
1.11.1.Xây dựng chức năng gửi gói tin xxv
1.11.2.Xây dựng chức năng nhận gói tin và xử lý xxv
1.11.3.Xây dựng chức năng quét địa chỉ IP xxvii
Trang 41.12.GIAO DIỆN VÀ SỬ DỤNG CHƯƠNG TRÌNH xxvii1.12.1.Giao diện xxvii1.12.2.Sử dụng chương trình xxxixKẾT LUẬN xli DANH MỤC TÀI LIỆU THAM KHẢO 42NHÂN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN 43
Trang 5DANH MỤC HÌNH ẢNH
Hình 1 1 Mô tả các thành phần trong NET Framework iii
Hình 1 2.Mô hình OSI v
Hình 1.3 Mô hình chồng giao thức TCP/IP ix
Hình 2.1 Giới thiệu về lập trình với socket xvi
Hình 3.1 Giao diện chính của chương trình scanip xxvii
Hình 3.2 Chức năng quét tất cả các địa chỉ ip xxviii
Hình 3.3 Chức năng quét theo lớp xxviii
i
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ LẬP TRÌNH MẠNG
Microsoft NET không phải là một ngôn ngữ lập trình, đó là một không gian làm việc tổng hợp bởi bốn bộ ngôn ngữ lập trình: C#, VB.NET, Managed C++, and J# NET ở đó
có sự chồng gối lên nhau của các ngôn ngữ, và được định nghĩa trong FCL (Framework Class Library)
Microsoft NET bao gồm 2 thành phần chính: Framework và Intergrated Development Enviroment (IDE) Framework cung cấp những gì cần thiết và căn bản, là khuôn dạng hay môi trường hỗ trợ các hạ tầng cơ sở theo một quy ước nhất định để công việc được thuận tiện IDE cung cấp một môi trường giúp chúng ta triển khai được dễ dàng và nhanh chóng các ứng dụng trên nền tảng NET
Thành phần Framework là quan trọng nhất NET đây là cốt lõi và tinh hoa của môi trường, còn IDE chỉ là công cụ để phát triển dựa trên nền tảng đó Trong NET toàn bộ các ngôn ngữ C#, Visual C++ hay Visual Basic NET đều dùng cùng một IDE
Microsoft NET là nền tảng cho việc ứng dụng và thực thi các ứng dụng phân tán thế
hệ kế tiếp Bao gồm các ứng dụng từ client đến server và các dịch vụ khác Một số tính năng của Microsoft NET cho phép những nhà phát triển sử dụng như sau:
o Một mô hình lập trình cho phép nhà phát triển xây dựng các ứng dụng dịch vụ web và ứng dụng client với Extensible Markup Language (XML)
o Tập hợp dịch vụ XML Web, như Microsoft NET My Services cho phép nhà phát triển đơn giản và tích hợp người dùng kinh nghiệm
o Cung cấp các server phục vụ bao gồm: Windows 2000, SQL Server và BizTalk Server, tất cả đều tích hợp, hoạt động và quản lý các dịch XML Web và các ứng dụng
o Các phần mềm client như Windows XP và Windows CE giúp người phát triển phân phối sâu và thuyết phục người dùng kinh nghiệm thông qua các dòng thiết bị
o Nhiều công cụ hỗ trợ như Visual Stuido NET, để phát triển các dịch vụ Web XML, ứng dụng trên nền Windows hay nền web một cách dễ dàng và hiệu quả
ii
Trang 7.NET Framework là một platform mới giúp làm đơn giản việc phát triển ứng dụng trong môi trường phân tán của Internet .NET Framework được thiết kế đầy đủ để đáp ứng theo quan điểm sau:
Hình 1 1 Mô tả các thành phần trong NET Framework
o Để cung cấp một môi trường lập trình hướng đối tượng vững chắc, trong đó mã nguồn đối tượng được lưu trữ và thực thi một cách cục bộ Thực thi cục bộ nhưng được phân tán trên Internet, hoặc thực thi từ xa
o Để cung cấp một môi trường thực thi mã nguồn mà tối thiểu được việc đóng gói phần mềm và sự tranh chấp về phiên bản
o Để cung cấp một môi trường thực thi mã nguồn mà đảm bảo việc thực thi an toàn mã nguồn, bao gồm cả việc mã nguồn được tạo ra bởi hãng thứ ba hay bất cứ hãng nào
mà tuân thủ theo kiến trúc NET.Để cung cấp một môi trường thực thi mã nguồn mà loại bỏ được những lỗi thực hiện các script hay môi trường thông dịch
o Để làm cho những người phát triển có kinh nghiệm vững chắc có thể nắm vững nhiều kiểu ứng dụng khác nhau Như là từ những ứng dụng trên nền Windows đến những ứng dụng dựa trên web
o Để xây dựng tất cả các thông tin dựa trên tiêu chuẩn công nghiệp để đảm bảo rằng mã nguồn trên NET có thể tích hợp với bất cứ mã nguồn khác
.NET Framework có hai thành phần chính: Common Language Runtime (CLR) và thư viện lớp NET Framework CLR là nền tảng của NET Framework Chúng ta có thể hiểu
iii
Trang 8như: quản lý bộ nhớ, quản lý tiểu trình, và quản lý từ xa Ngoài ra nó còn thúc đẩy việc sử dụng kiểu an toàn và các hình thức khác của việc chính xác mã nguồn, đảm bảo cho việc thực hiện được bảo mật và mạnh mẽ Thật vậy, khái niệm quản lý mã nguồn là nguyên lý nền tảng của runtime Mã nguồn mà đích tới runtime thì được biết như là mã nguồn được quản lý (managed code) Trong khi đó mã nguồn mà không có đích tới runtime thì được biết như mã nguồn không được quản lý (unmanaged code).
Thư viện lớp, một thành phần chính khác của NET Framework là một tập hợp hướng đối tượng của các kiểu dữ liệu được dùng lại, nó cho phép chúng ta có thể phát triển những ứng dụng từ những ứng dụng truyền thống command-line hay những ứng dụng có giao diện
đồ họa (GUI) đến những ứng dụng mới nhất được cung cấp bởi ASP.NET, như là Web Form và dịch vụ XML Web
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực thi những khái niệm lập trình hiện đại C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần, lập trình hướng đối tượng Những tính chất đó hiện diện trong một ngôn ngữ lập trình hiện đại Và ngôn ngữ C# hội đủ những điều kiện như vậy, hơn nữa nó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java
Phần cốt lõi của bất cứ ngôn ngữ lập trình hướng đối tượng là sự hỗ trợ của nó cho việc định nghĩa và làm việc với những lớp Những lớp thì định nghĩa những kiểu dữ liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo mô hình tốt hơn để giải quyết vấn
đề Ngôn ngữ C# chứa những từ khóa cho việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính của lớp, và cho việc thực thi đóng gói, kế thừa và tính
đa hình, ba thuộc tính cơ bản của bất cứ ngôn ngữ lập trình hướng đối tượng
Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp đều được tìm thấy trong phần khai báo của nó Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải chia ra tập tin header và tập tin nguồn giống như trong ngôn ngữ C++ Hơn thế nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự động các document cho lớp
iv
Trang 9Trong ngôn ngữ C#, những cấu trúc cũng được hỗ trợ , nhưng khái niệm về ngữ nghĩa của nó thay đổi khác với C++ Trong C#, một cấu trúc được giới hạn, là kiểu dữ liệu nhỏ gọn, và khi tạo thể hiện, thì nó yêu cầu ít hơn về hệ điều hành và bộ nhớ so với một lớp Một cấu trúc thì không thể kế thừa một lớp hay được kế thừa nhưng một cấu trúc có thể thực thi một giao diện.
Ngôn ngữ C# cung cấp những đặc tính hướng thành phần (component-oriented), như
là những thuộc tính, những sự kiện Lập trình hướng thành phần được hỗ trợ bởi CLR cho phép lưu trữ metadata với mã nguồn cho một lớp Metadata mô tả cho một lớp, bao gồm phương thức và những thuộc tính của nó, cũng như những sự bảo mật cần thiết và những thuộc tính khác Mã nguồn chứa đựng những logic cần thiết để thực hiện những chức năng của nó Do vậy, một lớp được biên dịch như là một khối self-contained, nên môi trường hosting biết được cách đọc metadata của một lớp và mã nguồn cần thiết mà không cần những thông tin khác để sử dụng nó
Ngôn ngữ C# hỗ trợ truy cập bộ nhớ trực tiếp sử dụng kiểu con trỏ của C++ và từ khóa cho dấu ngoặc [] trong toán tử Các mã nguồn này là không an toàn Và bộ giải phóng
bộ nhớ tự động của CLR sẽ không thực hiện việc giải phóng những đối tượng được tham chiếu bằng sử dụng con trỏ cho đến khi chúng được giải phóng
Hình 1 2.Mô hình OSI
v
Trang 10Mô hình tham chiếu OSI (Open Systems Interconnection Reference Model) là một thiết kế dựa vào nguyên lý tầng cấp, lý giải một cách trừu tượng kỹ thuật kết nối truyền thông giữa các máy tính và thiết kế giao thức mạng giữa chúng Mô hình này được phát triển thành một thành phần trong kế hoạch Kết nối các hệ thống mở dong ISO và IUT-T khởi xướng.
Mô hình tham chiếu OSI định nghĩa các quy tắc cho các nội dung sau:
o Cách thức các thiết bị giao tiếp và truyền thông được với nhau
o Các phương pháp để các thiết bị trên mạng khi nào thì được truyền dữ liệu, khi nào thì không được
o Các phương pháp để đảm bảo truyền đúng dữ liệu và đúng bên nhận
o Cách thức vận tải, truyền, sắp xếp và kết nối với nhau
o Cách thức đảm bảo các thiết bị mạng duy trì tốc độ truyền dữ liệu thích hợp
o Các biểu diễn một bit truyền dẫn
Mô hình tham chiếu OSI được chia thành bảy lớp với các chức năng sau:
o Lớp ứng dụng (Application Layer): là giao diện giữa các chương trình ứng dụng của người dùng và mạng Lớp application xử lý truy cập mạng chung, kiểm soát luồng và phục hồi lỗi Lớp này không cung cấp các ứng dụng cho lớp nào mà nó cung cấp dịch vụ cho các ứng dụng như: truyền file, gởi nhận E-mail, Telnet, HTTP, FTP, SMTP …
o Lớp trình diễn (Presentation Layer): lớp này chịu trách nhiệm thương lượng và xác lập dạng dữ liệu được trao đổi Nó đảm bảo thông tin mà lớp ứng dụng của một hệ thống đầu cuối gởi đi, lớp ứng dụng của hệ thống khác có thể đọc được Lớp trình bày thông dịch giữa nhiều dạng dữ liệu khác nhau thông qua một dạng chung, đồng thời nó cũng nén và giải nén dữ liệu
o Lớp phiên (Session Layer): lớp này có chức năng thiết lập, quản lý, và kết thúc các phiên thông tin giữa hai thiết bị truyền nhận Lớp phiên cung cấp các dịch vụ cho lớp trình bày Lớp phiên cung cấp sự đồng bộ hóa giữa các tác vụ người dùng bằng cách đặt những kiểm tra vào luồng dữ liệu Bằng cách này, nếu mạng không hoạt động thì chỉ có dữ liệu truyền sau điểm kiểm tra cuối cùng mới phải truyền lại Lớp này cũng thi hành kiểm
vi
Trang 11soát hội thoại giữa các quá trình giao tiếp, điều chỉnh bên nào truyền, khi nào, trong bao lâu
o Lớp vận chuyển (Transport Layer): lớp vận chuyển phân đoạn dữ liệu từ hệ thống máy truyền và tái thiết lập dữ liệu vào một luồng dữ liệu tại hệ thống máy nhận đảm bảo rằng việc bàn giao các thông điệp giữa các thiết bị là đáng tin cậy Lớp này thiết lập, duy trì và kết thúc các mạch ảo đảm bảo cung cấp các dịch vụ sau:
• Xếp thứ tự các phân đoạn: khi một thông điệp lớn được tách thành nhiều phân đoạn nhỏ để bàn giao, lớp vận chuyển sẽ sắp xếp thứ tự các phân đoạn trước khi ráp nối các phân đoạn thành thông điệp ban đầu
• Kiểm soát lỗi: khi có phân đoạn bị thất bại, sai hoặc trùng lặp, lớp vận chuyển sẽ yêu cầu truyền lại
• Kiểm soát luồng: lớp vận chuyển dùng các tín hiệu báo nhận để xác nhận Bên gửi sẽ không truyền đi phân đoạn dữ liệu kế tiếp nếu bên nhận chưa gửi tín hiệu xác nhận rằng đã nhận được phân đoạn dữ liệu trước đó đầy đủ
o Lớp mạng (Network Layer): lớp này chịu trách nhiệm lập địa chỉ các thông điệp, diễn dịch địa chỉ và tên logic thành địa chỉ vật lý đồng thời nó cũng chịu trách nhiệm gởi packet từ mạng nguồn đến mạng đích Lớp này quyết định đường đi từ máy tính nguồn đến máy tính đích Nó quyết định dữ liệu sẽ truyền trên đường nào dựa vào tình trạng, độ
ưu tiên dịch vụ và các yếu tố khác Nó cũng quản lý lưu lượng trên mạng chẳng hạn như chuyển đổi gói, định tuyến, và kiểm soát sự tắc nghẽn dữ liệu
o Lớp liên kết dữ liệu (Data Link Layer): cung cấp khả năng chuyển dữ liệu tin cậy xuyên qua một liên kết vật lý Lớp này liên quan đến: địa chỉ vật lý, mô hình mạng, cơ chế truy cập đường truyền, thông báo lỗi, thứ tự phân phối frame, điều khiển dòng Tại lớp liên kết dữ liệu, các bit đến từ lớp vật lý được chuyển thành các frame dữ liệu bằng cách dùng một số nghi thức tại lớp này Lớp liên kết dữ liệu được chia thành hai lớp con:
• Lớp LLC (Logical Link Control): phần trên so với các giao thức truy cập đường truyền khác, nó cung cấp sự mềm dẻo về giao tiếp Bởi vì lớp con LLC hoạt động độc lập với các giao thức truy cập đường truyền, cho nên các giao
vii
Trang 12thức lớp trên hơn có thể hoạt động mà không phụ thuộc vào loại phương tiện LAN Lớp con LLC có thể lệ thuộc vào các lớp thấp hơn trong việc cung cấp truy nhập đường truyền
• Lớp MAC (Media Access Control): cung cấp tính thứ tự truy cập vào môi trường LAN Khi nhiều trạm cùng truy cập chia sẻ môi trường truyền, để định danh mỗi trạm, lớp MAC định nghĩa môi trường địa chỉ phần cứng gọi là địa chỉ MAC – đây là một con số đơn nhất đối với mỗi giao tiếp LAN
o Lớp vật lý (Physical Layer): định nghĩa các quy cách về điện, cơ, thủ tục và đặc tả chức năng để kích hoạt, duy trì và dừng một liên kết vật lý giữa các hệ thống đầu cuối Bao gồm việc truyền tải tín hiệu trong môi trường từ máy tính này đến máy tính khác Lớp này gồm các chi tiết kỹ thuật về các đặc tính điện và cơ như : mức điện áp, định thời tín hiệu, tốc độ dữ liệu, độ dài truyền tải lớn nhất và các kết nối vật lý của thiết bị mạng Để một thiết bị hoạt động chỉ trong lớp vật lý, nó sẽ không có bất kỳ kiến thức nào về dữ liệu
mà nó truyền tải Một thiết bị lớp vật lý chỉ truyền tải hoặc nhận dữ liệu một cách đơn giản
Bộ giao thức TCP/IP (Internet Protocol Suite) là một bộ các giao thức truyền thông cài đặt chồng giao thức mà Internet và hầu hết các mạng máy tính thương mại đang chạy trên đó Bộ giao thức này được đặt theo hai giao thức chính của nó là TCP và IP Là tập hợp các tầng, mỗi tầng giải quyết một tập các vấn đề có liên quan đến việc truyền dữ liệu,
và cung cấp cho các giao thức tầng trên một dịch vụ được định nghĩa rõ ràng dựa trên việc
sử dụng các dịch vụ của các tầng thấp hơn Về mặt logic, các tầng trên gần với người dùng hơn và làm việc với dữ liệu trừu tượng hơn, chúng dựa vào các giao thức tầng cấp dưới để biến đổi dữ liệu thành các dạng mà cuối cùng có thể được truyền đi một cách vật lý
viii
Trang 13Hình 1.3 Mô hình chồng giao thức TCP/IPTCP/IP có cấu trúc tương tự như mô hình OSI, tuy nhiên để đảm bảo tính tương thích giữa các mạng và sự tin cậy của việc truyền thông tin trên mạng, bộ giao thức TCP/IP được chia thành 2 phần riêng biệt: giao thức IP sử dụng cho việc kết nối mạng và giao thức TCP
để đảm bảo cho việc truyền dữ liệu một cách tin cậy
Mô hình tham chiếu TCP/IP được chia thành bốn lớp với các chức năng sau:
o Lớp ứng dụng (Application Layer): tại mức cao nhất này, người sử dụng thực hiện các chương trình ứng dụng truy xuất đến các mức dịch vụ hiện hữ trên TCP/IP Internet Một ứng dụng tương tác với một trong những protocol ở mức giao vận (transport)
để gửi hoặc nhận dữ liệu Mỗi chương trình ứng dụng chọn một kiểu giao vận mà nó cần,
có thể là một dãy tuần tự từng thông điệp hoặc một chuỗi các byte liên tục Chương trình ứng dụng sẽ gửi dữ liệu đi dưới dạng nào đó mà nó yêu cầu đến lớp giao vận
o Lớp giao vận(Transport Layer) : Nhiệm vụ cơ bản của lớp giao vận là cung cấp phương tiện liên lạc từ một chương trình ứng dụng này đến một chương trình ứng dụng khác Việc thông tin liên lạc đó thường được gọi là end-to-end Mức chuyên chở có thể điều khiển luồng thông tin Nó cũng có thể cung cấp sự giao vận có độ tin cậy, bảo đảm dữ liệu đến nơi mà không có lỗi và theo đúng thứ tự Để làm được điều đó, lớp giao vận cung cấp giao thức TCP, trong quá trình trao đổi thông tin nơi nhận sẽ được gửi ngược trở lại một xác nhận (ACK) và nơi gửi sẽ truyền lại những gói dữ liệu bị mất Tuy nhiên trong những môi trường truyền dẫn tốt như cáp quang chẳng hạng thì việc xảy ra lỗi là rất nhỏ Lớp giao vận có thể cung cấp một giao thức khác đó là UDP
ix
Trang 14o Lớp Internet (Internet Layer): Nhiệm vụ cơ bản của lớp này là xử lý việc liên lạc của các thiết bị trên mạng Nó nhận được một yêu cầu để gửi gói dữ liệu từ lớp trên cùng với một định danh của máy mà gói dữ liệu phải được gởi đến Nó đóng segment vào trong một packet, điền vào phần mào đầu của packet, sau đó sử dụng giao thức định tuyến
để chuyển gói tin đến được đích của nó hoặc trạm kế tiếp Khi đó tại nơi nhận sẽ kiểm tra tính hợp lệ của chúng, và sử dụng tiếp các giao thức định tuyến để xử lý gói tin Đối với những packet được xác định thuộc cùng mạng cục bộ, phần mềm Internet sẽ cắt bỏ phần đầu của packet, và chọn một trong các giao thức lớp trung chuyển thích hợp để xử lý chúng Cuối cùng, lớp Internet gửi và nhận các thông điệp kiểm soát và xử lý lỗi ICMP
o Lớp giao tiếp mạng (Network Access Layer): Lớp thấp nhất của mô hình TCP/IP chính là lớp giao tiếp mạng, có trách nhiệm nhận các IP datagram và truyền chúng trên một mạng nhất định Người ta lại chia lớp này thành hai lớp con là: Lớp vật lý – làm việc với các thiết bị vật lý, truyền tới dòng bit 0, 1 từ nơi gửi đến nơi nhật Lớp liên kết dữ liệu – tại đây dữ liệu được tổ chức thành các khung (frame) Phần đầu khung chứa địa chỉ
và thông tin điều khiển, phần cuối khung dành cho việc phát hiện lỗi
1.6.1 Nguyên tắc truyền thông
Để một mạng máy tính trở thành môi trường truyền dữ liệu thì nó cần phải có những yếu tố sau:
o Các hệ thống được liên kết với nhau theo một cấu trúc kết nối (topology) nào đó
o Việc chuyển dữ liệu từ máy tính này đến máy tính khác do mạng thực hiện thông qua những quy định thống nhất gọi là giao thức của mạng
o Phân chia hoạt động truyền thông của hệ thống thành nhiều lớp theo các nguyên tắc nhất định
o Việc nhận xét các module một cách độc lập với nhau cho phép giảm độ phức tạp cho việc thiết kế và cài đặt Phương pháp này được sử dụng rộng rãi trong việc xây dựng mạng và các chương trình truyền thông và được gọi là phương pháp phân tầng (layer)
x
Trang 151.6.2 Nguyên tắc của phương pháp phân tầng
Mỗi hệ thống thành phần trong mạng được xây dựng như một cấu trúc nhiều tầng và đều có cấu trúc giống nhau như: số lượng tầng và chức năng của mỗi tầng
Các tầng nằm chồng lên nhau, dữ liệu chỉ được trao đổi trực tiếp giữa hai tầng kề nhau từ tầng trên xuống tầng dưới và ngược lại
Cùng với việc xác định chưc năng của mỗi tầng chúng ta phải xác định mỗi quan hệ giữa hai tầng kề nhau Dữ liệu được truyền đi từ tầng cao nhất của hệ thống truyền lần lượt đến tầng thấp nhất , tiếp đến truyền qua đường nối vật lý dưới dạng các bit tới tầng thấp nhất của hệ thống nhận, sau đó dữ liệu được truyền ngược lên trên tầng cao nhất của hệ thống nhận
Chỉ có hai tầng thấp nhất có liên kết vật lý với nhau còn các tầng trên cùng thứ tự chỉ
có các liên kết logic với nhau Liên kết logic của một tầng được thể hiện thông qua các tầng dưới và phải tuân theo những quy định chặt chẽ, các quy định đó được gọi là giao thức của tầng Trong kiến trúc phân tầng, một số mô hình được phát triển : mô hình OSI, TCP/IP.Xét trên phương diện lập trình với máy tính, ta xét mô hình phân tầng thu gọn: Nói chung trong truyền thông có sự tham gia của các thành phần: Các chương trình ứng dụng, các chương trình truyền thông, các máy tính và các mạng Các chương trình ứng dụng là các chương trình của người sử dụng được thực hiện trên máy tính và có thể tham gia vào quá trình trao đổi thông tin giữa hai máy tính Trên một máy tính với hệ điều hành đa nhiệm (như Windows, UNIX) thường được thực hiện đồng thời nhiều ứng dụng trong đó
có những ứng dụng liên quan đến mạng và các ứng dụng khác Các máy tính được nối với mạng và các dữ liệu trao đổi thông qua mạng từ máy tính này đến máy tính khác
Việc gửi dữ liệu được thực hiện giữa một ứng dụng với một ứng dụng khác trên hai máy tính khác nhau thông qua mạng được thực hiện như sau: Ứng dụng gửi chuyển dữ liệu cho chương trình truyền thông trên máy tính của nó, chương trình truyền thông sẽ gửi chúng tới máy tính nhận Chương trình truyền thông trên máy nhận sẽ tiếp nhận dữ liệu, kiểm tra nó trước khi chuyển giao cho ứng dụng đang chờ dữ liệu
Với mô hình truyền thông đơn giản người ta chia chương trình truyền thông thành ba tầng không phụ thuộc vào nhau là : tầng ứng dụng, tầng giao vận và tầng tiếp cận mạng
xi
Trang 16o Tầng tiếp cận mạng: Liên quan đến việc trao đổi dữ liệu giữa máy tính và mạng mà nó được nối vào Để dữ liệu đến được đích máy tính gửi cần phải chuyển địa chỉ của máy tính nhận cho mạng và qua đó mạng sẽ chuyển các thông tin tới đích Ngoài ra máy gửi có thể sử dụng một số dịch vụ khác nhau mà mạng cung cấp như gửi ưu tiên, tốc
độ cao
o Tầng giao vận: Thực hiện quá trình truyền thông end-to-end giữa hai ứng dụng không liên quan tới mạng và nằm ở trên tầng tiếp cận mạng Tầng truyền dữ liệu không quan tâm đến bản chất các ứng dụng đang trao đổi dữ liệu mà quan tâm tới làm sao cho các dữ liệu trao đổi một cách an toàn Tầng truyền dữ liệu đảm bảo các dữ liệu đến được đích và đến theo đúng thức tự mà chúng được xử lý.Trong tầng truyền dữ liệu người
ta phải có những cơ chế nhằm đảm bảo sự chính xác đó và rõ ràng các cơ chế này không phụ thuộc vào bản chất của tầng ứng dụng và chúng sẽ phục vụ cho tất cả các ứng dụng
o Tầng ứng dụng: Sẽ chứa các module phục vụ cho tất cả những ứng dụng của người dùng Với các loại ứng dụng khác nhau (truyền file, truyền thư mục) cần các module khác nhau
1.6.3 Địa chỉ IP – Các địa chỉ IP dành riêng
Mỗi địa chỉ IP có độ dài 32 bit (đối với IPv4) được tách thành 4 vùng (mỗi vùng 1 byte), có thể được biểu thị dưới dạng thập phân, bát phân, thập lục phân hoặc nhị phân Cách viết phổ biến nhất là dùng ký pháp thập phân có dấu chấm để tách giữa các vùng Địa chỉ IP là để định danh duy nhất cho một host bất kỳ trên liên mạng
Khuôn dạng địa chỉ IP: Mỗi host trên mạng TCP/IP được định danh duy nhất bởi một địa chỉ có khuôn dạng <Network Number, Host Number> Do tổ chức và độ lớn của các mạng con của liên mạng có thể khác nhau, người ta chia địa chỉ IP thành 5 lớp ký hiệu A, B, C,
D, E Các bit đầu tiên của byte đầu tiên được dùng để định danh lớp địa chỉ (0-lớp A; 10 lớp B; 110 lớp C; 1110 lớp D; 11110 lớp E)
Subneting: Trong nhiều trường hợp, một mạng có thể được chia thành nhiều mạng con, lúc đó có thể đưa thêm các vùng subnetid để định danh các mạng con Vùng subnetid được lấy từ vùng hosted, cụ thể đối với 3 lớp A, B, C
xii
Trang 17ICMP(Internetwork Control Message Protocol) là một trong những giao thức cốt lõi của giao thức Internet Suite Đó là chủ yếu được sử dụng bởi các hệ điều hành của máy tính nối mạng để gửi thông báo lỗi cho thấy, ví dụ: Một dịch vụ yêu cầu không có hoặc có một máy chủ hoặc router không thể đạt được ICMP cũng có thể được sử dụng để chuyển tiếp tin nhắn truy vấn.
ICMP khác với giao thức vận chuyển như TCP và UDP ở chổ nó không thường được
sử dụng để trao đổi dữ liệu giữa các hệ thống, cũng không phải là thường xuyên làm việc của người sử dụng các ứng dụng mạng lưới cấp (với ngoại lệ của một số công cụ chuẩn đoán như Ping và Tracerouter)
ICMP cho giao thức Internet phiên bản ICMPv4 IPv6 có một giao thức tương tự, ICMPv6
1.7.1 Giới thiệu ICMP
Internet Control Message Protocol là một phần của giao thức Internet Suite được định nghĩa trong RFC 792 Thông điệp ICMP thường được tạo ra để đáp ứng với các lỗi trong IP datagrams (theo quy định tại RFC 1122), hoặc cho hay định tuyến nhằm mục đích chẩn đoán ICMP luôn luôn được báo cáo với nguồn địa chỉ IP gốc của gói dữ liệu có nguồn gốc.Mỗi thông điệp ICMP được đóng gói trực tiếp trong một gói dữ liệu IP duy nhất, và
do đó, giống như UDP, ICMP là giao thức không đáng tin cậy
Mặc dù thông điệp ICMP được chứa trong tiêu chuẩn IP datagrams, các thông điệp ICMP thường được xử lý như một trường hợp đặc biệt, phân biệt với cách điều chế IP bình thường Trong nhiều trường hợp, việc kiểm tra các nội dung của thông điệp ICMP là rất cần thiết, nó cung cấp những thông báo lỗi thích hợp cho các ứng dụng tạo ra các gói IP ban đầu
Nhiều tiện ích mạng thông dụng dựa trên thông điệp ICMP Các lệnh tracerouter được thực hiện bằng cách truyền UDP datagrams với gói tin được đặt thêm thông số IP TTL, và tìm kiếm ICMP có thời gian sống lớn hơn TTL và “Destination ủneachable” trong quá trình truyền Các tiện ích ping được thực hiện bằng cách sử dụng ICMP “Echo Request” và
“Echo Reply”
1.7.2 Cấu trúc
xiii
Trang 18Các gói tin bắt đầu sau IP header (20 bytes) Tất cả các gói ICMP sẽ có một header có kích thước 8 byte và phần biến dữ liệu 4 byte đầu tiên của header này sẽ được nhất quán Các byte đầu tiên dành cho trường Type Các byte thứ hai là cho trường Code Các byte thứ
ba và thứ tư là trường Checksum Nội dung của các byte từ byte thứ 4 của header sẽ khác nhau dựa trên trường Type và Code
Thông báo lỗi của ICMP có chứa một phần dữ liệu bao gồm toàn bộ các IP header cộng với các byte đầu tiên của gói tin mà tạo ra các thông báo lỗi khác nhau Các gói dữ liệu ICMP sau đó được gói gọn trong một gói IP mới
o Type – ICMP Code theo quy định
o Code – Kiểu loại hình nhất định
o Checksum – Kiểm tra lỗi dữ liệu Tính từ ICMP header + dữ liệu, với giá trị
0 cho trường này
1.7.3 Danh sách các thông điệp điều khiển của giao thức ICMP
3- Destination Ủneachable 0 Điểm đích của mạng không thể truy cập
1 Host đích không thể truy cập
2 Giao thức đích không thể truy cập
3 Cổng đích không thể truy cập
4 Yêu cầu sự phân mảnh, và đặt cờ DF
5 Định tuyến nguồn bị lỗi
6 Không biết mạng đích
7 Không biết máy đính
8 Host nguồn bị cô lập
9 Mạng hành chính bị cấm
10 Host hành chính bị cấm
11 Mạng không thể truy cập cho TOS
12 Máy không thể truy cập cho TOS
13 Bị cấm truyền thông
xiv
Trang 195- Redirect Message 0 Chuyển Datagram cho mạng
1 Chuyển Datagram cho host
2 Chuyển Datagram cho TOS và mạng
3 Chuyển Datagram cho TOS và host
Simple Key – Quản lý giao thức Internet
động như Seamoby [RFC4065]
xv
Trang 20CHƯƠNG 2 LẬP TRÌNH MẠNG VỚI SOCKET
Application Program
IPPhysical & Data Link Layer
TCP UDP
Stream Socket Interface
Datagram Socket Interface
Raw Socket Interface
Hình 2.1 Giới thiệu về lập trình với socketSockets cung cấp một interface để lập trình mạng tại tầng Transport Một socket là một end-point của một liên kết giữa hai ứng dụng Ngày nay, Socket được hỗ trợ trong hầu hết các hệ điều hành như MS Windows (WinSock), Linux và được sử dụng trong nhiều ngôn ngữ lập trình khác nhau: như C, C++, Java, Visual Basic, C#,
Windows Socket Application Programming Interface (Winsock API) là một thư viện các hàm socket Winsock hỗ trợ các lập trình viên xây dựng các ứng dụng mạng trên nền TCP/IP
Là giao diện lập trình ứng dụng (API), giao diện giữa chương trình ứng dụng với lớp mạng trong hệ thống mạng TCP/IP.Thông qua giao diện này chúng ta có thể lập trình điều khiển việc truyền thông giữa hai máy sử dụng các giao thức mức thấp làTCP,UDP…
Thiết lập các lập kênh giao tiếp với mỗi đầu kênh được đánh dấu bằng một cổng Dữ liệu có thể đi vào và ra khỏi kênh giao tiếp thông qua cổng này
Cơ chế giao tiếp:
o Một trong hai quá trình phải công bố số hiệu cổng của socket mà mình sử dụng để nhận và gởi dữ liệu
xvi
Trang 21o Các quá trình khác có thể giao tiếp với quá trình đã công bố cổng cũng bằng cách tạo ra một socket.
Các loại socket:
o Socket hướng kết nối (TCP Socket)
o Socket không hướng kết nối (UDP Socket)
Cách tạo Raw Socket như sau:
Socket newsock= new Socket(AddressFamily.InterNetwork, SocketType.Raw,
ProtocolType.Icmp);
Gửi gói dữ liệu Raw:
o Là giao thức không hướng kết nối, không cần bind socket đến cổng cục bổ để gửi gói tin hoặc dùng phương thức Conncect() để kết nối nó với host cụ thể ở xa
xvii
Trang 22o Sử dụng phương thức SendTo() của lớp Socket để gửi.
o Công trong giao thức ICMP không quan trọng
o Chú ý: Vì raw socket không format dữ liệu nên mảng byte sẽ truyền nguyên định dạng đến host ở xa Do đó ta phải tạo thủ công gói ICMP thành mảng byte rồi mới gởi Nếu có lỗi bạn sẽ không có gói ICMP trả về
Socket newsock= new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
IPEndPoint iep = new IPEndPoint (IPAdress.Parse(“192.168.1.2”),0);
Sock.SendTo(packet, iep);
Nhận gói dữ liệu Raw
o Dữ liệu nhận được từ raw socket phức tạp hơn, ta phải dùng phương thức ReceiveFrom()
o Raw socket không xác định giao thức tầng trên, dữ liệu trả về phương thức ReceiveFrom() chứa toàn bộ nội dung gói IP
o Chú ý: Vì phương thức ReceiveFrom() cho toàn bộ gói tin IP, ta phải khai báo kích thước buffer nhận nhiều hơn dữ liệu chứa bên trong ít nhất là 20 bytes
Tạo lớp ICMP Class
o Tạo lớp ICMP class để dễ dùng trong các ứng dụng mạng có các gói ICMP
o Lớp ICMP thường cần có các biến dữ liệu trong bản sau:
Checksum 2 bytes Unsigned 16-bit integerMessage Multibyte Byte array
o Không gán giá trị cho các biến dữ liệu Ta sẽ gán giá trị cho chúng khi thực
sự khởi tạo gói ICMP
class ICMP {
xviii
Trang 23public byte Type;
public byte Code;
public UInt16 Checksum;
public int MessageSize;
public byte[] Message = new byte[1024];
public ICMP() {
} }
o Để tạo gói ICMP mới, ta khai báo và gán giá trị:
ICMP packet = new ICMP();
packet.Type = 0x08;
packet.Code = 0x00;
packet.Checksum = 0;
o Đoạn code trên tạo phần đầu của gói ICMP Echo Request
o Gói Echo Request định nghĩa các trường trong thành phần thông điệp ICMP (Idnetifier và Sequence), bạn phải quyết định xây dựng thành phần này như thế nào Bằng 2 cách:
• Tạo lớp khác cho trường Echo Request và lấy mảng byte của lớp
• Chuyển các trường thông điệp riêng thành mảng byte và đặt chúng vào thành phần dữ liệu
o Nếu bạn định tạo nhiều gói Echo Request, nên tạo lớp Ping định nghĩa các trường Echo Request riêng biệt
o Ngược lại ta làm theo cách sau:
Buffer.BlockCopy(BitConverter.GetBytes((short)1),0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1),0, packet.Message, 2, 2); byte[] data = Encoding.ASCII.GetBytes("test packet");
Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
xix