Tải bản đầy đủ (.docx) (19 trang)

Truyền thông trong hệ phân tán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (421.51 KB, 19 trang )

4. TRUYỀN THÔNG GIỮA CÁC TIẾN TRÌNH
4.1. Giới thiệu
Chương này và hai chương tiếp theo nghiên cứu những kiến thức liên quan đến
truyền thông ở mức middleware. Chương này sẽ nghiên cứu những vấn đề liên quan
đến việc thiết kế ở mức tối hơn (được thể hiện trong hình 4.1). Lớp trên được thảo luận
trong chương 5 trong đó xem xét đến lời gọi thủ tục từ xa, chương 6 là những kiến
thức liên quan đến mô hình truyền thông gián tiếp.

4.2. API cho các giao thức Internet
4.2.1. Các đặc điểm của truyền thông giữa các tiến trình
4.2.1.1. Đồng bộ và không đồng bộ
Một hàng đợi được kết hợp với một điểm đến của thông điệp. Tiến trình gửi sẽ
đưa thông điệp đó vào hàng đợi từ xa và tiến trình nhận đọc các thông điệp từ hàng đợi
địa phương. Truyền thông giữa các tiến trình gửi và nhận có thể là đồng bộ hoặc không
đồng bộ.
Trong hình thức đồng bộ: tiến trình gửi và nhận được đồng bộ hóa tại mỗi thông
điệp. Người gửi bị “khóa” nghĩa là bị “đóng băng” trong khi gửi cho đến khi có phản
hồi từ người nhận. Ví dụ: Yêu cầu rút tiền từ máy ATM, máy ATM bị khóa cho đến khi
nhận được xác nhận quyền truy xuất từ ngân hàng.
Trong hình thức không đồng bộ: tiến trình gửi không bị chặn, tiến trình nhận
hoặc là bị chặn hoặc là không chặn. Người gửi có thể thực hiện một tiến trình khác sau
khi thông điệp đã được gửi đi. Ví dụ: email là thông điệp không đồng bộ, bạn gửi
email sau đó làm việc khác trong khi chờ phản hồi.
1


4.2.1.2. Nơi đến của một thông điệp
Trong chương 3 đã giải thích rằng, trong các giao thức Internet thì thông điệp
được gửi đến theo một cặp (địa chỉ Internet và cổng cục bộ). Một cổng cục bộ là nơi
đến trên một máy tính, quy định là một số nguyên. Một cổng chỉ có một người nhận
(trừ multicast) nhưng có thể có nhiều người gửi. Một hoặc nhiều thông điệp có thể


được gửi đến một cổng và các tiến trình có thể sử dụng một hay nhiều cổng để nhận
thông điệp. Bất kì một tiến trình nào cũng có thể biết được số cổng mà nó có thể gửi
thông điệp đến đó. Các server thường công khai số cổng của họ để phục vụ khách
hàng sử dụng.
4.2.1.3. Độ tin cậy
Chương 2 định nghĩa đáng tin cậy trong thời hạn hiệu lực và toàn vẹn. Một dịch
vụ tin nhắn point – to – point có thể được mô tả như là đáng tin cậy nếu thông điệp
được đảm bảo là được giao mặc dù có một số “hợp lí” các gói tin có thể bị rơi hoặc
mất, ngược lại là không đáng tin cậy. Đối với tính toàn vẹn, tin nhắn đến phải không bị
hỏng và không bị trùng lặp.
4.2.1.4. Tính có thứ tự
Một số ứng dụng đòi hỏi thông điệp phải được nhận có thứ tự đó là thứ tự mà
chúng được chuyển bởi người gửi. Thông điệp được phân phối theo thứ tự gửi.
4.2.2. Sockets
4.2.2.1. Khái niệm
Socket là một thiết bị truyền thông hai chiều tương tự như tập tin , chúng ta có
thể đọc hay ghi lên nó , tuy nhiên mỗi socket là một thành phần trong một mối nối nào
đó giữa các máy trên mạng máy tính và các thao tác đọc/ghi chính là sự trao đổi dữ
liệu giữa các ứng dụng trên nhiều máy khác nhau.
Sử dụng socket có thể mô phỏng hai phương thức liên lạc trong thực tế: liên lạc thư tín
(socket đóng vai trò bưu cục), liên lạc điện thoại (socket đóng vai trò tổng đài)
4.2.2.2. Các thuộc tính của socket:
-Type: định nghĩa các đặc điểm liên lạc
-Sự tin cậy:
-Sự bảo toàn thứ tự dữ liệu:
-Lặp lại dữ liệu:
2


-Chế độ nối kết:

-Bảo toàn giới hạn thông điệp
-Khả năng gửi thông điệp khẩn
Để thực hiện liên lạc bằng socket cần thực hiện các thao tác:
-Tạo lập hay mở một socket
-Gắn kết một socket với một địa chỉ
-Liên lạc: có 2 kiểu liên lạc tùy thuộc vào chế độ nối kết.
4.2.2.3. Các hình thức liên lạc trong socket
a. Liên lạc trong chế độ không liên kết: liên lạc theo hình thức hộp thư
- Hai tiến trình liên lạc với nhau không kết nối trực tiếp
-Mỗi thông điệp phải kèm theo địa chỉ người nhận
Hình thức liên lạc này có đặc điểm:
-Người gửi không chắc chắn thông điệp của họ được gửi đến người nhận
-Một thông điệp có thể được gửi nhiều lần
-Hai thông điệp được gửi theo một thứ tự nào đó có thể đến tay người nhận theo một
thứ tự khác.
Một tiến trình sau khi đã mở một socket có thể sử dụng nó để liên lạc với nhiều tiền
trình khác nhau nhờ sử dụng hai primitive send và receive
b. Liên lạc trong chế độ kết nối
Một liên kết được thành lập giữa hai tiến trình. Trước khi mối liên kết này được thiết
lập, một trong hai tiến trình phải đợi một tiến trình khác yêu cầu kết nối. Có thể sử
dụng socket để liên lạc theo mô hình client – server. Trong mô hình này server sử dụng
lời gọi hệ thống listen và accept để kết nối với client, sau đó client và server có thể trao
đổi thông tin bằng cách sử dụng primitive send và receive
Ví dụ: trong giao thức truyền thông TCP, mỗi mối nối giữa hai máy tính được xác định
bằng một port, khái niệm port ở đây không phải là một cổng giao tiếp trên thiết bị vật
lí mà chỉ là một khái niệm logic trong cách nhìn của người lập trình, mỗi port được
tương ứng với một số nguyên dương.

3



4.2.3. UDP
4.2.3.1. Message size
Tiến trình nhận phải chỉ định một mảng các byte của một kích thước cụ thể để
nhận một thông điệp. Nếu thông điệp là quá lớn đối với mảng thì nó sẽ được cắt ngắn
khi đến. Các giao thức IP cơ bản cho phép độ dài gói tin lên đến 2 16 byte, trong đó bao
gồm cả tiêu đề của thông điệp. Tuy nhiên hầu hết các môi trường đều áp đặt một hạn
chế về kích thước là 8KB. Bất kỳ ứng dụng nào yêu cầu thông điệp lớn hơn mức tối đa
đều phải được phân đoạn vào khối kích thước đó.
4.2.3.2. Blocking
Socket thông thường cung cấp non-blocking sends và blocking receives trong
truyền thông theo gói. Việc gửi sẽ được trả lại khi nó đã trao thông điệp đến giao thức
cơ bản UDP và IP (có trách nhiệm truyền tải thông điệp đến đích). Khi đến thông điệp
sẽ được đặt trong một hàng đợi cho các socket. Thông điệp có thể được thu thập bởi
một lời gọi giải quyết ngay hoặc lời gọi tương lai của quá trình nhận trên socket.
Thông điệp sẽ được bỏ vào điểm đến nếu không có một tiến trình nào đã có socket bị
ràng buộc vào cổng đích. Phương thức nhận sẽ bị chặn cho đến khi một gói được nhận,
trừ khi có một thời gian chờ được thiết lập trên socket. Nếu tiến trình đó gọi phương
thức nhận có công việc khác để làm trong thời gian chờ thông điệp, nên được bố trí sử
dụng một luồng riêng biệt. Chủ đề về luồng riêng biệt được thảo luận trong chương 7.
Ví dụ: khi server nhận được thông điệp từ client, thông điệp có thể chỉ định công việc
để làm, trong trường hợp này server sẽ sử dụng luồng riêng biệt để làm việc và chờ đợi
các thông điệp từ các client khác.
4.2.3.3. Timeouts
Việc nhận thông điệp có thể bị tắc nghẽn mãi mãi khi mà một server đang chờ
đợi để nhận yêu cầu từ phía client, nhưng trong một số chương trình nó không phải là
thích hợp đó là một tiến trình đã sử dụng hệ điều hành, trong tình huống này có thể sẽ
4



phải đợi vô hạn khi mà tiến trình gửi có thể đã bị rơi hoặc thông điệp dự kiến có thể đã
bị mất. Để cho phép các yêu cầu như vậy, thời gian chờ có thể được thiết lập vào
socket. Chọn một khoảng thời gian thích hợp là rất khó, nhưng nó nên được chọn là
một khoảng thời gian lớn hơn khá nhiều so với thời gian để chuyển một thông điệp.
4.2.3.4. Receive from any
Các phương pháp nhận không ghi rõ nguồn gốc xuất xứ của các thông điệp. Thay
vào đó có một lời gọi nhận một thông điệp gửi tới socket của nó từ bất kì nguồn gốc
nào. Các phương pháp nhận trả về địa chỉ Internet và cổng nội bộ của người gửi cho
phép người nhận kiểm tra thông điệp đến từ đâu. Có thể có một kết nối từ datagram
socket tới một cổng từ xa đặc biệt và địa chỉ Internet, trong trường hợp này socket chỉ
có thể gửi thông điệp đến và nhận thông điệp từ một địa chỉ.
4.2.4. TCP
4.2.4.1. Message size
Ứng dụng có thể chọn bao nhiêu dữ liệu được viết vào dòng hoặc đọc từ nó. Nó
có thể đối phó với một bộ dữ liệu rất nhỏ hoặc rất lớn. Các thực hiện cơ bản của một
dòng TCP quyết định bao nhiêu dữ liệu được thu thập trước khi truyền nó đi, có thể là
một hoặc nhiều hơn các gói tin IP. Khi đến nơi các dữ liệu được giao cho bên ứng
dụng theo yêu cầu. Nếu cần thiết các ứng dụng có thể buộc dữ liệu được gửi ngay lập
tức
4.2.4.2. Lost message
Các giao thức TCP sử dụng một “tin báo nhận”. Mô đun TCP tại đầu kia gửi lại
tin báo nhận (acknowledgement) cho các gói tin đã nhận được thành công, một "đồng
hồ" (timer) tại nơi gửi sẽ báo time-out nếu không nhận được tin báo nhận trong khoảng
thời gian bằng một round-trip time (RTT), và dữ liệu (được coi là bị thất lạc) sẽ được
gửi lại.
4.2.4.3. Flow control
Các giao thức TCP cố gắng để phù hợp với tốc độ của các tiến trình đọc , ghi dữ
liệu vào dòng. Nếu việc ghi quá nhanh cho việc đọc, nó có thể chặn lại việc ghi cho
đến khi việc đọc đã xử lí hết dữ liệu.


5


4.2.4.4. Message duplication and ordering
TCP kiểm tra để đảm bảo không có gói tin nào bị thất lạc bằng cách gán cho mỗi
gói tin một "số thứ tự" (sequence number). Số thứ tự này còn được sử dụng để đảm
bảo dữ liệu được trao cho ứng dụng đích theo đúng thứ tự.
4.2.4.5. Message destinations
TCP đòi hỏi thiết lập kết nối trước khi bắt đầu gửi dữ liệu và kết thúc kết nối khi
việc gửi dữ liệu hoàn tất. Cụ thể, các kết nối TCP có ba pha:
1. Thiết lập kết nối
2. Truyền dữ liệu
3. Kết thúc kết nối
Để thiết lập một kết nối, TCP sử dụng một quy trình bắt tay 3 bước (3-way handshake)
Trước khi client thử kết nối với một server, server phải đăng ký một cổng và mở cổng
đó cho các kết nối: đây được gọi là mở bị động. Một khi mở bị động đã được thiết lập
thì một client có thể bắt đầu mở chủ động. Để thiết lập một kết nối, quy trình bắt tay 3
bước xảy ra như sau:
1. Client yêu cầu mở cổng dịch vụ bằng cách gửi gói tin SYN (gói tin TCP) tới
server, trong gói tin này, tham số sequence number được gán cho một giá trị
ngẫu nhiên X.
2. Server hồi đáp bằng cách gửi lại phía client bản tin SYN-ACK, trong gói tin
này, tham số acknowledgment number được gán giá trị bằng X + 1, tham
số sequence number được gán ngẫu nhiên một giá trị Y
3. Để hoàn tất quá trình bắt tay ba bước, client tiếp tục gửi tới server bản tin
ACK, trong bản tin này, tham số sequence number được gán cho giá trị bằng
X + 1 còn tham số acknowledgment number được gán giá trị bằng Y + 1
Tại thời điểm này, cả client và server đều được xác nhận rằng, một kết nối đã được
thiết lập.
4.3. Biểu diễn dữ liệu ngoài và marshalling

Biểu diễn dữ liệu bên ngoài: một tiêu chuẩn thống nhất cho các đại diện của cấu
trúc dữ liệu và giá trị nguyên thủy.
Marshalling: quá trình lấy một tập hợp các mục dữ liệu và lắp ráp chúng thành
một hình thức thích hợp để truyền.
Unmarshalling: tháo (khôi phục) dữ liệu ban đầu khi đến.
6


4.3.1. CORBA’s Common Data Representation (CDR)
Biểu diễn dự liệu phổ biến đại diện cho tất cả các loại dữ liệu có thể được sử
dụng làm tham số hoặc giá trị trả về trong lời gọi đối tượng từ xa trong CORBA. Gồm
15 loại cơ bản: short (16-bit), long (32-bit), unsigned short, unsigned long, float (32bit),double (64-bit), char, boolean (TRUE, FALSE), octet (8-bit), hoặc một trong số
loại cơ bản hoặc có cấu trúc được mô tả trong hình 4.7.

Các loại cơ bản: CDR xác định một diễn tả có thứ tự cho cả big – endian và
little – endian. Các giá trị được truyền đi theo thứ tự của người gửi và được xác định
trong mỗi thông điệp. Người nhận dịch nếu nó đòi hỏi một trật tự khác. Ví dụ: một
thông điệp chứa 2byte (16bits) theo big – endian những bit có trọng số lớn (MSB)
chiếm byte đầu tiên, những bit có trọng số nhỏ (LSB) chiếm byte thứ hai.
Các loại có cấu trúc: các giá trị cơ bản bao gồm từng loại có cấu trúc được thêm
vào chuỗi các byte theo thứ tự nhất định (hình 4.7)

Hình 4.8 cho thấy một thông điệp trong CORBA CDR có chứa ba trường của một cấu
trúc mà các loại tương ứng là string, string và unsigned long. Hình trên cũng cho thấy
chuỗi các byte với bốn byte trong mỗi hàng
7


4.3.2. Java object serialization
Java cung cấp một cơ chế, được gọi là đối tuợng tuần tự (object serialization)

nơi mà các đối tuợng đuợc biểu diễn như một chuỗi các bytes đuợc sắp xếp tuần tự bao
gồm dữ liệu của đối tượng cũng như thông tin về kiểu của đối tượng và kiểu dữ liệu
được lưu trữ trong đối tượng. Sau khi một đối tuợng đã được ghi và lưu trữ xuống
thành file (tệp tin), nó có thể đọc từ tập tin và tái tạo lại đối tượng từ tập tin đã lưu trữ
theo đúng trình tự đã được nạp trong quá trình tuần tự hóa, đây là quá trình giải tuần tự
hóa (deserialized). Serialization là quá trình chuyển các cấu trúc dữ liệu và các đối
tượng thành một định dạng có thể lưu trữ được (vào file, in-memory buffer, hoặc
truyền qua network), sau đó có thể phục hồi lại các cấu trúc dữ liệu và đối tượng như
ban đầu, trên cùng môi trường hoặc môi trường khác.
Tiến trình deserialized một đối tượng có thể kiểm tra xem nó có đúng phiên bản
của lớp. Đối tượng Java có thể chứa tham chiếu đến các đối tượng khác. Khi một đối
tượng được tuần tự hóa, tất cả các đối tượng mà nó tham chiếu đến cũng được tuần tự
hóa để đảm bảo rằng khi các đối tượng được xây dựng lại thì các tham chiếu cũng
được thực hiện tại điểm đến. Tham chiếu tuần tự như handles, trong trường hợp này
handle là một tham chiếu đến một đối tượng trong hình thức tuần tự, ví dụ: các số tiếp
theo trong một chuỗi các số nguyên dương, các thủ tục serialization phải đảm bảo rằng
có tương ứng 1 – 1 giữa các đối tượng tham chiếu và handle.
Thông thường thuật toán Serialization sẽ thực hiện các công việc sau:
- Ghi xuống các siêu dữ liệu (metadata) về class (ví dụ như tên của class, version của
class, tổng số các field của class,….) , của đối tượng đó.
- Ghi đệ quy các thông tin chi tiết của các lớp cha cho tới khi nó gặp class Object.
- Sau khi hoàn tất việc ghi các siêu dữ liệu, tiến trình sẽ bắt đầu ghi các dữ liệu thật sự
của các đối tượng.
Mỗi lớp được đưa ra một xử lý, và không có lớp được viết nhiều hơn một lần đến dòng
byte (handle được viết thay vào đó khi cần thiết).
Nội dung của các biến là các loại cơ bản như: integers, chars, boolean, bytes hay longs
được viết bằng một định dạng nhị phân bằng cách sử dụng phương pháp của lớp
ObjectOutputStream. Các chuỗi và các kí tự được viết bởi UTF, sử dụng phương thức
UTF – 8 cho phép các kí tự ASCII được đại diện không đổi trong một byte, trong khi
đó các kí tự Unicode được đại diện bởi nhiều byte hơn. Các chuỗi đều được bắt đầu

bằng số byte mà nó chiếm trong dòng.
Như một ví dụ, hãy xem xét các serialization của các đối tượng sau đây:
8


Person p = new Person ("Smith", "London", 1984);

Biến đầu tiên (1984) là một số nguyên có độ dài cố định, các biến tiếp theo là chuỗi và
đứng đầu là số độ dài của nó. Để sử dụng Java serialization, ví dụ để tuần tự hóa đối
tượng Person, tạo ra một thể hiện của lớp ObjectOutputStream và gọi phương pháp
writeObject của nó, đi qua các đối tượng Person như là đối số của nó. Để giải tuần tự
hóa một đối tượng từ một dòng dữ liệu, mở một ObjectInputStream trên dòng và sử
dụng phương pháp readObject của nó để tái tạo lại các đối tượng ban đầu.
Serialization và deserialization của các đối số và kết quả của lời gọi từ xa thường được
thực hiện tự động bởi lớp middleware, mà không có bất kỳ sự tham gia của các lập
trình viên ứng dụng. Nếu cần thiết các lập trình viên với những yêu cầu đặc biệt có thể
viết thêm những phiên bản riêng của chính họ về phương pháp đọc và ghi đối tượng.
Để tìm hiểu làm thế nào để làm điều này và có thêm thông tin về serialization trong
Java, đọc các hướng dẫn về đối tượng serialization trong java.sun.com II
4.3.3. XML
XML (viết tắt từ tiếng Anh eXtensible Markup Language, "Ngôn ngữ đánh dấu
Mở rộng") là ngôn ngữ đánh dấu với mục đích chung do W3C đề nghị, để tạo ra các
ngôn ngữ đánh dấu khác. Đây là một tập con đơn giản của SGML, có khả năng mô tả
nhiều loại dữ liệu khác nhau. Mục đích chính của XML là đơn giản hóa việc chia sẻ dữ
liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống được kết nối với Internet.
Các ngôn ngữ dựa trên XML: RDF, RSS, MathML, XHTML, SVG, GML và cXML,
được định nghĩa theo cách thông thường, cho phép các chương trình sửa đổi và kiểm
tra hợp lệ bằng các ngôn ngữ này mà không cần có hiểu biết trước về hình thức của
chúng. XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và áp
dụng một cấu trúc kiểu cây cho thông tin đó. Tại mức căn bản, mọi thông tin đều thể

hiện dưới dạng text, chen giữa là các thẻ đánh dấu (markup) với nhiệm vụ ký hiệu sự
phân chia thông tin thành một cấu trúc có thứ bậc của các dữ liệu ký tự, các phần
tử dùng để chứa dữ liệu, và các thuộc tính của các phần tử đó. Về mặt đó, XML tương
tự với các biểu thức S (S-expression) của ngôn ngữ lập trình LISP ở chỗ chúng đều mô
9


tả các cấu trúc cây mà trong đó mỗi nút có thể có một danh sách tính chất của riêng
mình.

Hình 4.10 cho thấy mô tả XML của cấu trúc Person trong đó:
- phần tử: một phần tử trong XML bao gồm nội dung dữ liệu nằm trong 2 thẻ mở và
đóng, ví dụ: dữ liệu Smith nằm trong cặp thẻ <name> và </name>, lưu ý phần tử này
nằm trong phần tử khác với cặp thẻ và </person>đây
chính là cấu trúc có thứ bậc của dữ liệu trong XML.
- các thuộc tính: một thẻ mở có thể bao gồm các cặp tên thuộc tính liên quan và giá trị
như id=”123456789” cú pháp này giống với HTML trong đó tên thuộc tính được theo
sau bởi dấu = và giá trị thuộc tính được đặt trong cặp dấu “”, nếu có nhiều giá trị cho
thuộc tính thì sẽ được phân cách bằng dấu cách.
- tên: tên của các thẻ và thuộc tính trong XML thường bắt đầu bằng một chữ cái,
nhưng cũng có thể bắt đầu bằng một dấu gạch dưới hoặc dấu hai chấm, tiếp theo có thể
là chữ cái, chữ số, dấu gạch nối, gạch dưới, dấu hai chấm hoặc dấu chấm. Những chữ
cái là những trường hợp nhạy cảm, tên được bắt đầu bằng xml là được dùng riêng.
- dữ liệu nhị phân: tất cả các thông tin trong phần tử của XML phải được thể hiện đặc
điểm dữ liệu, nhưng câu hỏi đặt ra là làm thế nào chúng có thể đại diện cho yếu tố mã
hóa..chúng sẽ được thảo luận trong mục 9.5. Câu trả lời là chúng có thể được đại diện
trong bộ kí hiệu base64, trong đó sử dụng các kí tự chữ và số cùng với các kí tự như +,
/, = với một ý nghĩa đặc biệt.
4.3.4. Remote object references
Phần này chỉ áp dụng cho các mô hình phân tán hướng đối tượng được hỗ trợ

ngôn ngữ Java và Corba, nó không liên quan đến XML.
Khi một client gọi một thủ tục trong một đối tượng từ xa thì một thông báo
được gửi đến tiền trình server đang lưu trữ đối tượng từ xa đó. Thông báo này cần xác
định đối tượng cụ thể và phải có phương pháp gọi nó. Một tham chiếu đối tượng từ xa
là một định danh cho một đối tượng từ xa có giá trị trên toàn hệ thống phân tán, phải
10


đảm báo tính độc đáo riêng biệt trong không gian và thời gian. Có một số cách để đảm
bảo tham chiếu đối tượng từ xa là duy nhất. Một trong số đó là xây dựng một đối
tượng tham chiếu từ xa bằng cách kết hợp địa chỉ Internet của máy chủ - số cổng của
tiến trình tạo ra nó – thời gian –và số đối tượng cục bộ. Số đối tượng cục bộ này sẽ
tăng lên mỗi lần một đối tượng được tạo ra trong tiến trình đó. Số cổng cùng thời gian
tạo ra duy nhất một định danh trên máy tính. Với phương pháp này các tham chiếu đối
tượng từ xa có thể được biểu diễn bằng một định dạng như hình 4.13.

Để cho phép các đối tượng từ xa di chuyển vào được tiến trình khác nhau trên
những máy tính khác nhau, các tham chiếu đối tượng từ xa không nên sử dụng địa chỉ
của một đối tượng từ xa. Mục 8.3.3 sẽ thảo luận về hình thức một tham chiếu đối
tượng từ xa cho phép các đối tượng để được kích hoạt trong các máy chủ khác nhau
trong suốt cuộc đời của nó.
Các hệ thống peer – to – peer được mô tả trong chương 10 sử dụng một hình
thức tham chiếu đối tượng từ xa hoàn toàn độc lập với vị trí. Thông điệp sẽ được
chuyển đến đích theo cách thức của thuật toán định tuyến phân tán. Yếu tố cuối cùng
của đối tượng tham chiếu từ xa được mô tả trong hình 4.13 là thông tin về giao diện
của đối tượng từ xa, ví dụ: tên giao diện. Thông tin này có liên quan đến bất kì một
tiến trình nào nhận một đối tượng tham chiếu từ xa như một tham số, hoặc như là kết
quả của một lời gọi từ xa. Điều này sẽ được giải thích rõ hơn trong mục 5.4.2.
4.4. Truyền thông Multicast
Trong môi trường unicast, một nút mạng chỉ có khả năng gửi thông tin đến một

nút duy nhất trong một thời điểm. Trong môi trường multicast, một nút có thể gởi một
gói tin đến nhiều thiết bị trong mạng chỉ với một thao tác duy nhất. Hệ điều hành tại
các nút và chồng giao thức TCP/IP, phải hỗ trợ IP multicast để nút có thể tham gia vào
quá trình truyền multicast.
Một nút trong multicast chỉ cần gọi đến dịch vụ chuyển phát một lần duy nhất
khi muốn truyền thông điệp đến nhiều đích đến khác nhau. Quá trình truyền unicast và
broadcast là trường hợp riêng của multicast. Nếu trong môi trường truyền như là
Ethernet hay SMDS có hỗ trợ multicast và broadcast, thì sử dụng các ứng dụng gửi
một lần đến nhiều đích là một sự lựa chọn tốt. Multicast có thể cung cấp một sự cải
11


thiện to lớn về hiệu năng, sử dụng băng thông không nhiều hơn một quá trình truyền
unicast, và cho phép thiết kế các ứng dụng phân tán một cách hiệu quả.
- Điều khác biệt duy nhất giữa các gói tin IP Multicast và IP unicast là thông tin về địa
chỉ IP. Các địa chỉ multicast là địa chỉ lớp D(224.0.0.0 – 239.255.255.255)
4.4.1. IP Multicast
IP multicast là một sự mở rộng của IP. Tổ chức IETF đưa ra khuyến nghị RFC
1112, định nghĩa các thành phần mở rộng cho IP. Một hướng đi mới cho IP, IP
Multicast là giao thức dùng để truyền gói tin IP từ một nguồn đến nhiều đích đến khác
nhau trong mạng LAN hay WAN. Nhóm những thành viên muốn nhận thông tin này
thì phải tham gia vào một nhóm multicast. Với IP multicast, ứng dụng gửi một bản sao
của thông tin đến một nhóm. Thông tin này đến tất cả những người nào muốn nhận nó.
Kĩ thuật Multicast đánh địa chỉ các gói là địa chỉ nhóm thay vì địa chỉ của từng người
nhận. Các gói tin này phụ thuộc vào các mạng chuyển tiếp để chuyển đến mạng cần
nhận nó. Một nút có khả năng - Multicast chạy giao thức TCP/IP có thể nhận được
thông điệp multicast.
Multicast là kĩ thuật đẩy thông tin, trong đó một máy chủ sẽ gửi dữ liệu đến
người sử dụng mà không cần người sử dụng phải yêu cầu trước.Thuật ngữ về kéo và
đẩy xuất hiện rất nhiều trong các cuộc thảo luận về truyền tải thông tin qua Internet.

Trong kĩ thuật kéo thông tin, client yêu cầu dữ liệu từ phía máy chủ hoặc từ các máy
tính khác. Email là kĩ thuật đẩy thông tin trong khi Web lại là kĩ thuật kéo thông tin.
Multicast và quá trình định tuyến:
- Gửi thông tin chỉ cần một lần duy nhất tới nhiều người có thể tiết kiệm rất nhiều
băng thông. Các thông điệp chỉ được nhân bản khi đi qua các router, và chỉ xảy ra khi
router đó là router chuyển tiếp thay router có chứa nhóm cần gửi.
- Các router có khả năng multicast chỉ chuyển tiếp các gói tin multicast khi mà có các
máy thuộc nhóm multicast nằm trong mạng của nó. Các máy sử dụng giao thức IGMP
để thông báo cho router biết các nhóm multicast nào mà nó tham gia. Nếu các thành
viên của nhóm trong cùng một phân đoạn mạng đều rời khỏi nhóm đó thì router sẽ
không chuyển tiếp các gói tin đến phân đoạn mạng này nữa.
- Router chỉ nhân bản gói tin IP multicast khi có quá trình rẽ nhánh trong đường đi,
còn lại các trường hợp khác router chỉ gửi một gói tin duy nhất cho mỗi mạng.
- Các giao thức định tuyến cho multicast gồm có: DVMRP, MOSPF, và PIM.
Phân giải địa chỉ:

12


- Một địa chỉ multicast cho phép truyền các gói tin tới một tập hợp các thành viên của
cùng một nhóm. Một địa chỉ multicast định danh một nhóm các máy hoặc giao tiếp
mạng đại diện cho một nhóm là một địa chỉ lớp D
- Trong gói tin multicast địa chỉ đích đến trong trường địa chỉ của gói tin IP luôn là địa
chỉ lớp D và có giá trị trong khoảng 224.0.0.0 – 239.255.255.255
- Trong lớp này 256 địa chỉ đầu tiên được dùng cho mục đích quản lí và các thành
phần cấp thấp trong thao tác. Khoảng địa chỉ giữa được sử dụng cho các ứng dụng
multicast trong nhóm, intranet hoặc Internet. Khoảng trên của lớp D được sử dụng cho
các các thao tác quản lí cục bộ hoặc các ứng dụng multicast đặc biệt.
- Khi một router trong một subnet nhận được một gói tin multicast lớp 3, nó có thể ánh
xạ một địa chỉ IP multicast này thành một địa chỉ multicast lớp 2, có thể là một địa chỉ

Ethernet MAC. Tại nơi nhận thiết bị giao tiếp mạng có thể dễ dàng đọc địa chi lớp 2
này bằng phần cứng. Nếu địa chỉ nhận được là địa chỉ Multicast thì gói tin sẽ được
chuyển tiếp lên lớp trên.
- Quá trình chuyển đổi địa chỉ từ IP qua địa chỉ lớp 2 xảy ra bằng cách ánh xạ trực tiếp
địa chỉ IP tới địa chỉ MAC Ethernet, lấy 23bit trọng số thấp trong địa chỉ IP chuyển
thành 23 bit có trọng số thấp trong địa chỉ Ethernet.
4.4.2. Tính tin cậy và tính có thứ tự của Multicast
- Tính chịu lỗi dựa trên nhân bản server: xem xét các bản sao server bao gồm
các thành viên của một nhóm server bắt đầu ở trạng thái ban đầu như nhau và luôn
thực hiện các hoạt động tương tự trong cùng một thứ tự để luôn phù hợp với nhau.
Ứng dụng này của multicast đòi hỏi hoặc là tất cả các bản sao hoặc không có ai trong
số họ nhận được yêu cầu để thực hiện hoạt động, nếu một trong số họ bỏ lỡ yêu cầu nó
sẽ trở thành không phù hợp với người khác. Trong hầu hết các trường hợp, dịch vụ này
sẽ yêu cầu tất cả các thành viên nhận được thông điệp yêu cầu trong cùng một thứ tự
như nhau.
- Khám phá dịch vụ trong mạng tự phát: một cách để tiến trình khám phá dịch
vụ trong mạng tự phát là để multicast yêu cầu tại bất cứ khoảng thời gian nào,và các
dịch vụ luôn sẵn sàng để lắng nghe và trả lời. Một yêu cầu thường xuyên bị mất không
phải là vấn đề khi phát hiện dịch vụ. Thực tế Jini sử dụng IP multicast trong giao thức
của nó cho các dịch vụ khám phá. Điều này được mô tả trong mục 19.2.1.
- Hiệu suất tốt hơn thông qua nhân bản dữ liệu: xem xét các trường hợp dữ liệu
tái tạo lại chính nó chứ không phải là hoạt động trên dữ liệu được phân phối bởi các
thông điệp multicast. Ảnh hưởng của thông điệp bị mất và thứ tự không phù hợp sẽ
13


phụ thuộc vào phương pháp nhân bản và tầm quan trọng của tất cả các bản sao đang
được up date.
- Tuyên truyền các thông báo sự kiện: các ứng dụng cụ thể xác định tính yêu
cầu của multicast. Ví dụ: dịch vụ tra cứu Jini sử dụng IP multicast để công bố sự tồn

tại của họ. (xem phần 19.2.1).
4.5. Mạng ảo
4.5.1. Mạng Overlay
Overlay network là mạng máy tính được xây dựng trên nền một mạng máy tính
khác. Các nút trong mạng overlay được xem là nối với nhau bằng các liên kết ảo
(logical links) mỗi liên kết ảo có thể bao gồm rất nhiều liên kết vật lí của mạng nền.
Rất nhiều mạng P2P được gọi là mạng overlay vì nó được xây dựng và hoạt động trên
nền của Internet ví dụ như: Gnutella, Freenet, DHTs hay Dial-up Internet cũng là một
mạng overlay trên nền telephone network.
Mạng overlay cung cấp một cái gì đó không hẳn là một sự cung cấp đó là :
- Một dịch vụ được thiết kế hướng tới nhu cầu của một lớp ứng dụng hoặc một dịch vụ
đặc biệt cao cấp hơn ví dụ: phân phối ngữ cảnh đa phương tiện.
- Hoạt động hiệu quả hơn trong môi trường mạng quen thuộc ví dụ: định tuyến trong
mạng ad hoc.
- Tính năng bổ sung ví dụ: multicast hay truyền thông an toàn.
Điều này dẫn đến một loạt các loại overlay (hình 4.15), mạng overlay có những
ưu điểm sau:
- Cho phép các dịch vụ mạng mới được xác định mà không cần yêu cầu thay đổi các
mạng cơ bản, một điểm quan trọng đưa ra các mức độ tiêu chuẩn hóa trong khu vực
này và những khó khăn trong việc sửa đổi chức năng cơ bản của router.
- Khuyến khích thử nghiệm với các dịch vụ mạng và các tùy biến của dịch vụ cho các
lớp đặc biệt của ứng dụng.
- Nhiều lớp overlay có thể được xác định và cùng tồn tại, kết quả cuối cùng là có một
kiến trúc mạng nhiều hơn và được mở rộng.

14


Overlay có thể liên quan đến khái niệm lớp đã được tìm hiểu trong chương 2,3.
Overlay là lớp nhưng lớp tồn tại bên ngoài các kiến trúc tiêu chuẩn (như ngăn xếp

TCP/IP) và khai thác các mức độ hậu quả của sự tự do. Đặc biệt, những người phát
triển overlay còn được tự do để xác định các yếu tố cốt lõi của một mạng lưới như đã
đề cập ở trên, bao gồm các chế độ của addressing, các giao thức được sử dụng và các
phương pháp tiếp cận để định tuyến, thường giới thiệu phương pháp tiếp cận hoàn toàn
khác phù hợp hơn theo hướng cụ thể các lớp ứng dụng của môi trường hệ điều hành.
Ví dụ bảng băm phân tán distributed hash table, viết tắt DHT) là một lớp các hệ
thống phân tán không tập trung, cung cấp một dịch vụ tra cứu tương tự như một bảng
băm các cặp (khóa, giá trị) được lưu trữ trong DHT, và bất kỳ nút mạng tham gia nào
cũng có thể lấy được giá trị liên kết với một khóa cho trước một cách hiệu quả.
Chúng tôi minh họa việc sử dụng thành công mạng overlay bằng cách thảo luận
về Skype. Ví dụ về lớp overlay sẽ được đưa ra trong suốt cuốn sách. Ví dụ chương 10
trình bày chi tiết về các giao thức và cấu trúc thông qua việc chia sẻ file P2P, và những
thông tin về bảng băm phân tán. Chương 19 xem xét mạng không dây ad hoc và DTN
trong bối cảnh điện thoại di động và máy tính ở khắp mọi nơi, chương 20 xem xét
overlay hỗ trợ cho multimedia dòng.
4.5.2. Skype
Skype là một ứng dụng peer – to – peer cùng Voice over IP (VoIP). Nó cũng
bao gồm tin nhắn tức thời, hội nghị truyền hình, và giao diện cho dịch vụ điện thoại
tiêu chuẩn qua SkypeIn và SkypeOut. Phần mềm này được phát triển bởi Kazaa vào
15


năm 2003, nó được triển khai rộng rãi và ước tính có khoảng 370 triệu người dùng vào
năm 2009. Skype là một trường hợp nghiên cứu tuyệt vời của việc sử dụng mạng
Overlay trong hệ thống thế giới thực (quy mô lớn), chỉ ra các chức năng tiến tiến có
thể được cung cấp như thế nào trong một ứng dụng cụ thể và cách mà không làm thay
đổi kiến trúc cốt lõi của Internet. Skype là một mạng ảo, trong nó hình thành các kết
nối giữa mọi người (những thuê bao Skype hiện đang hoạt động). Không cần địa chỉ IP
hay cổng được yêu cầu để thiết lập cuộc gọi. Kiến trúc mạng ảo hỗ trợ Skype không
được công bố rộng rãi, nhưng các nhà nghiên cứu đã nghiên cứu Skype thông qua một

loạt các phương pháp, bao gồm cả phân tích lưu lượng truy cập và các nguyên tắc của
nó đang trong phạm vi công cộng. Phần lớn những chi tiết của mô tả sau đây được lấy
từ bài báo của Baset and Schulzrinne [2006], trong đó có một nghiên cứu chi tiết về
hành vi của Skype.
-Kiến trúc Skype: Skype dựa trên một cơ sở hạ tầng peer – to – peer gồm các máy
dùng bình thường (gọi là máy chủ) và các siêu nút, siêu nút là các host Skype bình
thường mà có đủ khả năng để thực hiện vai trò nâng cao của họ. Các siêu nút được lựa
chọn theo yêu cầu dựa vào một loạt các tiêu chí bao gồm: băng thông sẵn có, khả năng
tiếp cận (máy phải có một địa chỉ IP toàn cầu và không ẩn đằng sau một router NAT
được kích hoạt) và tính sẵn có (dựa vào độ dài thời gian mà Skype đã được chạy liên
tục vào nút đó). Cấu trúc tổng thể này được thể hiện trong hình 4.16.

- Kết nối người sử dụng: người dùng Skype được xác thực thông qua một máy chủ
đăng nhập nổi tiếng. Sau đó họ liên lạc với những siêu nút được lựa chọn. Để đạt được
điều này, mỗi khách hàng phải duy trì một bộ nhớ cache của một siêu nút (nghĩa là địa
chỉ IP và một cặp số cổng). Trong lần đăng nhập đầu tiên, bộ nhớ này được làm đầy
16


với các địa chỉ của khoảng 7 siêu nút, và theo thời gian khách hàng xây dựng và duy
trì một tập hợp lớn hơn nhiều (có lẽ vài trăm).
- Tìm kiếm người dùng: mục tiêu chính của các siêu nút là thực hiện việc tìm kiếm
hiệu quả danh sách toàn cầu những người sử dụng được phân phối qua các siêu nút.
Việc tìm kiếm được sắp xếp bởi siêu nút được lựa chọn của khách hàng và liên quan
đến việc tìm kiếm mở rộng các siêu nút khác cho đến khi tìm thấy người dùng. Trung
bình có khoảng 8 siêu nút được liên lạc. Một người dùng tìm kiếm thường phải mất 34 giây để hoàn thành việc host có được địa chỉ IP toàn cầu. Từ thí nghiệm thấy rằng có
sự xuất hiện các nút trung gian tham gia vào tìm kiếm bộ nhớ cache nhằm cải thiện
hiệu suất tìm kiếm.
- Kết nối cuộc gọi: khi phát hiện một yêu cầu của người dùng, Skype thiết lập một kết
nối cuộc gọi giữa hai bên, sử dụng TCP để truyền tín hiệu yêu cầu cuộc gọi và chấm

dứt cuộc gọi. Cả TCP và UDP đều được sử dụng cho dòng âm thanh. UDP được ưa
thích hơn nhưng TCP với việc sử dụng nút trung gian, được sử dụng trong những
trường hợp nhất định để phá vỡ firewall. Các phần mềm mã hóa hoặc giải mã âm
thanh đóng một phần quan trọng trong việc cung cấp chất lượng tuyệt vời cuộc gọi, và
nó được sử dụng trong Skype, các thuật toán liên quan cũng được thiết kế cẩn thận và
hoạt động trong môi trường Internet 32kbps trở lên.
4.6. Trường hợp nghiên cứu: MPI
Thuật ngữ MPI là viết tắt của Message Passing Interface, chỉ một dạng giao
thức kết nối của máy tính. Nó nằm trong chuẩn de facto cho kết nối giữa các nút chạy
một chương trình song song trên bộ nhớ chia sẻ được phân phối. Tập MPI thi hành bao
gồm một thư viện các thủ tục sao cho có thể gọi được từ các chương
trình Fortran, C, C++ hay Ada. Lợi thế của MPI so với các thư viện cũ là nó vừa thuận
tiện (vì MPI thực thi cho hầu hết các kiến trúc bộ nhớ phân tán) vừa nhanh (vì mỗi thủ
tục được tối ưu hóa cho phần cứng mà nó đang chạy)

17


Mô hình kiến trúc cơ bản của MPI được giới thiệu trong hình 4.17. Mô hình
này cũng tương tự như mô hình trong mục 4.2.1, nhưng nó có sự gia tăng về kích
thước một cách rõ ràng các bộ đệm MPI ở cả người gửi và người nhận, được quản lí
bởi thư viện MPI và sử dụng để lưu trữ dữ liệu trong quá trình vận chuyển.
4.7. Tóm tắt
Trong phần đầu của chương này đã giới thiệu về 2 giao thức cốt lõi trong giao
thức TCP/IP. TCP và UDP là 2 giao thức hoạt động ở lớp thứ 4 (Transport Layer) của
mô hình OSI, nhưng TCP: hi sinh tốc độ để đảm bảo tính tin cậy của gói tin truyền đi,
UDP: ưu tiên tốc độ và không đảm bảo độ tin cậy của gói tin. Do đó TCP và UDP
được ứng dụng vào các dịch vụ khác nhau. TCP thường được ứng dụng vào: email, file
sharing, downloading..; UDP được ứng dụng vào: Voice streaming, Video streaming..
Phần thứ hai trình bày 3 loại khác nhau của marsharing: CORBA, Java

serializes, XML.
Thông điệp multicast được sử dụng trong truyền thông giữa các thành viên của
một nhóm tiến trình. IP multicast cung cấp dịch vụ cho cả mạng cục bộ và mạng
Internet. Yêu cầu thêm về multicast có liên quan đến thứ tự của thông điệp, yêu cầu
mạnh nhất là tất cả các thành viên trong nhóm nhận được tất cả các thông điệp trong
cùng thứ tự.
Multicast có thể cũng được hỗ trợ bởi mạng overlay. Tổng quát hơn overlay
cung cấp dịch vụ của kiến trúc mạng ảo, cho phép dịch vụ mạng chuyên gia được tạo
ra trên cơ sở hạ tầng các mạng cơ bản. Mạng overlay giải quyết các vấn đề liên quan
đến lập luận end – to – end của Saltzer bằng cách cho phép các thế hệ của nhiều ứng
dụng cụ thể mạng trừu tượng.
Phần cuối của chương là trường hợp nghiên cứu các đặc điểm kĩ thuật của MPI
được phát triển bởi cộng đồng tính toán hiệu năng cao và tính năng hỗ trợ linh hoạt
cho trao đổi thông điệp.

18



×