Đồ án chương trình mô tả hoạt động hệ thống phân giải tên miền domain name system
Trang 1Trườ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
Trang 2Mục lục
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 3Chươ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 4Chương 2: Domain Name System (DNS)
2.1 Khái Niệm DNS:
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 5nhậ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 6Forward 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 72.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 9Chươ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 10Chươ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 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 12public 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 13initComponents();
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
else if(ketqua.equals("230")) { //230 là mã lỗi
txtKetQua.setText("Tên miền này không tồn tại");
Trang 14JOptionPane.showMessageDialog(null,"Không kết nối được tới máy
// phương thức của nút Thoát
private void btnExitActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
Trang 15public class connection {
private static Connection conn = null;
private static String url = null;
FileInputStream fis = new FileInputStream("config.properties");
Properties pp = new Properties();
pp.load(fis);
databaseName = pp.getProperty("databaseName");
serverName = pp.getProperty("serverName");
Trang 16public class MainDnsServer {
static final int port=123;
private ServerSocket server=null;
public MainDnsServer()
Trang 17int 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 18public 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);
Trang 21public class ResolveDNS {
private static Connection conn = null;
private static Statement st = null;
private static ResultSet rs = null;
private static String kq=null;
private static String listIp=null;
private static String ip=null;
private static String domainname=null;
Trang 25try
{
int i ,j ; conn = (Connection) connection.getConnectionUrl(); try {
st = (Statement) conn.createStatement(); }
catch (SQLException ex) {
System.out.println("Lổi tạo statement"); }
//Lay tat ca cac IP cua ten mien vua nhap InetAddress addr[] = InetAddress.getAllByName(domain); for(i = 0; i<addr.length;i++) {
byte[] ipAddr = addr[i].getAddress(); String ipAddrStr=""; for(j=0;j<ipAddr.length;j++) {
if(j>0) {
ipAddrStr +="."; }
ipAddrStr += ipAddr[j]&0xFF;
}
String query = "Insert into dns values ( null,'"+ipAddrStr+"','"+domain+"') "; System.out.println("Cập nhật "+ipAddrStr+" cho tên miền "+domain+" thành công");