intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Đồ án: Chương trình mô tả hoạt động hệ thống phân giải tên miền Domain Name System

Chia sẻ: Minh Minh | Ngày: | Loại File: PDF | Số trang:26

232
lượt xem
50
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Báo cáo đồ án: Chương trình mô tả hoạt động hệ thống phân giải tên miền Domain Name System – DNS gồm 4 chương. Trong đó chương 1: Giới thiệu về hệ thống phân giải tên miền, chương 2 trình bày về Domain Name System, chương 3 trình bày sơ đồ hoạt động, chương 4 trình bày code cụ thể của chương trình DNS client và chương trình DNS server. Mời bạn đọc cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Đồ án: Chương trình mô tả hoạt động hệ thống phân giải tên miền Domain Name System

  1. Trường Đại Học Kĩ thuật Công Nghệ TP HCM Khoa Công Nghệ Thông Tin BÁO CÁO ĐỒ ÁN CHƯƠNG TRÌNH MÔ TẢ HOẠT ĐỘNG HỆ THỐNG PHÂN GIẢI TÊN MIỀN DOMAIN NAME SYSTEM – DNS Chương 1: Giới thiệu Chương 2: Domain Name System Chương 3: Sơ đồ hoạt động Chương 4: Code cụ thể của chương trình DNS client và chương trình DNS server Nhóm sinh viên thực hiện : Sinh viên: Nguyễn An Cương Mã số sinh viên: 0851020008 Sinh viên: Trần Minh Tân Mã số sinh viên: 0851020179 Sinh viên: Nguyễn Văn Thành Mã số sinh viên: 0851020187 Trang 1
  2. Mục lục Chương 1: Giới thiệu 1 Chương 2: Domain Name System (DNS) 2 2.1 Khái Niệm DNS: .................................................................................................. 2 2.2 Chức năng của DNS ............................................................................................. 2 2.3 Các thành phần của DNS ...................................................................................... 3 2.4 Nguyên tắc hoạt động của chương trình :............................................................. 4 2.4.1 Mô hình nguyên tắt hoạt động:.................................................................... 5 Chương 3: Sơ đồ hoạt động 7 3.1 Sơ đồ hoạt động của DNS server .......................................................................... 7 3.2 Sơ đồ hoạt động của DNS client ........................................................................... 7 Chương 4: Code cụ thể của chương trình DNS client và chương trình DNS server 8 4.1 Chương trình DNS client: ..................................................................................... 8 4.2 Chương trình DNS server: gồm có 4 lớp: lớp Connection, lớp Main, lớp ServerThreadDns, lớp ResolveDNS: ..................................................................... 13 4.2.1 Lớp dùng để kết nối tới cơ sở dữ liệu: ....................................................... 13 4.2.2 Lớp Main: lớp chính trong chương trình: ................................................. 14 4.2.3 Lớp ServerThreadDns: lớp xem cần phân giải IP hay phân giải Domain: . 16 4.2.4 Lớp ResolveDNS: lớp phân giải IP hay Domain , và cập nhật dữ liệu vào cơ sở dữ liệu: ..................................................................................................... 18 Trang 2
  3. Chương 1: Giới thiệu Mỗi máy tính trong mạng muốn liên lạc hay trao đổi thông tin, dữ liệu cho nhau cần phải biết rõ địa chỉ IP của nhau. Nếu số lượng máy tính trong mạng nhiều thì việc nhớ những IP này là rất khó khăn. Mỗi máy tính ngoài địa chỉ IP ra còn có tên máy (host name). Đối với con người thì việc nhớ tên máy bao giờ cũng dễ nhớ hơn địa chỉ IP vì chúng có tính trực quang và gợi nhớ hơn. Do đó người ta tìm cách ánh xạ địa chỉ IP thành tên máy. Vì thế dịch vụ DNS ra đời, và người thiết kế cấu trúc của dịch vụ DNS là Paul Mockapetris – USC’s Information Sciences Institute và các kiến nghị RFC của DNS là RFC 882 và 883, sau đó là RFC 1034 và 1035 cùng với 1 số RFC bổ xung như bảo mật trên hệ thống DNS, cập nhật các record của DNS. Hệ thống phân giải tên miền có vai trò rất quan trọng trong môi trường mạng. Bởi vì nếu không có hệ thống phân giải tên miền thì mạng Internet sẽ rất mau chóng “ chết ”, vì lý do là con người không thế nhớ hết những địa chỉ ip của website mà họ muốn truy cập, cái mà con người dễ nhớ hơn địa chỉ ip là tên của website , tức là tên miền của website đó. Giả sử như địa chỉ ip của một website www.abcdef.com nào đó là 123.123.123.123. Trong trường hợp không có hệ thống phân giải tên miền thì khi người dùng muốn truy cập vào website www.abcdef.com thì họ phải đánh địa chỉ ip 123.123.123.123 vào trình duyệt, thế nhưng nếu người quản lý website này di chuyển server của website đến một nơi khác thì họ sẽ có một địa chỉ ip mới 11.11.11.11 cho website của họ, lúc này người dùng đánh địa chỉ ip 123.123.123.123 để truy cập vào www.abcdef.com sẽ không thể được, họ sẽ phải đánh địa chỉ 11.11.11.11 mới có thế truy cập được trang www.abcedef.com. Và nếu liên tục di chuyển server website nhiều lần như vậy thì người dùng sẽ cảm thấy không thoải mái vì phải nhớ nhiều địa chỉ ip của cùng một trang web, và cảm thấy khó khăn khi mỗi lần truy cập vào website www.abcdef.com là đánh một địa chỉ ip mới nên trang web này có thể sẽ không thu hút được khách hàng và sẽ không tồn tại được lâu. Tương tự như vậy cho nhiều website khác thì dể dàng thấy được rằng sẽ không có nhiều lượt người truy cập vào website và website không thể tồn tại khi không thu hút được khách hàng. Dần dần sẽ không còn ai truy cập vào bất cứ website nào, không còn website nào tồn tại, các dịch khác như mail, ftp… cũng sẽ tương tự, sẽ “ chết ”. Nhưng nếu có hệ thống phân giải tên miền thì việc người dùng truy cập vào website sẽ rất dễ dàng, vì họ không cần biết địa chỉ ip của website đó dù địa chỉ ip của website thay đổi liên tục họ chỉ cần nhớ tên miền của website, tương tự cho các dịch vụ như mail, ftp…. Trang 1
  4. Chương 2: Domain Name System (DNS) 2.1 Khái Niệm DNS: DNS là từ viết tắt của Domain Name System, là hệ thống tên miền được phát minh vào năm 1984 cho Internet, chỉ một hệ thống cho phép thiết lập tương ứng giữa địa chỉ ip và tên miền. Hệ thống tên miền (DNS) là một hệ thống đặt tên theo thứ tự cho máy vi tính, dịch vụ, hoặc bất kì nguồn lực tham gia vào Internet. Nó liên kết nhiều thông tin đa dạng với tên miền được gán cho những người tham gia. Quan trọng nhất là, nó chuyển tên miền có ý nghĩa cho con người vào số định danh (nhị phân), liên kết với các trang thiết bị mạng cho các mục đích định vị và địa chỉ hóa các thiết bị khắp thế giới. Hệ thống tên miền giúp cho nó có thể chỉ định tên miền cho các nhóm người sử dụng Internet trong một cách có ý nghĩa, độc lập với mỗi địa điểm của người sử dụng. Bởi vì điều này, World-Wide Web (www) siêu liên kết và trao đổi thông tin trên Internet có thể duy trì ổn định và cố định ngay cả khi định tuyến dòng Internet thay đổi hoặc những người tham gia sử dụng một thiết bị di động. Tên miền internet dễ nhớ hơn các địa chỉ IP như là 208.77.188.166 (IPv4) hoặc 2001: db8: 1f70:: 999: de8: 7648:6 e8 (IPv6). Hệ thống tên miền phân phối trách nhiệm gán tên miền và lập bản đồ những tên tới địa chỉ IP bằng cách định rõ những máy chủ có thẩm quyền cho mỗi tên miền. Trên thế giới có khoảng 13 DNS root Server. DNS root server quản lý tất cả các tên miền Top level. Các tên miền này như là: .com, .org, .vn,.net,... Khi có một yêu cầu phân giải một Domain Name thành một địa chỉ IP, máy khách sẽ gửi yêu cầu tới DNS gần nhất(DNS ISP). DNS ISP sẽ kết nối tới DNS root Server để hỏi địa chỉ của một Domain Name. DNS root Server sẽ căn cứ vào những Top Level của một Domain Name mà từ đó có những hướng dẫn thích hợp nhằm chuyển hướng cho máy khách đến đúng địa chỉ nó cần truy vấn. Những máy chủ có tên thẩm quyền được phân công chịu trách nhiệm đối với tên miền riêng của họ, và lần lượt có thể chỉ định tên máy chủ khác độc quyền của họ cho các tên miền phụ. Kỹ thuật này đã thực hiện các cơ chế phân phối DNS, chịu đựng lỗi, và giúp tránh sự cần thiết cho một trung tâm đơn lẻ để đăng kí được tư vấn và liên tục cập nhật. Nhìn chung, hệ thống tên miền cũng lưu trữ các loại thông tin khác, chẳng hạn như danh sách các máy chủ email mà chấp nhận thư điện tử cho một tên miền Internet. Bằng cách cung cấp cho một thế giới rộng lớn, phân phối từ khóa – cơ sở của dịch vụ đổi hướng , Hệ thống tên miền là một thành phần thiết yếu cho các chức năng của Internet. Các định dạng khác như các thẻ RFID, mã số UPC, kí tự Quốc tế trong địa chỉ email và tên máy chủ, và một loạt các định dạng khác có thể có khả năng sử dụng DNS. 2.2 Chức năng của DNS Mỗi Website có một hostname (là tên miền) và một địa chỉ IP. Địa chỉ IP gồm 4 nhóm số cách nhau bằng dấu chấm(IPv4). Khi người dùng mở một trình duyệt Web và Trang 2
  5. nhập tên website, trình duyệt sẽ đến thẳng website mà không cần phải thông qua việc nhập địa chỉ IP của trang web. Quá trình "dịch" tên miền thành địa chỉ IP để cho trình duyệt hiểu và truy cập được vào website là công việc của một DNS server. Các DNS trợ giúp qua lại với nhau để dịch địa chỉ "IP" thành "hostname" và ngược lại. Vì vậy người sử dụng chỉ cần nhớ tên, không cần phải nhớ địa chỉ IP. 2.3 Các thành phần của DNS Các thành phần của DNS:  DNS Domain Name Space: mỗi DNS domain sẽ có một tên duy nhất. Hệ thống DNS là hệ thống có cấu trúc phân tầng có cấp bậc cụ thể. Gốc của domain (root domain) nằm trên cùng, sau và được ký hiệu là dấu "." bao gồm 13 máy chủ gốc của Internet thế giới, tiếp đến là Top-Layer, bao gồm các tên miền .com, .vn, .net... tầng này mỗi tên miền bao gồm từ 2 đến 5 ký tự, riêng tên miền 2 ký tự dành riêng cho mỗi quốc gia. Tiếp đến là tầng Second-Level, có thể là tầng subdomains như .com.vn hay có thể là host name như micrsosoft.com.  Zones: một vấn đề quan trọng khác của DNS đó là Zone. Trong hệ thống DNS, người ta chia nhỏ thành những phần để gán những quản lý riêng,vì vậy cần phải chia ra các Zone để đảm bảo việc quản lý DNS một cách dễ dàng hơn - nói cách khác khi một hệ thống tên miền được chia ra các phần nhỏ hơn để dễ quản lý đó là các Zone. Và trên thực tế dữ liệu DNS được chứa trên các máy chủ Zone, dữ liệu của DNS là dữ liệu của các Zone. Trong DNS khi tạo ra một Zone mới thì sẽ có 3 sự lựa chọn là:  Primary Zone: máy chủ chứa dữ liệu Primary Zone là máy chủ có thể toàn quyền trong việc update dữ liệu Zone.  Secondary Zone: là 1 bản copy của Primary Zone, do nó chứa dữ liệu Zone nên cung cấp khả năng phân giải cho các máy có yêu cầu. Muốn cập nhật dữ liệu Zone phải đồng bộ với máy chủ Primary.  Stub Zone: dữ liệu của Stub Zone chỉ bao gồm dữ liệu NS Record trên máy chủ Primary Zone mà thôi, với việc chứa dữ liệu NS máy chủ Stub Zone có vai trò chuyển các yêu cầu dữ liệu của một Zone nào đó đến trực tiếp máy chủ có thẩm quyền của Zone đó. Trong Forward Lookup có thể sử dụng để chuyển các yêu cầu đến một máy chủ có thẩm quyền. Một điều quan trọng của sự khác nhau đó là Stub Zone có khả năng chứa dữ liệu NS của Primary Zone nên có khả năng thông minh trong quá trình cập nhật dữ liệu, địa chỉ của máy chủ NS của Zone đó nên việc chuyển yêu cầu sẽ dễ dàng hơn. Trang 3
  6. Forward Lookup là nhờ một máy chủ phân giải tên hộ, và không thể tự động cập nhật dữ liệu, nhưng đó cũng là một lợi thế và có thể sử dụng trên Internet. Còn Stub Zone chỉ sử dụng khi trong một domain có nhiều Zone con và chỉ dành cho một tổ chức khi truy cập vào các dữ liệu của tổ chức đó.  Name Servers: chính là máy chủ chứa dữ liệu Primary Zone. 2.4 Nguyên tắc hoạt động của chương trình : DNS Server hoạt động sẽ lắng nghe yêu cầu từ DNS Client trên cổng 123. Sau khi chấp nhận yêu cầu của client, client và server sẽ trao đổi thông tin trên một port thống nhất của client và server chứ không trao đổi qua port 123. (port 123 chỉ nhầm khởi tạo kết nối) Khi muốn phân giải tên miền hay địa chỉ ip thì DNS Client sẽ gửi cho DNS Server một chuổi kí tự cần phân giải, yêu cầu DNS Server phân giải. Khi nhận được chuỗi kí tự thì DNS Server sẽ kiểm tra chuỗi nhận được là địa chỉ ip hay domain, sau đó gọi hàm phân giải tương ứng với địa chỉ ip hay là domain. Khi gọi hàm phân giải thì chương trình sẽ dò tìm trong cơ sở dữ liệu đã có domain hay địa chỉ ip này chưa , nếu có rồi thì sẽ lấy ra rồi gửi kết quả về cho DNS Client; ngược lại, nếu chưa có trong cơ sở dữ liệu thì chương trình sẽ đi ra ngoài mạng Internet nhờ các DNS Server khác phân giải hộ. Trường hợp nếu phân giải được thì địa chỉ ip hay domain sẽ được cập nhật vào cơ sở dữ liệu, sau đó chương trình sẽ truy vấn trong cơ sở liệu một lần nữa để lấy ra địa chỉ ip hay domain rồi gửi về cho DNS Client. Trường hợp không phân giải được thì chương trình sẽ trả về mã lổi là 220 hoặc 230. DNS Client khi nhận được kết quả là mã lổi thì sẽ xuất ra thông báo tương ứng. 220 : địa chỉ ip không tồn tại. 230 : tên miền không tồn tại. Trang 4
  7. 2.4.1 Mô hình nguyên tắc hoạt động: Trường hợp phân giải thành công Trường hơp 220 : địa chỉ ip không tồn tại. Trường hợp 230 : tên miền không tồn tại. Trang 5
  8. Trang 6
  9. Chương 3: Sơ đồ hoạt động 3.1 Sơ đồ hoạt động của DNS server 3.2 Sơ đồ hoạt động của DNS client Trang 7
  10. Chương 4: Code cụ thể của chương trình DNS client và chương trình DNS server 4.1 Chương trình DNS client: Trang 8
  11. Ô “Dia chi server”: IP của máy chạy DNS server. Ô “Nhap Domain/IP”: tên miền hoặc địa chỉ ip muốn phân giải. Ô “Ket Qua”: nơi xuất ra kết quả là địa chỉ ip hoặc tên miền đã được phân giải. Nếu IP hoặc tên miền sai cũng sẽ thông báo ở đây. Nút “Phan giai”: phân giải tên miền hay địa chỉ ip. Nút “Thoat”: tắt chương trình. Ví dụ: Trang 9
  12. Code chương trình: package baithiclient; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; public class FmClient extends javax.swing.JFrame { private Socket client=null; private PrintWriter out=null; private Scanner in=null; private String hienthi=null; public FmClient() { Trang 10
  13. initComponents(); txtChuoi.requestFocus(); } @SuppressWarnings("unchecked") //phương thức của nút Phân giải private void btnConectActionPerformed1(java.awt.event.ActionEvent evt) { String chuoi=this.txtChuoi.getText(); //chuỗi sẽ truyền lên server String diachi =this.txtdiahciserver.getText(); String ketqua=""; //chuỗi ghi nhận kết quả lấy về từ server try { client = new Socket(diachi,123); // tạo mới socket kết nối tới server theo diachi và port 123 out=new PrintWriter(client.getOutputStream(),true); //đóng gói chuỗi out.println(chuoi); //truyền chuỗi out.flush(); // xoá bộ nhớ đệm in=new Scanner(client.getInputStream()); // nhận chuỗi truyền về từ server ketqua=in.nextLine().trim(); if(ketqua.equals("220")) { //220 là mã lỗi txtKetQua.setText("IP này không tồn tại"); } else if(ketqua.equals("230")) { //230 là mã lỗi txtKetQua.setText("Tên miền này không tồn tại"); } else { String xuat=ThayTheKyTu(ketqua); txtKetQua.setText(xuat); } client.close(); //đóng kết nối } catch (Exception ee) { Trang 11
  14. JOptionPane.showMessageDialog(null,"Không kết nối được tới máy chủ"); } finally{ try { client.close(); } catch (IOException ex) { Logger.getLogger(FmClient.class.getName()).log(Level.SEVERE, null, ex); } } } // phương thức của nút Thoát private void btnExitActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.exit(0); } //hàm thay thế public String ThayTheKyTu(String st) //thay thế các khoảng trắng bằng cách xuống dòng { String sTim = " "; String sThayThe = "\n"; st = st.replaceAll(sTim,sThayThe); return st; } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { Trang 12
  15. new FmClient().setVisible(true); } }); } 4.2 Chương trình DNS server: gồm có 4 lớp: lớp Connection, lớp Main, lớp ServerThreadDns, lớp ResolveDNS: 4.2.1 Lớp dùng để kết nối tới cơ sở dữ liệu: package Database; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class connection { private static Connection conn = null; private static String url = null; public connection() { } public static Connection getConnectionUrl() { String databaseName = ""; String serverName = ""; String portNumber = ""; String Instance = ""; String Password = ""; String Username = ""; try { FileInputStream fis = new FileInputStream("config.properties"); Properties pp = new Properties(); pp.load(fis); databaseName = pp.getProperty("databaseName"); serverName = pp.getProperty("serverName"); Trang 13
  16. portNumber = pp.getProperty("portNumber"); Username = pp.getProperty("Username"); Password = pp.getProperty("Password"); Class.forName("com.mysql.jdbc.Driver"); url = "jdbc:mysql://"+serverName+"/"+databaseName+"?user="+Username+"&password="+P assword+""; conn = DriverManager.getConnection(url); if (conn!=null) { System.out.println("..................Kết nối cơ sở dữ liệu thành công"); } } catch (Exception e) { } return conn; } public static void main(String[] args) { getConnectionUrl(); } } 4.2.2 Lớp Main: lớp chính trong chương trình: package DnsServer; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class MainDnsServer { static final int port=123; private ServerSocket server=null; public MainDnsServer() Trang 14
  17. { try { server = new ServerSocket(port); int localport=server.getLocalPort(); System.out.println("Server lắng nghe kết nối trên port : "+localport); } catch (IOException ex) { Logger.getLogger(MainDnsServer.class.getName()).log(Level.SEVERE, null, ex); } } public void Action(){ Socket client=null; int i=0; try { while ((client = server.accept()) != null) { i++; int portclient = client.getPort(); System.out.println("client: " + client.getInetAddress().getHostName() + " yêu cầu được giải quyết trên port: " + portclient); new ServerThreadDns(client, "Kết thúc lượt truy cập thứ: " + i); // tạo ra (làm mới một đối tượng) để thực hiện các tác vụ } } catch (IOException ex) { Logger.getLogger(MainDnsServer.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String[] args) { new MainDnsServer().Action(); Trang 15
  18. } } 4.2.3 Lớp ServerThreadDns: lớp xem cần phân giải IP hay phân giải Domain: package DnsServer; import Database.ResolveDNS; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class ServerThreadDns implements Runnable{ private Scanner in=null; private PrintWriter out=null; private Socket client; private String name; private String a; private static ResolveDNS phangiai; public ServerThreadDns(Socket client, String name) throws IOException { this.client=client; this.name=name; in= new Scanner(this.client.getInputStream()); out= new PrintWriter(this.client.getOutputStream(),true); new Thread(this).start(); } public static boolean isNumberic(String str){ try{ Long.parseLong(str); return (true); } catch (Exception e){ Trang 16
  19. return (false); } } public void run() { try{ while(true) { phangiai=new ResolveDNS(); String chuoi=in.nextLine().trim(); Scanner sc=new Scanner(chuoi); String get=sc.nextLine(); int dodai=get.length(); String kytu=get.substring(dodai-1,dodai); if(isNumberic(kytu)){ String kq= phangiai.ResoleIP(get); System.out.println("Client yêu cầu phân giải địa chỉ IP này: "+get); if(kq==null) { System.out.println("Địa chỉ IP này không có trong cache, cần được cập nhật"); int pg=phangiai.InsertIpData(get); if(pg==1) { kq=phangiai.ResoleIP(get); out.println(kq); } if(pg==0) out.println("220"); } out.println(kq); System.out.println("Kết quả đã trả về : "+kq); Trang 17
  20. } else { String kq= phangiai.ResoleDomainName(get); System.out.println("Client yêu cầu phân giải tên miền này: "+get); if(kq==null){ System.out.println("Tên miền này không có trong cache, cần được cập nhật"); int pg=phangiai.InsertDomainData(get); if(pg==1){ kq=phangiai.ResoleDomainName(get); out.println(kq); } if(pg==0) out.println("230"); } out.println(kq); System.out.println("Kết quả đã trả về client: "+kq); } } }catch(Exception e){ System.out.println(name+" Ngắt kết nối...........BYE "); }finally{ try{client.close();}catch(Exception e){} } } } 4.2.4 Lớp ResolveDNS: lớp phân giải IP hay Domain , và cập nhật dữ liệu vào cơ sở dữ liệu: package Database; Trang 18
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2