--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

CN_1_7_Các mô hình tham chiếu



1.7 Các mô hình tham chiếu (reference models)

Như đã biết, hệ thống mạng được xây dựng dựa trên kiến trúc gồm nhiều tầng. Trong đó, mỗi tầng có thể gồm nhiều giao thức.
Muốn truyền dữ liệu từ ứng dụng trên máy này tới ứng dụng trên máy khác, dữ liệu cần phải đi qua các tầng từ cao đến thấp, thông qua quá trình đóng gói.
Mô hình tham chiếu là cơ sở để xây dựng các giao thức.
Trong hệ thống mạng, mỗi tầng sẽ có một chức năng cụ thể, và các giao thức sẽ được xây dựng để thực hiện các chức năng này.
Mô hình tham chiếu sẽ đưa ra chức năng cụ thể của mỗi tầng.
Có hai mô hình tham chiếu phổ biến là: mô hình OSI và mô hình Internet (Internet Reference Model).
Mô hình tham chiếu OSI
Đây là một chuẩn quốc tế, có tính quy tắc, giúp kết nối các hệ thống mạng. Nghĩa là, mọi người, mọi nhà sản xuất, nếu tuân theo những mô tả của mô hình này thì sản phẩm họ tạo ra sẽ có khả năng làm việc và kết nối được với nhau.
OSI là viết tắt của Open Systems Interconnection, tạm dịch “kết nối các hệ thống mở”.
Mô hình này không được sử dụng trong triển khai thực tế.
Mô hình OSI gồm 7 tầng.
Tên tiếng Anh
Tên tiếng Việt
Chức năng
Application
Ứng dụng
Cung cấp môi trường giao giữa người dùng, ứng dụng và hệ thống mạng.
Presentation
Trình bày
Định dạng dữ liệu truyền.
Session
Phiên
Quản lý phiên làm việc.
Transport
Vận chuyển
Cung cấp dịch vụ truyền điểm tới điểm.
Network
Mạng
Gửi các packet giữa các mạng
Data link
Liên kết dữ liệu
Gửi các frame
Physical
Vật lý
Gửi các bit qua môi trường truyền.
Mô hình tham chiếu Internet
Mô hình này được sử dụng nhiều trong triển khai, đặc biệt trong môi trường Internet.
Mô hình gồm 4 tầng, được xây dựng dựa trên những kinh nghiệm và hoạt động thực tế của hệ thống mạng. Vì vậy, nhìn ở một vài góc độ, mô hình này đối lập với mô hình OSI.
Mô hình tham chiếu Internet là kết quả của quá trình tập hợp, tổ chức lại một cách có hệ thống các tài liệu ghi chép trong quá trình xây dựng hệ thống mạng Internet.
So với mô hình OSI, mô hình Internet có ít tầng hơn, tầng Internet thay thế cho tầng Network
Các tầng của mô hình Internet và so sánh với mô hình OSI:
Mô hình Internet
Chức năng
Mô hình OSI
Application
Các chương trình có sử dụng dịch vụ mạng.
Application, Session, Presentation
Transport
Cung cấp dịch vụ truyền điểm tới điểm.
Transport
Internet
Gửi các packet giữa các mạng
Network
Link
Gửi frame.
Physical, Data link
Tầng session và presentation trong mô hình OSI thường được cung cấp bởi các thư viện, nên chúng không được thể hiện rõ trong các giao thức, trong cấu trúc phân tầng của giao thức.
Mô hình tham chiếu chính là một cấu trúc gồm nhiều tầng, trong đó mỗi tầng sẽ mô tả chức năng của tầng và các giao thức thuộc về tầng đó.
Hình sau minh họa một số giao thức phổ biến của mỗi tầng theo mô hình tham chiếu Internet:

Quan sát hình trên, để ý thấy giao thức IP là một điểm nối quan trọng (narrow waist) của Internet, nó kết nối các giao thức tầng trên với các công nghệ truyền dữ liệu ở tầng dưới. Nghĩa là, nếu các ứng dụng, công nghệ, và thiết bị đều có khả năng làm việc với giao thức IP thì chúng sẽ có khả năng gắn kết chung vào một hệ thống và làm việc được với nhau, đặc biệt là kết nối vào hệ thống Internet.
Nguồn gốc của các giao thức
Với mong muốn tạo ra một môi trường cộng tác trong cộng đồng, một số tổ chức đã tạo ra các giao thức làm chuẩn chung để cộng đồng dựa vào đó sản xuất các thiết bị, phát triển các ứng dụng …v.v. Mục đích của các giao thức là giải quyết vấn đề tương thích.
Tên tổ chức
Lĩnh vực hoạt động
Ví dụ
ITU (International Telecommunication Union): Liên minh viễn thông quốc tế
Viễn thông
ADSL (tên khác G.992)
MPEG4(tên khác H.264)
IEEE (Institute of Electrical and Electronics Engineers): Viện kĩ nghệ điện và điện tử
Thông tin
Ethernet (tên khác 802.3)
WiFi (tên khác 802.11)
IETF (Internet Engineering Task Force): Lực lượng quản lý kĩ thuật
Internet
HTTP/1.1 (tên khác RFC 2616)
DNS (tên khác RFC 1034/1035)
W3C (World Wide Web Consortium): Hiệp hội WWW
Web
Chuẩn HTML5
Chuẩn CSS
Đơn vị dữ liệu tại mỗi tầng
Bảng sau liệt kê đơn vị dữ liệu tại mỗi tầng, hay có tên gọi khác là đơn vị dữ liệu giao thức (Protocol Data Unit – PDU):
Tầng
Đơn vị dữ liệu
Application
Message
Transport
Segment
Network
Packet
Link
Frame
Physical
Bit
Chú ý: packet cũng có thể được sử dụng để chỉ một khối dữ liệu bất kì truyền qua mạng.
Thiết bị mạng tại mỗi tầng

Ở hình trên:
  • Repeater hoặc hub làm việc tại tầng Physical, nó không can thiệp vào nội dung của thông tin của các tầng bên trên.
  • Switch hoặc bridge hoạt động tại tầng Link, nó thực hiện việc kết nối và trao đổi thông tin với thiết bị khác theo các giao thức tại tầng Link, thường là các thiết bị đang sử dụng cùng công nghệ.
  • Router hoạt động ở cả hai tầng Network và Link, do vậy nó có khả năng tạo kết nối và trao đổi thông tin với thiết bị khác theo các giao thức khác nhau tại tầng Link (sử dụng khác công nghệ), ví dụ, nó có khả năng kết nối và trao đổi thông tin giữa một thiết bị đang sử dụng giao thức Ethernet với một thiết bị đang sử dụng giao thức 802.11. Nó thực hiện điều này bằng cách sử dụng tầng cao hơn (Network).
  • Proxy hoặc midlebox hoặc gateway hoạt động ở cả 4 tầng (Application, Transport, Network, Link) thực hiện chuyển tiếp thông điệp giữa các thiết bị. Nó không phải là một host.
Chú ý: việc phân tầng trong các mô hình tham chiếu chỉ là những chỉ dẫn (guideline) chứ không hoàn toàn chính xác. Thực tế, trong một tầng có thể có nhiều giao thức cùng làm việc, hoặc có giao thức không thể gán vào một tầng cụ thể.

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

  1. Tên gọi mô hình tham chiếu TCP/IP <> mô hình tham chiếu Internet?

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/8/13

CN_1_6_Các giao thức và sự phân tầng



1.6 Các giao thức và sự phân tầng (protocols and layering)

Sử dụng các giao thức và thực hiện phân tầng là những yếu tố quan trọng trong việc tạo nên cấu trúc của hệ thống mạng.
Tính phức tạp của hệ thống mạng đòi hỏi cần phải có một số cách thức chia nhỏ để quản lý và vận hành, nói cách khác là cần thực hiện mô đun hóa. Dưới đây liệt kê một số trong rất nhiều các chức năng của hệ thống mạng:
  • Tạo và ngắt các kết nối.
  • Tìm kiếm đường đi.
  • Truyền tin cậy.
  • Truyền thông tin có kích thước tùy ý.
  • Tối ưu tốc độ truyền.
  • Chia sẻ băng thông.
  • Bảo mật thông tin truyền.
  • Cho phép gắn thêm thiết bị dễ dàng.
  • …
Thực hiện mô đun hóa sẽ giúp giảm đi tính phức tạp của hệ thống, đồng thời tăng khả năng sử dụng lại các thành phần của hệ thống mạng. Vậy hệ thống mạng đã được mô đun hóa như thế nào?
Hai giải pháp đã được áp dụng là sử dụng các giao thức và thực hiện phân tầng trong hệ thống mạng. Cụ thể là:
  • Trong giao tiếp giữa hai thiết bị, các tầng có cùng giao thức mới “nói chuyện” được với nhau (tất nhiên là “nói chuyện” gián tiếp), trừ tầng dưới cùng.
  • Trong cùng một thiết bị, các giao thức sẽ chỉ sử dụng các dịch vụ được cung cấp bởi tầng thấp hơn.
Quan sát hình vẽ sau:

Hình vẽ trên gồm hai nút mạng (Node1 và Node2), thể hiện của giao thức X trên Node1 muốn “nói chuyện” với thể hiện của giao thức X trên Node2, để thực hiện, nó cần phải tuân thủ các quy định của giao thức X trong quá trình giao tiếp. Nét đứt cho biết nó không thể giao tiếp trực tiếp được, mà cần phải sử dụng dịch vụ của tầng thấp hơn (thể hiện của giao thức Y). Đến lượt thể hiện của giao thức Y cũng phải tuân theo các quy định của giao thức Y khi thực hiện giao tiếp.
Qua hình vẽ, việc phân tầng được thực hiện theo chiều dọc (giao thức ở tầng cao chỉ trao đổi trực tiếp với giao thức tầng thấp trong cùng một nút). Các giao thức được thiết kế để làm việc theo chiều ngang (các giao thức sẽ làm việc với cùng giao thức trên máy phía bên kia).
Thực tế trên mỗi Host (Node) sẽ bao gồm rất nhiều giao thức, tập hợp của các giao thức này được gọi là chồng giao thức (protocol stack). Ví dụ trong hình dưới đây:

Chồng giao thức ở hình trên gồm 5 tầng (layer 5, 4, 3, 2, và 1), cuối cùng là đường truyền vật lý, nơi thực sự truyền tín hiệu từ Host 1 tới Host 2 và ngươc lại. Đường truyền có thể là cáp đồng, cáp quang, không khí…v.v.
Tại mỗi tầng có thể có rất nhiều giao thức được sử dụng. Ví dụ một số giao thức: TCP, IP, 802.11, Ethernet, HTTP, SSL…v.v.
Ví dụ về chồng giao thức
Xét một máy tính đang duyệt web qua kết nối WiFi (hình bên dưới):

Ở hình trên, web đang sử dụng giao thức HTTP, giao thức HTTP hoạt động dựa trên giao thức TCP, IP, 802.11.
Sự đóng gói (encapsulation)
Đóng gói là quy trình giúp hệ thống mạng vận hành theo cơ chế phân tầng và dựa trên các giao thức.
Đóng gói là quá trình tầng thấp hơn sẽ nhận toàn bộ gói tin của tầng trên, coi gói tin của tầng trên là phần nội dung, sau đó gắn thêm các thông tin của tầng thấp hơn vào, tạo thành một gói tin mới. Việc này cũng giống như khi bạn gửi thư qua đường bưu điện, nội dung của lá thư chính là nội dung của tầng cao hơn,  bì thư chính là giao thức của tầng thấp, việc cho thư vào bì thư và ghi địa chỉ người gửi và người nhận chính là quá trình đóng gói. Khi nhân viên bưu điện chuyển lá thư này tới đích, họ không được phép (và không cần) mở nội dung ở bên trong ra, mà chỉ cần dựa vào thông tin có trên phong bì (thông tin của tầng thấp hơn) để gửi lá thư đến đích. Khi tới người nhận, người nhận sẽ mở bì thư ra và đọc nội dung bên trong của lá thư (nội dung của tầng cao hơn).
Hình sau minh họa quá trình đóng gói:

Ở hình trên, giao thức HTTP sẽ thực hiện đóng gói thông điệp cần gửi đi. Tiếp theo, HTTP sẽ chuyển thông điệp xuống tầng TCP. Tại tầng TCP, gói tin từ tầng trên sẽ được giữ nguyên và được gắn thêm thông tin điều khiển của tầng TCP vào phần đầu của gói tin. Tiếp theo gói tin tại tầng TCP sẽ được chuyển xuống tầng IP. Tại tầng IP, gói tin từ tầng TCP sẽ được giữ nguyên, giao thức IP sẽ gắn thêm header vào đầu gói tin, sau đó gói tin được chuyển xuống tầng 802.11. Tại tầng 802.11, header của tầng này lại được gắn tiếp vào gói tin do tầng IP chuyển xuống.
Hình ảnh gói tin tại tầng 802.11 giống với một củ hành, gồm nhiều lớp vỏ bao bọc nhau. Trong đó tầng thấp nhất sẽ là lớp vỏ phía ngoài cùng.
Sau khi hoàn thành quá trình đóng gói, gói tin sẽ được gửi đi qua dây dẫn.
Tại máy nhận, gói tin sẽ trải qua quá trình ngược lại, đó là quá trình mở gói (de-encapsulation).
Quá trình mở gói là quá trình lược bỏ các phần thông tin đã được gắn thêm vào trong quá trình đóng gói. Tại mỗi tầng, giao thức tương ứng tại mỗi tầng sẽ thực hiện kiểm tra, và gỡ bỏ các thông tin header thuộc tầng đó, sau đó chuyển gói tin lên tầng cao hơn.
Hình sau minh họa cả hai quá trình: đóng gói tại máy gửi và mở gói tại máy nhận.

Trong thực tế, gói tin thường được minh họa như sau:

Quá trình đóng gói không chỉ gắn thêm thông tin vào đầu các gói được chuyển từ tầng trên xuống, mà trong thực tế, tại một số tầng, gói tin sẽ được gắn thêm thông tin vào cả phần đuôi (trailer). Ngoài ra, phần nội dung có thể được mã hóa, nén, chia nhỏ hoặc ghép nối.

Quá trình chuyển gói lên tầng trên khi mở gói

Quan sát hình vẽ sau:

Khi nhận được gói tin (ở dạng các bit) từ cáp mạng, máy tính sẽ chuyển gói tin này cho giao thức nào ở bên trên để tiếp tục mở gói và xử lý tiếp? Ở hình trên, quá trình gửi gói lên tầng trên sẽ được đi theo đường nét đứt. Làm sao để máy tính xác định được đường này?
Thực tế, thông tin điều khiển trong header tại mỗi tầng đã bao gồm thông tin giúp xác định gói tin sẽ được chuyển tiếp cho giao thức nào ở tầng bên trên.
Ở hình vẽ trên, máy tính nhận gói tin từ mạng Ethernet, nên gói tin là gói Ethernet. Trong header của Ethernet trường Ethertype cho biết gói tin sẽ được chuyển cho giao thức IP. Trong header của tầng IP trường IP protocol cho biết gói tin sẽ được chuyển cho giao thức TCP. Trong header của tầng TCP, trường TCP port number cho biết gói tin sẽ được chuyển cho giao thức HTTP.

Ưu điểm và nhược điểm của việc phân tầng

Ưu điểm
Việc phân tầng giúp che dấu thông tin và tái sử dụng.
Ví dụ, khi duyệt web, người sử dụng chỉ cần mở trình duyệt web (Mozilla Firefox, IE, Chrome…v.v), nhập đường dẫn trang web, và chờ nhận kết quả trả về từ server. Thực tế, người sử dụng không cần phải quan tâm tới việc hệ thống mạng đã làm cách nào để có được nội dung trang web? Hệ thống mạng đang sử dụng là có dây hay không dây? Phải sử dụng trình duyệt nào?
Hình vẽ sau minh họa việc che dấu thông tin và tái sử dụng.

Hình vẽ trên cho thấy, ta có thể sử dụng trình duyệt bất kì để duyệt web mà không phải quan tâm xem các tầng bên dưới đang chạy giao thức gì.  Nghĩa là, tầng dưới cùng có thể sử dụng giao thức 802.11 hoặc Ethernet để truyền dữ liệu giữa Browser và Server mà không làm ảnh hưởng đến hoạt động của các tầng bên trên.
Che dấu thông tin còn giúp cho việc kết nối dễ dàng các loại hệ thống khác nhau về công nghệ.

Ở hình trên, bên Browser đang sử dụng mạng không dây (802.11), bên Server đang sử dụng mạng có dây (Ethernet). Browser muốn lấy nội dung của website (phần tô màu tím). Để chuyển nội dung website từ Server về Browser, hệ thống mạng sẽ xây dựng thành phần giao tiếp trung gian, dữ liệu sẽ được truyền theo đường nét đứt màu hồng. Giao thức IP được xem như điểm đấu nối của nhiều loại công nghệ, nhiều loại giao thức (ở tầng thấp hơn cũng như ở tầng cao hơn).
Nhược điểm
Quá trình đóng gói làm tăng kích thước gói tin do phải thêm header tại mỗi tầng. Tuy nhiên, với kích thước của phần nội dung lớn thì kích thước của header thêm vào là không đáng kể.
Do che dấu thông tin, nên trong một số trường hợp ứng dụng các tầng phía trên muốn biết thông tin của các tầng phía dưới sẽ rất khó khăn. Ví dụ, ứng dụng web sẽ rất khó để biết được nó đang chay trên mạng có dây hay không dây? băng thông của hạ tầng mạng không dây hiện thời là bao nhiêu (do bạn có thể thay đổi vị trí thường xuyên)?

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

  1. Việc lựa chọn giao thức cho quá trình đóng gói và mở gó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/8/7

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