1. Trang chủ
  2. » Công Nghệ Thông Tin

Giao thức quảng bá tin cậy trong tính toán hiệu năng cao

95 209 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 95
Dung lượng 1,23 MB

Nội dung

MỤC LỤC DANH MỤC CHỮ VIẾT TẮT DANH MỤC HÌNH VẼ MỞ ĐẦU Chương CƠ SỞ LÝ THUYẾT 1.1 Mạng internet giao thức TCP/IPv4 1.1.1 Khái niệm giao thức mạng máy tính 1.1.2.1 Mô hình kiến trúc TCP/IP 1.1.2.2 Vai trò chức tầng mô hình TCP/IP 1.1.2.3 Quá trình đóng gói liệu (Encapsulation) 1.1.2.4 Quá trình phân mảnh liệu (Fragment) 1.1.3 Một số giao thức giao thức TCP/IP 1.1.3.1 Giao thức UDP 1.1.3.2 Giao thức điều khiển truyền TCP 1.1.3.3 Giao thức mạng IP 14 1.2 Giao thức quảng bá tin cậy (Reliable Multicast Protocol) 17 1.2.1 Các giao thức truyền thông 17 1.2.2 Ứng dụng truyền thông quảng bá 19 1.2.3 Truyền thông quảng bá internet 21 1.2.3.1 Quảng bá mạng cục (LAN multicast) 22 1.2.3.2 Định tuyến quảng bá (Multicast Routing) 22 1.2.3.3 Thành viên nhóm quảng bá (Multicast Group Membership) 24 1.2.4 Giao thức quảng bá tin cậy 25 1.2.4.1 Sự tin cậy (Reliability) 26 1.2.4.2 Quản lý kết nối (Connection Management) 32 1.2.4.3 Điều khiển lưu lượng (Flow Control) 33 Chương THIẾT KẾ VÀ CÀI ĐẶT GIAO THỨC QUẢNG BÁ TIN CẬY 37 2.1 Giới thiệu 37 2.2 Cấu trúc gói tin 38 2.2.1 Cấu trúc gói tin liệu (data packet) 38 2.2.2 Cấu trúc gói tin điều khiển (control packet) 39 2.3 Các timer 41 2.4 Gửi nhận liệu 42 2.4.1 Thuật toán máy gửi 43 2.4.2 Thuật toán máy nhận 44 2.4.3 Xử lý kiện máy gửi máy nhận 45 2.4.3.1 Xử lý phát sinh kiện ACK 45 2.4.3.2 Xử lý phát sinh kiện NAK 46 2.4.3.3 Xử lý phát sinh kiện EXP 46 2.4.3.4 Xử lý nhận gói tin ACK 47 2.4.3.5 Xử lý nhận gói tin NAK 47 2.4.3.6 Xử lý nhận gói tin yêu cầu loại bỏ thông điệp 47 2.4.4 Điều khiển lưu lượng 48 2.4.5 Lược đồ nén thông tin gói tin bị 48 2.5 Điều khiển tắc nghẽn 48 2.6 Cài đặt lớp giao thức quảng bá tin cậy 49 2.7 Đánh giá hiệu giao thức xây dựng 51 2.7.1 Thao tác truyền thông quảng bá MPI 51 2.7.2 Thực nghiệm so sánh kết 53 Chương XÂY DỰNG ỨNG DỤNG 57 3.1 Bài toán quảng bá hình giáo viên tới sinh viên 57 3.2 Cài đặt toán 58 3.2.1 Cài đặt ứng dụng server 58 3.2.2 Cài đặt ứng dụng client 59 3.3 Kết thực 60 3.3.1 Giới thiệu giao diện ứng dụng 60 3.3.2 Thử nghiệm đánh giá kết 63 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 67 DANH MỤC TÀI LIỆU THAM KHẢO 68 PHỤ LỤC 71 1.1.2 M ô hình TCP/IP DANH MỤC CHỮ VIẾT TẮT KÝ HIỆU CHỮ VIẾT TẮT TCP/IP Transmission Control Protocol/Internet Protocol SMTP Simple Mail Transfer Protocol TELNET Terminal Network TCP Transmission Control Protocol UDP User Datagram Protocol RIP Routing Information Protocol OSPF Open Shortest Path First BGP Border Gateway Protocol MAC Media Access Control ARP Address Resolution Protocol RARP Reverse Address Resolution Protocol) ICMP Internet Control Message Protocol CSMA/CD Carrier Sense Multiple Access with Collision Detect MTU Maximum Transmission Unit SNMP Simple Network Management Protocol VoIP Voice over IP SNMP Simple Network Management Protocol TTL Time To Live SYN Synchronous ISN Initial Sequence Number ACK Acknowledgement FIN Finish ARP Address Resolution Protocol LAN Local Area Network WAN Wide Area Network DIS Distributed Interactive Simulation IGMP Internet Group Management Protocol DVMRP Distance Vector Multicast Routing Protocol) MOSPF Multicast extensions to Open Shortest Path First PIM-DM Protocol Independent Multicast – Dense Mode CBT Core Based Trees PIM-SM Protocol Independent Multicast – Sparse Mode XTP Xpress Transport Protocol SCE Single Connection Emulation NAK Non-Acknowledgement RMTP Reliable Multicast Transport Protocol TMTP Tree –based Multicast Transport Protocol RAMP Remote Application Media Protocol SRM Scalable Reliable Multicast RTT Round – trip – time LBRM Log-Based Receiver-Reliable Multicast MPI Message Passing Interface PDU Protocol Data Unit DANH MỤC HÌNH VẼ Hình 1.1 Tương quan mô hình OSI mô hình TCP/IP Hình 1.2 Đóng gói liệu chuyển xuống tầng kề Hình 1.3 Cấu trúc gói tin TCP (TCP Segment) 11 Hình 1.4 Quá trình thiết lập kết thúc liên kết TCP bước 13 Hình 1.5 Cấu trúc lớp địa IP 15 Hình 1.6 Cấu trúc gói tin liệu IP 16 Hình 1.7 Quảng bá mạng single-hop 18 Hình 1.8 Quảng bá mạng multi-hop 19 Hình 1.9 Các tầng mạng TCP/IP 21 Hình 1.10 Ánh xạ địa IP vào địa MAC 23 Hình 2.1 Cấu trúc header gói tin liệu 38 Hình 2.2 Cấu trúc gói tin điều khiển 39 Hình 2.3 Mối quan hệ hai thực thể gửi nhận 42 Hình 2.4 Giao thức MPI_Bcast 51 Hình 2.5 Giao thức MPI_Scatter 52 Hình 2.6 Giao thức MPI_All_to_all 53 Hình 2.7 Giao thức MPI_Allgather 53 Hình 2.8 Hiệu quảng bá tin cậy với kích thước liệu 4KB 55 Hình 2.9 Hiệu quảng bá tin cậy với kích thước liệu 64KB 55 Hình 2.10 Hiệu quảng bá tin cậy với kích thước liệu 1024KB 55 Hình 3.1 Giao diện ứng dụng Server giáo viên 62 Hình 3.2 Ứng dụng server tray taskbar 63 Hình 3.3 Dừng thoát khỏi ứng dụng server 63 Hình 3.4 Thiết lập kết nối client (máy sinh viên) 64 Hình 3.5 Hình ảnh quảng bá hình giáo viên máy sinh viên 65 Hình 3.6 Rời khỏi lớp học ảo 65 Hình 3.7 Biểu đồ so sánh thời gian quảng bá liệu hình (tính cho frame hình ảnh) theo chế độ phân giải nén khác tới máy sinh viên 67 Hình 3.8 Biểu đồ so sánh thời gian gửi liệu hình theo giao thức quảng bá tin cậy giao thức TCP chế độ phân giải 1366x768 67 MỞ ĐẦU Ngày nay, công nghệ thông tin viễn thông ngày phát triển, đòi hỏi nhu cầu xử lí thông tin ngày cao, nhanh nhiều lần tốc độ phát triển tài nguyên phần cứng phần mềm Có nhiều vấn đề đặt mà hệ thống tập trung thông thường không đáp ứng được, tốc độ xử lí hạn chế Xây dựng hệ thống phân tán có khả xử lí đồng thời toán nhiều máy tính hướng giải khả thi chứng minh tính hữu dụng Trong tính toán phân tán, việc xây dựng thuật toán để song song hóa toán cần giải quyết, đòi hỏi phải truyền liệu, giao tiếp máy tính hệ thống tính toán phân tán Tốc độ kết tính toán phân tán bị ảnh hưởng nhiều tốc độ tính tin cậy liệu truyền thông Có nhiều giao thức truyền thông phát triển đưa vào sử dụng, nhiên truyền thông Internet dựa tảng hai giao thức TCP UDP Giao thức TCP thành công ứng dụng nhiều Internet với độ tin cậy cao Tuy nhiên, TCP giao thức hoàn hảo ứng dụng sử dụng TCP Trong vài năm trở lại đây, với việc phát triển nhanh chóng hệ thống mạng quang ứng dụng Internet, TCP cho thấy hạn chế mạng với việc tiêu tốn băng thông làm cho độ trễ mạng tăng lên Ngược lại, giao thức UDP có điểm mạnh truyền liệu nhanh, tốn băng thông, nhiên lại không đảm bảo tin cậy liệu Trên thực tế, có nhiều ứng dụng đòi hỏi quảng bá liệu phải đảm bảo độ tin cậy, chẳng hạn ứng dụng tính toán song song phân tán, ứng dụng tài chính…Việc xây dựng giao thức phục vụ cho việc quảng bá liệu cách tin cậy việc làm cần thiết Xuất phát từ nhu cầu trên, tác giả lựa chọn đề tài “Giao thức quảng bá tin cậy tính toán hiệu cao” Mục tiêu đề tài tìm hiểu cài đặt giao thức quảng bá tin cậy mạng cục nhằm sử dụng ứng dụng tính toán phân tán xây dựng ứng dụng sử dụng quảng bá tin cậy Bố cục luận văn gồm có phần mở đầu, kết luận 03 chương: Chương 1: Cơ sở lý thuyết Trong chương tác giả giới thiệu kiến thức tổng quan giao thức máy tính, giao thức TCP/IP giới thiệu chi tiết giao thức quảng bá tin cậy Chương 2: Thiết kế cài đặt giao thức quảng bá tin cậy Chương giới thiệu chi tiết giao thức quảng bá tin cậy tác giả thiết kế, bao gồm cấu trúc gói tin, thuật toán gửi nhận liệu, thuật toán điều khiển tắc nghẽn Tác giả tiến hành cài đặt thực nghiệm để đánh giá hiệu giao thức xây dựng với giao thức quảng bá MPI Chương 3: Xây dựng ứng dụng Trong chương tác giả tiến hành xây dựng ứng dụng quảng bá hình giáo viên tới sinh viên phòng học sử dụng giao thức xây dựng tiến hành đánh giá hiệu so với việc quảng bá hình sử dụng giao thức TCP truyền thống Chương CƠ SỞ LÝ THUYẾT 1.1 Mạng internet giao thức TCP/IPv4 1.1.1 Khái niệm giao thức mạng máy tính Đóng gói: Trong trình trao đổi thông tin, gói liệu thêm vào số thông tin điều khiển, bao gồm địa nguồn địa đích, mã phát lỗi, điều khiển giao thức Việc thêm thông tin điều khiển vào gói liệu gọi trình đóng gói (Encapsulation) Bên thu thực ngược lại, thông tin điều khiển gỡ bỏ gói tin chuyển từ tầng lên tầng Phân đoạn hợp lại: Mạng truyền thông chấp nhận kích thước gói liệu cố định Các giao thức tầng thấp cần phải cắt liệu thành gói có kích thước quy định Quá trình gọi trình phân đoạn Ngược với trình phân đoạn bên phát trình hợp lại bên thu Dữ liệu phân đoạn cần phải hợp lại thành thông điệp thích hợp tầng ứng dụng (Application) Vì vấn đề đảm bảo thứ tự gói đến đích quan trọng Gói liệu trao đổi hai thực thể qua giao thức gọi đơn vị giao thức liệu PDU Điều khiển liên kết: Trao đổi thông tin thực thể thực theo hai phương thức: hướng liên kết (Connection - Oriented) không liên kết (Connectionless) Truyền không liên kết không yêu cầu có độ tin cậy cao, không yêu cầu chất lượng dịch vụ không yêu cầu xác nhận Ngược lại, truyền theo phương thức hướng liên kết, yêu cầu có độ tin cậy cao, đảm bảo chất lượng dịch vụ có xác nhận Trước hai thực thể trao đổi thông tin với nhau, chúng kết nối thiết lập sau trao đổi xong, kết nối giải phóng // // // // 0) [out] array: danh sách số hiệu gói tin NAK 1) [out] len: độ dài vật lý mảng kết 2) [in] limit: chiều dài tối đa mảng 3) [in] threshold: ngưỡng thời gian từ lần báo NAK cuối void getLossArray( int32* array, int32& len, const int32& limit, const int32& threshold); private: int32* m_piData1; // số thứ tự bắt đầu int32* m_piData2; // số thứ tự kết thúc timeval* m_pLastFeedbackTime; // thời gian phản hồi cuối int32* m_piCount; int32* m_piNext; int32* m_piPrior; // đếm số lần báo cáo NAK // nút danh sách // nút ưu tiên danh sách int32 m_iHead; int32 m_iTail; int32 m_iLength; // nút danh sách // nút cuối danh sách // chiều dài danh sách int32 m_iSize; // kích thước mảng tĩnh chứa ds }; Các lớp vùng đệm máy gửi, nhận CSndBuffer, CRcvBuffer class CsndBuffer // Quản lý vùng đệm máy gửi { public: CSndBuffer(const int32& mss); ~CSndBuffer(); // Chèn thêm vùng đệm người dùng vào danh sách gửi void addBuffer(const char* data, const int32& len, const int32& handle, const _MEM_ROUTINE func, const int32& ttl = -1, const int32& seqno = 0, const bool& order = false); // Tìm vị trí liệu để đóng gói gói tin liệu int32 readData(char** data, const int32& len, int32& msgno); 74 // Tìm vị trí liệu để đóng gói gói tin liệu truyền lại int32 readData(char** data, const int32 offset, const int32& len, int32& msgno, int32& seqno, int32& msglen); // Cập nhật vị trí ACK void ackData(const int32& len, const int32& payloadsize); // Đọc kích thước liệu danh sách gửi int32 getCurrBufSize() const; static void releaseBuffer(char* buf, int32); private: pthread_mutex_t m_BufLock; // mutex đồng buffer struct Block // Cấu trúc khối liệu { char* m_pcData; // trỏ tới khối liệu int32 m_iLength; // chiều dài khối timeval m_OriginTime; // thời gian yêu cầu gốc int32 m_iTTL; // giá trị TTL - time to live int32 m_iMsgNo; // số hiệu thông điệp int32 m_iSeqNo; // số thứ tự gói tin int32 m_iInOrder; // cờ báo hiệu kiểu phân phát block int32 m_iHandle; // điều khiển cho trình gửi liệu Block* m_next; // khối } *m_pBlock, *m_pLastBlock, *m_pCurrSendBlk, *m_pCurrAckBlk; int32 m_iCurrBufSize; // tổng kích thước khối int32 m_iCurrSendPnt; // trỏ tới khối liệu có số thứ tự lớn int32 m_iCurrAckPnt; // trỏ tới liệu ACK sau int32 m_iNextMsgNo; // số hiệu thông điệp int32 m_iMSS; // kích thước tối đa seqment/packet }; 75 class CRcvBuffer // Quản lý vùng đệm máy nhận { public: CRcvBuffer(const int32& mss); CRcvBuffer(const int32& mss, const int32& bufsize); ~CRcvBuffer(); // Tìm vị trí vùng đệm để nhận gói tin bool nextDataPos(char** data, int32 offset, const int32& len); // Ghi liệu vào vùng đệm bool addData(char** data, int32 offset, int32 len); // Di chuyển phần liệu vùng đệm void moveData( int32 offset, const int32& len); // Đọc liệu vùng đệm người dùng bool readBuffer(char* data, const int32& len); // Cập nhật vị trí ACK vùng đệm int32 ackData(const int32& len); // Chèn vùng đệm người dùng vào vùng đệm giao thức int32 registerUserBuf(char* buf, const int32& len, const int32& handle, const _MEM_ROUTINE func); // Xóa vùng đệm người dùng vùng đệm giao thức void removeUserBuf(); // Truy vấn không gian vùng đệm dùng để nhận liệu int32 getAvailBufSize() const; // Truy vấn số lượng liệu nhận int32 getRcvDataSize() const; // Khởi tạo danh sách thông điệp nhận void initMsgList(); // Kiểm tra thông điệp void checkMsg(const int32& type, const int32& msgno, const int32& seqno, const char* ptr, const bool& inorder, const int32& diff); 76 // Kiểm tra ACK cho danh sách thông điệp bool ackMsg(const int32& ackno, const CRcvLossList* rll); // Đánh dấu thông điệp bị loại bỏ danh sách thông điệp void dropMsg(const int32& msgno); // Đọc thông điệp int32 readMsg(char* data, const int32& len); // Lấy số hiệu thông điệp có hiệu lực int32 getValidMsgCount(); private: char* m_pcData; // trỏ tới vùng đệm giao thức int32 m_iSize; // kích thước vùng đệm giao thức int32 m_iStartPos; // vị trí đầu vào/ra int32 m_iLastAckPos; // vị trí ACK sau int32 m_iMaxOffset; char* m_pcUserBuf; // trỏ tới vùng đệm người dùng int32 m_iUserBufSize; // kích thước vùng đệm người dùng int32 m_iUserBufAck; // vị trí ACK sau vùng đệm người dùng int32 m_iHandle; // điều khiển cho yêu cầu vào struct Block { char* m_pcData; // trỏ tới vùng đệm nhận int32 m_iLength; // chiều dài khối liệu int32 m_iHandle; Block* m_next; // khối } *m_pPendingBlock, *m_pLastBlock; int32 m_iPendingSize; struct MsgInfo // Cấu trúc thông tin thông điệp { char* m_pcData; // vị trí thông điệp vùng đệm int32 m_iMsgNo; // Số hiệu thông điệp 77 int32 m_iStartSeq; // số hiệu gói tin thông điệp int32 m_iEndSeq; // số hiệu gói tin cuối thông điệp int32 m_iSizeDiff; // kích thước gói tin cuối int32 m_iLength; // chiều dài thông điệp bool m_bValid; // thông điệp có hiệu lực bool m_bDropped; bool m_bInOrder; } *m_pMessageList; // thông điệp bị loại bỏ máy gửi // gói tin phân phát theo trật tự // danh sách thông điệp nhận int32 m_iMsgInfoSize; // kích thước danh sách MsgInfo int32 m_iPtrFirstMsg; // trỏ tới thông điệp list int32 m_iPtrRecentACK; int32 m_iLastMsgNo; pthread_mutex_t m_MsgLock; // mutex để đồng hóa hoạt động MsgInfo int32 m_iValidMsgCount; // số thông điệp có hiệu lực int32 m_iMSS; // kích thước tối đa seqment/packet }; Các lớp cửa sổ truyền CAckWindow, CPktTimeWindow class CACKWindow { public: CACKWindow(); CACKWindow(const int32& size); ~CACKWindow(); // Ghi ghi ACK vào cửa sổ void store(const int32& seq, const int32& ack); private: int32* m_piACKSeqNo; // số thứ tự gói tin ACK int32* m_piACK; // số thứ tự liệu mang ACK timeval* m_pTimeStamp; // thời gian timestamp gửi gói ACK int32 m_iSize; // kích thước mảng ACK History Window int32 m_iHead; // trỏ tới ghi ACK sau 78 int32 m_iTail; // trỏ tới ghi ACK cũ }; class CPktTimeWindow { public: CPktTimeWindow(); CPktTimeWindow(const int32& s1, const int32& s2, const int32& s3); ~CPktTimeWindow(); // Đọc khoảng thời gian gửi gói tin nhỏ (micro giây) int32 getMinPktSndInt() const; // Tính tốc độ gói tin đến (số gói tin / giây) int32 getPktRcvSpeed() const; // Kiểm tra xem RTT tăng lên hay không (true, false) bool getDelayTrend() const; // Ước lượng băng thông (số gói tin / giây) int32 getBandwidth() const; // Ghi thông tin thời gian gói tin gửi void onPktSent(const timeval& currtime); // Ghi thông tin thời gian gói tin đến void onPktArrival(); // Ghi thông tin RTT gần void ack2Arrival(const int32& rtt); // Ghi lại thời gian đến gói tin lấy mẫu void probe1Arrival(); // Ghi lại thời gian đến gói tin lấy mẫu thứ hai khoảng thời gian cặp gói tin void probe2Arrival(); private: int32 m_iAWSize; // kích thước mảng ACK History Window 79 int32* m_piPktWindow; Window) // mảng cửa sổ thông tin gói tin (ACK History int32 m_iPktWindowPtr; // vị trí trỏ mảng int32 m_iRWSize; // kích thước mảng RTT history window int32* m_piRTTWindow; // mảng RTT history window int32* m_piPCTWindow; // mảng PCT history window int32* m_piPDTWindow; // mảng PDT history window int32 m_iRTTWindowPtr; // vị trí trỏ tới mảng int32 m_iPWSize; // kích thước mảng probe history window int32* m_piProbeWindow; // mảng chứa ghi khoảng thời gian cặp gói tin thăm dò int32 m_iProbeWindowPtr;// vị trí trỏ tới mảng probe history window timeval m_LastSentTime; // thời gian gửi gói tin cuối int32 m_iMinPktSndInt; // khoảng thời gian tối thiểu gửi gói tin timeval m_LastArrTime; // thời gian đến gói tin cuối timeval m_CurrArrTime; // thời gian gói tin đến thời timeval m_ProbeTime; // thời gian đến gói tin thăm dò }; Lớp truyền thông UDP – CChannel class CChannel { public: CChannel(); CChannel(const int32& version); ~CChannel(); // Mở kênh UDP sử dụng địa addr void open(const sockaddr* addr = NULL); // Gửi liệu qua kênh UDP int32 send(char* buffer, const int32& size) const; // Nhận liệu từ kênh UDP 80 int32 recv(char* buffer, const int32& size) const; // Đọc liệu từ kênh UDP không xóa liệu vùng đệm int32 peek(char* buffer, const int32& size) const; // Gửi gói tin qua kênh UDP const CChannel& operator(CPacket& packet) const; // Gửi gói tin tới địa cho trước int32 sendto(CPacket& packet, const sockaddr* addr) const; // Nhận gói tin từ kênh với địa cho trước int32 recvfrom(CPacket& packet, sockaddr* addr) const; // Kết nối tới máy ngang hàng có địa addr void connect(const sockaddr* addr); // Ngắt kết nối xóa thực thể UDP void disconnect() const; // Lấy kích thước vùng đệm gửi liệu UDP int32 getSndBufSize(); // Lấy kích thước vùng đệm nhận liệu UDP int32 getRcvBufSize(); // Thiết lập kích thước vùng đệm gửi liệu UDP void setSndBufSize(const int32& size); // Thiết lập kích thước vùng đệm nhận liệu void setRcvBufSize(const int32& size); // Truy vấn địa socket mà kênh UDP sử dụng void getSockAddr(sockaddr* addr) const; // Truy vấn địa socket máy mà kênh UDP kết nối đến void getPeerAddr(sockaddr* addr) const; private: int32 m_iIPversion; SOCKET m_iSocket; int32 m_iSndBufSize; // kích thước vùng đệm gửi liệu 81 int32 m_iRcvBufSize; char* m_pcChannelBuf; // kích thước vùng đệm nhận liệu // vùng đệm chứa liệu vào tạm thời private: void setChannelOpt(); }; Lớp điều khiển tắc nghẽn class CCC { friend class C; public: CCC(); virtual ~CCC() {} public: static const int32 m_iCCID = 0; public: // Hàm khởi tạo, gọi lần virtual void init() {} // Hàm goi kết nối bị đóng virtual void close() {} // Hàm gọi nhận gói tin ACK virtual void onACK(const int32&) {} // Hàm gọi nhận thông báo gói tin (NAK) virtual void onLoss(const int32*, const int32&) {} // Hàm gọi xảy kiện timeout virtual void onTimeout() {} // Hàm gọi gói tin liệu gửi virtual void onPktSent(const CPacket*) {} // Hàm gọi gói tin liệu nhận virtual void onPktReceived(const CPacket*) {} // Hàm xử lý gói tin liệu định nghĩa người dùng 82 virtual void processCustomMsg(const CPacket*) {} protected: // Thiết lập timer cho chu kỳ ACK void setACKTimer(const int32& msINT); // Thiết lập khoảng cách gói tin ACK void setACKInterval(const int32& pktINT); // Thiết lập giá trị RTO void setRTO(const int32& usRTO); // Gửi gói tin điều khiển định nghĩa người dùng void sendCustomMsg(CPacket& pkt) const; protected: double m_dPktSndPeriod; // chu kỳ gửi gói tin (micro giây) double m_dCWndSize; // kích thước cửa sổ tắc nghẽn (số gói tin) private: SOCKET m_; // thực thể thực thuật toán CCC int32 m_iACKPeriod; // chu kỳ timer ACK (mili giây) int32 m_iACKInterval; // khoảng cách gói tin ACK int32 m_iRTO; // giá trị RTO CPerfMon m_PerfInfo; // thông tin trạng thái giao thức }; Lớp lõi giao thức – CURMP class C { friend class CSocket; friend class CUnited; friend class CCC; private: // hàm tạo hàm hủy C(); C(const C& ancestor); const C& operator=(const C&) {return *this;} 83 ~C(); private: // Khởi tạo thực thể bind với địa addr void open(const sockaddr* addr = NULL); // Bắt đầu lắng nghe yêu cầu kết nối void listen(); // Kết nối tới thực thể lắng nghe địa peer void connect(const sockaddr* peer); // Kết nối tới thực thể lắng nghe (đã gửi gói tin bắt tay) void connect(const sockaddr* peer, CHandShake* hs); // Đóng thực thể mở void close(); // Yêu cầu gửi liệu int32 send(char* data, const int32& len, NULL, const _MEM_ROUTINE func = NULL); // Yêu cầu nhận liệu int32* overlapped = int32 recv(char* data, const int32& len, int32* overlapped = NULL, const _MEM_ROUTINE func = NULL); // Gửi thông điệp int32 sendmsg(const char* data, const int32& len, const int32& ttl, const bool& inorder); // Nhận thông điệp int32 recvmsg(char* data, const int32& len); // Gửi file liệu int64 sendfile(ifstream& ifs, const int64& offset, const int64& size, const int32& block = 366000); // Nhận file liệu int64 recvfile(ofstream& ofs, const int64& offset, const int64& size, const int32& block = 7320000); // Cấu hình lựa chọn giao thức void setOpt(Opt optName, const void* optval, const int32& optlen); 84 // Đọc option giao thức void getOpt(Opt optName, void* optval, int32& optlen); private: static CUnited s_United; public: const static int INVALID_SOCK = -1; #undef ERROR const static int ERROR = -1; private: SOCKET m_SocketID; int32 m_iSockType; SOCK_DGRAM) private: // Version // số hiệu socket // kiểu kết nối (SOCK_STREAM or const int32 m_iVersion; // version private: // Các luồng, kênh liệu tính thời gian pthread_t m_SndThread; // luồng gửi pthread_t m_RcvThread; // luồng nhận CChannel* m_pChannel; // kênh UDP CTimer* m_pTimer; // đồng hồ timer unsigned int64 m_ullCPUFrequency; // tần số CPU, sử dụng cho timer private: // Các khoảng thời gian const int32 m_iSYNInterval; // khoảng cách chu kỳ điều khiển tốc độ, 10 micro giây const int32 m_iSelfClockInterval; // khoảng thời gian ACK private: // thuộc tính kích thước gói tin số thứ tự int32 m_iPktSize; // kích thước tối đa gói tin (bytes) int32 m_iPayloadSize; private: // Các lựa chọn int32 m_iMSS; bool m_bSynSending; bool m_bSynRecving; // kích thước seqment tối đa // chế độ gửi đồng // chế độ nhận đồng 85 int32 m_iFlightFlagSize; int32 m_iSndQueueLimit; // chiều dài tối đa hàng đợi sửi int32 m_iBufSize; // kích thước vùng đệm (để nhận liệu) private: // trạng thái volatile bool m_bListening; // ktra thực thể có lắng nghe volatile bool m_bConnected; // kiểm tra kết nối đóng hay mở volatile bool m_bClosing; // thực thể đóng kết nối volatile bool m_bShutdown; // máy ngang hàng ngắt kết nối volatile bool m_bBroken; bool m_bOpened; bool m_bSndSlowStart; bool m_bRcvSlowStart; bool m_bFreeze; // kết nối bị phá vỡ // thực thể mở // pha bắt đầu chậm // pha bắt đầu chậm // đóng băng liệu gửi int32 m_iEXPCount; int32 m_iBandwidth; private: // thiết lập kết nối // đếm số lần EXP // ước lượng băng thông pthread_t m_ListenThread; static DWORD WINAPI listenHandler(LPVOID listener); private: // biến liên quan đến gửi liệu CSndBuffer* m_pSndBuffer; CSndLossList* m_pSndLossList; CPktTimeWindow* m_pSndTimeWindow; volatile unsigned int64 m_ullInterval; unsigned int64 m_ullLastDecRate; unsigned int64 m_ullTimeDiff; int32 m_iFlowWindowSize; int32 m_iMaxFlowWindowSize; volatile double m_dCongestionWindow; int32 m_iNAKCount; int32 m_iDecRandom; int32 m_iAvgNAKNum; 86 timeval m_LastSYNTime; bool m_bLoss; volatile int32 m_iSndLastAck; int32 m_iSndLastDataAck; int32 m_iSndCurrSeqNo; int32 m_iLastDecSeq; int32 m_iISN; private: // biến liên quan đến nhận liệu CRcvBuffer* m_pRcvBuffer; CRcvLossList* m_pRcvLossList; CIrregularPktList* m_pIrrPktList; CACKWindow* m_pACKWindow; CPktTimeWindow* m_pRcvTimeWindow; int32 m_iRTT; int32 m_iRTTVar; int32 m_iRcvLastAck; unsigned int64 m_ullLastAckTime; int32 m_iRcvLastAckAck; int32 m_iAckSeqNo; int32 m_iRcvCurrSeqNo; int32 m_iNextExpect; volatile bool m_bReadBuf; volatile char* m_pcTempData; volatile int32 m_iTempLen; volatile _MEM_ROUTINE m_iTempRoutine; int32 m_iUserBufBorder; unsigned int64 m_ullLastWarningTime; int32 m_iPeerISN; int32 m_iFlowControlWindow; private: // int32 m_iSndHandle; 87 int32 m_iRcvHandle; private: // đồng hóa luồng: biến mutex biến điều kiện pthread_mutex_t m_ConnectionLock; pthread_cond_t m_SendDataCond; pthread_mutex_t m_SendDataLock; pthread_cond_t m_SendBlockCond; pthread_mutex_t m_SendBlockLock; pthread_mutex_t m_AckLock; pthread_cond_t m_WindowCond; pthread_mutex_t m_WindowLock; pthread_cond_t m_RecvDataCond; pthread_mutex_t m_RecvDataLock; pthread_cond_t m_OverlappedRecvCond; pthread_mutex_t m_OverlappedRecvLock; pthread_mutex_t m_HandleLock; pthread_mutex_t m_SendLock; pthread_mutex_t m_RecvLock; void initSynch(); void destroySynch(); void releaseSynch(); private: // điều khiển luồng static DWORD WINAPI sndHandler(LPVOID sender); static DWORD WINAPI rcvHandler(LPVOID recver); private: // điều khiển tắc nghẽn void rateControl(); void flowControl(const int32& recvrate); private: // phát sinh xử lý gói tin điều khiển void sendCtrl(const int32& pkttype, void* lparam = NULL, void* rparam = NULL, const int32& size = 0); void processCtrl(CPacket& ctrlpkt); }; 88 ... tiết giao thức quảng bá tin cậy Chương 2: Thiết kế cài đặt giao thức quảng bá tin cậy Chương giới thiệu chi tiết giao thức quảng bá tin cậy tác giả thiết kế, bao gồm cấu trúc gói tin, thuật toán. .. Giao thức quảng bá tin cậy tính toán hiệu cao” Mục tiêu đề tài tìm hiểu cài đặt giao thức quảng bá tin cậy mạng cục nhằm sử dụng ứng dụng tính toán phân tán xây dựng ứng dụng sử dụng quảng bá tin. .. Hình 2.7 Giao thức MPI_Allgather 53 Hình 2.8 Hiệu quảng bá tin cậy với kích thước liệu 4KB 55 Hình 2.9 Hiệu quảng bá tin cậy với kích thước liệu 64KB 55 Hình 2.10 Hiệu quảng bá tin cậy với

Ngày đăng: 25/07/2017, 21:36

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN