• If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.
Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Multicast trong mạng hoạt động (Active network) (tt)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Multicast trong mạng hoạt động (Active network) (tt)

    Tác giả:

    + Lê Anh Đức

    + Ngô Tự Nhiên


    8.4.3. Mở rộng dịch vụ:

    Để thiết kế việc mở rộng dịch vụ ANTS multicast, chúng ta tập trung vào việc hiện thực kỹ thuật core PIM: là sự kết hợp giữa shared và SPT, còn những khía cạnh khác của PIM sẽ được giản lược. Và chúng ta sẽ xây dựng một dịch vụ multicast hoànn toànn mới và hoànn toànn độc lập với hệ thống multicast hiện tại. Tuy nhiên để thuận tiện thì ta sẽ sử dụng các địa chỉ IP multicast để xác định các ANTS multicast group. Dịch vụ kết quả sẽ là sự kết hợp của 3 loại capsule cùng hoạt động đồng thời với nhau. Mỗi capsule sẽ có một tác dụng nhất định trong việc xây dựng dịch vụ và sẽ cho một loại ứng dụng sử dụng tùy theo ứng dụng đó có tác dụng gì trong môi trường multicast, và mỗi capsule sẽ được xử lý khác nhau ở mỗi active node mà nó đi qua.
    Cả ba capsule này sẽ được nhóm vào cùng một code group vì sự tương tác giữa chúng là rất cần thiết trong môi trường multicast. Vai trò của những capsule này sẽ được tóm tắt dưới đây và sau đó sẽ được phân tích kỹ trong những phần sau:

    • DataCapsule: được gửi bởi nguồn (hay còn gọi là multicast server) để phân phát thông tin cho nhóm. Đây là gói tin dẫn đường cho dữ liệu multicast. Giống với MulticastCapsule như thiết kế ở trên.
    • JoinPruneCapsule: đươc gửi định kỳ bởi các host để duy trì trạng thái của cây forwarding ở tại các active node trong mạng. Giống với MulticastSubscribeCapsule ở thiết kế trên.
    • RegisterStopCapsule: được gửi đến server bởi rendezvous point (gốc của shared tree) để báo hiệu cho nguồn biết rằng RP đã gia nhập vào SPT.
    Để mô tả việc xử lý những capsule này sâu hơn, chúng ta sẽ xem xét một ví dụ. Trước khi một node có thể nhận dữ liệu multicast của một nhóm thì nó phải gia nhậm vào nhóm đó. Điều này được thực hiện bởi JoinPruneCapsule. Các capsule loại này sẽ được gửi định kỳ bởi mỗi bên nhận đến RP của nhóm thiết lập một cây dọc theo các active node trên đường. Sau đây là mã giả cho JoinPruneCapsule:

    int group; // group address
    boolean register; // "encapsulated" register
    public boolean evaluate(Node n) {
    Integer G = new Integer(group);
    Integer S = new Integer(getSrc()); // look up routing data
    Integer I = new Integer(last);
    RouteEntry r = RouteEntry.get(n, new Integer(RouteEntry.SOURCE_ANY), G);
    if (getSrc() == n.getAddress()) { // initialize at first node
    if (r == null) { // make new route entry
    r = RouteEntry.New(n, S, G, new Integer(getDst()), DATA_TIMEOUT);
    r.regSuppTimeout = 0; // without suppression
    } else
    r.refresh(n, DATA_TIMEOUT); // kick this soft-state
    if (r.regSuppTimeout < n.time()) {
    register = true; // unicast to the RP
    n.routeForNode(this,getDst());
    } else {
    [ omitted ] // send is on source-specific trees
    }
    } else if (register) { // forward a register towards RP
    if (n.getAddress() != getDst())
    return n.routeForNode(this, getDst());
    else { // turn it round at RP
    register = false;
    if (r == null) { // if no route data, send stop
    RegisterStopCapsule c = new RegisterStopCapsule(group, getSrc());
    c.prime(this);
    n.routeForNode(c, getSrc());
    } else { // otherwise, forward, check rate
    forwardPacket(this, r.oif, n);
    if (updateThruput(S,G,RP_THRESHOLD_COUNT,RP_THRESHOLD _TIMEOUT,n)) {
    [ omitted ] // initiate source-specific routing
    }
    }
    }
    } else { // forward a native packet
    if (r != null && r.iif != null && r.iif.equals(I)) {
    if (forwardPacket(this, r.oif, n)) {
    if (updateThruput(S,G,RP_THRESHOLD_COUNT,RP_THRESHOLD _TIMEOUT,n)) {
    [ omitted ] // initiate source-specific routing
    }
    }
    }
    }
    return true;
    }
    Và sau đây là mô hình hoạt động của capsule này:



    Hình 8. 7 Hoạt động của JoinPruneCapsule

    Mũi tên trên mỗi liên kết chính là đường đi của capsule và mũi tên trên node chính là forwarding state.

    ANTS JoinPruneCapsule thực thi tất cả các đặc tính chính của PIM như: shared tree dực trên RP và SPT cho một source xác định. Nó khác với PIM hiện tại ở 3 điểm chính: trước tiên chính là kết quả của việc tách biệt các chức năng không có trong toolkit. Từ khía cạnh của internet thì các router tham gia vào quá trình xây dựng đường trong khi các host chỉ forward packet. Do đó, để xử lý group membership thì các router đóng vai trò là các tác nhân cho các host cục bộ của chúng và giao tiếp với chúng qua IGMP. Còn trong ANTS thì mỗi host sẽ quản lý chính tác vụ group của chúng. Trong PIM thì sử dụng các bộ đếm thời gian còn trong ANTS sử dụng cách khác, các capsule sẽ được gửi định kỳ bởi các host cho mỗi nhóm mà chúng thuộc vào. Khi những capsule đi qua mỗi active node thì chúng sẽ được lọc sao cho chỉ 1 capsule là được gửi qua liên kết cho trước trong một khỏang thời gian xác định ứng với 1 nhóm cho trước. Điều này thực hiện được bằng cách duy trì thông tin trong softstore sẽ được kiểm tra trước khi capsule được truyền, các capsule vượt quá tốc độ đó sẽ bị bỏ. Điểm khác biệt thứ 3 là trạng thái của đường truyền multicast được lưu tại các node ở những dạng khác nhau. Trong PIM, forwarding state được biểu diễn dười dạng interface đầu vào và đầu ra. Thông tin này không đủ trong ANTS vì nó không đảm bảo rằng node tiếp theo khi ra khỏi interface đầu ra là một active node. Do đó, forwarding state phải được biều diễn ở dạng địa chỉ node. Khi JoinPruneCapsule được định tuyến đến RP thì chúng sẽ lưu địa chỉ của active node cuối cùng mà nó gặp trong header của nó. Địa chỉ này sẽ được lưu trong softstore của các active node cho phép các capsule được gửi qua các non-active node.
    Ngay khi JoinPrune capsule được truyền qua mạng , các thành viên của nhóm tương ứng sẽ ở những vị trí để nhận multicast data. Các dữ liệu này được gửi bởi DataCapsule, được định tuyến để theo những forwarding state đã được thiết lập. Multicast server có thể gửi các DataCapsule vào mạng ở bất kỳ thời điểm nào và cũng không cần biết là có ai nhận nó hay không. Sau đây là mã giả của DataCapsule cũng như đường truyền của chúng trong mạng:
    Mã giả:
    int group; // group address
    boolean register; // "encapsulated" register
    public boolean evaluate(Node n) {
    Integer G = new Integer(group);
    Integer S = new Integer(getSrc()); // look up routing data
    Integer I = new Integer(last);
    RouteEntry r = RouteEntry.get(n, new Integer(RouteEntry.SOURCE_ANY), G);
    if (getSrc() == n.getAddress()) { // initialize at first node
    if (r == null) { // make new route entry
    r = RouteEntry.New(n, S, G, new Integer(getDst()), DATA_TIMEOUT);
    r.regSuppTimeout = 0; // without suppression
    } else
    r.refresh(n, DATA_TIMEOUT); // kick this soft-state
    if (r.regSuppTimeout < n.time()) {
    register = true; // unicast to the RP
    n.routeForNode(this,getDst());
    } else {
    [ omitted ] // send is on source-specific trees
    }
    } else if (register) { // forward a register towards RP
    if (n.getAddress() != getDst())
    return n.routeForNode(this, getDst());
    else { // turn it round at RP
    register = false;
    if (r == null) { // if no route data, send stop
    RegisterStopCapsule c = new RegisterStopCapsule(group, getSrc());
    c.prime(this);
    n.routeForNode(c, getSrc());
    } else { // otherwise, forward, check rate
    forwardPacket(this, r.oif, n);
    if (updateThruput(S,G,RP_THRESHOLD_COUNT,RP_THRESHOLD _TIMEOUT,n)) {
    [ omitted ] // initiate source-specific routing
    }
    }
    }
    } else { // forward a native packet
    if (r != null && r.iif != null && r.iif.equals(I)) {
    if (forwardPacket(this, r.oif, n)) {
    if (updateThruput(S,G,RP_THRESHOLD_COUNT,RP_THRESHOLD _TIMEOUT,n)) {
    [ omitted ] // initiate source-specific routing
    }
    }
    }
    }
    return true;
    }

    Sơ đồ truyền của DataCapsule trong mạng:



    Hình 8. 8 Truyền DataCapsule trong mạng

    Trong PIM, khi một multicast server truyền dữ liệu qua shared tree thì quá trình được tiếp diễn theo 2 bước. Multicast data trước tiên sẽ được bao đóng ở router cục bộ trong Register message được gửi trực tiếp đến RP. Ở đó, nó sẽ được mở ra để xem địa chỉ nhóm và gửi xuống cây phân phối sử dụng forwarding state. Sự phân biệt giữa dữ liệu được bao đóng với dữ liệu gốc rất quan trong trong internet để bảo vệ host khỏi những gói tin định tuyến. Trong ANTS, dự phân biệt này không cần thiết vì IGMP không được sử dụng. Do đó, ANTS có thể kết hợp vai trò của các gói tin Register và các gói tin multicast data bình thường mà không cần qua quá trình đóng gói.
    Sự khác biệt thứ hai là sự thực thi RP. Trong PIM, nó tồn tại như là một điểm kết thúc trong mạng. Mô hình ANTS không cho phép việc tạo các process có thời gian sống lâu ở một node ở xa. Thay vào đó, hoạt động được yêu cầu sẽ được sinh ra bởi chính multicats data stream. Ví dụ: trong PIM, RP sẽ tham gia vào source specific tree cho những source đang gửi dữ liệu ở tốc độ cao. Điều này giúp tránh việc giải bao đóng và việc tạo một shortcut path có thể sinh ra lặp qua RP. Trong ANTS, quá trình này được kích khởi trực tiếp bởi forwarding của DataCapsule nào vượt quá tốc độ giới hạn. Thông tin về tốc độ được duy trì trong softstore và được cập nhật khi DataCaspule được truyền. Kỹ thuật tương tự sẽ được sử dụng ở phía receiver để kiểm soát khi chúng tham gia vào SPT.
    Loại capsule cuối cùng là RegisterStopCapsule. Sau đây là mã giả cũng như sơ dồ hoạt động của nó trong mạng.

    int group; // group address
    public boolean evaluate(Node n) {
    if (n.getAddress() != getDst()) // continue to destination
    return n.routeForNode(this, getDst());
    Object[] key = {new Integer(ROUTE_ENTRY), // look up route entry
    new Integer(RouteEntry.SOURCE_ANY),
    new Integer(group)};
    RouteEntry r = (RouteEntry)n.getCache().get(key);
    if (r != null && r.timeout > n.time()) // kick suppression timer
    r.regSuppTimeout = n.time() + REGISTER_SUPP_TIMEOUT * 1000;
    return true;
    }
    Sơ đồ hoạt động:



    Hình 8. 9 Hoạt động của RegisterStopCapsule

    Nó được sử dụng sau khi RP tham gia vào SPT. Khi RP bắt đầu nhận dữ liệu multicast qua SPT, nó phải định kỳ báo tin cho router cục bộ tương ứng. Trong PIM, nó sẽ khởi tạo một bộ đếm thời gian được sử dụng để ngăn multicast data bị bao đóng trong một Register message. Trong ANTS, message này sẽ được sinh ra từ trong multicast data forwarding. Thông tin được đặt trong softstore ở RP. Dữ liệu này được kiểm tra trong suốt quá trình truyền qua RP, và khi nó không còn tồn tại thì một RegisterStopCapsule sẽ được gửi đến nguồn
    8.4.4. Các mở rộng có thể

    Một trong những điểm mạng của mạng active network đó là các dịch vụ có thể được định nghĩa lại theo yêu cầu của ứng dụng. Ta sẽ đề nghị 2 mở rộng có thể được thực hiện sau:
    Một là cho phép một receiver gửi một message đến các receiver khác trong cây con phân phối của nó. Kỹ thuật này được gọi là subcasting. Mở rộng thứ 2 là bỏ những gói tin dư thừa truyền trong cây phân phối. Kỹ thuật này được gọi là suppression.

    8.4.3.1. Subcasting

    Trước tiên thì kỹ thuật subcast sẽ hướng đến nguồn dọc theo cây phân phối, một số lượng hop xác định và sau đó sẽ forward dữ liệu theo phần đó của cây.

    Trước khi capsule quay lại, nó được truyền đến nguồn và đếm số multicast node dọc theo đường. Định tuyến mặc định có thể được sử dụng vì mục đích này vì cây phân phối được xây dựng dựa trên kỹ thuật SP. Khi capsule được truyền với số multicast node, thì một datacapsule sẽ được tạo để truyền dữ liệu dọc theo subtree được định tuyến ở multicast node hiện tại. Kỹ thuật này không cần yêu cầu thêm softstate cũng như không làm chậm quá trình multicats hiện tại.

    8.4.3.2. Suppression

    Kỹ thuật suppression gửi một capsule dọc theo cây phân phối, hướng đến nguồn loại bỏ những gói tin thừa. Một cách lý tưởng thì nguồn sẽ chỉ nhận một bản sao của gói tin ngay cả khi nó được gửi bởi tất cả thành viên trong nhóm. Sau đây là sơ đồ hoạt động của nó:

    Forwarding routine sử dụng ID như multicast sequence number trong trường hợp NACK suppression để match và bỏ những message thừa. Ở mọi node, thông tin trong soft-store sẽ được tham khảo để quyết định xem capsule có phải là cai đầu tiên trong nhóm của nó được qua node hay không. Nếu phải thì nó sẽ được truyền lên cây phân phối. Nếu không, nó sẽ bị bỏ đi vì dư thừa.
    Email : vnpro@vnpro.org
    ---------------------------------------------------------------------------------------------------------------
Trung Tâm Tin Học VnPro
149/1D Ung Văn Khiêm P25 Q.Bình thạnh TPHCM
Tel : (08) 35124257 (5 lines)
Fax: (08) 35124314

Home page: http://www.vnpro.vn
Support Forum: http://www.vnpro.org
- Chuyên đào tạo quản trị mạng và hạ tầng Internet
- Phát hành sách chuyên môn
- Tư vấn và tuyển dụng nhân sự IT
- Tư vấn thiết kế và hỗ trợ kỹ thuật hệ thống mạng

Network channel: http://www.dancisco.com
Blog: http://www.vnpro.org/blog
Working...
X