Thursday, June 26, 2014

Tổng quan giao thức SNMP

Simple Network Mangement Protocol(SNMP) hoạt động ở lớp ứng dụng, chạy cổng 160, 161, 162 trên UDP. SNMP dùng để quản lý các thiết bị trong mạng như router, server,… SNMP không chỉ cho phép kiểm soát việc hoạt độngcủa các thiết bị mạng mà còn có thể quản lý các thiết bị mạng từ xa. SNMP có khả năng theo dõi, lấy thông tin, đưa ra thông báo và tác động đến các hoạt động hệ thống mạng theo ý muốn của người quản trị. Ví dụ: SNMP có thể theo dõi tốc độ đường truyền,tự động gửi thông báo cho người quản trị khicó một cổng trên router bị tắt, xem thông tin ổ cứng của server,…
SNMP có các phiên bản: SNMPv1 (RFC 1155, RFC 1157), SNMPv2c(RFC 1901, RFC 1905, RFC 1906, RFC2578), SNMPv2u ( RFC 1909, RFC 1910) và SNMPv3 (RFC 1905, RFC 1906, RFC 3411, RFC 3412, RFC 3414, RFC 3415). Một hệ thống sử dụng SNMP bao gồm 2 thành phần cơ bản: NMS (Network Management Station) và NE (Network Element)
-    NMS (SNMP manager) là một máy tính chạy phần mềm quản lý SNMP (PRTG, Solarwinds) để thực hiện giám sát và điều khiển tập trung các SNMP agent.
-    NE (SNMP agent) là các thiết bị mạng hỗ trợ SNMP và chịu sự quản lý của các  SNMP manager.
Một SNMPmanager có thể quản lý nhiềuSNMP agent và ngược lại một SNMP agent có thể chịu sự quản lý của nhiều SNMP manager.
Một số khái niệm cơ bản của giao thức SNMP:
- Object:
Ø  Mỗi thiết bị có hỗ trợ SNMP cung cấp nhiều thông tin khác nhau, mỗi thông tin đó được gọi là object. Ví dụ: router có các thông tin về tổng số card, tổng số cổng, tổng số bit đã truyền/nhận, tên router, trạng thái tắt/mở của các cổng.
Ø  Mỗi object có một tên gọi riêng và một mã số Oject ID (OID) để nhận dạng object đó. Ví dụ: tên thiết bị được gọi là sysName, OID là 1.3.6.1.2.1.1.5.
Ø  Mỗi oject chỉ có duy nhất một OID nhưng có thể có nhiều tên gọi nên người ta sử dụng một chỉ số sub-id dể phân biệt các object. Ví dụ: Tên thiết bị được gọi là sysName, OID là 1.3.6.1.2.1.1.5; nếu thiết bị có 2 tên thì chúng sẽ được gọi là sysName.0 và sysName.1 và có OID lần lượt là 1.3.6.1.2.1.1.5.0 và 1.3.6.1.2.1.1.5.1.
Ø  Một số object phổ biến thì được chuẩn hóa OID, riêng các object mới được tạo ra theo yêu cầu của cá nhân thì phải được mô tả OID. Để lấy một thông tin có OID đã chuẩn hóa thì ứng dụng SNMP phải gửi một gói tin SNMP có chứa OID của object đó cho SNMP agent, SNMP agent khi nhận được thì nó phải trả lời bằng thông tin ứng với OID đó.
Ø  Object access quy định quyền truy cập của mỗi object là READ_ONLY (chỉ cho phép đọc object) hoặc READ_WRITE (cho phép đọc và thay đổi giá trị object). Ví dụ: tên của một thiết bị (sysName) thì ta có thể thay đổi nên có quyền READ_WRITE, còn giá tổng số cổng của thiết bị (ifNumber) là READ_ONLY thì khổng thể đổi.
-    MIB (Management Information Base) là một cấu trúc dữ liệu gồm các object được quản lý, được dùng cho việc quản lý các thiết bị chạy trên nền TCP/IP. MIB được  thể  hiện  thành 1 tập tin (MIB file) và có thể  biểu diễn thành 1 cây (MIB tree). Muốn hiểu được một OID thì cần có tập tin MIB mô tả OID đó. Các thiết bị được quản lý bằng SNMP chỉ khi các ứng dụng SNMP manager và SNMP agent cùng hỗ trợ một MIB. Các ứng dụng này cũng có thể hỗ trợ cùng lúc nhiều MIB.

Phương thức hoạt động của SNMP

SNMPv2 hoạt động dựa trên 7 loại thông điệp
SNMPv2 PDU
Mô tả tác dụng
GetRequest
Manager gửi GetRequest (chứa một hoặc nhiều OID) đến agent để lấy một hoặc nhiều giá trị của object trong MIB.
GetNextRequest
Manager gửi GetNextRequest đến agent dùng để lấy giá trị của object nằm kế tiếp object được chỉ ra trong MIB.
GetBulkRequest
Manager gửi GetBulkRequest đến agent để lấy nhiều giá trị của nhiều object.
InformRequest
Manager gửi InformRequest đến manager nhằm trao đổi thông tin với nhau.
SetRequest
Manager gửi SetRequest đến agent để thiết lập giá trị cho oject dựa vào OID. Chỉ những oject có quyền READ_WRITE mới có thể thiết lập giá trị được.
SetResponse
Sau khi Agent nhận được các thông điệp GetRequest, GetNextRequest hay SetRequest thì nó sẽ gửi GetResponse để trả lời. Trong GetResponse có chứa OID của object được yêu cầu và giá trị của object đó.
Trap
Trap được agent tự động gửi đến manager để thông báo trong agent có sự kiện hay biến cố xảy ra. Ví dụ: khi có một cổng bị tắt, người dùng đăng nhập thất bại. Việc gửi hay không gửi khi biến cố xảy ra do hãng sản xuất thiết bị agent quy định.
SNMP request/reponse dùng để quản lý còn SNMP trap dùng để cảnh báo. Nguồn gửi trap được gọi là Trap Sender và nơi nhận trap được gọi là Trap Receiver. Mỗi trap sender có thể gửi nhiều trap đến nhiều trap receiver cùng lúc.
Trap gồm 2 loại chính: generic trap (được qui định trong các chuẩn SNMP) và specific trap (do hãng sản xuất tự định nghĩa). Có thể phân biệt loại trap dựa vào mã số là một số nguyên chứa trong gói tin trap. Theo SNMPv1, generic trap có 7 loại sau: coldStart(0), warmStart(1), linkDown(2), linkUp(3), authenticationFailure(4), egpNeighborloss(5), enterpriseSpecific(6).


Hình 1. Mô tả phương thức hoạt động của SNMPv2

Cấu trúc gói tin SNMP

Để hiểu rõ hơn về phương thức hoạt động của SNMP cần nắm được cấu trúc gói tin SNMP qua hình 2

Hình 2. Cấu trúc gói tin SNMP
Theo cấu trúc trên:
- Get/set header:
Ø  Request id: ID của request được manager gửi đến cho agent.
Ø  Error status: có các giá trị noError(0), tooBig(1), noSuchName(2), badValue(3), readOnly(4), genErr(5). Giá trị noError(0) là gửi thành công.
Ø  Error index: số thứ tự của OID có lỗi (nếu có).
- Variables to get/set: chứa danh sách các cặp OID/value cần lấy thông tin.
- Trap header:
Ø  Enterprise: nhận dạng thiết bị gửi trap (nhận dạng chi tiết hãng sản xuất, chủng loại, model).
Ø  Agent address: địa chỉ IP của nguồn gửi trap.
Ø  Trap type hay generic trap: kiểu giá trị của loại trap.
Ø  Specific trap: kiểu giá trị của trap do người dùng định nghĩa.
Ø  Time stamp: thời gian từ lúc thiết bị khởi động đến khi gửi gói tin trap, tính bằng centi giây.
Ø  Trap information hay variable-bidings: các cặp OID/value của các object có liên quan đến trap.
Cấu trúc gói tin SNMP GetRequest:


Hình 3. Gói tin SNMP-GetRequest
Các trường của gói tin SNMP-GetRequest trên phần mềmWireshark trong hình 9.10:
-          Version: phiên bản là 1
-          Community: chuổi xác thực manager gửi agent là “private”. Chuổi này có 3 dạng: read community (chứa trong GetRequest/GetNextRequest PDU), write community (chứa trong SetRequest PDU) và trap community (chứa trong Trap PDU).
-          request – id: id của request là 13438.
-          error-status: có giá trị 0 – không có lỗi, manager gửi GetRequest thành công.
-          error-index: có giá trị 0 – không có OID bị lỗi.
-          variable – bindings: 1 item tương đương 1 cặp OID – value.
-          OID = 1.3.6.1.2.1.1.2.0 (tên object là sysObjectID). Value của request ban đầu không có giá trị.
Cấu trúcgói tin SNMP GetReponse:

Hình 4 Gói tin SNMP GetReponse
Các trường của gói tin SNMP-GetReponsetrên phần mềmWireshark trong hình 9.11:
-          Version: phiên bản là 1.
-          Community: chuổi xác thực giữa manager và agent là “private”.
-          request – id: id của request là 2731.
-          error-status: có giá trị 0 nghĩa là không có lỗi, gữi trả lời về cho request thành công.
-          error-index: có giá trị 0 nghĩa là không có OID bị lỗi.

-          variable-bindings: 1 cặp OID/value. OID bằng 1.3.6.1.2.1.1.2.0 và value bằng 1.3.6.1.4.1.9.1.222của agent gửi về cho manager.

Thursday, June 19, 2014

Tổng Quan
     File Transfer Protocol (FTP) là giao thức truyền tập tin dùng để trao đổi tâp tin qua mạng internet. Được định nghĩa trong RFC 959. Hoạt động FTP dựa theo mô hình client-server, sử dụng cổng 20, 21 và chỉ chạy trên nền TCP. Mục đích FTP là để chia sẻ tập tin, giúp người sử dụng dễ dàng truy cập vào các hệ thống lưu trữ khác nhau. Truyền dữ liệu một cách đáng tin cậy và đạt hiệu quả cao.

Hình1. Hệ thống truyền tập tin FTP
Tập lệnh và hồi đáp
Các lệnh thông dụng dung để gửi văn bản ASCII trên kênh điều khiển.
-          USER username: được sử dụng đểgửinhận dạng người dùngđến server
-          PASS password: được sử dụng đểgửimật khẩu người dùngđến server.
-          LIST: trả về tất cả các tập tin trong thư mục hiện hành.
-          RETR filename: sử dụng để lấy(nghĩa có được) một tập tin từthư mục hiện hành.
-          STOR filename: được sử dụng đểlưu trữmột tập tin vàothư mục hiện hànhcủa server từ xa.
Mã trả về thông dụng:
-          125 Data connection already open; transfer starting ( 125 Dữ liệu đã sẵn sàng kết nối, truyền tập tin bắt đầu).
-           200 Command okay (Lệnh OK).
-          331 Username OK, password required (331 Tên người dùng OK, yêu cầu mật khẩu).
-          230 Logged in (230 Đã đăng nhập).
-          221 Goodbye (221 thoát khỏi kết nối).
-          425 Can't open data connection (425 Không thể mở kết nối dữ liệu).
-          452 Error writing file (452 ghi tập tin bị lỗi).
Hoạt động kết nối dữ liệu
Hoạt động kết nối dữ liệu của giao thức FTP, qua các bước như hình 2

Hình 2. Kết nối dữ liệu
-    Bước 1: Client kết nối điều khiển FTP server tại cổng 21, sử dụng giao thức TCP.
-    Bước 2: Client sẽ gửi username và password lên server để chứng thực, nếu chứng thực không thành công thì server yêu cầu client nhập lại username và password, nếu thành công thì cấp phép cho client truy cập.
-    Bước 3: Client được cấp phép thông qua kết nối điều khiển.
-    Bước 4: Client xem thư mục ở xa bằng việc gửi các lệnh thông qua kết nối điều khiển.
-    Bước 6: Khi server nhận lệnh truyền tập tin, server mở kết nối TCP thứ 2 với cổng 20 (truyền tập tin) đến client.
-    Bước 7: Sau khi truyền 1 tập tin, server đóng kết nối dữ liệu.
-    Bước 8: Server mở kết nối dữ liệu TCP khác để truyền tập tin khác.
-    Bước 9: Server giữ lại trạng thái thư mục hiện hành, xác thực trước đó.
Gói tin FTP

Hình 3. Gói tin FTP

-          Wireshark trên thể hiện các mã trả về:
  •        331: password required
  •        230 logged in
  •        221 goodbye.

-          User đăng nhập là: aaa.
-          Password yêu cầu: aaa.
-          Địa chỉ IP nguồn: 10.0.0.80.
-          Địa chỉ IP đích: 192.168.5.80.
-          Cho biết cổng FTP: 21.

-          Sử dụng phương thức TCP.

Sunday, June 15, 2014

Tổng quan
Hypertext Transfer Protocol (HTTP) là giao thức thuộc lớp ứng dụng web. Sử dụng kết nối TCP cổng 80. HTTP được định nghĩa trong RFC 1945 (HTTP 1.0) và RFC 2616 (HTTP 1.1).
HTTP hoạt động dựa trên mô hình client-server. Trình duyệt client thực hiện yêu cầu, nhận và hiển thị đối tượng web (gồm dữ liệu HTML, hình ảnh JPEG, Java applet, video, âm thanh, …). Trong khi, web server sẽ gửi trả lời khi nhận được yêu cầu từ client.

Hình 1. Mô hình client-server

 Kết nối HTTP

Có hai loại kết nối HTTP là kết nối không bền vững và kết nối bền vững.
Kết nối không bền vững: sau khi, server gửi đi một đối tượng thì kết nối TCP sẽ được đóng. Như vậy, mỗi kết nối TCP chỉ truyền được duy nhất một yêu cầu từ client và nhận lại một thông điệp trả lời từ server.
Kết nối bền vững: server sẽ duy trì kết nối TCP cho việc gửi nhiều đối tượng. Như vậy, sẽ có nhiều yêu cầu từ client được gửi đến server trên cùng một kết nối. Thông thường kết nối TCP này sẽ được đóng lại trong một khoảng thời gian định trước.
Quy trình hoạt động của kết nối HTTP không bền vững:

Hình 2. Quy trình hoạt động kết nối HTTP không bền vững
Hình 2 thể hiện chi tiết các bước hoạt động trong kết  nối HTTP không bền vững giữa HTTP client (Firefox, Chrome,…) và HTTP server (ví dụ www.hutech.edu.vn):
-      Bước 1: client khởi tạo kết nối TCP bằng việc gửi yêu cầu đến server. Server nhận được yêu cầu và chấp nhận kết nối bằng việc gửi trả lời về cho client. Nếu sau khoảng thời gian RTT mà không nhận được trả lời từ phía server thì client sẽ gửi lại yêu cầu.
-      Bước 2: sau khi kết nối được thiết lập, client sẽ gửi thông điệp yêu cầu chứa tên đường dẫn của các đối tượng ( ví dụ: www.hutech.edu.vn/homepage/index.php) đến server. Server nhận được thông điệp yêu cầu và tiến hành lấy ra các đối tượng được yêu cầu. Sau đó, các đối tượng được đóng gói thành thông điệp trả lời và gửi đến client.
-      Bước 3: server đóng kết nối TCP (Lưu ý: server chỉ đóng kết nối TCP khi chắc chắn rằng client nhận được thông điệp trả lời)

-      Bước 4: client nhận thông điệp trả lời chứa tập tin HTML và hiển thị các đối tượng.
-      Bước 5: lặp lại các bước từ 1-4 cho các đối tượng khác.

* Lưu ý: Trong kết nối HTTP không bền vững cần có một RTT (Round Trip Time) để khởi tạo kết nối TCP. Ngoài ra, cần có một RTT cho thông điệp HTTP yêu cầu và một vài byte đầu tiên của thông điệp HTTP  trả lời được trả về.Tổng thời gian truyền tập tin = 2RTT+ thời gian truyền.
Thời gian đáp ứng RTT làthời gian gửi một gói tin cơ bản từ client đến server rồi quay ngược lại. RTTbao gồmđộ trễtruyền gói tin hàng đợi, độ trễtrongcác bộ định tuyếntrung gian, chuyển mạch vàxử lýgói tin.
Qui trình hoạt động của kết nối HTTP bền vững:
-    Kết nối bền vững không có pipelining:
  •     Client phát ra yêu cầu mới, chỉ khi đáp ứng trước đó đã nhận xong.
  •     RTT cho mỗi đối tượng tham chiếu.

-       Kết nối bền vững có pipelining:
  •       Mặc định có trong HTTP/1.1.
  •     Client gửi yêu cầu ngay sau khi gặp một đối tượng tham chiếu.
  •       Ít nhất 1 RTT cho tất cả đối tượng tham chiếu.

Thông điệp HTTP

Thông điệp HTTP được viết bằng văn bản ASCII thông thường, do vậy người dùng có thể đọc được. Có 2 dạng thông điệp HTTP: thông điệp HTTP yêu cầu và thông điệp HTTP trả lời.
Thông điệp HTTP yêu cầu:

Hình 3. Cấu trúc chung của thông điệp HTTP yêu cầu

-    Request line: dòng đầu tiên của thông điệp HTTP yêu cầu. Request line bao gồm có 3 trường như: cách thức (method), URL, phiên bản (version). Trường cách thức (method) có thể chứa các giá trị khác nhau, bao gồm GET, POST, HEAD. Phần lớn các thông điệp HTTP yêu cầu điều sử dụng phương thức GET. Các phương thức GET được sử dụng khi trình duyệt yêu cầu một đối tượng được xác định trong trường URL. Phương thức POST là những phương thức mà HTTP client sử dụng khi người dùng điền vào một biểu mẫu (form) nào đó, chẳng hạn như người dung muốn nhập một từ khóa nào đó vào google.com đề tìm kiếm thông tin. Nếu phương thức là POST thì Entity body của thông điệp yêu cầu sẽ chứa thông tin mà người dùng đã điền. Phương thức HEAD tương tự như GET, nhưng Khi server nhận được yêu cầu bằng phương thức HEAD, nó sẽ trả về thông điệp HTTP và không chứa đối tượng được yêu cầu.
-    Header line: là các dòng tiếp theo.
-    Sp: bao gồm các giá trị về khoảng trống.
-    Blank line: bao gồm các giá trị điều khiển trở về đầu dòng, xuống hang (cr,lf).
-    Entity Body (nếu có): là phần thân của thông điệp HTTP yêu cầu.
Sau đây là một ví dụ về thông điệp HTTP yêu cầu:

Hình 4. Ví dụ về thông điệp HTTP yêu cầu
Hình 9.4  giải thích và làm rõ được các thông số sau:
-      GET: Trong ví dụ này, trình duyệt đang yêu cầu các đối tượng /somedir/page.html.
-      Host www.hutech.edu.vn: chỉ địnhcác servermà trên đó cácđối tượng được lưu trữ.
-      Connection: close trình duyệt báo cho máy chủ là nó không muốn sử dụng kết nối liên tục và muốn máy chủ đóng kết nối sau khi gửi các đối tượng được yêu cầu.
-      User-agent : chỉ thị loại trình duyệt gửi yêu cầu đến server, ở đây dùng trình duyệt Mozilla/5.0.
-      Accept-language (fr): chỉ thị người dùng muốn nhận được phiên bản tiếng Pháp của đối tượng chứa trên server, nếu không server sẽ gửi phiên bản mặc định của đối tượng.
Thông điệp HTTP trả lời
Thông điệp HTTP trả lời có ba phần: dòng trạng thái (status line), dòng tiêu đề (header lines), thân thông điệp (entity body). Thân (Body) là thành phần chính của thông điệp. Status line có 3 trường: phiên bản của giao thức (version), mã trạng thái (status code), trạng thái tương ứng (phrase) và các giá trị khoảng trống (sp), điều khiển trở về đầu dòng, xuống hàng (cr,lf).

Hình 5: Cấu trúc chung của một thông điệpHTTP trả lời.
Sau đây là ví dụ về thông điệp HTTP trả lời

Hình 6. Ví dụ thông điệp HTTP trả lời
Trong ví dụ hình 6, cho thấy:
-         Status line thể hiện server đang sử dụng HTTP/1.1.
-          Header line bao gồm:
  •      Connection: close báo cho client rằng server sẽ đóng kết kết TCP sau khi gửi thông điệp.
  •      Date: cho biết thời gian mà thông điệp HTTP trả lời được tạo và gửi bởi server. Đó là thời gian mà server lấy đối tượng từ hệ thống tập tin của nó, chèn vào thông điệp và gửi cho client.
  •      Server: cho biết đây là Apache Web server, tương tự như User-agent trong thông điệp yêu cầu.
  •      Last-Modified: cho biết thời gian đối tượng được tạo hay sửa đổi lần cuối.
  • Content-Length: cho biết số bytes của đối tượng được gửi.
  • Content-Type: cho biết đối tượng trong phần entity body là HTML.

-    Entity body chứa đối tượng yêu trong trường hợp ví dụ trong hình 9.6 được đại diện bởi các data data data data……….
- Mã trạng thái trả lời:
Các giá trị chữ số đầu tiên của mã trang thái (status code) có 5 giá trị:
  •       1xx_Thông tin: khôngđược sử dụng, chỉ dự phòngtrong tương lai.
  •       2xx_Thành công: hành độngđã nhận đượcthành công và đươc chấp nhận.                                                                                                        
  •       3xx_Chuyển hướng: hành động tiếp theo phải được thực hiện để hoàn tất yêu cầu.
  •       4xx_Clien lỗi: chứa cú pháp sai có thể không thực hiện được.
  •       5xx_ Server lỗi: các máy server không thực hiện một yêu cầu rõ ràng đối với các yêu cầu hợp lệ.

Một vài mã trạng thái thông dụng thường gặp:
  •      200 OK: Yêu cầu thành công
  •      301 Moved Permanently: đối tượng yêu cầu đã được chuyển.
  •      400 Bad Request: server không hiểu được thông điệp yêu cầu.
  •      404 Not Found: đối tượng được yêu cầu không có trong server.
  •      505 HTTP Version Not Supported: server không hỗ trợ phiên bản giao thức HTTP này.

 Gói tin HTTP


Hình 7. Gói tin HTTP
Hình wireshark trên cho thấyHTTP đang sử dụng phiên bản HTTP 1.1 dùng phương thức GET.
-          Có các mã trạng thái hồi đáp như:
  •      200 OK
  •      404 Not Found
  •      Địa chỉ IP nguồn: 10.0.0.36
  •      Địa chỉ IP đích: 192.168.3.35

-          Cổng HTTP: 80
-          Sử dụng phương thức TCP
-    Trang web đăng nhập là (host) http://192.168.3.35 không sử dụng DNS để phân giải địa chỉ IP 192.168.3.35.
-    User-agent: loại trình duyệt gửi yêu cầu đến server ở đây dùng trình duyệt Mozilla/5.0.

-    Accept-language: sử dụng ngôn ngữ tiếng anh (en-us).