Cài đặt các ứng dụng từ mã nguồn trên Linux

Tháng Mười 6, 2007 by huyx

Có nhiều bạn khi lần đầu tiên đến với Linux cảm giác sự khó khăn và bất tiện của việc cài đặt các ứng dụng trên Linux, đặc biệt là các ứng dụng phải cài đặt từ mã nguồn như xine, openGL…

Trên Windows, bạn chỉ cần tải ứng dụng về, giải nén rồi click vào file setup là hoàn tất việc cài đặt, nhưng trên Linux đó là một chuyện hoàn toàn khác. Bài viết này sẽ nhằm mục đích hướng dẫn bạn các thao tác cài đặt các phần mềm ứng dụng trên Linux và cung cấp các kiến thức căn bản giúp bạn có thể quản lý hệ thống của riêng mình

Bài viết sẽ giả sử rằng bạn đã biết cách sử dụng một số phần mềm quản lý gói như rpm. Để dễ dàng thì bài viết sẽ gọi các phần mềm trên Linux là các gói (package). Thực tế tên gọi ‘gói’ đúng đắn hơn vì các gói trên Linux có thể không phải là một trình ứng dụng nào đó mà chỉ là các thư viện nền như thư viện đồ họa Gtk+ hoặc OpenGL…
1. Giới thiệu

Bạn có thể sẽ tự hỏi rằng tại sao các phần mềm trên Linux không tự đóng gói sẵn cho chúng ta rồi khi xuất bạn chỉ cần tải về và cài đặt nó. Câu trả lời nằm ở 2 vấn đề, vấn đề thứ 1 là các phần mềm viết trên Linux không hẳn chỉ có thể chạy trên Linux mà có thể chạy trên nhìều hệ thống khác nhau trong họ Unix như Solaris, AIX, HP-UX… thậm chí các phần mềm đó có thể chạy trên rất nhiều vi xử lý khác nhau như Intel, Motorola, PPC… Có được sự đa năng đó là nhờ vào tính đa nền (portable) của ngôn ngữ C/C++ nhưng đòi hỏi chúng ta phải biên dịch lại phần mềm từ mã nguồn cho hệ thống mà chúng vận hành. Bạn sẽ tự hỏi là tại sao các nhà phát triển lại không biên dịch sẵn cho chúng ta trên hệ thống thông dụng nào đó như Linux chẳng hạn.

Câu trả lời là bởi vì các phần mềm này là phần mềm mã nguồn mở và các nhà phát triển không có cách gì hơn là để lại phần biên dịch cho chúng ta. Tuy nhiên bạn đừng thất vọng vì có một số nhà phát triển rất là tốt bụng có thể biên dịch sẵn cho chúng ta ra các gói có dạng rpm và cùng với sự hỗ trợ của công ty Red Hat chúng ta cũng đã có những chương trình quản lý các phần mềm hiệu quả không kém gì trên Windows như RPM (Redhat Package Manager). Mặc dù là thế nhưng không phải lúc nào các gói mới nhất từ các nhà phát triển gốc đều có phiên bản biên dịch sẵn mà thường là một khỏang thời gian sau các phiên bản đó mới có được dưới dạng biên dịch sẵn. Bên cạnh đó còn có rất nhiều nhà phát triển không hề biên dịch sẵn sản phầm của mình mà đòi hòi người dùng phải biên dịch, điển hình là trình chơi phim và nhạc xine. Các gói biên dịch sẵn các bạn có từ xine đa số là từ các nhà phát triển khác. Do đó nếu bạn không bạn không biết cách cài đặt các gói từ nguồn là một trở ngại rất lớn cho việc hiểu và quản trị hệ thống của riêng mình.

2. Căn bản của việc cài đặt

Điều đầu tiên khi bạn tiến hành cài đặt là bạn phải có mã nguồn của gói đó trước. Hãy lên mạng search bất kì gói nào bạn thích như thư viện Gtk+ hoặc Gnome… Sau khi tải về, thông thường có dạng là .gz hoặc .bz2, đây đều là 2 chuẩn nén khác nhau, sau khi giải nén bằng gunzip cho gz hoặc bunzip2 cho bz2 thì các gói sẽ có dạng mới là tar, cũng là một chuẩn nén khác, bạn có thể giải nén bằng lệnh, tar -xvf… Thế nhưng đế dễ dàng và tiết kiệm dung lượng ổ đĩa thì chúng ta có thể gộp các câu lệnh đó thành 1 như sau:

- Đối với gói .gz: # tar -zxvf tengoi.gz
- Đối với gói .bz2: # tar -jxvf tengoi.bz2

Sau khi giải nén xong và tìm tập tin INSTALL để đọc cụ thể cho phần hướng dẫn cài đặt. Thế nhưng hầu như các gói đều tuân theo các thao tác tuần tự sau:

# ./configure
# make
# make install

Chỉ có vài gói đặc biệt sẽ có riêng cách cài đặt nhưng khi bạn đã nắm vững nguyên tắc chung thì dù là cách thức nào bạn cũng có thể xoay xở được. Chúng ta hãy xét đến câu lệnh đầu tiên, ./configure… Thực chất configure là một shell script sẽ kiểm tra những yêu cầu của hệ thống của bạn có đáp ứng đủ để cài đặt gói lên không, ví dụ như một số gói đòi hỏi bạn phải có sẵn thư viện đồ họa Gtk 2.4 trở lên hoặc là thư viện để giải nén nhạc Mp3…

Rất nhiều gói có sự phụ thuộc như thế chứ các gói khi tải về không hề có sẵn các gói tương ứng cần thiết cho nó. Khi bạn chạy configure xong kết quả sẽ cho bạn biết các gói nào cần thiết để cài đặt. Nhiệm vụ của bạn không gì hơn là phải tìm các gói phụ thuộc đó cài lên máy rồi mới tiếp tục việc cài đặt. Nếu như hệ thống của bạn thỏa mãn đầy đủ các yêu cầu để cài đặt thì các Makefile sẽ được tạo ra. Makefile là một file đặc biệt của tiện ích make nhằm hướng dẫn biên dịch mã nguồn của gói ra dạng thực thi.

Sau khi bạn thực thi lệnh ‘make’ xong thì toàn bộ mã nguồn của gói đã được biên dịch sang dạng thực thi nhưng các file thực thi vẫn còn nằm trên thư mục hiện hành. Do đó bạn cần phải thực hiện thêm lệnh ‘make install’ để chép các file thực thi đó sang đúng vị trí của nó trên hệ thống. Nếu như không có thông báo lỗi gì xảy ra thì bạn đã hòan tất việc cài đặt gói lên hệ thống của mình.

3. Tổ chức các file trên hệ thống

Bạn hoàn toàn biết thư mục trên Linux thì thư mục /usr là thư mục quan trọng nhất vì nó sẽ chứa các chương trình và hàm thư viện trên đó. Trong thư mục /usr/bin là sẽ chứa các file thực thi cho các gói bạn đã cài đặt trên máy, các file trong thư mục này bạn sẽ thấy các file rất quen thuộc như mozilla, gedit .v.v… Thư mục /usr/lib sẽ chứa các hàm thư viện, bạn sẽ thấy rất nhiều files có phần mở rộng là .so (shared object) là các hàm thư viện liên kết động hoặc .a (archive) hoặc .la đều là các hàm thư viện liên kết tĩnh. Đặc tính căn bản của 2 dạng thư viện này là hàm thư viện liên kết tĩnh sẽ được liên kết thẳng với files thực thi luôn trong quá trình liên kết, còn hàm thư viện liên kết động thì sẽ được liên kết trong quá trình thực thi, cho nên sau khi chương trình đã được biên dịch và liền kết rồi các thư viên tĩnh chúng ta có thể bỏ đi nhưng thư viện liên kết động thì bắt buộc phải đi kèm với chương trình. Thư mục /usr/share sẽ chứa các icon, manual hoặc info của gói.

4. Loại bỏ một gói

Nếu bạn mong muốn lọai bỏ một gói đã cài đặt trên hệthống thì cách duy nhất là bạn phải vào lại thư mục mã nguồn của gói và gõ lệnh make ‘uninstall’… thông thường bạn sẽ có các câu lệnh sau: ‘make clean’ ‘make distclean’… Các câu lệnh có ý nghĩa rất tương đối và được định nghĩa trong tập tin Makefile, nên đầu tiên bạn cứ thử với ‘make uninstall’ rồi ‘make clean’ cái cuối cùng ‘make distclean’ là giúp bạn xóa hết các tập tin đã biên dịch ở thư mục nguồn và đồng thời xóa Makefile, bạn phải chạy lại ./configure để tạo lại Makefile.

5. Quản lý các gói

Do việc xóa bỏ một gói như trên rất là phiền phức đôi lúc bạn chẳng thể xóa bỏđược nếu như mất đi mã nguồn, cho nên bạn có thể thay vì cài nó vào thư mục mặc định là /usr thì bạn có thể cài vào các thư mục của riêng bạn, ví dụ như bạn có thể tạo thư mục ‘/soft’… Sau đó để cài gói gedit thì bạn tạo thêm thư mục /soft/gedit và dùng lệnh ./configure… bạn thêm tùy chọn sau:

./configure –prefix=/soft/gedit

Thì khi bạn gõ make install sẽ copy toàn bộ sang thư mục /soft/gedit. Khi bạn muốn xóa toàn bộ gói thì chỉ đơn giản xóa đi thư mục đó thôi. Lưu ý là khi bạn cài vào thư mục riêng của mình rồi bạn phải tạo 2 đường dẫn cho 2 biến môi trường (environment variable) LD_LIBRARY_PATH và PKG_CONFIG_PATH.

LD_LIBRARY_PATH sẽ có đường dẫn đến thư mục lib của gói vừa tạo (ví dụ như /soft/gedit/lib) còn PKG_CONFIG_PATH sẽ có đường dẫn đến thư mục pkg_config trong thư mục lib (ví dụ như /soft/gedit/lib/pkg_config). Bên cạnh đó nếu bạn muốn chương trình gọi tự động thì bạn cũng nên thêm vào biến PATH cho gói của mình.

6. Lời kết

Đối với cách cài trên thì bạn dể dàng quản lý các gói của mình nhưng đối với các dạng thư viện thì bạn nên cài nó vào thư mục /usr hơn là thư mục riêng của mình vì một số gói sẽ tìm các thư việc trên thư mục mặc định /usr và /usr/local hơn là các thư mục riêng người dùng nên nếu bạn cài lên thư mục riêng thì đôi lúc các thư viện đó sẽ không được tìm ra. Thông thường lệnh ./configure đi đôi với rất nhiều tùy chọn cho phép bạn lựa chọn nhiều tính năng khác nhau, bạn hãy gỏ ./configure –help để mà biết đầy đủ các tùy chọn của gói

Đề thi kiểm tra kiến thức Hệ điều hành và Mạng máy tính

Tháng tám 30, 2007 by huyx

Phần 2. Hệ Điều Hành

Câu 1:
Máy tính cài hệ điều hành Windows Version từ Windows 2000 trở lên có tài khoản IUSR_ComputerName hay không, nếu có trong trường hợp nào và tài khoản đó thuộc nhóm người nào, quyền hành ra sao?

Câu 2:
IIS Version 5.1 (chạy trên Windows XP) có đặc điểm gì mà bạn cho là khác so với IIS Version 6 (chạy trên Windows 2003)?

Câu 3:
Khi bạn bật Task Manager lên chuyển qua thẻ Processes nhìn xuống cột User Name thấy có SYSTEM,Vậy thì SYSTEM có phải là một user hay không?

Câu 4:
Theo đánh giá của bạn chức năng Intergrated Windows Authentication của IIS có những lợi ích gì?

Câu 5:
Với ISS, khi ta Enable Anonymous Access lên, thì chức năng Intergrated Windows Authentication còn tác dụng hay không?

Câu 6:
Đặt giả sử bạn cài Apache trên Windows XP hoặc Windows 2003 Server, Apache được chạy như một service của Windows. Đặt giả sử như Apache được cài đặt để làm việc với 1 server script (như PHP chẳng hạn); trên thư mục chủ có 1 shell. Nếu là bạn bạn có thể định cấu hình như thế nào để shell này không thể xóa những dữ liệu ở một khu vực nào đó trong hệ thống của bạn?

Câu 7:
a) Mô hình ODBC là gì? Bạn biết gì về JDBC?
b) Việc sử dụng DBMS Microsoft Access có điểm bất lợi gì, ưu điểm gì?

Câu 8:
Khi máy tính nhà bạn có điện nguồn vào mà không hoạt động được (Màn hình đen) thì việc đầu tiên bạn sẽ làm gì?

Câu 9:
Để máy tính của bạn bền và không mất data bạn nên dùng tiện ích Diskdefragmenter có sẵn trong Windows để sắp xếp lại HDD mỗi tuần là đúng hay sai? Bạn có cách nào hay hơn không?

Câu 10:
Bạn biết là ngôn ngữ C/C++ có kiểu con trỏ. Vậy với hệ máy tính 16 bit sử dụng chip 8086 của Intel thì con trỏ là gì?
A – Chỉ là một định danh nào đó giúp trình biên dịch định vị biến
B – Là một vùng nhớ 4 byte lưu địa chỉ vùng nhớ nào đó mà con trỏ trỏ đến
C – là vùng nhớ 2 byte lưu địa chỉ vùng nhớ con trỏ trỏ đến
D – Con trỏ là một chỉ thị tiền biên dịch

Phần 3. Mạng Máy Tính

Câu 1:
Khi từ trình duyệt ta gõ một URL: www.google.com thì thông tin mà trình duyệt gửi ra ngoài sẽ đến đâu đầu tiên:
A – Đến Web Server của Google
B – Đến DNS Server mà máy tính bạn trỏ đến
C – Đến DHCP Server mà máy tính bạn trỏ đến

Câu 2:
Như chúng ta đã biết trên lý thuyết địa chỉ IP bắt đầu từ 0.0.0.0 tới 255.255.255.255, vậy bạn có thể cho biết địa chỉ lớp B bắt đầu từ đâu và kết thúc từ đâu? và IP 127.0.0.1 có sử dụng để kết nối mạng được không? vì sao?

Câu 3:
Trong một Hệ Điều hành Windows hay *nix , khi vừa cài xong, đã kết nối mạng nhưng không dùng trình duyệt (Browser), không dùng Soft và Webmail để connect, chúng ta muốn gửi một E-mail thì có gửi được không? Nếu được thì bằng cách nào?

Câu 4:
Trong giao thức POP3 (Post Office Protocol version 3), khi gửi e-mail đi thì password sẽ được mã hóa theo dạng nào?

Câu 5:
Khi up 1 con shell có chức năng Back connect lên server, và bạn thực hiện NetCat để connect, vậy bạn hiểu thế nào về Back Connect? và lợi ích của việc dùng Back Connect?

Câu 6:
Mô hình TCP/IP gồm có bao nhiêu lớp, hãy kể tên và nhiệm vụ của từng lớp cũng như các giao thức có trong nó, cho biết giao thức SMTP nằm ở lớp nào?

Câu 7:
Bạn có thể dùng 2 máy tính nối vào 1 Modem và thực hiện sự trao đổi Data cũng như cho 2 máy nhìn thấy nhau giống như mạng LAN được không? Nếu được bạn hãy trình bày.

Câu 8:
Trong một phòng Lab có 20 máy, dùng 2 link ADSL: 1 của FPT và 1 của VDC, sài 2 Modem nhưng chỉ nối với 20 máy đó bằng 1 Hub, cấu hình sao cho 10 máy bên này dùng dịch vụ của VDC và 10 máy dùng dịch vụ của FPT, hỏi có thể làm cho các máy nhận ra nhau như trong mang LAN được không? và bằng cách nào?

Câu 9:
Bạn biết rằng chúng ta gõ vào trình duyệt 127.0.0.1 hoặc localhost thì cả 2 đều trỏ đến chính máy chúng ta. Vậy làm cách nào để đổi được từ trình duyệt gõ google.com thì cũng tương đương việc ta gõ 127.0.0.1

Câu 10:
Nếu được lựa chọn một hệ điều hành máy server bạn sẽ chọn Linux hay Windows , vì sao bạn lại có những lựa chọn như vậy?

Mọi người nếu thích có thể tải 1 số Eboooks mà tuanh sưu tầm được về mục này để tham khảo, link tuanh đã để sẵn ở phần Blogroll rồi đó.

Cách tạo Name-based virtual host

Tháng tám 30, 2007 by huyx

Người dùng sử dụng tên ảo với mục đích chạy được nhiều tên (hostnames) khác nhau trên một máy chủ. Có hai loại tên ảo có thể sử dụng trong Apache: cách dựa vào tên (name-based virtual host) và cách dựa vào IP (IP-based virtual host).

Sử dụng tên ảo bằng cách dựa vào tên có lợi điểm là bạn chỉ cần dùng một địa chỉ IP cho tất cá các tên.

Điều quan trọng là bạn phải khai báo tất cả các tên bạn muốn dùng với Apache trong máy chủ DNS trước. Nếu bạn chỉ khai báo thoải mái các tên khác nhau trong httpd.conf (hay apache.conf) mà trong máy chủ DNS không hề có thông tin của các tên thì người dùng sẽ không thấy được trang web của bạn. Cái điểm yếu của việc sử dụng tên ảo dựa vào tên là bạn không thể xài SSL (https://) cho tất cả các tên vì SSL yêu cầu mỗi tên phải có riêng một IP trong khi sử dụng tên ảo dựa vào tên thì bạn chỉ có một IP duy nhất cho nhiều tên khác nhau.

Ví dụ cụ thể:

vnlinux.org có địa chỉ là 24.153.136.146. Tại sao mình biết? Chỉ việc gõ host vnlinux.org thì bạn sẽ thấy trả lời giống bên dưới:

rhs@gw rhs $ host vnlinux.org

vnlinux.org has address 24.153.136.146

Mỗi lần ghé thăm trang web vnlinux.org, thì người dùng có thể gõ http://www.vnlinux.org hay http://vnlinux.org sẽ đều thấy cả hai địa chỉ khác nhau nhưng nội dung thì như nhau. Tại sao vậy? Nếu bạn gõ host www.vnlinux.org thì bạn sẽ thấy trả lời là

rhs@gw rhs $ host www.vnlinux.org

www.vnlinux.org is an alias for vnlinux.org.

Lý do là vì mình đã khai báo trong DNS record, www.vnlinux.org sẽ là alias (hay còn gọi là CNAME khi thiết lập máy chủ DNS) của vnlinux.org
Bên dưới là những hàng mình lấy ra từ tập tin db.vnlinux.org của máy chủ DNS

vnlinux.org. IN A 24.153.136.146

www.vnlinux.org. IN CNAME vnlinux.org.

Trong httpd.conf (hay apache.conf), mình khai báo ServerName www.vnlinux.org

Ví dụ trên chỉ đơn thuần giải thích cách dùng CNAME cho trang web .

Kế tiếp mình sẽ giải thích cách cấu hình dns và apache cho việc sử dụng tên ảo dựa vào tên (name-based virtual host).

Ví dụ trên bạn cũng đã thấy www.vnlinux.org có IP là 24.153.136.146 Mình cũng đã có những trang web sau cùng có chung IP với vnlinux.org bằng cách sử dụng tên ảo dựa vào tên.

howto.vnlinux.org

i18n.vnlinux.org

dịchthuật.vnlinux.org *

Bên dưới là kết quả của lệnh host cho những tên phía trên.

rhs@gw rhs $ host howto.vnlinux.org

howto.vnlinux.org has address 24.153.136.146

rhs@gw rhs $ host i18n.vnlinux.org

i18n.vnlinux.org has address 24.153.136.146

rhs@gw rhs $ host xn--dchthut-5p4c4j.vnlinux.org

xn--dchthut-5p4c4j.vnlinux.org has address 24.153.136.146

* xn--dchthut-5p4c4j là punycode format cho dịchthuật
Xem thêm về punycode bằng cách nhấn đây http://search.yahoo.com/search?ei=UTF-8&fr=sfp&p=punycode

Thông tin khai báo cho DNS (Nhớ khởi động lại máy chủ DNS):

howto.vnlinux.org. IN A 24.153.136.146

i18n.vnlinux.org. IN A 24.153.136.146

xn--dchthut-5p4c4j.vnlinux.org. IN A 24.153.136.146

Thông tin khai báo trong httpd.conf (hay apache.conf hay VHost.conf…)

NameVirtualHost 24.153.136.146:80

(VirtualHost 24.153.136.146:80)

ServerAdmin me@here.com

DocumentRoot /Nơi/các/tập/tin/nằm/trong/htdocs

ServerName www.vnlinux.org

ErrorLog logs/VietLUG_error_log

CustomLog logs/VietLUG_access_log common

DirectoryIndex index.html

RewriteEngine on

RewriteCond %{REQUEST_METHOD} ^{TRACE|TRACK}

RewriteRule .* – [F]

(/VirtualHost)

Thay () với <> trước và sau chữ VirtualHost. Đừng quên thay hàng đầu phía trên.

(VirtualHost 24.153.136.146:80)

ServerAdmin me@here.com

DocumentRoot /Nơi/các/tập/tin/nằm/trong/htdocs

ServerName xn--dchthut-5p4c4j.vnlinux.org

ErrorLog logs/dichthuat_error_log

CustomLog logs/dichthuat_access_log common

DirectoryIndex index.html

RewriteEngine on

RewriteCond %{REQUEST_METHOD} ^{TRACE|TRACK}

RewriteRule .* – [F]

(/VirtualHost)

Thay () với <> trước và sau chữ VirtualHost. Đừng quên thay hàng đầu phía trên.

Làm y chang như trên cho hai tên howto và i18n. Sau khi khai báo các hàng trên, bạn phải khởi động lại apache.

Lưu ý: những dòng trên là những khai báo căn bản trong httpd.conf. Tùy vào nhu cầu phục vụ trang web mà bạn rất có thể cần thêm bớt các giá trị tùy thích

Nếu bạn đã khai báo trong DNS và apache đầy đủ mà vẫn không thấy các tên ảo hoạt động, rất có thể bạn phải chờ trong vòng một ngày (hoặc sớm hơn, hoặc lâu hơn) để DNS records chứa những thông tin bạn vừa thành lập được cập nhật.

Muốn kiểm tra ngay lập tức xem các tên ảo đã được thiết lập đúng chưa bạn có thể gõ httpd -S (hay apache -S)

Bài viết trên đã hướng dẫn cách thiết lập dns và apache cần thiết cho việc sử dụng tên ảo dựa vào tên (name-based virtual host).

Kỹ thuật NAT

Tháng tám 1, 2007 by huyx

Nội dung:

  • -1-Giới thiệu
  • -2-Các kỹ thuật NAT cổ điển
    * NAT tĩnh
    * NAT động
    * Masquerading(NAPT)
  • -3-Các kỹ thuật NAT khác
    * Virtual Server(Load balancing)
    * Multiple routes per Destination
  • -4-Các vấn đề cần giải quyết cho kỹ thuật NAT
    * Lưu giữ thông tin trạng thái
    * Phân chia (fragmentation)
    * Định ra giao thức (protocol) cụ thể

Trình bày
1) Giới thiệu:
Lúc đầu, khi NAT được phát minh ra nó chỉ để giải quyết cho vấn đề thiếu IP .Vào lúc ấy không ai nghĩ rằng NAT có nhiều hữu ích và có lẽ nhiều ứng dụng trong những vấn đề khác của NAT vẫn chưa được tìm thấy.
Trong ngữ cảnh đó nhiều người đã cố gắng tìm hiểu vai trò của NAT và lợi ích của nó trong tương lai.Khi mà IPv6 được hiện thực thì nó không chỉ giải quyết cho vấn đề thiếu IP.Qua nhiều cuộc thử nghiệm họ đã chỉ ra rằng viêc chuyển hoàn toàn qua IPv6 thì không có vấn đề gì và mau lẹ nhưng để giải quyết những vấn đề liên qua giữa IPv6 và IPv4 là khó khăn.Bởi vậy có khả năng IPv4 sẽ là giao thức chủ yếu cho Internet và Intranet … lâu dài hơn những gì họ mong muốn.
Trước khi giải thích vai trò của NAT ngày nay và trong tương lai ,những người này muốn chỉ ra sự khác nhau về phạm vi của NAT được sủ dụng vào ngày đó.Sự giải thích sẽ đưa ra một cái nhìn tổng quan và họ không khuyên rằng làm thế nào và nên dùng loại NAT nào.Sau đây chỉ là giới thiệu và phân loại các NAT phần chi tiết sẽ được thảo luận và đề  cập trong chương sau khi hiện thực NAT là một laid out.
Phần trình bày được chia làm 2 phần :
- Phần đầu được đặt tên là CLASSIC NAT nó là các kỹ thuật NAT vào những thời kỳ sơ khai (đầu những năm 90) được trình bày chi tiết trong RFC 1931. Ứng dụng của nó chủ yếu giải quyết cho bài toán thiếu IP trên Internet.
- Phần hai trình bày những kỹ thuật NAT được tìm ra gần đây và ứng dụng trong nhiều mục đích khác.
2)Các kỹ thuật NAT cổ điển:
Nói về NAT chúng ta phải biết rằng có 2 cách là tĩnh và động .Trong trường hợp đầu thì sự phân chia IP là rõ ràng còn trường hợp sau thì ngược lại.Với NAT tĩnh thì một IP nguồn  luôn được chuyển thành chỉ một IP
đích mà thôi trong bất kỳ thời gian nào.Trong khi đó NAT động thì IP này là thay đổi trong các thời gian và trong các kết nối khác nhau.
Trong phần này chúng ta định nghia :
m: số IP cần được chuyển đổi (IP nguồn)
n: số IP sẵn có cho việc chuyển đổi (IP NATs hay gọi là IP đích)
* NAT tĩnh
Yêu cầu m,n>=1;m=n(m,n là số tự nhiên)
Với cơ chế IP tinh chúng ta có thể chuyển đổi cùng một số lượng các IP nguồn và đích .Trường hợp đặc biệt là khi cả 2 chỉ chứa duy nhất một IP ví dụ netmask  là 255.255.255.255 .Cách thức hiện thực NAT tĩnh thì dễ dàng vì toàn bộ cơ chế dịch địa chỉ được thực hiện bởI  một công thức đơn giản:
  Địa chỉ đích =Địa chỉ mạng mới OR (địa chỉ nguồn AND ( NOT netmask))
Không có thông tin về trạng thái kết nối.Nó chỉ cần tìm các IP đích thích hợp là đủ.
Các kết nối từ bên ngoài hệ thống vào bên trong hệ thống thì chỉ khác nhau về IP vì thế cơ chế NAT tĩnh thì hầu như hoàn toàn trong suốt.
Ví dụ một rule cho NAT tĩnh:
Dịch toàn bộ IP trong mạng 138.201.148.0 đến mạng có địa chỉ là 94.64.15.0,netmask là 255.255.255.0 cho cả hai mạng.
Dưới đây là mô tả việc dịch từ địa chỉ có IP là 138.201.148.27 đến 94.64.15.27,các cái khác tương tự.
10001010.11001001.10010100.00011011 (host 138.201.148.0)
AND
00000000.00000000.00000000.11111111 (reverse netmask)
01011110.01000000.00001111                  (new net: 94.64.15.0)
01011110.01000000.00001111.00011011 (địa chỉ mới )
* NAT động
Yêu cầu m>=1 và m>=n
NAT động được sử dụng khi số IP nguồn không bằng số IP đích.Số host chia sẻ nói chung bị giới hạn bởi số IP đích có sẵn.NAT động phức tạp hơn NAT tĩnh vì thế chúng phải lưu giữ lại thông tin kết nối và thậm chí tìm thông tin của TCP trong packet.
Như đã đề cập ở trên NAT động cũng có thể sử dụng như một NAT tĩnh khi m=n.Một số người dùng nó thay cho NAT tĩnh vì mục đích bảo mật.Những kẻ từ bên ngoài không thể tìm được IP nào kết nối với host chỉ định vì tại thời điểm tiếp theo host này có thể nhận một IP hoàn toàn khác.Trong trường hợp đặc biệt thậm chí có nhiều địa chỉ đích hơn địa chỉ nguồn (m<n)
Những kết nối từ bên ngoài thì chỉ có thể khi những host này vẫn còn nắm giữ một IP trong bảng NAT động.Nơi mà NAT router lưu giữ những thông tin về IP bên trong (IP nguồn )được liên kết với NAT-IP(IP đích).Cho một ví dụ trong một session của FPT non-passive.Nơi mà server cố gắng thiết lập một kênh truyền dữ liệu vì thế khi server cố gắng gửi một IP packet đến FTP client thì phải có một entry cho client trong bảng NAT.Nó vẫn phải còn liên kết một IPclient với cùng một NAT-IPs khi client bắt đầu một kênh truyền control trừ khi FTP session rỗi sau một thời gian timeout.Xin nói thêm giao thức FTP có 2 cơ chế là passive và non-passive .Giao thức FTP luôn dùng 2 port (control và data) .Với cơ chế passive (thụ động ) host kết nối sẽ nhận thông tin về data port từ server và ngược lại non-passive thì host kết nối sẽ chỉ định dataport yêu cầu server lắng nghe kết nối tới.Tham khảo thêm về FTP protocol trong RFC 959
Bất cứ khi nào nếu một kẻ từ bên ngoài muốn kết nối vào một host chỉ định ở bên trong mạng tại một thời điểm tùy ý chỉ có 2 trường hợp :
+ Host bên trong không có một entry trong bảng NAT khi đó sẽ nhận được thông tin “host unreachable” hoặc có một entry nhưng NAT-IPs là không biết.
+ Biết được IP của một kết nối bởi vì có một kết nối từ host bên trong ra ngoài mạng.Tuy nhiên đó chỉ là NAT-IPs và không phải là IP thật của host.Và thông tin này sẽ bị mất sau một thờii gian timeout của entry này trong bảng NAT router.
Ví dụ về một rule cho NAT động:
Dịch toàn bộ những IP trong class B ,địa chỉ mạng 138.201.0.0 đến IP trong class C 178.201.112.0.Mỗi kết nối mới từ bên trong sẽ được liên kết với tập IP của class C khi mà IP đó không được sử dụng.
– Xem thêm hình vẽ mô tả trong tài liệu NAT của SuSe –
*Masquerading(NAPT)
Yêu cầu m>=1 và n=1
Đây là một trường hợp đặc biệt của NAT động.Thuật ngữ Masquerading trở nên nổi tiếng bởi vì nó được hiện thực trong thế giới Linux .Nó là loại NAT được sử dụng hầu hết vào thời điểm đó.Với cơ chế này nhiều địa chỉ IP được ẩn đi dưới một địa chỉ duy nhất.Nó tương phản với NAT động ,rằng chỉ có một kết nối cho một IP duy nhất tại một thời điểm .Trong masquerading nhiều kết nối đến cùng một IP sẽ được phân chia thông qua TCP Port.Vấn đề đặc biệt của Masquerading là một số service trên host chỉ định chỉ chấp nhận kết nối từ những port đặc quyền để đảm bảo rằng kết nối đi vào không phải là từ một user bình thường.Có lẽ chỉ superuser có thể xử lý những port này.Vì trên DOS hoặc Window mọi người  đều có thể sử dụng chúng nên một số chương trình không thể sử dụng kết nối masquerading.Masquerading thường sử dụng những port ở một tầm vực cao.Trong Linux ,bắt đầu là 61000 và kết thúc là 61000+4096.Mặc định này có thể thay đổi bằng cách edit /linux/include/net/ip_masq.h
Điều này cũng chỉ ra rằng Linux hiện thực masquerading chỉ cho đồng thời 4096 kết nốI masquerading .Kết nối masquerading cần phải lưu giữ nhiều thông tin về trạng thái kêt nối.Ví dụ trên Linux, nó xem như tất cả các packet với Destination IP= Local IP và Destination port nằm trong tầm port cho phép của Masquerading khi phải demasqueraded(phân giải những packet đã được masqueraded) Thực chất là việc thay đổi destination address và source address trong header packet.
Rõ ràng Masquerading chỉ có một chiều . Những kết nối vào thì không thể Masquerading .Vì thậm chí  khi một host có một entry trong masquerading table của NAT device thì entry này chỉ hợp lệ khi một kết nối đang được active.Ngay cả một ICMP-Reply liên quan đến kết nối (host/port unreachable) cũng phải được filter và relay bởi NAT router.
Trong khi thật sự kết nối vào không thể Masquerading nhưng chúng ta có thể thêm vào để cho phép điều đó tuy nhiên chúng không phải là một phần thuộc về Masquerading .Chúng ta có thể làm điều đó ví dụ setup một NAT device để nó relay tất cả các kết nối từ bên ngoài đến port telnet của một host bên trong Tuy nhiên vì chúng ta chỉ có một IP được thấy từ bên ngoài cho phép kết nối vào cho cùng một service nhưng cho các host khác nhau bên trong mạng .Chúng ta phải cho lắng nghe trên một port khác Vì nhiều service trên những well-known port thì không thể thay đổi hoặc việc thay đổi là bất tiện đặc biệt trên những pulic server.Ví dụ 80 cho HTTP , 23 cho TELNET. Chỉ có một cách giải quyết là phải có nhiều IP đích khi các service này tăng lên.Một IP đích có thể vẫn đuợc chia sẻ bởi những service khác nhau và rồi được remap với những IP nguồn khác bên trong mạng .Nhưng đây không phải là Masquerading.
Ví dụ cho một rule của Masquerading
- Masquerading cho mạng 138.201.0.0 dùng NAT đến IP local
- Cho mỗi packet IP đi ra source IP sẽ được thay bởi IP của NAT router.Source port sẽ được đổi thành một port nằm trong tầm của Masquerading.
– Xem thêm hình vẽ mô tả trong tài liệu NAT của SuSe –
Lợi ích lớn nhất của Masquerading là chỉ cần một IP được cấp mà toàn mạng vẫn có thể kết nối trực tiếp đến Internet ,điều này là quan trọng vì địa chỉ IP thì qúa mắc.Mặc dù đối với những ứng dụng mức gateway chúng ta không cần thêm bất kỳ IP và bất kỳ loại NAT nào và một IP thì vẫn đủ nhưng cho một số giao thức thí dụ tất cả UDP based service nó thì không chỉ là mức gateway mà cần phải kết nối IP trực tiếp. Tham khảo thêm RFC 1631(NAT) được đề cập là Network Address Port Translation (NAPT)
3)Các kỹ thuật NAT khác
*Virtual Server (Loadbalancing)
NAT router đóng vai trò là một virtual server và các kết nối vào sẽ được chuyển đến 2 hay nhiều server thật .Phụ thuộc vào giải thuật được xây dựng mà kết nối này sẽ đi vào server nào ở bên trong.
Ví dụ một NAT rule như sau:
- Tạo một virtual server với IP là 138.201.14.100
- Sử dụng 2 host là 138.201.14.111 và 148.201.14.112 là những real server cho virtual server.
- Một kết nối từ bên ngoài sẽ được remap bởi NAT router để sử dụng một trong 2 host (realserver)
– Xem thêm hình vẽ mô tả trong tài liệu NAT của SuSe –
+ Load Balancing
Giải thuật để quyết định real server nào được kết nối. Cho ví dụ kiểm tra tải trên những realserver dựa trên việc đếm số packet  trên mỗi giây đi qua NAT device đến real server sau đó sẽ chọn ra realserver có hiệu năng nhất.Bằng cách ấy sẽ điều chỉnh được traffic trên mạng và giảm tải cho các server.Số giải thuật được sử dụng ở đây thì không thể đếm được và dựa trên những cách tính toán khác nhau nhưng tất cả đều có chung mục đích là giảm tải cho server.Khái niệm “tải” ở đây thì không rõ ràng và không được đĩnh nghĩa duy nhất.
Cho ví dụ về loadbalancing:
Chạy một deamon trên mỗi server cung cấp thông tin cho NAT router về tải (load) trên máy này và remap những kết nối mới đến hệ thống nơi mà số này là thấp nhất.
Điều này đòi hỏi sự liên lạc giữa những host(real server) và NAT router vì thế chúng ta nên sử dụng những thông tin có trên NAT router như là số kết nối hiện tại đang được remap đến một host hoặc ta phải sử dụng những thông tin vốn không có trên server nhưng có thể dễ dàng được tìm thấy như là số byte hoặc packet mỗi giây của một host hiện tại handle.Yếu tố được đề cập ở đây sẽ là một vài ý niệm để quyết định việc đạt được sự cân bằng trong việc phân bố tải Chính xác hơn là chúng ta cố gắng đo lường và tính toán tải cho mỗi host.Có một số giải thuật ví dụ như giải thuật dựa trên học thuyết về nguyên lý không chắc chắn trong định lượng của Heisenberg.
Vì thế chúng ta phải tìm cách làm tối thiểu chi phí của host để quyết định tải và host sẽ được kết nối.
Ngay cả khi chúng ta giả sử đã tìm ra một phương thức chính xác và tốt để quyết định tải được sử dụng dựa trên việc định nghĩa “tải” là gì thì thực tiễn vẫn chưa phải là giải pháp tốt nhất vì một IP packet có kích thước nhỏ nhất chỉ được xác định bằng cách định lượng vật lý.Chúng ta có thể chỉ mới chọn được host nào chúng ta cần gửi kết nối đến khi một kết nối mới được mở mà chưa thật sự tối ưu.Tuy nhiên dù sao đi nữa các phương thức đề cập ở trên cũng có thể được áp dụng vào thực tiễn cho việc xác định cân bằng tải ngoài ra có thể có một cách tính toán nào đó tốt nhất mà chúng ta chưa tìm ra.
Có nhiều cách tiếp cận để giải quyết cho bài toán Load balancing ,hầu hết trong số chúng đều ở mức application.Một ví dụ được mô tả trong RFC 1794 đó là dùng DNS support cho Load balancing.Trong tài liệu này đề cập đến việc dùng DNS cho việc điều khiển tải của máy bằng cách tìm ra IP của máy ít bận rộn nhất khi được chất vấn (queried) Vì DNS-queries sẽ được cache bởi liên tiếp các DNS-server với việc điều khiển các giới hạn một cách khắt khe.Nó làm việc hoàn toàn tốt khi có nhiều chất vấn và ngay cả khi chúng đến từ nhiều máy client.Tuy nhiên dù cho Load balancing có làm việc trong trạng thái tốt thì cách tiếp cận này sẽ không giúp được gì một khi server bị fail vì thậm chí ngay cả khi các IP được phân chia riêng biệt trong việc chất vấn thì nó vẫn còn được cache do đó khi server bị fail thì có thể server này là hiệu năng nhất và cơ chế load balancing hoàn toàn bị phá vỡ .Một ví dụ cho chương trình cache nổi tiếng là Squid nó sử dụng giải thuật phức tạp để tìm ra một mục tiêu tốt nhất.Giải quyết này chưa hẳn đã giống trên NAT nhưng mục tiêu của nó là như nhau.Với NAT chúng ta có thể phân bố tải cho những service lớn và đa dạng dựa trên IP còn Squid phục vụ cho một mục đích khác và sự so sánh này chưa hẳn đã hoàn toàn hợp lý.Người viết chọn squid là một ví dụ vì trong squid thực hiện việc load balancing để tìm ra một dữ liệu sao cho tối ưu một cách thông minh.
+ Backup Systems
Virtual server cũng có thể được sử dụng để đạt được khả năng phục vụ tốt nhất nếu giải quyết được bài toán một real server bất kỳ bị fail ở trên.Vì các service được cung cấp bởi Virtual server thì có khả năng trên bất kỳ real server . Đặt trường hợp một real server bị fail có xác suất là p thì một virtual server sử dụng N real server trong trường hợp bị fail có thể được tính toán như sau:
Đặt
+ p1..pn là khả năng xảy ra lỗi của server n trên N (N là số server được cung cấp cho virtual server)
+ pNAT: khả năng xảy ra lỗi của NAT router,lỗi này không phụ thuộc vào thiết bị khác
+ pvirt: khả năng xảy ra lỗi của virtual server khi một realserver bị fail
Công thức được tính toán là:
Pvirt=1-((1- [tích(pi) chạy từ 1->n]) X (1-pNAT))
Dĩ nhiên setup hệ thống sử dụng công thức trên cho việc tính toán load balancing phải thay đổi danh sách server được sử dụng bởi NAT router ngay khi một real server bị fail . Điều này không thuộc về NAT-code nhưng có thể thực hiện tốt ở mức cao ,thậm chí từ shell scripts.Quan trọng là phải có cơ chế remove server bị fail từ bảng virtual server vì thế phải xây dựng bảng virtual server có khả năng thay đổi dễ dàng
để những IP có thể thêm vào hoặc loại bỏ trong thời gian thực thi (runtime)
Như vậy với cách làm này chúng ta đã có một liên kết giữa 2 khả năng là load balancing và high availability dùng virtual server.Nó thì hoàn toàn trong suốt đốI với tất cả các host ,người sử dụng và những chương trình dùng virtual service.
*Multiple routers per Destination
Như ở trên chúng ta thấy chúng ta có thể dùng NAT để phân bố tải qua nhiều host và đạt được khả năng sẵn dùng cao (high availability) .Chúng ta có thể sử dụng NAT để làm điều này cho nhiều mạng không? Vâng chúng ta có thể. Ở phần trên chúng ta thấy chúng ta đã sử dụng virtual server thay thế cho nhiều host thật sự (real server)
Chúng ta cũng có thể tạo ra kết nối mạng ảo (virtual network) gồm nhiều mạch thật sự (real wire) dùng kỹ thuật virtual server.
Chúng ta có thể làm điều này với NAT như thế nào? Hãy tưởng tượng chúng ta có 2 nguồn cung cấp Internet (Internet provider).Chọn 2 bởi vì chúng ta không muốn xảy ra lỗi khi một nguồn bị hỏng.Mỗi host cần kết nối Internet phải có một IP duy nhất vì thế chúng ta mua cho mỗi host một IP từ 2 nhà cung cấp khác nhau.Như vậy chúng ta có thể sử dụng một trong 2 host để gửi packet đến cùng một vị trí.Bây giờ chúng ta sẽ setup cho hệ thống mô tả ở trên,chúng ta sẽ phân bố tải bằng cách sử dụng một ít host thông qua provider 1 và một vài cái khác thông qua provider 2 và chúng ta có “higher availibility” của kết nối đến Internet .Tuy nhiên chúng ta cũng có thể hình dung ra rằng rất khó thực hiện load balancing khi mỗi host quyết định gửi packet đi. Chúng ta không đề cập đến làm thế nào để một mạng dùng IP này hay IP khác. Ở đây vấn đề là sẽ sử dụng một “central authority” để quyết định host nào sẽ sử dụng provider nào dĩ nhiên thông qua một special NAT router.Sử dụng Nat máy tính Local của chúng ta chỉ cần một IP.Nếu chúng ta có một provider tin cậy chúng ta có thể sử dụng IP của provider này cung cấp đồng thời vẫn có thể sử dụng các IP bên trong mạng.Bây giờ nếu một host bên trong mạng muốn thiết lập một kết nối mới tới Internet nó chỉ cần gửi packet đến default router (NAT-router) với source IP là IP của host này.Do NAT-router biết được tất cả những kết nối đi ra,nó sẽ quyết định provider để gửi packet đi sao cho tối ưu.Nó sẽ thay source IP là IP của provider đã chọn và gửi packet đến router của provider này.Vì source IP là IP của provider cung cấp nên con đường đi tiếp theo của packet sẽ do provider quyết định thông qua provider router .Host gửi packet đi sẽ không bao giờ biết provider nào được chọn bởI NAT router vì thế xử lý là trong suốt.
Chúng ta có thể sử dụng cùng một giải thuật đã sử dụng cho Virtual server. Điểm khác nhau giữa ứng dụng là ở ứng dụng này chúng ta đã can thiệp vào xử lý routing.

4) Các vấn đề cần giải quyết cho kỹ thuật NAT
Có 5 khái niệm liên quan đến một connection cho NAT đó là:protocol,source IP và port ,Destination IP và port.Vì cơ  chê NAT thay đổi các thông tin trong một packet nên ta có thể tạm chia thành 3 section:
-section 1: tiến trình packet đi từ source đến NAT-router
-section 2: tiến trình packet đi từ NAT-router đến Destination
-section 3: hoạt động diễn ra trong NAT-router,NAT router phải biết cả 2 section 1 và 2
Như vậy chỉ có NAT-router biết những gì thật sự xảy ra cho một packet. Điều đó cũng có nghĩa là NAT-device phải lưu giữ hầu hết thông tin về một kết nối để quyết định con đường đi của packet.
Chúng ta thấy NAT-router phần nào đó giống như một firewall bởi vì nó không chỉ relay packet từ nơi này đến nơi khác ,mà nó còn điều khiển luồng dữ liệu.NAT-router biết nhiều về mỗi kết nối như thể các thiết bị mạng biết về kết nối của nó.Nghĩa là chúng phải lưu giữ thông tin trạng thái .Chúng có thể đọc thông tin từ các packet ,so sánh và thay đổi nó.
* Lưu giữ thông tin trạng thái
Ngoại trừ NAT tĩnh,các cái còn lạI đòi hỏi chúng ta cần phảI lưu trữ và quản lý thông tin động từ client đang sử dụng hệ thống là một router.Thông tin này phảI được mất đi sau một thời gian timeout để NAT-IP được gắn cho một host còn có thể được sử dụng lại.Thời gian timeout cũng là một lý do tạI sao phảI đọc thông tin TCP-header.Timeout có thể ngắn cho một TCP-connection vừa được đóng và cao cho TCP-connection vẫn còn được thiết lập.Ví dụ nhiều telnet session có thể treo trong một thờI gian dài không có sự trao đổI bất kỳ packet nào .Trong trường hợp này,nếu chúng ta có đủ NAT-IP chúng ta không cần ngắt kết nốI này ,nhưng giả sử trong trường hợp nhiều kết nốI mớI được yêu cầu và NAT-IP cần có thêm IP thì chúng ta sẽ cho telnet session này bị chết để lấy lạI IP.
Một cách khác là chúng ta không giữ thông tin trạng thái mà chỉ cần tìm IP chỉ định (NAT-ip) Nó thì đơn giản hơn cho việc hiện thực NAT và trong nhiều trường hợp sẽ làm việc tốt cho các giải quyết ở trên.Khi luôn có đủ NAT-IP còn dư cho việc sử dụng chúng ta không chú ý tới chi tiết khác nhau của 2 cách ,ngoại trừ trong một telnet session hoặc các chương trình liên quan chẳng hạn như ssh.Chỉ khi số NAT-IP không nhiều và không đủ ,chúng ta mới cần lưu giữ thông tin trạng thái vì chúng ta có thể nhận ra ngay chính xác một kết nối vừa mới đóng và có thể lấy lại ngay IP đã cấp phát mà không cần hết thời gian timeout.Việc lưu giữ dấu vết của các kết nối khác nhau phục vụ cho mục đích bảo mật nếu nó được sử dụng bởI firewall, đây không hẳn chỉ là NAT.
Có một số trường hợp việc NAT chỉ truy tìm chỉ IP thì hoàn toàn không hiệu qủa. Đó là trong các ứng dụng virtual server và virtual network bởI vì traffic được sinh ra bởI một IP thì không thể nào phân chia được nữa.Khi chúng ta yêu cầu NAT truy tìm thêm cả TCP/UDP port thì chúng ta có thể cân bằng tảI và giảm traffic tốt hơn bằng  cách remap các kết nốI đến một IP thích hợp
– Xem thêm hình vẽ mô tả trong tài liệu NAT của SuSe –
* Phân chia (fragmentation)
Quan hệ mật thiết vớI việc lưu giữ thông tin trạng thái về TCP và có thể là UDP là vấn đề IP fragment.Nó quyết định việc thay đổI không phảI chỉ IP address mà còn TCP/UDP port.Telnet packet có thể được đốI xử khác vớI HTTP packet.Cho một ví dụ chỉ sử dụng một virtual server hoặc DNS cho tất cả các service nó được map tới các host cung cấp service thực sự ,nhiều service thậm chí được cung cấp bởI virtual host.Một firewall là gateway mức application có thể làm được điều này nhưng gateway thì hầu như là không trong suốt.
Vấn đề là ngay khi một packet được fragment đến NAT-router ,nó không thể cung cấp thông tin về port ngoạI trừ fragment đầu tiên chứa TCP-header. Đó là lý do tạI sao chúng ta phảI lưu giữ những thông tin trạng thái về mỗI fragment.Chúng ta phảI lưu giữ tất cả thông dữ liệu của fragment đầu tiên gồm TCP/UDP port của nó để mà chúng ta có thể biết port của những fragment khác đang hoạt động.Nhiều khi phương pháp này không thích đáng vì IP layer không đảm bảo packet tới với đúng số thứ tự (sequence) Ví dụ fragment thứ 3 của packet đã được fragment có thể đi qua NAT router đầu tiên trước khi fragment đầu tiên vẫn còn lưu giữ thông tin port .Trong trường hợp này chúng ta sẽ ngăn lạI các fragment không phảI là fragment số 1 đến khi fragment số 1 đã tớI đích để chúng ta biết chúng ta có cần phảI thay đổI thông tin của packet hay không .Xem thêm về “IP fragment” ở các tài liệu khác.Việc thay đổI không chỉ IP mà còn TCP/UDP port thì không quan trọng nhưng chắc chắn hữu ích.
Ví dụ chúng ta sử dụng một virtual server .Giả sử chúng ta muốn tạo một virtual webserver và deamon của webserver thật sự đang chạy trên những máy khác nhau và lắng nghe trên những port khác nhau vì một số lý do.Khi đó nếu chúng ta không ghi nhận lạI destination port trong packet , default là port 80 đến virtual server và thay destination port là port mà real webserver đang lắng nghe vào packet reply thì chúng ta không thể có được những gì chúng ta mong muốn.Khi đó tất cả các real webserver phảI lắng nghe trên cùng một port mà virtual server cung cấp dịch vụ web (default là port 80).Xin nói thêm là một TCP connection thực hiện cơ chế handshaking 3 lần như vậy nếu packet reply không chỉ ra đúng port để kết nốI tớI thì kết nốI sẽ không được thiết lập.
* Định ra giao thức (protocol) cụ thể
NAT không phảI luôn luôn trong suốt như đã nói ,nó chỉ hoàn toàn trong suốt khi mà IP là giao thức nắm giữ thông tin về IP của một packet.Có một số giao thức chúng gửI IP là một phần của dữ liệu truyền đi.Như vậy nếu IP này đã được thay đổI vớI NAT router thì chúng ta sẽ gặp nhiều vấn đề trục trặc khi gửI tớI ngườI nhận .Nó không thể đúng IP đã được truyền đi.Một cách giảI quyết cho vấn đề này là tìm thông tin data truyền đi dựa trên một giao thức nào đó để biết được thông tin về IP đã được thêm vào.Qúa trình này chỉ làm thêm overhead và phức tạp hơn.

*Một số ví dụ cho những Protocol làm việc vớI NAT
FTP
FTP command PORT và response PASV cả 2 đều send một IP và port cho đầu kết nốI bên kia .Cho FTP để làm việc vớI một kết nốI đã bị thay đổI chúng ta phảI thay thế IP trong message . Điều này rất phức tạp vì IP và port được truyền đi dướI dạng mã ASSCII mô tả cho một số thập phân.Tức là mỗI số thập phân đơn lẻ được mô tả là một byte trong packet .Vì lý do này IP thì không có một chiều dài cố định trong một FTP-packet, bây giờ chúng ta thay thế IP hiện tạI bởI một IP khác ít hoặc nhiều số hơn ,packet sẽ lớn hoặc nhỏ đi điều này buộc phảI chỉnh lạI TCP –sequence number vì thế chúng ta phảI giữ một số thông tin về những kết nốI này để điều chỉnh các sequence number thích hợp trong mỗI packet . Đây không chỉ là vấn đề cho giao thức FTP mà còn cho nhiều giao thức khác mà khi thay đổI IP thì nó làm thay đổI chiều dài packet
ICMP
Một số ICMP message phụ thuộc vào loạI message ,nếu thêm vào header của packet có thể gây ra những vấn đề .Nếu packet này được thay đổI thì header này sẽ chứa NAT-Ip chứ không phảI IP của host sẽ nhận message ICMP này .Dựa trên điều này nếu bây giờ chúng ta không thay local IP mà là thêm vào NAT-Ip vào header thì điều này sẽ được giảI quyết.
DNS
Dễ thấy vấn đề ở đây là nếu một name service của một IP bên trong muốn cung cấp ra ngoài NAT-domain.Một cách giảI quyết là sẽ dùng 2 DNS service .Một cho việc giảI đáp cho các IP bên trong và một cái khác giảI đáp cho các IP ngoài mạng .Dĩ nhiên các IP được giảI đáp bởI DNS server thứ 2 không được đưa vào danh sách nhóm IP động cho NAT.NAT router thì hầu hết được đặt trên ranh giới giữa các mạng
phân chia internal DNS và external DNS và được mở rộng sử dụng cho lý do bảo mật
Nếu sử dụng một cách tiếp cận phức tạp hơn là ghi lại tất cả các DNS data đã được relay bởI NAT router chúng ta nên sử dụng một gateway mức ứng dụng hơn là hiện thực một NAT bởI vì DNS thích hợp vớI mức gateway hơn và chúng ta chỉ nên tác động tớI kernel khi thật sự cần thiết(xây dựng NAT)
BOOTP
Giao thức này không có vấn đề gì vớI NAT vì nó không đi ra khỏI ranh giớI của một NAT-domain.
Routing Protocol (RIP,EGP…)
Không cần phảI giảI thích tạI sao routing protocol gặp rất nhiều vấn đề vớI NAT .Có nhiều giao thức tìm đường khác nhau và làm việc vớI nó thì không dễ dàng chút nào
Có 3 cách giảI quyết là:
- Không sử dụng những giao thức này ,chỉ sử dụng static routing. Đây là cách chọn lựa tốt cho phần lớn các kết nốI từ mạng chúng ta ra bên ngoài thông qua NAT router
- Sử dụng một gateway mức ứng dụng
- Ghi lạI thông tin của packet

Ai là người thành lập lên VnExpress?

Tháng Bảy 31, 2007 by huyx

Vnexpress, tờ báo điện tử được mệnh danh là lớn nhất Việt Nam ra đời như thế nào mời các bạn đọc bài viết sau đây được trích trong một cuốn kỷ yếu của FPT. Bài viết được copy từ Blog của bác QuynhNguyen.
Điểm đáng khâm phục nhất ở đây là sự nhìn xa trông rộng của 2 bác Thang Đức Thắng và Trương Đình Anh trong lĩnh vực Internet và nội dung số, có thể có chút may mắn ở đây nhưng mình tin rằng đó cũng là một sự nhạy cảm của những người thông minh, biết nắm cơ hội. Tại thời điểm đó toàn Việt Nam chưa có tới 50.000 người dùng Internet, cước truy cập vừa phải chịu phí điện thoại vừa phải chịu phí Internet, lại chậm như rùa bò trong khi một tờ báo in chỉ có 1 đến 2k, ai có thể nghĩ rằng một tờ báo điện tử có thể thành công và tự nó có thể sống được. Nhưng cho đến nay Vnexpress có hàng triệu lượt người truy cập mỗi ngày, một con số đáng mơ ước ngay cả với truyền hình.

Ngoài ra còn học được từ bác Trương Đình Anh cách tính doanh thu từ quảng cáo để thuyết phục các sếp FPT và cách tuyển người của họ: Je’sBlog

- “Lấy giá quảng cáo trung bình trên một số tờ báo in thông dụng trong nước chia cho diện tích trang báo quảng cáo để ra giá quảng cáo trung bình của một centimét vuông trên báo chí Việt Nam. Từ đó nhân lên diện tích tương ứng của banner và logo để tính ra giá quảng cáo của chúng trên trang báo trực tuyến. Rồi nhân tiếp với số folders (sẽ có) của VnExpress để ra doanh thu dự tính sau 18 tháng. Cộng tiếp với số cước thời gian truy cập gia tăng của khách thuê bao FPT vào xem VnExpress trong tương lai, với tốc độ tăng ước tính là 10% mỗi tháng. Tất cả được trình bày chi tiết theo từng tháng, con số cuối cùng thật ấn tượng và thuyết phục.”

-”IQ, GMAT, English, còn thi chuyên môn – là bài luận bằng tiếng Việt. Sau này, qua những lần tuyển dụng tiếp theo, tôi thấy những người điểm cao nhất thường chính là những những nhân viên có năng lực nhất

Sau đây là toàn bộ nội dung bài viết của bác Thang Đức Thắng – tổng biên tập hiện thời của VnExpress, tổng biên tập đầu tiên là bác Trương Đình Anh. Hai bác này là những người đầu tiên thành lập lên VnExpress.net:

Ý tưởng

Vào một ngày tháng 3 năm 2000, tôi đến dự cuộc họp báo do FPT tổ chức tại 89 Láng Hạ với tư cách phóng viên báo Lao Động. Ngồi cạnh tôi, tình cờ, là Trương Đình Anh, Giám đốc FOX. Chúng tôi quen biết nhau từ cuối năm 1995, khi tôi đến làm cộng tác viên cho FPT. Rồi tôi, đại diện cho báo Lao Động, là một trong những khách thuê bao đầu tiên của FOX, sau đó đưa nội dung hàng ngày của Lao Động sang mạng TTVN.

Trong lúc họp, Đình Anh nói nhỏ:
- Anh xem có thể tìm giúp em một nhà báo chuyên nghiệp có thể về làm nội dung Internet cho FOX?
- Làm cái website của công ty thì cần gì nhà báo chuyên nghiệp? – tôi hỏi lại.
- Không phải website công ty, mà là một portal của Việt Nam.
- Anh sẽ tìm người nào đó xứng đáng trong số đàn em. Nhưng cho biết sơ qua, Đình Anh cần một người như thế nào?
- Cần một người, tốt nhất là… như anh!

Tôi nhìn Đình Anh và thấy anh ta nói hoàn toàn nghiêm túc.

Từ lâu tôi đã có mong muốn làm một tờ báo thực sự có ích cho mọi người. Từ khi làm quen với Internet (năm 1998), tôi nhận ra rằng đây sẽ là mảnh đất chưa khai phá cho báo chí. Mình có thể là người đầu tiên làm điều đó? Nhưng tôi hoàn toàn đơn độc. Những người nghe nói về ý định của tôi đều cười, cho rằng, qua rất nhiều năm nữa người Việt Nam vẫn thích mua một tờ báo in giá 1-2 nghìn đồng đọc “vừa tiện vừa rẻ”, hơn là nhìn vào màn hình tù mù, chạy ậm ạch, phải trả vừa cước điện thoại, vừa cước Internet. Hồi đó, vào đầu năm 2000, cả Việt Nam có chưa đến 50.000 thuê bao Internet. Báo chí thường xuyên kêu la về tình trạng giá cước cao và băng thông hẹp, bao giờ mới tăng được số người dùng Internet.

Sau đó, chúng tôi thường gặp nhau. Đình Anh hay hỏi về công việc làm báo trong toà soạn và tỏ ra hứng thú khi nghe tôi nói.

Lịch sử báo chí cho thấy, những mốc phát triển quan trọng của nó gắn với các phát minh công nghệ, tạo ra các phương tiện phát hành mới. Johann Gutenberg (1400-1468), người đầu tiên in bằng khuôn đúc, đã tạo tiền đề cho báo in ra đời vào đầu thế kỷ 17. Phát kiến về sóng radio đã dẫn đến sự ra đời của đài phát thanh những năm 1920. Ứng dụng truyền hình đã tạo ra các “báo hình” đầu tiên từ thập niên 1940. Và Internet sẽ phải là một phương tiện thông tin đại chúng hoàn toàn mới trong hệ thống báo chí Việt Nam.

“Anh muốn làm cho một ngày nào đó cả nước Việt Nam vào Internet để đọc báo!”, tôi nói. Và có lẽ Đình Anh là người duy nhất ngày ấy đã đồng tình với tôi. “Nhưng không thể với Laodong.com” – Đình Anh nói – “Chỉ với cơ chế như ở FPT, anh mới làm được điều đó…”

Tôi xin cơ quan cho chuyển công tác. Mọi người ở báo Lao Động rất ngạc nhiên. Khi đó tôi là Trưởng ban Thời sự kiêm Trưởng ban Báo Điện tử. Ông Tổng biên tập đề nghị tôi suy nghĩ lại. Cuối cùng, ông đành đồng ý, nhưng với yêu cầu tôi thực hiện nốt phần việc của báo trong công tác tổ chức cuộc thi phần mềm “Trí tuệ Việt Nam”, đến tháng 9 mới xong.

Từ tháng 7 năm 2000, tôi và Đình Anh bắt đầu bàn bạc, nghiên cứu tình hình, lập dự án xây dựng báo trực tuyến. Nó phải có nhiều độc giả, phải tự cân đối tài chính, hay nói cách khác nó phải làm ra tiền bạc. Hai nguồn thu phải là quảng cáo và thời lượng của khách hàng thuê bao vào mạng gia tăng.

Đầu tháng 8/2000, chúng tôi đăng quảng cáo tuyển dụng biên tập viên, phóng viên để “xây dựng một tờ báo trực tuyến lớn nhất VN”. Sau đó mới nghĩ tên cho nó: phải là một cái tên có nghĩa liên quan đến báo chí, liên tưởng đến sự tầm cỡ, tính tích cực. Vài tên đầu tiên chọn đăng ký domain đều đã bị sử dụng. Cuối cùng, đến “VnExpress.net” thì được. Nó cũng hợp với những yêu cầu đặt ra.

Kế hoạch kinh doanh

Từ những phân tích của mỗi người, chúng tôi chuẩn bị làm kế hoạch kinh doanh. Ngày 20/9/2000, chúng tôi bảo vệ kế hoạch đó trước ban TGĐ. Trong bài trình bày, điểm mấu chốt nhất là sẽ thu tiền về bằng cách nào? Dễ thấy rằng đó phải là quảng cáo. Nhưng lấy gì làm căn cứ để xác định doanh số (quảng cáo trên mạng còn là lĩnh vực hoàn toàn mới mẻ)?

Tôi thầm khâm phục Đình Anh đã đưa được ra con số cụ thể dựa vào căn cứ sau: Lấy giá quảng cáo trung bình trên một số tờ báo in thông dụng trong nước chia cho diện tích trang báo quảng cáo để ra giá quảng cáo trung bình của một centimét vuông trên báo chí Việt Nam. Từ đó nhân lên diện tích tương ứng của banner và logo để tính ra giá quảng cáo của chúng trên trang báo trực tuyến. Rồi nhân tiếp với số folders (sẽ có) của VnExpress để ra doanh thu dự tính sau 18 tháng. Cộng tiếp với số cước thời gian truy cập gia tăng của khách thuê bao FPT vào xem VnExpress trong tương lai, với tốc độ tăng ước tính là 10% mỗi tháng. Tất cả được trình bày chi tiết theo từng tháng, con số cuối cùng thật ấn tượng và thuyết phục. Phó TGĐ Lê Quang Tiến nói: “Rất được!”.

Khi biết nội dung tin trong nước của VnExpress thời kỳ đầu sẽ là biên tập từ các báo đài, anh Trương Gia Bình hỏi:
- Cái gì sẽ là khác biệt của các vị?
- Đó là tốc độ cập nhật và phong cách đưa tin. – Tôi đáp, và thấy ngay trong mắt ban TGĐ một sự nghi ngờ. Biên tập lại từ báo in thì làm sao có “tốc độ cập nhật” được? Còn “phong cách đưa tin” thì thật mơ hồ.

Tôi giải trình, nếu tin tức đưa lên vào buổi sáng, song song với thời gian các báo phát hành đến độc giả, nếu nó được lựa chọn (biên tập) tốt từ tất cả những báo hay nhất, thì nó không những nhanh tương đương thông tin của các báo mà còn đầy đủ hơn so với mỗi tờ báo riêng lẻ. Đó chính là tốc độ cập nhật.

Hơn nữa chúng tôi không có lựa chọn khác. Nếu ngay từ đầu thành lập một toà soạn báo với các phóng viên lành nghề, hoạt động săn tin trên cả nước, sẽ cần một khoản đầu tư khổng lồ. Mà rất lãng phí. Vì những ngày đầu đã có độc giả đâu. Báo chí trực tuyến là con số không. VnExpress hoàn toàn là số không. Chẳng khác nào xây ngay một nhà máy điện vĩ đại, rồi chờ dân số phát triển. Cũng chưa có cơ sở pháp lý nào cho VnExpress hoạt động phóng viên: ở Việt Nam chưa có tiền lệ cấp phép hoạt động báo chí cho một công ty, và chưa biết đến bao giờ mới có, các quan chức kiên quyết lắc đầu.

Chúng tôi thấy, con đường để một ngày nào đó VnExpress có diễm phúc được cấp phép là: trước tiên phải làm sao được xã hội dần dần thừa nhận, coi như một chủ thể báo chí đã tồn tại, không thể phớt lờ. Do đó, mục tiêu là làm sao có độc giả. Mà phải bằng cách ít tốn kém nhất. Vậy tại sao không lấy những tờ báo đã phát hành – một nguồn nguyên liệu sẵn có – chế biến nó thành tin tức hữu ích? Chiến lược ban đầu của chúng tôi là: lấy nguồn tài nguyên miễn phí – chế biến thành hàng hoá!

Chế biến bằng hai nguyên tắc: lựa chọn tin tức theo giá trị của nó, và đưa tin một cách khách quan. Điều đó có nghĩa là tin phải được độc giả chờ đón, khi đưa thì chỉ có sự kiện, không có ý kiến áp đặt của phóng viên. Độc giả sẽ tự phán xét sự việc được nêu là tốt hay xấu, ai đúng ai sai. Vì vậy trong các tin bài sẽ không có những câu kiểu như: “Thiết nghĩ phải…”, “Các cơ quan hữu quan cần…”, “Chúng ta nhiệt liệt ủng hộ…”, “Dư luận căm phẫn trước việc làm sai trái như vậy…”, “Công chúng cảm thấy bị xúc phạm bởi…”, “Hỡi những người có lương tri…” v.v…

Khi độc giả đọc tờ báo không có sự áp đặt, họ sẽ cảm thấy được tôn trọng, cảm thấy thoải mái tự do trong tiếp nhận thông tin. Sự tự do đó sẽ gây “nghiện” . Và chúng tôi sẽ có độc giả thường xuyên, trung thành.

Hai nguyên tắc trên chính là “phong cách đưa tin” của chúng tôi. Trên thế giới, nó không có gì mới lạ. Nhưng ở Việt Nam, có thể nói là chưa có tờ báo nào làm thế. Họ không lựa chọn tin chỉ theo giá trị của chúng vì, chủ quan hoặc khách quan, họ thường rơi vào hai cám dỗ sau đây. Một là, đưa những tin chỉ có lợi cho số ít những người lãnh đạo toà soạn (thường là lợi về vật chất). Hai là, đưa những tin tuyên truyền làm vừa lòng các cấp chủ quản (cũng là lợi cho lãnh đạo toà soạn, về chính trị), nhưng không có giá trị cho độc giả.

Ban TGĐ, cuối cùng, đã tin vào chúng tôi. Kế hoạch kinh doanh được thông qua.

Cũng tối hôm đó, 20/9/2000, diễn ra lễ bế mạc trao giải thưởng cuộc thi phần mềm Trí tuệ Việt Nam lần thứ nhất. Tôi có mặt để tham gia nhiệm vụ tổ chức và viết bài phóng sự về buổi lễ đầy cảm xúc ấy. Đó là bài phóng sự cuối cùng của tôi cho báo Lao Động.

Xây dựng

Hồ sơ xin dự tuyển biên tập viên gửi đến chất đầy phòng làm việc của Đình Anh, hơn 900 người. Tôi lần lượt đọc kỹ từng tập, chọn ra 240 người để gọi thi viết, chia thành ba buổi vào các ngày 3-4/10. Tôi nghĩ, cách làm báo sẽ khác nhiều so với các báo trong nước, do đó không nhất thiết phải tuyển những người có kinh nghiệm phóng viên. Cần những người thông minh – để tiếp thu mọi việc nhanh chóng và có nhiều ý tưởng; cần tiếng Anh – ngoài những ích lợi thông thường, những người có ngoại ngữ còn có văn phạm chuẩn hơn; và cần văn phong tiếng Việt tốt.

Do đó tôi rất mừng khi thấy quy trình thi tuyển của FPT cũng đúng như thế: IQ, GMAT, English, còn thi chuyên môn – là bài luận bằng tiếng Việt. Sau này, qua những lần tuyển dụng tiếp theo, tôi thấy những người điểm cao nhất thường chính là những những nhân viên có năng lực nhất. Vì thế tôi rất tín nhiệm quy trình thi của công ty và chân thành biết ơn các cán bộ của Phòng nhân sự đã giúp tôi tiến hành tất cả các cuộc thi và chấm thi.

Có hôm, trong phòng thi viết, tôi cầm một đề IQ thử giải, thấy nhiều câu chẳng biết làm thế nào. Nghĩ thầm, “thằng nào ra đề vớ vẩn thật”. Sau này, có lần một em phóng viên VnExpress thật thà hỏi tôi: “Hồi anh vào FPT có phải thi IQ không ạ?”. Tôi bảo: “Nếu anh mà phải thi IQ thì bây giờ chắc không có bọn em ở đây”.

Tôi chấm tất cả hơn 900 bài luận văn, hết gần một tuần. Tôi đọc từng dòng, cố gắng tìm được nhiều thông tin nhất về khả năng, và có thể là cả tính cách nữa, của người viết.

Trong khi đó Đình Anh ráo riết thúc đẩy thi công thêm 200 m2 diện tích văn phòng trong khu nhà 75 Trần Hưng Đạo. 120 m2 sẽ dành cho VnExpress. Nói “xây dựng VnExpress từ số không” quả là đúng cả về nghĩa bóng lẫn nghĩa đen.

Từ 12/10, tôi và Đình Anh phỏng vấn 90 ứng viên được mời sau vòng thi viết. Ba ngày liền chúng tôi hầu như ngồi lỳ trong phòng phỏng vấn từ sáng đến chiều…

Hơn 20 người được tuyển dụng tập trung lần đầu tiên vào ngày 30/10. Tại phòng họp tầng 2 ở 89 Láng Hạ, tôi mời họ ngồi thành vòng tròn. Mỗi người lần lượt giới thiệu về mình – quá trình học tập, công tác trước đây, năng lực sở trường… Nhờ đó họ nhanh chóng trở nên thân thiện, gần gũi nhau. Phần lớn là những người vừa tốt nghiệp đại học, rất trẻ, chưa làm báo bao giờ. Đó là những người thông minh nhất mà tôi có thể có được vào thời điểm đó.

Tôi cũng đứng lên tự giới thiệu, nói về kế hoạch xây dựng VnExpress. “Tôi sẽ làm cho các bạn trở thành các nhà báo. Đến ngày nào đó, những gì các bạn viết ra sẽ có hàng nghìn người đọc. Rồi nhiều hơn thế, và có thể ở nhiều nước trên khắp thế giới. Đến ngày nào đó, trên các màn hình máy tính ở mọi nơi sẽ thường xuyên hiện lên cái tên VnExpress…”. Tôi nhìn vào mắt họ, và nghĩ, có lẽ họ tin tôi.

Tiếp đó là hai tuần đào tạo nghiệp vụ báo chí.
Diện tích xây thêm ở 75 Trần Hưng Đạo đang định hình từng ngày.
Đình Anh bắt tay vào viết phần mềm biên tập VnExpress. Trong đó có một số yếu tố sẽ mang tính cách mạng đối với báo chí Việt Nam.

Trước hết, đó là cách thức phát hành mỗi bài báo theo con đường độc lập của nó. Tức là các bài báo sẽ không chờ đợi trang báo của nó (ví dụ bài về văn hoá thì phải chờ các bài khác để lên layout trang Văn hoá hoàn chỉnh), và các trang sẽ không chờ đợi số báo của nó. Trước đó, khi nói đến báo chí, nhất thiết người ta phải nói đến tính định kỳ của nó: “Báo của anh là ra hàng tháng, hay bán nguyệt san, hay tuần báo, hay ra hàng ngày?…”. Định nghĩa báo, tạp chí trong giáo trình khoa Báo chí Đại học QG Hà Nội viết: “Báo, tạp chí là một loại hình thông tin đại chúng thực hiện các chức năng cơ bản như thông tin, định hướng dư luận, giải trí…, và được phát hành định kỳ”. Thậm chí các báo điện tử tồn tại trước đó cũng lên mạng theo “số báo”. Ví dụ, người ta còn viết: “báo Nhân Dân Điện tử số ra ngày…”(!). Cách thức xuất bản VnExpress sẽ thể hiện đặc thù phi định kỳ của báo trực tuyến, và đó chính là lợi thế về tốc độ cập nhật thông tin.

Thứ hai, phần mềm này phải cho phép thực hiện một loại hình gọi là “bài báo mở” – tức là bài báo sau khi đã phát hành vẫn còn tiếp tục được cập nhật. Với khả năng đó, VnExpress sau này đã có các hình thức bài “Tường thuật trực tiếp” và “Phỏng vấn trực tuyến”.

Thứ ba, cấu trúc website phải giúp giải quyết “bài toán trang nhất”. Ngay từ ngày báo in ra đời đến nay, các biên tập viên luôn luôn đương đầu với mâu thuẫn là: làm sao đưa được hết những cái hay nhất của số báo ra trang nhất để mời chào độc giả. Tờ báo càng hay thì càng không thể đưa được hết nội dung ra ngoài. Nhiều tờ báo hiện nay tìm mọi cách cắt xén các bài gần như chỉ còn lại headlines để đưa ra manh mún trên trang nhất. Với báo trực tuyến, trang nhất còn tệ hại hơn, nhỏ hơn: chỉ còn bằng màn hình. Nhiều websites đã cố đưa ra trang home hàng chục, thậm chí cả trăm tít bài, nhưng vẫn không hấp dẫn được độc giả.

Chúng tôi chọn nguyên tắc “Nắm cỏ thơm cho con lừa”. Nghĩa là chỉ bằng một nắm cỏ nhỏ bé, nhưng thơm ngon nhất, để dụ con lừa vào kho cỏ mênh mông, trù phú bên trong. Hình tượng “con lừa” ở đây hoàn toàn không có ý coi thường độc giả, mà chỉ là thuật ngữ nói lên tính thụ động của người đọc: họ không có nhiệm vụ phải đọc báo của bạn, họ thụ động và lười đọc báo của bạn vì còn có nhiều thứ hấp dẫn khác.

Do đó mỗi trang chuyên đề bên trong VnExpress chỉ được giới thiệu ra trang nhất một headline với đoạn đầu bài mà chúng tôi gọi là “lead”. Việc lựa chọn tin nào, đặt cho nó tựa đề gì, và lead viết ra sao sẽ có thể quyết định số phận của cả trang trong. Tất cả phụ thuộc vào trình độ của biên tập viên.

Tiếp nữa, font chữ trước đó luôn là vấn đề đau đầu của các websites tiếng Việt. Giải pháp của Đình Anh là mạnh dạn chọn Unicode, và VnExpress là website Việt Nam đầu tiên dùng font này.

Ngày 22/11, chúng tôi tiếp quản Newsroom của mình – cả tầng ba vừa xây xong ở 75 Trần Hưng Đạo. Hàng ngày thực tập làm tin, nhưng không đăng đi đâu – chờ chương trình. Mấy tháng liền Đình Anh ngồi một mình viết chương trình. Ngày nào cũng đến 7-8 giờ tối. Có lần đổ ốm, sốt cao mấy ngày.

Ngày 4/12, chúng tôi bắt đầu tập làm tin bằng phần mềm chạy thử mới viết xong. Thỉnh thoảng lại “chết”. Có người bối rối: “Tốc độ chạy thử thế này, đến Noel lên mạng được là may”. Quả thật – đã không may, đến tận ra Tết, 15/2/2001 VnExpress Editor mới được hoàn chỉnh, nhưng vẫn phải chạy thử.

Ra mắt

Cuối cùng, ngày 26/2, mặc dù còn khiếm khuyết, chúng tôi quyết định “phóng” VnExpress lên Internet.

Đó là một ngày thầm lặng, như những ngày làm việc bình thường khác. Không quảng cáo trên báo chí, không có lễ khai trương, diễn văn và champagne. Chỉ có một thông báo qua e-mail cho các khách hàng của FPT Internet. Nhưng đó là một ngày trọng đại của VnExpress. Chúng tôi bắt đầu theo dõi từng ngày xem có bao nhiêu hits. Liệu những nắm cỏ thơm của chúng tôi có mời chào được ai không? Liệu người ta có hiểu ý chúng tôi để click vào xem tiếp những trang trong? Liệu những tính toán của chúng tôi có đúng không? Hay mọi công sức đều đổ đi hết?… Một trăm, rồi hai trăm máy tính truy cập trong một ngày… Tôi ngồi trước máy tính của mình, muốn nói: “Hãy vào xem đi các vị. Sẽ có nhiều thông tin hữu ích đấy. Hãy xem đi, các vị sẽ hiểu chúng tôi và yêu mến chúng tôi”.

Sau tuần đầu, số máy tính truy cập trong một ngày đạt mức 1.000. Các biên tập viên trẻ của tôi ngỡ ngàng vui mừng. Tin họ vừa biên dịch xong có những 1.000 người đọc. Một tuần sau, số độc giả hằng ngày đã tăng gấp đôi… Sau nửa năm, VnExpress có 300.000 độc giả… Phần lớn thư bạn đọc kể rằng họ biết đến VnExpress là nhờ bạn bè giới thiệu.

Đó là những ngày đầu tiên trên con đường tiến tới được xã hội chấp nhận, rồi đến chính quyền phải xem xét lại các quy chế về quản lý báo chí, rồi mở ra những hành lang mới để thừa nhận VnExpress về mặt pháp lý. Qua những ngày đó mới hiểu, tại sao ngày 25/11/2002, khi cầm trên tay tờ giấy màu vàng giản đơn ghi dòng chữ “Giấy phép hoạt động báo điện tử số 511/GP – BVHTT”, Đình Anh đã nói: “Tôi thực sự xúc động”.

Sau đó, VnExpress được báo giới Việt Nam bình chọn là một trong 10 sự kiện nổi bật trong lĩnh vực công nghệ thông tin của năm 2002 “do đã thực sự là một biểu tượng cho sự phát triển nội dung Internet ở Việt Nam”.

Những người viết sử thường nhấn mạnh những gian truân lúc sơ khai để đề cao sự việc. Nhìn lại sự ra đời của VnExpress, tôi thấy hầu như không có gian truân gì. Mọi việc nói chung đã diễn ra đúng hoạch định, nhẹ nhàng và thuận lợi. Phần lớn những thuận lợi có được là do cơ chế của FPT. Tôi thấy mình đã may mắn đến với FPT, đã may mắn có những người cộng sự và đồng nghiệp như hiện nay. (Trong trang sử ký này tôi không nêu nhiều tên người, vì như vậy sẽ rất nhiều: để làm tờ báo, cần có một tập thể lớn).

Tôi không hề nghĩ VnExpress là to tát. Ngược lại, tôi thực lòng mong rằng, sau này nhìn lại thấy VnExpress chỉ là một mầm non ban đầu, qua năm tháng biến thành cây đại thụ nhiều cành nhánh sum suê. Cây đại thụ đó chính là hệ thống các phương tiện thông tin đại chúng hùng mạnh dưới sự điều khiển của tập đoàn FPT.

Dọn dẹp lại máy tính sau khi lĩnh đạn từ Virus

Tháng Bảy 30, 2007 by huyx

Tải BKAV về rồi diệt virus đã,sau khi xong .Tải file này về để enable Regedit
http://manbaibang.googlepages.com/enableregedit.vbs
Sau khi enable regedit thì mới có thể làm các thao tác khác trên regedit
Tải file này về để Enable Task Manager
http://manbaibang.googlepages.com/enabletaskmgr.reg
Tải file này về để Show Folder Options
http://manbaibang.googlepages.com/showfolderoptions.reg
Tải file này về,giải nén và chạy tất cả các file .reg trong đó để Show Hidden và show super Hidden (system files) http://manbaibang.googlepages.com/showhidden.zip

Một số thủ thuật giúp tăng khả năng tìm kiếm trên Google

Tháng Bảy 29, 2007 by huyx

Google rõ ràng là một công cụ tìm kiếm tốt nhất trên Internet hiện nay. Nhưng phần lớn người dùng không tận dụng hết những ưu điểm của nó. Phải chăng bạn mới chỉ gõ vào một hoặc hai từ khóa rồi chờ đợi những kết quả tốt nhất? Đó có thể là phương pháp tìm kiếm nhanh nhất, nhưng với hơn 3 tỷ trang web có trong chỉ mục của Google thì bạn sẽ phải nỗ lực rất lớn để tìm ra kết quả cần thiết trong số các trang tìm được.

Nhưng Google là một công cụ đặc biệt xuất sắc có thể giúp cho việc khám phá Internet của bạn trở nên dễ dàng hơn. Các tùy chọn tìm kiếm của Google vượt ra khỏi phạm vi của các từ khóa đơn giản, các trang web, và thậm chí là cả những lập trình viên của nó nữa. Hãy xem xét tới một số tùy chọn ít được biết tới của Google.

Mẹo vặt tìm kiếm câu lệnh

Sử dụng một câu lệnh đặc biệt là một phương thức để Google nhận biết bạn muốn hạn chế việc tìm kiếm trong những thành phần hay những đặc điểm nhất định của các trang web. Google có một danh sách khá đầy đủ các thành phần câu lệnh của nó tại www.google.com/help/operators.html. Sau đây là một số thao tác cao cấp có thể giúp bạn thu hẹp phạm vi kết quả tìm kiếm.

Đặt “Intitle:” ở đầu của một từ hay một cụm từ truy vấn (thí dụ: intitle: “Three Blind Mice”) sẽ giới hạn kết quả tìm kiếm của bạn chỉ trong tiêu đề của các trang web.

Còn “Intext:” thì làm cái việc ngược lại với “intitle:”, nó chỉ tìm kiếm trong phần văn bản nội dung của trang mà bỏ qua tiêu đề, các liên kết v.v… “Intext” rất phù hợp khi bạn muốn tìm những nội dung thường xuất hiện trong địa chỉ URL.

“Link:” sẽ giúp bạn biết được những trang nào liên kết tới trang mà bạn quan tâm hoặc những liên kết tới các trang khác trong trang đó. Thí dụ, bạn hãy thử gõ:

“link:http://www.pcmag.com”.

Bạn có thể sử dụng toán tử “site:” (toán tử này giúp bạn hạn chế kết quả trong các vùng tên miền ở cấp cao nhất) cùng với “intitle:” để tìm kiếm những kiểu trang nhất định. Thí dụ, hãy tìm các trang giáo dục nói về Mark Twain bằng cách tìm kiếm với: “intitle:”Mark Twain”site:edu”. Hãy thử nghiệm kết hợp nhiều thành phần khác; bạn sẽ tìm ra một vài cách thức để tìm kiếm thông tin hữu hiệu hơn.

Những dịch vụ ít được biết đến của Google

Google có một số dịch vụ giúp bạn thực hiện một vài công việc mà  có thể bạn chưa bao giờ nghĩ rằng có thể sử dụng Google để hoàn thành. Thí dụ, tính năng máy tính mới của Google (www.google.com/help/features.html#calculator) cho phép bạn có thể thực hiện các phép toán và việc chuyển đổi từ hộp tìm kiếm. Có một thí dụ vui, bạn hãy thử với truy vấn “Answer to life the universe and everything”.

Hãy để cho Google giúp bạn kiểm tra lỗi chính tả với các yêu cầu tìm kiếm của bạn. Hãy thử gõ một từ hoặc một cụm từ sai lỗi chính tả vào hộp thoại tìm kiếm (thí dụ: “thre blund mise”) và Google sẽ gợi ý cho bạn cách viết thích hợp hơn. Việc này không phải lúc nào cũng hoàn hảo; sẽ tốt hơn khi từ mà bạn cần tìm có sẵn trong từ điểm. Khi bạn muốn tìm một từ viết đúng chính tả, hãy nhìn xuống trang kết quả, nơi lặp lại yêu cầu tìm kiếm của bạn. (Nếu bạn đang tìm kiếm với “three blind mice”, phía dưới cửa sổ tìm kiếm sẽ xuất hiện một thông báo dạng như “Search the web for “three blind mice”). Bạn sẽ phát hiện được mình có thể bấm chuột vào mỗi từ trong cụm từ đó để biết được định nghĩa của nó trong từ điển.

Mở rộng khả năng tìm kiếm

Google còn đưa ra một số dịch vụ giúp bạn làm rõ hơn tìm kiếm của mình. Google Groups (http:// groups.google.com) lập chỉ mục hàng triệu các thông điệp từ các cuộc thảo luận trên Usenet từ nhiều thập kỷ nay. Google thậm chí còn giúp cho việc mua sắm của bạn với 2 công cụ: Froogle (http://froogle.google.com), với chỉ mục các hàng hóa từ các cửa hiệu trực tuyến, và Google Catalogs (http://catalogs.google.com), với nhiều sản phẩm nổi bật từ hơn 6.000 trang catalogs trong một chỉ mục tìm kiếm được. Bạn có thể tìm được danh sách đầy đủ các công cụ và dịch vụ của Google tại.

Có thể bạn đã quen sử dụng Google thông qua trình duyệt của mình. Vậy đã bao giờ bạn nghĩ tới việc sử dụng Google bên ngoài trình duyệt của mình chưa?

Google Alert (www.googlealert.com) sẽ giám sát các điều kiện tìm kiếm của bạn và sẽ gửi thư điện tử thông báo cho bạn biết thông tin về những bổ sung mới vào chỉ mục của google. (Google Alert không phải là chi nhánh của Google; nó sử dụng các hàm dịch vụ Web API của Google để thực hiện tìm kiếm của nó).  Nếu bạn quan tâm tới những câu chuyện mới hơn là những nội dung Web chung chung, hãy thử xem xét bản beta của Google News Alerts (www.google.com/newsalerts). Dịch vụ này (là một chi nhánh của Google) sẽ giám sát tới 50 truy vấn trong mỗi địa chỉ e-mail và sẽ gửi cho bạn thông tin về những câu chuyện mới phù hợp với truy vấn của bạn. (Gợi ý: Hãy sử dụng các thành phần câu lệnh “intitle:” và “source:” với Google News để giới hạn số thông báo mà bạn nhận được).

Trong năm 2002, Google đã đưa ra các hàm Google API (giao diện lập trình ứng dụng), một phương thức giúp các lập trình viên có thể tiếp cận các kết quả từ cơ chế tìm kiếm của Google mà không vi phạm các điều khoản của Google. Rất nhiều người đã tạo được các ứng dụng hữu ích (và đôi lúc không hữu ích lắm nhưng thú vị) không có sẵn ở Google, mà điển hình là Google Alert. Với rất nhiều ứng dụng, bạn sẽ phải cần khóa API, hiện có miễn phí tại www.google.com/apis.

Với rất nhiều đặc tính tìm kiếm khác nhau của mình, Google đã vượt xa khỏi một công cụ tìm kiếm thông thường. Hãy thử nghiệm một số mẹo được đưa ra trên đây, bạn sẽ bị ngạc nhiên với số lượng các phương thức khác nhau mà Google làm tăng hiệu quả công việc tìm kiếm trên mạng của bạn.

Tìm kiếm trong một khoảng thời gian

Daterange: (ngày bắt đầu – ngày kết thúc). Bạn có thể giới hạn tìm kiếm của mình trong số các trang được lập chỉ mục trong một khoảng thời gian nhất định. Daterange: sẽ tìm kiếm với thời gian là khi các trang được lập chỉ mục, chứ không phải thời gian các trang đó được tạo ra. Toán tử này có thể giúp bạn chắc chắn rằng kết qủa thu được sẽ là những nội dung mới, hoặc bạn có thể sử dụng nó để loại từ những chủ đề mới tạo mà tập trung vào tìm kiếm những kết quả cũ hơn.

Thêm một số ứng dụng Google API

Staggernation cung cấp 3 công cụ dựa trên các hàm Google AIP. Công cụ tìm kiếm Web theo những máy chủ Google API (GAWSH) sẽ cung cấp một danh sách những máy chủ Web mà bạn cần tìm (www.staggernation.com/gawsh). Khi bạn bấm vào hình tam giác bên cạnh mỗi tên máy chủ, bạn sẽ nhận được một danh sách kết quả về máy chủ đó. Còn công cụ phác thảo trình duyệt liên quan Google API (GARBO) thì phức tạp hơn một chút: Bạn phải lựa chọn kết quả mình muốn tìm là những trang có liên quan tới địa chỉ URL mà bạn nhập vào đó hay là những trang liên kết tới địa chỉ đó (www.staggernation.com/garbo/). Bấm vào hình tam giác bên cạnh mỗi địa chỉ URL, bạn sẽ nhận được một danh sách các trang liên kết hoặc có liên quan tới địa chỉ này. Còn CapeMail là một ứng dụng tìm kiếm thư điện tử cho phép bạn gửi một thư điện tử tới google@capeclear.com với tiêu đề của thư chính là nội dung truy vấn của bạn. Sau đó bạn sẽ nhận được 10 kết quả đầu tiên. Có thể bạn chẳng cần dùng tới nó hàng ngày, nhưng nếu điện thoại di động của bạn có khả năng gửi e-mail mà không duyệt web được, thì đây cũng là một địa chỉ hữu ích mà bạn nên biết.

Biến Windows dỏm thành Windows có bản quyền

Tháng Bảy 26, 2007 by huyx

Đầu tiên vào Start ,Run,gõ Regedit rùi tìm đến khóa
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\WPAEvents

Ở ô bên phải nhấn chuột phải vào OOBETimer rồi click vào Modify. Tiếp đến hãy thay đổi một khóa bất kì (ví dụ 71 thành 72 chẳng hạn). Sau đó đóng nó lại và tiếp tục vào Start , Run , và đánh

%systemroot%\system32\oobe\msoobe.exe /a

Nó sẽ đưa bạn đến cửa sổ Active windows.

Đừng lo hãy chọn
I want to telephone a customer service representative to activate Windows

Tiếp đến nhấn Next, nhấn Change Product key
Hãy nhập key này

DHXQ2-WRGCD-WGYJY-HHYDH-KKX9B
hoặc
JG28K-H9Q7X-BH6W4-3PDCQ-6XBFJ
hoặc
MJPMD-69P47-4JK37-DGQF2-XMWPQ

Đánh xong hãy nhấn Update. Nó sẽ lại đưa chúng ta về cửa sổ Active, đừng quan tâm, hãy đóng nó lại bằng cách nhấn vào Remind me later
Xong đâu đó rùi thì còn chờ gì nữa, khởi động lại Windows đi thôi. Khởi động lại xong hãy vào Run, đánh tiếp

%systemroot%\system32\oobe\msoobe.exe /a

Cửa sổ Active sẽ lại hiện ra nhưng ko phải là bắt chúng ta Active mà là báo cho ta biết Windows is activated.

Vậy là Windows đã có bản quyền rùi đó. Hãy tận hưởng bằng cách vào ngay trang update hay cài IE7, WMP11, Windows Defender …. hay bất cứ cái gị có check bản quyền của Microsoft.

Thuật toán số hóa thông điệp MD5

Tháng Bảy 24, 2007 by huyx

1. Mục đích

Tài liệu này mô tả thuật toán số hóa thông điệp MD5. Thuật toán nhận vào 1 thông điệp độ dài tùy ý và tạo ra một số 128 bit, là một dạng “vân tay“ hay “mã số thông điệp“ ( message digest ) của đầu vào. Người ta cho rằng sẽ không khả thi về mặt tính toán để tạo ra 2 thông điệp có cùng mã số thông điệp, hoặc tạo ra một thông điệp với mã số cho trước.Thuật toán MD5 được dự tính áp dụng cho những ứng dụng chữ ký điện tử, ở đó một file lớn phải được “nén“ một cách an toàn trước khi mã hóa với một khóa cá nhân ( private key ) dưới một hệ mã hóa công khai như RSA

Thuật toán MD5 được thiết kế để chạy tương đối nhanh trên các máy 32 bit, có thể được thực hiện một cách khá gọn.

Thuật toán MD5 là sự mở rộng của thuật toán MD4. MD5 chậm hơn một chút so với MD4 nhưng an toàn hơn. MD5 được thiết kế vì người ta cảm thấy có thể MD4 đã được chấp nhận trong sử dụng quá nhanh so với sự đánh giá nó. MD4 được thiết kế để chạy rất nhanh, nó đã “nằm trên ranh giới“ theo cách nói về nguy cơ của sự thành công trong việc phá mã. MD5 đã lùi lại một chút, từ bỏ một chút tốc độ cho sự bảo mật. Nó kết hợp một số ý kiến góp ý của các chuyên gia, thuật toán MD5 hiện đang được đánh giá và có thể được chấp nhận như một chuẩn.

2. Thuật ngữ và ký hiệu

Trong tài liệu này một “word“ là một lượng 32 bit và một “byte“ là một lượng 8 bit. Một dãy các bit có thể được xem như một dãy các byte, trong đó mỗi nhóm 8 bit liên tiếp được xem như một byte với bit cao của mỗi byte đặt trước. Tương tự, mỗi dãy các byte có thể xem như một dãy các word 32 bit, trong đõ mỗi nhóm 4 byte liên tiếp được xem như một word với byte thấp đặt trước.

Ký hiệu x_i nghĩa là phần tử x thứ i (“x sub i“). Nếu số thứ tự đó là một biểu thức ta viết nó trong ngoặc nhọn, ví dụ như x_{i+1} ; ^ ký hiệu cho số mũ.
Ký hiệu “+“ cho phép cộng các word, nghĩa là cộng theo môđun 2^32.
X <<< s ký hiệu giá trị 32 bit nhận được bằng cách dịch chuyển các bit của X (theo kiểu quay vòng ) sang trái s vị trí.
not(X) ký hiệu phép đối lập (NOT) các bit
X v Y ký hiệu phép OR các bit
X xor Y ký hiệu phép XOR các bit
XY ký hiệu phép AND các bit

3. Mô tả thuật toán MD5

Giả sử chúng ta có thông điệp b bit ở đầu vào, và ta muốn tìm mã số của thông điệp. Ở đây b là số không âm bất kỳ; b có thể bằng 0 và không cần chia hết cho 8, độ lớn có thể bất kỳ. Tưởng tượng rằng các bit của thông điệp được viết như sau :
m_0 m_1 m_2 … m_{b-1}

Mã số thông điệp được tính qua 5 bước sau

3.1 – Bước 1 : Các bit gắn thêm

Thông điệp được mở rộng, thêm bit vào phía sau sao cho độ dài của nó ( tính theo bit ) đồng dư với 448 theo môđun 512. Nghĩa là thông điệp được mở rộng sao cho nó còn thiếu 64 bit nữa thì sẽ có một độ dài chia hết cho 512. Việc này luông được thực hiện ngay cả khi bản thân độ dài thông điệp đã đồng dư với 448 theo môđun 512.
Việc thêm bit này thực hiện như sau : một bit “1“ được thêm vào sau thông điệp, sau đó các bit “0“ được thêm vào để có một độ dài đồng dư với 448 môđun 512. Trong tất cả các trường hợp, có ít nhất 1 và nhiều nhất 512 bit được thêm vào.

3.2 – Bước 2 : Gắn thêm độ dài

Dạng biểu diễn 64 bit độ dài b của chuỗi ban đầu được thêm vào phía sau kết quả của bước 1. Trong trường hợp b lớn hơn 2^64 thì chỉ có 64 bit thấp của b được sử dụng. ( Các bit này được thêm vào phía sau dưới dạng 2 word 32 bit, gắn word thấp trước theo quy ước ở trên )
3.3 – Bước 3 : Khởi tạo bộ đệm MD
Một bộ đệm 4 word (A,B,C,D) được dùng để tính mã số thông điệp. Ở đây mỗi A,B,C,D là một thanh ghi 32 bit. Những thanh ghi này được khởi tạo theo những giá trị hex sau ( các byte thấp trước ) :
word A : 01 23 45 67
word B : 89 ab cd ef
word C : fe dc ba 98
word D : 76 54 32 10

3.4 – Bước 4 : Xử lý thông điệp theo từng khối 16 word

Trước hết ta định nghĩa các hàm phụ, các hàm này nhận đầu vào là 3 word 32 bit và tạo ra một word 32 bit.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z)= XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))

Với mỗi bit, F hoạt động như một điều kiện : nếu X thì Y nếu không thì Z. Hàm F có thể định nghĩa bằng phép + thay vì v bởi vì XY và not(X)Z không bao giờ có “1“ ở cùng 1 vị trí bit.Các hàm G,H và I tương tự như F, ở chỗ chúng tác động theo từng bit tương ứng để tạo ra kết quả từ các bit của X,Y và Z

Bước này sử dụng một bảng 64 giá trị T[1 .. 64] được tạo ra từ hàm sin. Gọi T[i] là phần tử thứ i của bảng, thì T[i]là phần nguyên của 4294967296*|sin(i)| , i được tính theo radian.

Làm như sau :

/* Xử lý mỗi khối 16 word */
For i = 0 to N/16-1 do

/* Copy block i into X. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /* of loop on j */

/* Lưu A vào AA, B vào BB, C vào CC, D và DD . */
AA = A
BB = B
CC = C
DD = D

/* Vòng 1. */
/* Ký hiệu [abcd k s i] nghĩa là thực hiện như sau :
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiện : */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/* Vòng 2. */
/*Ký hiệu [abcd k s i] nghĩa là thực hiện như sau
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiện : */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/* Vòng 3. */
/* Ký hiệu [abcd k s t] nghĩ là làm như sau
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiện :*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

/* Vòng 4. */
/* Ký hiệu [abcd k s t] nghĩa là làm như sau
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiên: */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

/* Then perform the following additions. (That is increment each
of the four registers by the value it had before this block was started.) */

/* Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị của nó trước khi vào vòng lặp ) */

A = A + AA
B = B + BB
C = C + CC
D = D + DD

end /* of loop on i */

3.5 – Bước 5 : In ra

Mã số thông điệp được tạo ra là A,B,C,D. Nghĩa là chúng ta bắt đầu từ byte thấp của A, kết thúc với byte cao của D.

Đến đây đã mô tả xong thuật toán MD5. Mã nguồn tham khảo viết bằng C có thể tìm thấy ở phụ lục.

4. Tổng kết

Thuật toán số hóa thông điệp MD5 khá đơn giản để thực hiện, cung cấp một dạng “vân tay“ hay mã số của thông điệp với độ dài tùy ý. Người ta cho rằng độ khó để tìm được 2 thông điệp có cùng mã số là khoảng 2^64 bước tính, và độ khó để tim được một thông điệp với mã số cho trước là 2^128 bước tính. Thuật toán MD5 đã được dò tìm điểm yếu một cách cẩn thận. Tuy nhiên đây là một thuật toán tương đối mới ( ! ) và việc phân tích cẩn thận về sự an toàn là cần thiết.

5. Sự khác nhau giữa MD4 và MD5

Sau đây là sự khác nhau giữa MD4 và MD5 :

1. Vòng 4 đã được thêm vào

2. Mỗi bước đều được thêm vào một hằng số duy nhất

3. Hàm G ở vòng 2 được đổi từ (XY v XZ v YZ) thành (XZ v Y not(Z)) để làm giảm sự đối xứng trong G.

4. Mỗi bước đều sử dụng kết quả từ bước trước . Điều này nhằm tạo ra “hiệu ứng dây chuyền“ nhanh hơn

5. Thứ tự các word đầu vào ở vòng 2 và vòng 3 được thay đổi, để làm cho hai mẫu này ít giống nhau hơn

6. Số bit dịch chuyển ở mỗi vòng được tối ưu hóa, để tạo ra “hiệu ứng dây chuyền“ nhanh hơn. Lượng dịch chuyển ở mỗi vòng là khác nhau.

Tài liệu tham khảo

[1] Rivest, R., “The MD4 Message Digest Algorithm“, RFC 1320, MIT and
RSA Data Security, Inc., April 1992.

[2] Rivest, R., “The MD4 message digest algorithm“, in A.J. Menezes
and S.A. Vanstone, editors, Advances in Cryptology – CRYPTO `90
Proceedings, pages 303-311, Springer-Verlag, 1991.

[3] CCITT Recommendation X.509 (1988), “The Directory -
Authentication Framework.“

Xem xét về tính bảo mật

Độ bảo mật bàn đến trong bài viết này được coi là đủ để tạo ra những mô hình chữ ký điện tử kết hợp giữa MD5 và một hệ mã hóa công khai

MD5 Algorithm

Tháng Bảy 24, 2007 by huyx

Mỗi một người có một “dấu lăn tay” (fingerprint) riêng ko ai giống ai đúng ko các bạn?. Lúc 15 tuổi tui làm giấy CMND cho đến nay “dấu lăn tay” của tui vẫn vậy. Và có khi nào bạn hỏi: Ai đã tạo ra nó thế?!. Xin trả lời: đó là do Ông Trời tạo ra bạn ạ!!!.(lãng xẹt) Hihi
Từ những ý tưởng đó , con người mới nghĩ ra việc : tại sao chúng ta ko làm Ông Trời một phen. Chúng ta thử tạo ra “dấu lăn tay” cho 1 cái gì đó để phân biệt chúng với nhau. Ví dụ như tên của mỗi người chẳng hạn (các bạn nên có khái niệm tên (name) là một chuổi các ký tự được gọi là string). Hêhêhê . Do vậy , trong IT người ta bắt đầu nghiên cứu các “cái máy” tạo ra “dấu lăn tay” cho các chuổi string. Một trong những “cái máy” đó là “Thuật toán MD5” mà chúng ta sắp nghiên cứu đây.
“Dấu lăn tay” do Thuật tóan MD5 (gọi tắt là MD5) từ một string gọi là message digest (tín hiệu digest, gọi tắt là md) hay còn gọi là “MD5 hashes” (gọi tắt là hashes). Một tín hiệu hashes là một chuổi các ký tự hexa ( bao gồm số 0-9 và a-f, các số hex ấy mà!!). Về nguyên tắt tạo ra hashes là :
-Bất cứ string nào cũng điều có duy nhất một hashes, ko bao giờ có 2 hashes cho 1 string
-Hai string khác nhau thì có 2 hashes khác nhau, ko bao giờ trùng nhau.
-Hảy nhớ điều này: từ 1 hashes ta tìm ngược lại string của nó được ko? Điều này ko bao giờ làm được. Ko một “máy” nào làm được.Chúng ta nên nhớ điều này.
Đó là những gì mà thuật tóan MD5 làm ra.
TUT này chúng ta ko tìm hiểu sâu thật sâu về MD5, như là tại sao làm như thuật tóan thì đáp ứng các điều kiện trên vừa nói, đó là việc của các nhà phát minh, các nhà tóan học.Chúng ta chỉ tìm hiểu cách thực hiện của MD5 mà thôi. Từ đó chúng ta có thể ứng dụng nó để nhận dạng ra chương trình nào sử dụng MD5, và sau đó ….keygen nó …hihi

Sau đây tui xin trích dẫn một số tài liệu về MD5 mà tui tìm hiểu được trên Net. Các bạn đọc từ từ nhé ko thôi bị mắc nghẹn à.

MỘT SỐ THÔNG TIN CĂN BẢN:

MD5 LÀ GÌ ?

MD để chỉ cho “message digest” (Lấy 2 chử đầu). MD5 là một thuật tóan lấy một tín hiệu vào có chiều dài bất kỳ và đưa ra một tín hiệu digest có chiều dài cố định (128-bit, 32 ký tự hexa), được làm ra từ 1 giá trị hexa (chú ý : mỗi ký tự hex là 4 bit, do đó 128bit là 32 ký tự hex). OK, bây giờ nói rõ hơn một chút : MD5 là cách căn bản để lấy chùm ký tự ( là digits, alphabeic hay gì khác ), được gọi là string nhập vào, và thay đổi chúng thành một chùm ký tự dài 32 ký tự , được gọi là tín hiệu digest (message digest) hay hashes của string được nhập vào, chuổi 32 ký tự này được tạo ra từ các ký tự hexa ( những digits: 0-9 và các chử a-f). Điều này có nghĩa là, với một string nhập vào có chiều dài bất kỳ , MD5 sẽ luôn luôn cài đặt “một vài thứ” để thành một chuổi string dài 32 ký tự, mà các ký tự là các ký tự hexa. Tín hiệu digest sẽ ko có khỏang trống, hay dấu hoặc kép hay bất cứ thứ gì khác 0-9 và a-f trong tín hiệu hashes được xuất ra.
MD5 hashes có tiện dụng là những hashes tạo ra trông khác nhau hòan tòan từ những tín hiệu nhập vào hơi hơi giống nhau. Ví dụ sau sẽ làm rỏ hơn về điều này:
• The MD5 hash of jim is 5e027396789a18c37aeda616e3d7991b
• The MD5 hash of Jim is d54b3c8fcd5ba07e47b400e69a287966
• The MD5 hash of Jimmy is 495b3121d23f5988b133882b36aa7214

Như bạn thấy đó, có ba tín hiệu nhập vào “hơi hơi giống nhau” nhưng các tín hiệu MD5 hashes xuất ra hòan tòan khác nhau. Ví dụ này cũng chứng minh hai ký tự j và J là 2 ký tự khác nhau . Do đó chúng ta thấy “máy đẻ” ra MD5 hashes là lọai rất nhạy cảm. Ở đây cần chú ý thêm là trong ví dụ thứ 3 chỉ thêm vào 2 ký tự (my) ở cuối chuổi của ví dụ 2 , và hashes của nó đã thay đổi hòan tòan. Vì vậy chúng ta ko thể có hashes của chuổi “Blehlo” từ hashes của chuổi “Bleh” bằng cách “vá viếu” thêm vài ký tự – thay đổi trong chuổi string nhập vào thì tín hiệu hashes của nó cũng sẽ thay đổi hòan tòan. Và ở đây cũng nên chú ý với 3 string nhập vào có chiều dài ko giống nhau nhưng các hash sinh ra đều có chiều dài là 32 ký tự (bao gồm các số 0-9 và a-f), ở ví dụ sau cùng ta cũng thấy chuổi string nhập vào dài hơn 2 ký tự so với 2 string trước nhưng chuổi hash của nó cũng chỉ có 32 ký tự chử số hex.
Mặc dù tín hiệu MD5 hashes xuất ra ngẫu nhiên từ string nhập vào , nhưng thật ra chúng ta có một kiểu mẫu tạo hashes MD5(một thuật tóan MD5) được sử dụng để “quay” string nhập vào thành một md hay một hashes. Nếu bạn muốn sử dụng nó thì bạn có thể đọc ở tut này ở phần sau . Bởi vì MD5 được sử dụng một thuật tóan giống nhau cho mỗi lần tính tóan nên MD5 hashes của chuổi jim luôn luôn là
5e027396789a18c37aeda616e3d7991b
Trong thực tế , một số chương trình còn thêm vào một vào vài lọai thuật tóan khác khi md được sinh ra , làm cho MD5 cực kỳ thông dụng và là 1 công cụ rất mạnh. Nhưng có lẻ điều quan trọng nhất là trong thực tế MD5 được dùng như một cách tạo hashes hay ta gọi là hash chuổi ( biến chuổi thành 1 chuổi “vớ vẫn” nào đó)……

Tôi xin nói thật, những điều tui tìm hiểu được trên đây làm cho tui vô cùng “đắc ý”. Tóm lại chúng ta cần biết như sau:

-MD5: là một thuật tóan biến đổi 1 chuổi string thành 1 tín hiệu “message digest” hay còn gọi là “MD5 hashes”. Đó là một tín hiệu 128 bits – 32 ký tự hexa.
-hash một chuổi string là biến một string thành một tín hiệu message digest
-Thủ tục (procedure) hay hàm (function) trong chương trình để hash chuổi gọi là “máy sinh” MD5 hashes hay còn gọi nôm na là “máy hash”.

Bây giờ chúng ta sẽ bước sang một câu hỏi khác rất quan trọng.

CHÚNG TA “DỊCH NGƯỢC” LẠI MỘT TÍN HIỆU MD5 HASHES NHƯ THẾ NÀO ?

Như trên tui đã nói : từ 1 hashes ta tìm ngược lại string của nó được ko? Điều này ko bao giờ làm được. Ko một “máy” nào làm được.
Vậy ở đây câu trả lời là : “Bạn không thể” . Cách hash một string có nghĩa là tín hiệu md xuất ra bằng thuật tóan MD5 là ko thể đảo ngược. Không thể biết cách tìm ra chuổi origin từ tín hiệu MD5 hashes. Vì như ví dụ ở phần trước, những chuỗi có vẽ giống nhau nhưng tín hiệu md sinh ra hòan tòan khác nhau Tức là chúng ta ko thể nào “decode” (dịch ngược) được một chuổi MD5 hashes. Chỉ có một cách có được chuổi origin là bằng cách “brute force cracking”. Tức là phải duyệt qua rất nhiều tổ họp các ký tự của chuổi vào cho đến khi một trong những chuổi md được tạo ra của chúng bằng với chuổi md cần tìm origin. Tuy nhiên , với khả năng máy tính thời nay muốn làm điều này phải mất rất nhiều năm. Mặt khác ở đây chúng ta cần chú ý đó là tín hiệu MD5 hashes được thiết kế ra là “độc nhất vô nhị”. Trên lý thuyết cũng có khả năng 2 chuổi khác nhau có tín hiệu md giống nhau nhưng khả năng này rất rất nhỏ (1/(16^32) hay vào khỏang (3.4E+38). Bởi vậy có một lần tui tham gia forum HVA và có người sử dụng chương trình tìm password cho tập tin WINRAR bị mất password và bác Comp đã kiến nghị ko nên dùng chương trình đó là lý do trên. Vì khả năng tìm ra password rất “dài hơi” và máy tính chắc chạy vài tuần của chưa tìm ra. Hảy bỏ ý định đó đi các bạn.

MD5 ĐƯỢC SỬ DỤNG CHO VIỆC GÌ ?

Chính các đặc điểm của MD5 làm cho nó thường được ứng dụng trong một số trường hợp như sau:
-Nó thường được dùng để checksum tòan bộ file. Các nhà phát triển ứng dụng thường dùng MD5 trong việc cho phép download file trên NET. Họ sẽ cho “xuất bản” một tín hiệu md của file download. Khi chúng ta tải file về , thì file chúng ta vừa download sẽ có một tín hiệu md, nếu tín hiệu này khớp với tín hiệu các nhà phát triển ứng dụng đã “xuất bản” ở trên. Thì OK, ko có vấn đề. Nếu hai tín hiệu md này khác nhau, có thể có trong file download có virut hay cái gì đó tương tự.
-Một ứng dụng thường được dùng nữa là hash một password. Được dùng cho việc bảo mật một ứng dụng, hay những gì tương tự …v….v….

Đây là một số thông tin căn bản chúng ta cần biết qua khi bắt đầu tìm hiểu về thuật tóan MD5. Ở đây tui cần nói thêm một chút:

-Chúng ta chỉ có thể tạo ra tín hiệu message digest từ một chuổi string ( đây được gọi là quá trình “encode”).Chúng ta ko thể “dịch ngược” một message digest ra một string origin (quá trình “dịch ngược” gọi là “decode”). Khi tìm hiểu về MD5, tui có hỏi trên Forum HVA về các soft dùng MD5, và có một người trả lời là “bạn cần soft encode hay decode”. Và hacnho trả lời giúp tui : dĩ nhiên là encode. Thật tình tui ko thể nào chịu nổi lọai người này. Họ chỉ biết trình diễn kiến thức. Đây ko phải là “văn hóa” khi tham gia một forum. Mong mọi người nên chân thành với nhau nhiều hơn.
-Một số người sai lầm khi hiểu rằng “MD5 hashes “ là thuật tóan tựa như MD5 ,tức là thuật tóan trên nền tản MD5 biến đổi đi đôi chút. (Các thuật tóan này tôi gọi nôn na là thuật tóan “Lai căn MD5”). Điều này sai lầm , benina chỉ xin nhắc lại : MD5 hashes = message digest.
-Đứng về mặt cracking, một số người khi chưa tìm hiểu kỹ MD5 và thấy decode ko được nên cho rằng các soft dùng thuật tóan MD5 là ko keygen được “bất khả xâm phạm” . Lại thêm một sai lầm nữa. Vì sau vậy?. Vì nếu 1 soft được bảo vệ bằng đúng “chính xác thuật tóan MD5” thì quá dễ để tìm ra số serial vì chúng ta đã biết chính xác thuật tóan này diễn ra như thế nào. Vì vậy các soft chỉ dùng thuật tóan “lai căn MD5” , hay lồng các thuật tóan khác với thuật tóan MD5. Vì vậy các bạn muốn tìm các soft trong thực tế sử dụng MD5 rất khó. (có thể nói là ko có vì ko coder nào ngu đến như vậy!). Tui chỉ tìm được một soft có thuật tóan khá giống thuật tóan MD5 mà thôi. Thực ra tui tìm trên Net thấy có 2 soft có thuật tóan “sát” với MD5, nhưng ko còn đường download trên Net nữa vì quá cũ. Tui phải ra tiệm bán các đĩa CD, và tìm được 1 Soft (mô phật! hên thiệt). Trong quá trình tìm hiểu MD5, tui cũng thu thập được một số soft có thuật tóan “Lai căn MD5”.Rồi tui sẽ share cho các bạn.