Bài này mở đầu cho phần tiếp theo của Series Nhập môn mạng máy tính. Ở những bài trước, sau khi chúng ta đã khám phá tổng quan về Internet và mạng máy tính thì trong bài này chúng ta sẽ bắt đầu tìm hiểu sâu hơn về mô hình của mạng máy tính, bắt đầu với Tầng Ứng dụng trong mô hình TCP/IP.
Tổng quan về tầng Ứng dụng
Sự ra đời của mạng máy tính xuất phát từ việc người dùng cần các ứng dụng mạng hỗ trợ trong quá trình lưu trữ, xử lý, và truyền thông thông tin sao cho thuận lợi. Từ đó dẫn đến nhu cầu thiết kế các giao thức hoạt động trên mạng (còn gọi là giao thức mạng) hỗ trợ các ứng dụng mạng.
Các ứng dụng này bao gồm các dịch vụ cổ điển dùng định dạng văn bản, phổ biến vào những thập niên 70 và 80 như: thư điện tử, truy cập máy tính từ xa, truyền tập tin, thảo luận nhóm, chat; các ứng dụng nối tiếng giữa thập niên 90 như World Wide Web (web, tìm kiếm, thương mại điện tử), và hai ứng dụng đỉnh cao cuối thiên niên kỉ là gửi tin nhắn tức thời, chia sẻ tập tin theo mô hình mạng P2P; và các ứng dụng về phim và âm thanh khác như: gọi điện thoại qua Internet, chia sẻ phim, nghe tin vô tuyến qua Internet, xem truyền hình qua Internet (IPTV).
Ngoài ra, nhu cầu truy cập băng thông rộng đang tăng cao và việc truy cập mạng không dây ngày càng trở nên phổ biến ở khắp nơi đòi hỏi các ứng dụng mạng mới trong tương lai cần được chú ý xây dựng. Chương này sẽ giới thiệu các khái niệm và cách thức hoạt động của các ứng dụng mạng.
Trước hết là định nghĩa khái niệm “tầng Ứng dụng”, tầng này chứa các dịch vụ sẽ được sử dụng bởi các ứng dụng mạng, các máy khách và các máy chủ, các tiến trình, và các phương thức giao tiếp với tầng Vận chuyển. Chúng ta sẽ tìm hiểu sâu hơn về các dịch vụ mạng bao gồm Web, thư điện tử, DNS, phân phối tập tin P2P, và gọi điện thoại qua Internet dùng mô hình P2P. Ngoài ra, còn đề cập chủ đề phát triển ứng dụng mạng trên hai giao thức TCP và UDP, nghiên cứu socket API và giới thiệu tổng quan các ứng dụng khách – chủ (client – server) dùng ngôn ngữ Java.
Các nguyên tắc chung của ứng dụng mạng
Phát triển một ứng dụng mạng có nghĩa là lập trình một chương trình ứng dụng chạy được trên nhiều máy tính khác nhau và phải có khả năng truyền thông với nhau qua mạng.
Ví dụ 1: ứng dụng web có hai chương trình riêng biệt truyền thông với nhau: chương trình khách chạy trên thiết bị đầu cuối (máy đế bàn, máy tính xách tay, PDA, điện thoại cầm tay, v.v), và chương trình phục vụ cung cấp dịch vụ sẽ chạy trên máy chủ web.
Ví dụ 2: chia sẻ tập tin P2P, mỗi máy tính trong cộng đồng có một chưomg trình chia sẻ tập tin. Các chương trình này có chức năng giống nhau. Do đó, khi phát triển ứng dụng mới, cần viết phần mềm chạy được trên nhiều thiết bị đầu cuối. Phần mềm này có thể được viết bằng bất kì ngôn ngữ lập trình nào (C, Java, hay Python).
Ứng dụng mạng ở đây không phải là phần mềm chạy được trên các thiết bị mạng như bộ định tuyến (router) hay bộ chuyển (switch), các thiết bị mạng không hoạt động ở tầng ứng dụng, chúng chỉ hoạt động ở các tầng thấp hơn, đặc biệt là ở tầng Mạng và các tầng bên dưới. Cách thiết kế cơ bản, như trình bày trong hình sau đây tạo điều kiện cho việc triển khai và phát triển các ứng dụng mạng đa dạng và linh hoạt.
Các kiến trúc của ứng dụng mạng
Trước khi viết phần mềm, lập trình viên cần có bản thiết kế kiến trúc ứng dụng. Kiến trúc ứng dụng khác với kiến trúc mạng. Ở góc nhìn của người phát triển ứng dụng, kiến trúc mạng là cố định và cung cấp một tập các dịch vụ cho các ứng dụng. Mặt khác, kiến trúc ứng dụng được người phát triển ứng dụng thiết kế nhằm mô tả ứng dụng có cấu trúc như thế nào trên nhiều thiết bị đầu cuối khác nhau. Trong việc chọn kiến trúc ứng dụng, lập trình viên thường chọn một trong hai kiến trúc chính là kiến trúc khách – chủ (client-server) hoặc kiến trúc ngang hàng (Peer-to-Peer).
Trong kiến trúc client – server, có một máy tính luôn luôn hoạt động, được gọi là máy chủ (server), cung cấp các dịch vụ cho các máy tính khác. Các máy tính sử dụng các dịch vụ từ máy chủ được gọi là máy khách (client). Máy khách có thể hoạt động không thường xuyên.
Một ví dụ điển hình là ứng dụng web, trong đó máy chủ phục vụ web luôn hoạt động để nhận các yêu cầu dịch vụ từ các trình duyệt chạy trên các máy khách. Khi máy chủ web nhận được một yêu cầu về một đối tượng nào đó (chẳng hạn một tập tin) từ một máy khách, máy chủ sẽ phản hồi bằng cách gửi đối tượng được yêu cầu đến máy khách.
Chú ý rằng với kiến trúc khách – chủ, các máy khách không truyền thông với nhau, mà phải thông qua máy chủ. Tính chất khác của kiến trúc khách – chủ là máy chủ có một địa chỉ IP được biết trước cố định. Vì máy chủ có địa chỉ cố định và luôn luôn hoạt động, máy khách có thể liên lạc với máy chủ bằng cách gửi gói tin đến địa chỉ của máy chủ. Một vài ứng dụng nổi tiếng phổ biến với kiến trúc khách – chủ gồm Web, FTP, Telnet và thư điện tử. Kiến trúc khách – chủ được trình bày như trong hình sau đây.
Thông thường trong kiến trúc khách – chủ, một máy chủ không thể đáp ứng đồng thời các yêu cầu từ nhiều máy khách. Ví dụ, một trang mạng xã hội có thể trở nên quá tải nếu trong hệ thống chỉ có một máy chủ xử lý tất cả các yêu cầu. Vì vậy, một cụm gồm nhiều máy chù – thường được biết đến với tên là trung tâm dữ liệu (Datacenter) – dùng để tạo ra một máy chủ ảo mạnh trong kiến trúc khách – chủ.
Các dịch vụ ứng dụng dựa trên kiến trúc khách – chủ thường đòi hỏi một cơ sở hạ tầng mạnh, buộc các nhà cung cấp dịch vụ phải trang bị, cài đặt, và bảo trì các trung tâm dữ liệu. Thêm vào đó, các nhà cung cấp dịch vụ phải trả các chi phí băng thông sử dụng cho việc gửi và nhận dữ liệu từ mạng Internet. Các dịch vụ phổ biến như máy tìm kiếm (Google), thương mại điện tử (Amazon, e-Bay), thư điện tử (Yahoo mail), mạng xã hội (MySpace, Facebook), và chia sẻ phim (YouTube) là những dịch vụ có cơ sở hạ tầng mạnh, tiết kiệm chi phí.
Trong kiến trúc ngang hàng (Peer-to-Peer), không cần có các máy chủ. Thay vào đó, ứng dụng khai thác truyền thông trực tiếp giữa các cặp máy tính kết nối với nhau, được gọi là các máy ngang hàng (peer). Các máy ngang hàng không bị sở hữu bởi nhà cung cấp dịch vụ. Do các máy tính ngang hàng truyền thông không thông qua máy chủ nên kiến trúc này gọi là kiến trúc ngang hàng.
Nhiều ứng dụng dựa trên kiến trúc P2P bao gồm ứng dụng phân phối tập tin (BitTorent), chia sẻ tập tin (eMule, LimeWire), điện thoại Internet (Skype) và IPTV (PPLive). Kiến trúc P2P được mô tả trong hình bên dưới. Vài ứng dụng có kiến trúc lai đã kết hợp các tính chất của kiến trúc P2P và kiến trúc khách – chủ.
Ví dụ: nhiều ứng dụng gửi tin nhắn tức thời, các máy chủ được dùng để lưu địa chỉ IP của người dùng, nhưng các thông điệp người dùng được gửi trực tiếp giữa các thiết bị người dùng cuối (mà không thông qua các máy chủ trung gian).
Một trong các đặc trưng của kiến trúc P2P là khả năng tự mở rộng. Ví dụ trong ứng dụng chia sẻ tập tin dùng kiến trúc P2P, mặc dù mỗi máy ngang hàng phát sinh tải công việc (workload) do yêu cầu các tập tin từ các máy ngang hàng khác, nó cũng tham gia chia sẽ tập tin với các máy ngang hàng khác. Và khi có thêm một máy ngang hàng tham gia chia sẻ/yêu cầu tập tin thì mạng ngang hàng được mở rộng.
Các kiến trúc P2P cũng tiết kiệm chi phí, do không yêu cầu tài nguyên máy chủ và băng thông máy chủ. Để giảm chi phí, các nhà cung cấp dịch vụ (MSN, Yahoo, v.v) đang tập trung vào các kiến trúc P2P cho các ứng dụng của họ. Tuy nhiên, các ứng dụng P2P gặp phải ba thách thức chính:
- Tương thích với nhà cung cấp dịch vụ Internet: đa số các nhà cung cấp dịch vụ Internet địa phương (gồm cả nhà cung cấp dịch vụ sử dụng DSL và cáp) đều cung cấp dịch vụ băng thông “bất đối xứng” (nghĩa là băng thông tải xuống cao hơn tải lên). Nhưng các ứng dụng P2P như chia sẻ tập tin lại thiên về khai thác băng thông tải lên, điều này tạo ra một áp lực về băng thông đáng kể dồn lên nhà cung cấp dịch vụ Internet. Do đó, các ứng dụng P2P tương lai cần thiết kế sao cho dễ dàng tương thích với các ISP.
- Bảo mật: do bản chất mở và phân tán, các ứng dụng P2P có thể đặt ra nhiều mục tiêu cần bảo mật.
- Khuyến khích sử dụng: sự thành công của các ứng dụng P2P tương lai cũng phụ thuộc vào việc thuyết phục người dùng tự nguyện chia sẻ băng thông, khả năng lưu trữ, và tính toán. Do đó, thiết kế một hệ thống khuyến khích sử dụng cũng là một thách thức cho kiến trúc P2P.
Truyền thông giữa các tiến trình
Trước khi xây dựng một ứng dụng mạng, cần hiểu cách lập trình, thực thi ứng dụng, và truyền thông giữa các ứng dụng như thế nào. Theo thuật ngữ hệ điều hành, thực sự không phải “chương trình” mà là “tiến trình” truyền thông với nhau. Một tiến trình (process) là một chương trình (program) đang chạy trên một máy tính. Các tiến trình đang chạy trên cùng một máy tính có thể truyền thông với nhau, sử dụng các quy tắc do hệ điều hành trên máy tính quy định.
Tiến trình khách và tiến trình chủ
Một ứng dụng mạng bao gồm các cặp tiến trình gửi thông điệp cho nhau thông qua mạng. Với mỗi cặp tiến trình truyền thông, một tiến trình được đánh dấu là tiến trình khách và một tiến trình được đánh dấu là tiến trình chủ. Với ứng dụng Web, trình duyệt đang chạy là tiến trình khách, và trình phục vụ Web đang chạy là tiến trình chủ. Với ứng dụng chia sẻ tập tin P2P, tiến trình tải tập tin về được gọi là tiến trình khách, và tiến trình cung cấp tập tin được gọi là tiến trình chủ.
Trong một vài ứng dụng, như ứng dụng chia sẻ tập tin nói trên, một tiến trình có thể vừa là tiến trình khách, vừa là tiến trình chủ. Tiến trình này có thể thực hiện cả việc gửi đi và tải về các tập tin. Tuy nhiên, khi mô tả viêc truyền thông giữa hai tiến trình, chúng ta luôn phân biệt rõ một tiến trình là khách và tiến trình kia là tiến trình chủ. Tiến trình khách và tiên trình chủ được định nghĩa như sau:
Trong một phiên truyền thông giữa một cặp tiến trình, tiến trình khởi động truyền thông (liên lạc với tiến trình khác lúc đầu phiên) được gọi là tiến trình khách. Tiến trình chờ được liên lạc để bắt đầu phiên truyền thông là tiền trình chủ.
Giao diện giữa tiến trình và mạng máy tính
Đa số các ứng dụng mạng đều bao gồm các cặp tiến trình truyền thông, trong đó hai tiến trình trong một cặp sẽ gửi qua lại các thông điệp cho nhau. Bất kì thông điệp nào được gửi từ tiến trình này đến tiến trình khác đều phải đi qua hạ tầng Mạng. Một tiến trình gửi các thông điệp đi và nhận các thông điệp về từ mạng thông qua một giao diện phần mềm được gọi là socket.
Hình bên dưới mô tả truyền thông socket giữa hai tiến trình Internet (giả sử rằng giao thức thức vận chuyển mà hai tiến trình sử dụng là TCP). Như được mô tả trong hình, socket là giao diện giữa tầng Ứng dụng và tầng Vận chuyển. Người phát triển ứng dụng mạng có thể điều khiển mọi thứ ở tầng Ứng dụng, nhưng điều khiển được rất ít ở mức tầng Vận chuyển.
Các việc mà người phát triển ứng dụng có thể làm trên tầng Vận chuyển là lựa chọn giao thức vận chuyển khả năng thiết đặt lại các thông số tầng Vận chuyển như kích thước lớn nhất của bộ đệm (maximum buffer size) và kích thước lớn nhất của phân đoạn (maximum segment size). Khi người phát triển ứng dụng chọn một giao thức vận chuyển (nếu có thế), ứng dụng sẽ dùng các dịch vụ tầng Vận chuyển mà giao thức đó cung cấp.
Các dịch vụ tầng Vận chuyển cung cấp cho tầng Ứng dụng
Nhắc lại, socket là giao diện giữa tiến trình ứng dụng và giao thức tầng Vận chuyển, ứng dụng thuộc bên gửi sẽ gửi các thông điệp thông qua socket. Ở phía nhận, giao thức tầng Vận chuyển có trách nhiệm nhận thông điệp và đưa thông điệp đến “cánh cửa socket” thuộc bên nhận. Các dịch vụ tầng Vận chuyển có thể được phân loại thành bốn tiêu chuẩn xét chọn: truyền dữ liệu tin cậy, thông lượng, mức độ kịp thời, và bảo mật.
Truyền dữ liệu tin cậy
Các gói tin có thể bị mất khi di chuyển trên mạng. Ví dụ, một gói tin có thể làm tràn bộ đệm của một bộ định tuyến, hoặc có thể bị bên nhận hay bộ định tuyến bỏ đi sau khi phát hiện gói tin nhận được có lỗi. Đối với nhiều ứng dụng, như thư điện tử, truyền tập tin, truy cập từ xa, truyền dữ liệu qua web, và các ứng dụng tài chính, thì việc mất dữ liệu có thể gây ra hậu quả nghiêm trọng (với ví dụ ứng dụng tài chính thì hậu quả nghiêm trọng cho cả hai bên ngân hàng và khách hàng).
Do đó, để hỗ trợ các ứng dụng này, một số công đoạn phải được thực hiện thêm nhằm đảm bảo dữ liệu từ ứng dụng bên này sẽ được truyền chính xác và đầy đủ đến đầu ứng dụng bên kia. Nếu một giao thức đảm bảo được dịch vụ truyền dữ liệu như vậy thì được cho là giao thức truyền dữ liệu tin cậy.
Khi giao thức tầng Vận chuyển không cung cấp dịch vụ truyền dữ liệu tin cậy, dữ liệu được gửi đi có thể không bao giờ đến tiến trình nhận. Vấn đề này được chấp nhận đối với các ứng dụng chịu lỗi (loss- tolerant), đa số các ứng dụng đa phương tiện như ứng dụng âm thanh/phim có tính thời gian thực hoặc lưu trữ dữ liệu âm thanh/thời gian thực có thể bỏ qua việc mất chút ít dữ liệu. Trong các ứng dụng đa phương tiện, việc mất dữ liệu có thể gây ra phiền phức một chút nhưng không gây ra sự giảm sút chất lượng nghiêm trọng.
Thông lượng
Trong bối cảnh phiên truyền thông giữa hai tiến trình trên một đường mạng là lượng dữ liệu (bits) mà tiến trình gửi truyền đến tiến trình nhận trong một đơn vị thời gian. Do còn có các phiên truyền thông khác cũng dùng chung đường mạng, và các phiên đó có thể đang truyền dữ liệu hoặc tạm dừng việc truyền, nên thông lượng của một phiên truyền thường biến động theo thời gian.
Nhận định này dẫn đến một dịch vụ tự nhiên mà tầng Vận chuyển có thể cung cấp là đảm bảo một mức thông lượng tối thiểu nào đó. Trong khi các ứng dụng nhạy băng thông có các nhu cầu thông lượng thực tế, thì các ứng dụng thích nghi có thể thích ứng với thông lượng còn lại. Thư điện tử, truyền tập tin, và web là các ứng dụng thích nghi. Dĩ nhiên, đường truyền cho phép thông lượng càng cao càng tốt, nhưng thực tế thì luôn có giới hạn.
Mức độ kịp thời
Giao thức tầng Vận chuyển có thể cung cấp dịch vụ đảm bảo mức độ kịp thời. Cũng như đảm bảo thông lượng, đảm bảo mức độ kịp thời cũng có nhiều dạng. Ví dụ về sự đảm bảo mức độ kịp thời: socket gửi truyền cho socket nhận trong vòng 1/10 giây. Một dịch vụ đảm bảo như vậy có thể dành cho các ứng dụng thời gian thực, như điện thoại Internet, môi trường ảo, hội thảo truyền hình, và các trò chơi mạng có nhiều người.
Thời gian trì hoãn kéo dài trong khi gọi điện thoại Internet sẽ làm cho các cuộc điện đàm mất tự nhiên. Trong trò chơi trực tuyến trên mạng, nhiều người tương tác với nhau, thời gian trì hoãn lâu giữa hành động yêu cầu và nhận phản hồi (từ phía bên kia của kết nối) làm ứng dụng ít có cảm giác thực tế hơn. Đối với các ứng dụng phi thời gian thực, cũng cần giảm thiểu thời gian trì hoãn, nhưng không có ràng buộc chặt chẽ.
Bảo mật
Cuối cùng giao thức tầng Vận chuyển có thể cung cấp cho một ứng dụng một hoặc nhiều dịch vụ bảo mật. Ví dụ bên gửi, giao thức tầng Vận chuyển mã hóa tất cả dữ liệu trước khi gửi đi; và phía nhận, giao thức tầng Vận chuyến giải mã dữ liệu trước khi chuyển dữ liệu đến tiến trình nhận. Dịch vụ này cung cấp sự tin cậy giữa hai tiến trình, giúp dữ liệu truyền giữa hai tiến trình không bị nghe hay xem lén.
Giao thức tầng Vận chuyển cũng có thể cung cấp các dịch vụ bảo mật khác ngoài đảm bảo tính tin cậy, bao gồm đảm bảo tính toàn vẹn dữ liệu và xác thực.
Các dịch vụ tầng Vận chuyển do Internet cung cấp
Trong các phần trên, các dịch vụ tầng Vận chuyển được mô tả một cách tổng quát. Trong phần này, chúng sẽ được xem xét chi tiết. Internet (tổng quát hơn là mạng TCP/IP) có sẵn hai giao thức vận chuyển cho ứng dụng mạng là UDP và TCP. Hình sau minh họa các dịch vụ cho vài ứng dụng được chọn.
Dịch vụ TCP
Mô hình dịch vụ TCP bao gồm một dịch vụ hướng kết nối và một dịch vụ truyền dữ liệu đáng tin cậy. Khi một ứng dụng dùng giao thức TCP như một giao thức vận chuyển, ứng dụng đó sẽ dùng cả hai dịch vụ này của giao thức TCP.
- Dịch vụ hướng kết nối (Connection-oriented service). TCP yêu cầu phía khách và phía chủ trao đổi thông tin điều khiển cho nhau trước khi các thông điệp tầng ứng dụng bắt đầu được trao đổi. Quá trình này gọi là thủ tục bắt tay (handshaking), đánh động hai phía khách và chủ, và cho phép chúng chuẩn bị gửi nhận các gói tin sau đó. Sau giai đoạn bắt tay, kết nối TCP được hình thành giữa hai socket của hai tiến trình. Kết nối này có đặc tính là kết nối hai chiều (full- duplex), nghĩa là hai tiến trình có thể đồng thời gửi thông điệp cho nhau trên cùng kết nối. Khi ứng dụng kết thúc gửi các thông điệp, nó phải hủy bỏ kết nối.
- Dịch vụ truyền dữ liệu đáng tin cậy. Các tiến trình có thể dựa vào TCP để truyền các gói dữ liệu chính xác và theo đúng thứ tự. Nghĩa là khi tiến trình bên gửi truyền một chuỗi byte vào socket, TCP sẽ truyền chuỗi byte đó đến socket bên nhận, đảm bảo dữ liệu không bị sai khác.
Ngoài ra, TCP cũng còn có kỹ thuật kiểm soát tắc nghẽn. Dịch vụ này hướng đến việc kiểm soát trình trạng tắc nghẽn chung trên toàn mạng Internet, vì lợi ích chung của mạng Internet chứ không phải chỉ vì lợi ích trực tiếp của cặp tiến trình truyền thông.
Dịch vụ UDP
UDP là giao thức vận chuyển đơn giản, gọn nhẹ, chỉ cung cấp các dịch vụ cần thiết. Do UDP là giao thức phi kết nối (connectionless), nó không thực hiện thủ tục bắt tay trước khi hai tiến trình bắt đầu truyền thông. UDP không cung cấp dịch vụ truyền dữ liệu đáng tin cậy, nghĩa là khi một tiến trình gửi một thông điệp thông qua socket bên gửi, UDP không đảm bảo thông điệp sẽ đến được tiến trình nhận. Ngoài ra, các thông điệp khi đến tiến trình nhận có thế không theo thứ tự như lúc gửi.
UDP không sử dụng cơ chế kiểm soát tắc nghẽn, do đó bên gửi có thế đẩy dữ liệu xuống tầng dưới (tầng Mạng) với một tốc độ tùy ý. (Tuy nhiên, thông lượng thật giữa hai bên có thể nhỏ hơn tốc độ này, do đường truyền có sự giới hạn về băng thông hoặc do sự tắc nghẽn mạng). Trên một phương diện khác, do nhiều tường lửa (firewall) thường được cấu hình để ngăn chặn các gói tin UDP, nên ngày càng nhiều nhà thiết kế chọn triển khai các ứng dụng loại này trên nền TCP.
Bảo mật TCP
TCP và UDP không cung cấp dịch vụ mã hóa dữ liệu. Do đó, nếu tiến trình gửi truyền một mật khẩu ở dạng bản rõ (tức là không được mà hóa) vào socket của nó, mật khẩu bản rõ sẽ đi qua tất cả các liên kết giữa tiến trình gửi và tiến trình nhận. Vì tính riêng tư (privacy) và các vấn đề bảo mật khác rất cần thiết cho các ứng dụng mạng, nên các nhà thiết kế giao thức phát triển phần mở rộng cho TCP được gọi là Secure Sockets Layer (SSL) (RFC 6101) và Transport Layer Security (TLS) (RFC 5246).
TCP mở rộng với SSL/TLS không chỉ có đủ các chức năng của một TCP truyền thông mà còn cung cấp thêm các dịch vụ bảo mật quan trọng cho giao tiếp giữa tiến trình – tiến trình, bao gồm mã hóa, toàn vẹn dữ liệu, và chứng thực đầu cuối. SSL/TLS có bộ thư viện socket riêng của nó, tương tự như bộ thư viện socket TCP.
Khi một ứng dụng dùng SSL/TLS, tiến trình gửi chuyển dữ liệu gốc đến SSL/TLS socket; SSL/TLS bên máy gửi mã hóa dữ liệu và truyền dữ liệu đã được mã hóa đến socket TCP, tiếp đó dữ liệu đã mã hóa di chuyển từ socket TCP bên tiến trình gửi lên Internet và từ Internet đến socket TCP bên tiến trình nhận. Socket nhận chuyển dữ liệu đã mã hóa đến SSL/TLS để giải mã. Cuối cùng, SSL/TLS chuyển dữ liệu bản rõ sau khi giải mã đến tiến trình nhận.
Các dịch vụ tầng Vận chuyển không cung cấp
Phần trên đã xét đến bốn dịch vụ mà giao thức tầng Vận chuyển có thể cung cấp: truyền dữ liệu tin cậy, thông lượng, mức độ kịp thời, và bảo mật. Rõ ràng là TCP có cung cấp dịch vụ truyền dữ liệu tin cậy. Ngoài ra TCP có thể kết hợp với SSL/TLS, nhằm cung cấp một dịch vụ bảo mật. Trong mô tả ngắn gọn về TCP và UDP, các dịch vụ về đảm bảo thông lượng tối thiếu và mức độ kịp thời đã không được đề cập đến, thật ra các dịch vụ này không có trong các giao thức tầng Vận chuyển trên Internet.
Như vậy liệu các ứng dụng cần đảm bảo mức độ kịp thời như điện thoại Internet sẽ không thể triển khai được trên Internet? Thực tế không phải vậy – bằng chứng là Internet đã có các ứng dụng loại này trong nhiều năm qua. Các ứng dụng này hoạt động khá tốt do chúng được thiết kế để thích ứng với tình trạng thiếu sự đảm bảo này. Tóm lại, Internet có thể cung cấp dịch vụ thích hợp cho các ứng dụng như điện thoại Internet, nhưng nó không có một sự đảm bảo nào về thông lượng tối thiếu hay mức độ kịp thời.
Hình dưới đây mô tả các giao thức vận chuyển được các ứng dụng phổ biến trên Internet sử dụng: thư điện tử, truy cập từ xa, Web, và truyền tập tin; tất cả đều dùng TCP. Điện thoại Internet là một ứng dụng điến hình sử dụng UDP. Mỗi bên của ứng dụng điện thoại Internet cần gửi dữ liệu qua mạng với tốc độ tối thiểu.
Định danh tiến trình
Phần trên vừa trình bày về các dịch vụ vận chuyển giữa hai tiến trình truyền thông. Nhưng một tiến trình làm sao nhận biết được với một tiến trình khác mà nó muốn truyền thông, chỉ bằng việc dùng các dịch vụ này? Để xác định tiến trình nhận, hai thông tin cần được làm rõ: (1) tên hoặc địa chỉ của máy nhận, và (2) định danh tiến trình nhận trên máy đó.
Trong Internet, hệ cuối được xác định nhờ địa chi IP (IP address). Ngoài địa chỉ của thiết bị đầu cuối bên nhận, bên gửi phải xác định được tiến trình nào đang chạy trên thiết bị đầu cuối bên nhận sẽ nhận thông điệp. Thông tin này cần thiết vì một theiest bị đầu cuối có thể có nhiều ứng dụng mạng đang chạy đồng thời. Khái niệm số hiệu cổng (port number) đưa ra cho mục đích xác định tiến trình. Mỗi ứng dụng phổ biến đều được gán một (hoặc vài) số hiệu cổng mặc định.
Ví dụ, ứng dụng web trên máy chủ được chỉ định số hiệu cổng là 80, thư điện tử ở máy chủ (dùng giao thức SMTP) được chỉ định cổng 25.
Các giao thức ở tầng Ứng dụng
Môt giao thức tầng ứng dụng định nghĩa cách thức mà các tiến trình ứng dụng vận hành trên các thiết bị đầu cuối khác nhau, trao đổi thông điệp cho nhau. Cụ thể, giao thức tầng ứng dụng định nghĩa:
- Các kiểu thông điệp được trao đổi, chẳng hạn như thông điệp yêu cầu (request message) và thông điệp phản hồi (response message).
- Cú pháp của các loại thông điệp khác nhau, chẳng hạn như các trường (fields) trong thông điệp và mô tả mỗi trường.
- Ngữ nghĩa của các trường, nghĩa là ý nghĩa của thông tin trong trường.
- Quy tắc nhằm xác định thời điểm và cách thức một tiến trình gửi thông điệp và phản hồi khi nhận được một thông điệp.
Một số giao thức tầng ứng dụng được mô tả chi tiết trong các RFC. Chẳng hạn, giao thức HTTP được công bố trong RFC 2616. Có nhiều giao thức tầng ứng dụng là giao thức tư hữu và không có ý định trở thành công hữu. Như các ứng dụng chia sẻ tập tin theo kiến trúc P2P hiện hành, sử dụng các giao thức tư hữu.
Cần phân biệt sự khác nhau giữa ứng dụng mạng và giao thức tầng Ứng dụng. Một giao thức tầng Ứng dụng chỉ là mảnh ghép của một ứng dụng mạng. Ví dụ Web là ứng dụng theo kiến trúc khách-chủ, cho phép người dùng lấy về những tài liệu từ máy chủ Web theo yêu cầu. Các ứng dụng Web bao gồm nhiều thành phần, gồm một chuẩn về dạng thức tài liệu (đó là HTML), trình duyệt Web (như Firefox, Chrome), trình phục vụ Web (như Apache, hoặc Microsoft Internet Information Server) và một giao thức tầng ứng dụng.
Một giao thức tầng ứng dụng của Web như HTTP, định nghĩa dạng thức và thứ tự qua lại của các thông điệp giữa trình duyệt Web và trình phục vụ Web. Do đó, HTTP chỉ là một mảnh ghép (mặc dù là mảnh ghép quan trọng) của ứng dụng Web.
Tổng kết
Chúng ta vừa tìm hiểu xong về tổng quan của tầng ứng dụng trong mô hình TCP/IP. Phần sau chúng ta sẽ tìm hiểu về Web và giao thức HTTP.
Comments 1