CN_1_5_Traceroute



1.5 Traceroute

Quan sát hình vẽ sau:

Hình vẽ trên thể hiện một hệ thống gồm: hai host được kết nối với nhau qua hệ thống mạng của ISP, trên các host có cài đặt các ứng dụng mạng (app), các ứng dụng mạng sử dụng interface (socket API) để trao đổi thông tin với hệ thống mạng.
Socket API sẽ định nghĩa và cung cấp cách thức để app có thể trao đổi thông tin với hệ thống mạng, để cuối cùng, app trên máy tính này có thể “nói chuyện” được với app trên máy tính khác.
Nhờ vào socket API, ứng dụng chỉ làm việc trực tiếp với host (hay local host), mà không cần quan tâm tới tổ chức thực sự ở bên dưới của hệ thống mạng. Cấu trúc của hệ thống mạng đã bị che dấu. Chúng ta không thể biết được: gói tin đã được truyền qua bao nhiêu router trước khi dến đích? ISP là gì? Khoảng cách giữa hai host?
Traceroute là một công cụ giúp thăm dò hệ thống mạng và quan sát một số cấu trúc chung của mạng.
Traceroute được sử dụng rộng rãi trong việc phát hiện và khắc phục sự cố mạng. Nó chạy được trên nhiều hệ điều hành. Trên hệ thống Unix, Linux, có tên là traceroute; trên hệ thống Windows có tên là tracert. Tracert được Van Jacobson phát triển vào năm 1987.
Traceroute làm việc dựa trên giao thức IP.
Quan sát hình vẽ sau:

Traceroute thực hiện dò từng chặng để tìm được đường đi của gói tin từ Local Host tới Remote Host.
Đầu tiên, Local Host sẽ gửi một số (thường là 3) gói tin tới Remote Host, tuy nhiên trường TTL được thiết lập giá trị là 1, ý là: chỉ cho phép gói tin đi được một chặng (router), rồi nhận hồi báo của chặng đầu tiên. Tiếp theo, Local Host sẽ gửi một số gói tin nữa tới Remote Host, trường TTL được thiết lập giá trị là 2, ý là: chỉ cho phép gói tin đi được 2 chặng (router), rồi nhận hồi báo của chặng thứ 2. Local Host sẽ thực hiện như vậy cho tới khi nào nhận được hồi báo từ Remote Host.
Từ các thông tin hồi báo của mỗi chặng, chúng ta sẽ biết được gói tin đã đi qua bao nhiêu router trước khi đến được đích, đó là các router nào, thứ tự của các router.
Quan sát ví dụ sau, thực hiện tracert tới www.dlu.edu.vn
C:\>tracert www.dlu.edu.vn
Tracing route to www.dlu.edu.vn [203.113.164.162]
over a maximum of 30 hops:
  1     4 ms     3 ms     3 ms  192.168.1.1
  2    14 ms    27 ms    11 ms  localhost [123.28.124.1]
  3    48 ms    46 ms    46 ms  vdc.vn [123.29.2.141]
  4     *        *        *     Request timed out.
  5    56 ms    53 ms    58 ms  localhost [113.171.7.222]
  6   115 ms   123 ms   124 ms  203.113.187.97
  7   138 ms   133 ms   144 ms  27.68.248.141
  8    37 ms    35 ms    37 ms  27.68.255.22
  9    34 ms    58 ms    38 ms  27.68.244.162
 10   156 ms    83 ms    71 ms  27.68.246.70
 11    85 ms    84 ms    89 ms  203.113.164.162
Trace complete.
Số thứ tự ở phía trái của mỗi hàng là số chặng.
Thực tế, mỗi chặng sẽ được gửi 3 gói tin, 3 cột kết tiếp là thời gian nhận được phản hồi tương ứng của 3 gói tin. Nếu quá thời gian nhận phản hồi mặc định, dấu * sẽ được hiển thị.
Phía phải là tên hoặc địa chỉ IP của mỗi chặng. Thực hiện truy vấn tên hoặc IP này trên trang web www.domaintools.com (mục Whois Lookup) để biết thêm thông tin. Ví dụ truy vấn các địa chỉ IP ở lệnh tracert vừa thực hiện:
1. Modem ADSL – 192.168.1.1
2. VNPT - 123.28.124.1
3. VNPT - 123.29.2.141
4. không xác định
5.  VNPT - 113.171.7.222
6. Vietel - 203.113.187.97
7. Vietel - 27.68.248.141
8. Vietel - 27.68.255.22
9. Vietel - 27.68.244.162
10. Vietel - 27.68.246.70
11. www.dlu.edu.vn 203.113.164.162 (thuộc dải IP của Vietel)

Tham khảo:

[1] Andrew S. Tanenbaum, David J. Wetherall, Computer Networks 5th edition, 2011
[2] David J. Wetherall, Introduction to Computer Networks, www.coursera.org, 2013
--------------
2013/7/29

CN_1_4_Socket



1.4 Socket API

Socket API là bộ thư viện lập trình ứng dụng, được sử dụng nhiều nhất để viết các ứng dụng trên mạng hiện nay.

Giao tiếp giữa ứng dụng và mạng (network-application)

Quan sát hình vẽ sau:

Hình vẽ trên thể hiện một hệ thống gồm: hai host được kết nối với nhau qua hệ thống mạng của ISP, trên các host có cài đặt các ứng dụng mạng (app), các ứng dụng mạng sử dụng thành phần giao tiếp (interface) để trao đổi thông tin với hệ thống mạng.
Thành phần giao tiếp sẽ định nghĩa và cung cấp cách thức để app có thể trao đổi thông tin với hệ thống mạng, để cuối cùng, app trên máy tính này có thể “nói chuyện” được với app trên máy tính khác.
Nhờ vào thành phần giao tiếp, ứng dụng chỉ làm việc trực tiếp với host (hay local host), mà không cần quan tâm tới tổ chức thực sự ở bên dưới của hệ thống mạng (cơ chế này giúp che dấu sự phức tạp của hệ thống). Ngược lại, hệ thống mạng cũng không quan tâm tới ứng dụng gì đang chạy ở host mà chỉ quan tâm tới việc chuyển các gói tin đi tới đúng đích cần tới.

Ứng dụng client-server


Hình vẽ trên minh họa ứng dụng client-server.
Thông qua hệ thống mạng, chương trình client (ứng dụng trên host client) sẽ gửi yêu cầu (request) tới chương trình server (ứng dụng trên host server). Khi nhận được yêu cầu, chương trình server sẽ đáp ứng lại (reply). Đây là một nguyên lý vận hành cơ bản của rất nhiều các ứng dụng trên mạng. Ví dụ:
  • Dịch vụ FTP (send name, get file): client gửi tên tập tin cần lấy, server sẽ gửi về nội dung của tập tin.
  • Duyệt web (send URL, get page): client gửi địa chỉ trang web, server sẽ gửi về nội dung của trang web.
  • Ứng dụng ping (send message, get message): client gửi gói tin tới server, server sẽ gửi lại gói tin phản hồi.
Socket API cung cấp môi trường lập trình, giúp người lập trình thuận lợi hơn trong việc xây dựng các ứng dụng mạng. Tất cả các hệ điều hành và ngôn ngữ lập trình quan trọng hiện nay đều có hỗ trợ socket API. Khởi nguồn, socket API được nhúng vào hệ điều hành Berkeley (một phiên bản của UNIX) năm 1983.
Socket API cung cấp hai loại dịch vụ mạng: streams và datagrams
  • Streams: truyền có đảm bảo các luồng byte dữ liệu (reliably).
  • Datagrams: truyền không đảm bảo các gói dữ liệu rời rạc.
Quan sát ví dụ về socket API.


Ở hình trên, ứng dụng mạng app được cài đặt trên máy host, app sử dụng cấu trúc dữ liệu socket để gắn kết app với hệ thống mạng. Mỗi socket sử dụng một số để phân biệt, gọi là port number, đây cũng là một dạng địa chỉ. Socket bên trái có port number là 2 và bên phải là 2. Nhờ vào địa chỉ này, cho phép chạy nhiều ứng dụng cùng lúc trên một host.
Bảng sau cung cấp một số lời gọi API quan trọng của socket.
Tên
Ý nghĩa
SOCKET
Tạo một socket mới.
BIND
Gắn kết địa chỉ cục bộ của host với socket.
LISTEN
Chuẩn bị để chấp nhận yêu cầu kết nối
ACCEPT
Sẵn sàng chấp nhận kết nối.
CONNECT
Chủ động thiết lập một kết nối.
SEND
Gửi byte dữ liệu tới ứng dụng khác trên mạng thông qua kết nối.
RECEIVE
Nhận byte dữ liệu từ ứng dụng khác trên mạng thông qua kết nối.
CLOSE
Đóng kết nối.
Quá trình sử dụng socket được minh họa trong hình sau:

Hình trên minh họa quá trình trao đổi thông tin giữa hai máy tính trên mạng (client, và server) theo thời gian. Chiều mũi tên ngang thể hiện hướng truyền của dữ liệu, nét đứt thể hiện thông tin điều khiển, nét liền là truyền dữ liệu thực sự.
Đầu tiên, cần tạo một kết nối giữa client và server (connect), sau đó client có thể gửi yêu cầu tới server (request), khi nhận được yêu cầu từ client, server sẽ đáp ứng lại yêu cầu của client (reply), cuối cùng sau khi hoàn tất việc truyền dữ liệu, hai bên sẽ đóng kết nối (disconnect).
Số thứ tự (từ 1 đến 10) thể hiện thứ tự thực hiện các lời gọi hàm.
  • Lời gọi hàm đầu tiên được thực hiện ở cả client và server là socket, để thiết lập một socket(1) mới cho quá trình giao tiếp.
  • Bind(2): giúp đảm bảo khi client kết nối tới server, client sẽ kết nối tới một cổng cụ thể trên server cụ thể. Đây là quá trình thiết lập địa chỉ cho giao tiếp tại đầu cuối.
  • Sau đó là listen(3) và accept(4), giúp socket sẵn  sàng chấp nhận yêu cầu kết nối từ phía client (giống như ngồi sẵn bên điện thoại cố định để chờ cuộc gọi tới).
  • Phía client gửi yêu cầu kết nối tới server, connect(5). (bấm số để thực hiện một cuộc gọi điện thoại)
  • Phía server tiếp nhận yêu cầu kết nối, recv(6) (nhấc máy điện thoại lên nghe, sẵn sàng nhận thông tin)
  • Khi kết nối đã được thiết lập, quá trình gửi yêu cầu được thực hiện từ phía client, send(7) request.
  • Server đáp ứng lại yêu cầu của phía client, send(9) reply.
  • Quá trình nhận kết quả được thực hiện tại phía client, recv(8).
  • Sau khi hoàn tất quá trình giao tiếp, hai bên sẽ đóng kết nối, close(10).
Chú ý: bước 4 là accept, trong khi connect lại là bước 5, nghĩa là chấp nhận kết nối trước khi có yêu cầu kết nối? Thực tế, accept là một khối lệnh, accept thông báo cho hệ thống mạng ở vào trạng thái đợi và chấp nhận một kết nối (giống như thông báo cho một người tới ngồi gần điện thoại cố định để chờ có cuộc gọi tới).

Đoạn mã lập trình phía client

socket()                     //tạo socket
getaddrinfo()              //tên server, cổng kết nối
                                 //www.example.com:80
                                 //getaddrinfo cũng thực hiện việc chuyển đổi địa chỉ dạng
                                 www.example.com sang địa chỉ IP.
connect()                   //khối lệnh kết nối tới server
send()                        //gửi yêu cầu
recv()                        //khối lệnh đợi trả lời từ phía server
                             //thực hiện các thao tác trên dữ liệu nhận được từ server
close()                       //đóng kết nối

Đoạn mã lập trình phía server

socket()                     //tạo socket
getaddrinfo()              //thực hiện việc chuyển đổi qua lại giữa các loại địa chỉ
bind()                        //gắn kết port với socket
listen()                       //chuẩn bị để chấp nhận yêu cầu kết nối
------------------//vòng lặp
{accept()                   //đợi kết nối [khối lệnh]
...
recv()                        //đợi yêu cầu từ phía client
                            
send()                        //gửi lại dữ liệu theo yêu cầu từ phía client
---------------------//hết lặp
close()                       //đóng kết nối

Tham khảo:

[1] Andrew S. Tanenbaum, David J. Wetherall, Computer Networks 5th edition, 2011
[2] David J. Wetherall, Introduction to Computer Networks, www.coursera.org, 2013
----------------------
2013/7/17

CN_1_3_Các thành phần của hệ thống mạng



1.3 Các thành phần của hệ thống mạng

Các thành phần cơ bản của một hệ thống mạng được minh họa trong hình dưới đây:


  • Hệ thống mạng là sự kết nối của nhiều nút mạng (gọi là node) lại với nhau.
  • Các nút mạng được kết nối với nhau bằng đường truyền có dây hoặc không dây (gọi là link).
  • Một số nút trên mạng có thể được cài đặt các ứng dụng để người dùng sử dụng (gọi là app), ví dụ: trình duyệt web, email, ứng dụng quản lý trực tuyến, …v.v.
Trong thực tế, các nút trên mạng được chia thành hai loại theo mục đích sử dụng:
  • Truy cập mạng: là các nút cuối (trạm cuối) được cài đặt các ứng dụng, các nút này được gọi là host.
  • Chuyển tiếp thông tin: có chức năng chuyển tiếp thông tin giữa các nút trong mạng, thực hiện chức năng kết nối. Các nút này được gọi là router.
Khi đó, các thành phần của hệ thống mạng được minh họa cụ thể hơn ở hình sau.

Bảng sau liệt kê chi tiết các thành phần của một hệ thống mạng.
Tên
Chức năng
Ví dụ
Application, hoặc app, user
Các ứng dụng mạng của người dùng
Skype, Amazon, iTunes
Host, hoặc end-system, edge-device, node, source, sink.
Nơi cài đặt các ứng dụng mạng
Laptop, desktop, mobile
Router, hoặc switch, node, hub, intermediate system
Chuyển tiếp thông tin giữa các nút mạng
Access point, modem ADSL
Link hoặc channel
Đường kết nối giữa các  nút mạng
Kết nối có dây hoặc không dây
Các loại kết nối (link type)
  • Full-duplex (song công): loại kết nối cho phép truyền dữ liệu hai chiều cùng lúc.
  • Half-duplex (bán song công): loại kết nối cho phép truyền dữ liệu hai chiều, nhưng không truyền được cùng lúc, mà tại một thời điểm chỉ truyền được một chiều. Môi trường truyền không dây thuộc kiểu kết nối này, thông điệp sẽ được truyền từ nút A sang nút B, và sau đó sẽ được truyền từ nút B sang nút A, chứ không thể truyền cùng lúc hai chiều với cùng tần số.
  • Simplex (đơn công): loại kết nối cho phép truyền một chiều duy nhất.
Hình sau minh họa kí hiệu các loại kết nối.

Kết nối không dây (wireless link)
Trong môi trường không dây, thông điệp được gửi đi dưới dạng broadcast. Khi một thông điệp được gửi đi từ một nút, tất cả các nút trong phạm vi nhất định đều nhận được thông điệp.

Hình vẽ trên gồm một AP, bốn laptop.
Khi AP gửi thông điệp, thông điệp sẽ được broadcast và cả bốn laptop đều nhận được. Tương tự, khi một laptop gửi lại thông điệp cho AP, thông điệp cũng được broadcast, khi đó, AP và ba laptop còn lại cũng nhận được. Quá trình này sẽ tạo ra một mạng lưới các kết nối rất phức tạp, bao gồm nhiều mạng (có thể lên tới 11 mạng).
Để thể hiện tất cả các kết nối của hệ thống mạng không dây sẽ rất phức tạp. Do vậy, ở mức logic, chỉ cần thể hiện kết nối giữa AP với các thiết bị nhận tín hiệu. Như hình dưới đây.

Trong mạng không dây, do tính chất broadcast khi gửi tín hiệu, nên khi hai thiết bị cùng gửi tín hiệu sẽ có hiện tượng giao thoa (interfere), hiện tượng này làm ảnh hưởng đến việc gửi tín hiệu (có thể không gửi được). Giải pháp cho vấn đề này sẽ được trình bày ở mức độ sâu hơn trong lĩnh vực mạng không dây.
Các loại mạng
Các hệ thống mạng rất đa dạng, từ những mạng đơn giản như hệ thống kết nối giữa hai máy tính, đến những mạng phức tạp như Internet.
Bảng dưới đây liệt kê một số loại mạng:
Tên
Mô tả
WiFi (802.11)
Mạng không dây, phổ biến ở các nơi công cộng, quán café, trường học, công ty…v.v.
Enterprise/Ethernet
Hệ thống mạng của một công ty, tổ chức…v.v.
ISP (Internet Service Provider)
Hệ thống mạng của các nhà cung cấp dịch vụ Internet.
Cable/ DSL
Hai trong nhiều công nghệ mạng được sử dụng để cung cấp dịch vụ Internet tới người sử dụng.
Mobile phone / cellular (2G, 3G, 4G)
Hệ thống mạng điện thoại di động
Bluetooth
Hệ thống mạng trong phạm vi nhỏ, như kết nối tai nghe (headset) không dây với điện thoại di động.
Telephone
Mạng điện thoại truyền thống.
Satellite
Mạng vệ tinh, ví dụ truyền thông tin từ vệ tinh tới các thiết bị GPS.
Phân loại mạng dựa trên phạm vi
Phạm vi
Loại
Ví dụ
Vùng lân cận
PAN (Personal Area Network)
Bluetooth
Tòa nhà
LAN (Local Area Network)
WiFi, Ethernet
Thành phố
MAN (Metropolitan Area Network)
Cable, DSL
Quốc gia
WAN (Wide Area Network)
Các ISP
Toàn cầu
Internet (mạng của các mạng)
Internet
Liên mạng (internetworks)   
Một liên mạng (internetworks thường được viết tắt là internet) là một hệ thống kết nối từ hai mạng trở lên. Chú ý: cần phân biệt giữa Internet (chữ “I” được viết hoa) và internet (chữ “i” viết thường), internet là khái niệm liên mạng, Internet là liên mạng lớn nhất đang tồn tại.
Xác định ranh giới mạng

Ở hình trên, mạng (Network) bao gồm các thiết bị (host, router), kết nối (link). Các ứng dụng (app) không được tính là một thành phần của mạng.
Mạng của nhà cung cấp dịch vụ (ISP) gồm router, link. Host và app không thuộc ISP. Người sử dụng ít khi quan tâm tới mạng của ISP được tổ chức và vận hành như thế nào, họ chỉ cần kết nối được với ISP để nhận các dịch vụ từ ISP, vì vậy, mạng của ISP thường được kí hiệu bằng biểu tượng đám mây.
Trong hệ thống có hai bộ phận giao tiếp chủ yếu:
  • Bộ phận giao tiếp giữa các ứng dụng với hệ thống mạng (Ngang): định nghĩa cách thức để ứng dụng có thể sử dụng được hệ thống mạng. Ví dụ: socket
  • Bộ phận giao tiếp giữa các thành phần mạng với nhau (Dọc): định nghĩa cách thức để truyền các gói dữ liệu giữa các thành phần mạng, ví dụ: host-host, host-router, router-router, network-network…v.v.

Câu hỏi tìm hiểu thêm

  1. Giải quyết vấn đề giao thoa trong mạng không dây?

Tham khảo:

[1] Andrew S. Tanenbaum, David J. Wetherall, Computer Networks 5th edition, 2011
[2] David J. Wetherall, Introduction to Computer Networks, www.coursera.org, 2013
-------------------------
2013/7/12