Luận án nâng cao hiệu năng thông lượng và độ công bằng trong mạng không dây ad hoc của chuẩn ieee 802 11 edca

144 4 0
Luận án nâng cao hiệu năng thông lượng và độ công bằng trong mạng không dây ad hoc của chuẩn ieee 802  11 edca

Đ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

1 MỞ ĐẦU Tính cấp thiết đề tài nghiên cứu Ngày nay, công nghệ truyền dẫn không dây (Wireless Technology) phát triển nhanh chóng sử dụng hạ tầng sở phục vụ cho việc kết nối thiết bị, chí người với với mạng Internet Các công nghệ kết nối không dây tốc độ cao WiFi, 4G, 5G cho phép thiết bị kết nối dễ dàng, hiệu kinh tế Trong loại hình mạng khơng dây di động adhoc đánh giá cao tính tiện dụng có miền ứng dụng rộng lớn Các ứng dụng điển hình mạng adhoc trải rộng nhiều lĩnh vực đời sống từ quân đến dân với nhiều biến thể khác Tiêu biểu lĩnh vực quân với mạng FANET [1] cho phép thu thập thơng tin tình báo, xây dựng đồ tác chiến Trong lĩnh vực dân với mạng VANET [2, 3] cho phép triển khai dịch vụ cho giao thông thông minh, với mạng BAN [4] ứng dụng lĩnh vực y tế cho phép triển khai dịch vụ theo dõi chăm sóc sức khỏe cộng đồng Mạng adhoc với đặc tính tự trị, khơng cần có hạ tầng, định tuyến đa chặng, lượng hoạt động hạn chế, rủi ro an ninh, tô-pô mạng thường xuyên thay đổi Những đặc tính tạo nhiều thách thức tất tầng mạng Ví dụ, tầng vật lý phải xử lý tín hiệu với thay đổi nhanh đặc tính liên kết Tầng MAC phải đảm bảo khả truy nhập kênh cơng bằng, giảm thiểu xung đột gói tin, tầng mạng địi hỏi nút phối hợp để tính tốn đường tối ưu điều kiện phải thỏa mãn nhiều ràng buộc phức tạp Bên cạnh đó, đặc tính di động mạng khơng dây adhoc, nút tham gia mạng có đặc điểm khác việc truy nhập kênh truyền khác số luồng, số chặng Điều này, kéo theo hiệu mạng adhoc bị suy giảm nhanh thể qua thông số tỉ lệ lỗi, tỷ lệ gói cao, thơng lượng giảm tính cơng dễ bị phá vỡ Trong năm gần đây, lĩnh vực nghiên cứu mạng adhoc [5, 6, 7] nước [8, 9, 10, 11] giới nghiên cứu quan tâm, mang lại giá trị thực tiễn giá trị khoa học, giúp mở nhiều hội ứng dụng nâng cao tiềm lực cơng nghệ cho quốc gia Nhiều tốn quan trọng nhà khoa học giải điều khiển truy nhập, vấn đề tìm đường đi, truyền thông tin cậy, đảm bảo chất lượng dịch vụ [12, 13], Trong đó, phân lớp cộng đồng nghiên cứu quan tâm sâu giải toán then chốt tầng điều khiển truy nhập MAC chuẩn IEEE 802.11 nhằm cải thiện hiệu nâng cao chất lượng dịch vụ cho ứng dụng mạng khơng dây adhoc Bài tốn phân lớp này, bao hàm nhiều vấn đề cần giải với ràng buộc kỹ thuật phức tạp Đó vấn đề tranh chấp tài nguyên va chạm truyền phát nút mạng luồng liệu mạng Các liên kết không dây lỗi bít cao khiến gói tin phải truyền lại nhiều lần, làm hạ thấp băng thông hiệu dụng Các yếu tố bên ngồi nhiễu kênh vơ tuyến, giao thoa, fading ảnh hưởng đáng kể đến chất lượng tín hiệu truyền Trong mạng adhoc đa chặng, trạm phải truyền luồng trực tiếp sinh trạm luồng chuyển tiếp sinh luồng hàng xóm, phải chia sẻ dung lượng kênh truyền với trạm khác Hiệu ứng tranh chấp làm ảnh hưởng đến hiệu mạng Trước gia tăng mạnh mẽ ứng dụng tảng mạng không dây, nhu cầu nghiên cứu theo hướng nâng cao hiệu cho mạng adhoc trở thành vấn đề cấp thiết Nắm bắt xu đó, nghiên cứu sinh lựa chọn đề tài “Nâng cao hiệu thông lượng độ công mạng không dây adhoc chuẩn IEEE 802.11 EDCA” Để đảm bảo tính khả thi việc nghiên cứu với điều kiện giới hạn thời gian, hạ tầng trang thiết bị có, nghiên cứu sinh tập trung vào hướng nghiên cứu nâng cao hiệu thông lượng độ công tầng điều khiển truy nhập MAC theo phương thức truy nhập phân tán nâng cao EDCA chuẩn IEEE 802.11 Mục tiêu nghiên cứu đề tài Trên sở phân tích tính cấp thiết đề tài, nghiên cứu sinh xác định mục tiêu nghiên cứu luận án tập trung giải toán nâng cao hai số đo lường hiệu mạng thông lượng độ công Mục tiêu cụ thể hóa nội dung đây: (1) Đề xuất phương pháp cải thiện chất lượng luồng liệu theo mức độ ưu tiên khác dựa chế điều chỉnh tham số TXOP động EDCA Trong đó, việc cải thiện chất lượng luồng liệu thể đề xuất cần đảm bảo cho luồng ưu tiên thấp không bị luồng ưu tiên cao sử dụng hết băng thơng có đồng thời giữ số công luồng liệu mức trung bình theo chuẩn IEEE 802.11 EDCA đạt (2) Đề xuất phương pháp sử dụng Fuzzy Logic để điều khiển thông minh số tham số IEEE 802.11 EDCA nhằm nâng cao tính cơng cho luồng liệu Trong đó, tính cơng thể thơng qua việc luồng ưu tiên thấp dành mức băng thông theo tỷ lệ thích hợp với luồng ưu tiên cao Với việc phân chia tài nguyên có theo phương pháp điều khiển thông minh tham số IEEE 802.11 EDCA góp phần trì tính ổn định nâng cao chất lượng truyền tải liệu ứng dụng tảng mạng không dây adhoc Đối tượng nghiên cứu đề tài Luận án tập trung vào đối tượng sau mạng adhoc: (1) Tầng điều khiển truy nhập môi trường truyền MAC (Medium Access Control) (2) Phương thức điều khiển truy nhập phân tán nâng cao IEEE 802.11 EDCA (Enhanced Distributed Channel Access) Phạm vi nghiên cứu đề tài Nghiên cứu tham số chế truy nhập kênh truyền phân tán nâng cao IEEE 802.11 EDCA nhằm nâng cao hiệu cho luồng liệu theo số đo lường gồm thông lượng số công Nội dung nghiên cứu Để đạt mục tiêu nghiên cứu đề ra, luận án xác định nội dung nghiên cứu cụ thể sau: (1) Khảo sát, phân tích, đánh giá ảnh hưởng tham số TXOP IEEE 802.11 EDCA tới hiệu mạng adhoc (2) Khảo sát, phân tích, đánh giá ảnh hưởng tham số CW IEEE 802.11 EDCA tới hiệu mạng adhoc (3) Đề xuất phương pháp cải thiện chất lượng luồng liệu theo mức độ ưu tiên khác dựa chế điều chỉnh tham số TXOP động IEEE 802.11 EDCA (4) Đề xuất phương pháp sử dụng Fuzzy logic để điều khiển thông minh số tham số IEEE 802.11 EDCA nhằm nâng cao tính cơng cho luồng liệu Phương pháp nghiên cứu Nghiên cứu sinh thực phương pháp nghiên cứu theo quy trình sau: (1) Nêu lên vấn đề tồn đối tượng nghiên cứu (2) Phân tích, khảo sát yếu tố có ảnh hướng đến đối tượng nghiên cứu để xác định ưu nhược điểm yếu tố (3) Tìm hiểu nghiên cứu ngồi nước đối tượng nêu để đưa phương pháp (4) Xây dựng thuật tốn, mơ hình để giải vấn đề nhận diện (5) Kiểm tra tính đắn kỹ thuật tin cậy Kỹ thuật công cụ sử dụng (1) Công cụ mô phỏng: Sử dụng phần mềm mô NS2 [14] để kiểm chứng tính hiệu đề xuất thông qua kịch mô điển hình, mang tính đại diện mạng adhoc (2) Kỹ thuật phân tích, nghiên cứu lý thuyết: Sử dụng phương pháp tổng hợp, so sánh, phân tích đánh giá cơng trình nghiên cứu liên quan nước để nhận dạng vấn đề chưa giải quyết, vấn đề cần tiếp tục nghiên cứu theo định hướng đề tài Từ đó, lựa chọn thích hợp nội dung, vấn đề nghiên cứu Trên sở đó, thực cải tiến đề xuất phương pháp nhằm giải toán Ý nghĩa nghiên cứu đề tài (1) Giá trị thực tiễn: Ngày nay, công nghệ truyền dẫn không dây phát triển nhanh chóng sử dụng hạ tầng sở phục vụ cho việc kết nối thiết bị IoT [15] Các công nghệ kết nối không dây tốc độ cao WiFi, 3G, 4G cho phép thiết bị kết nối dễ dàng, hiệu kinh tế Nhiều ứng dụng tảng mạng không dây, đặc biệt mạng adhoc giao thông thông minh, y tế thông minh, nông nghiệp thông minh, thành phố thông minh dự báo trở nên phổ biến có ảnh hưởng lớn tới đời sống xã hội nhiều thập kỷ tới Giải toán nâng cao hiệu cho mạng khơng dây adhoc vấn đề có tính thời sự, mang lại nhiều ý nghĩa việc triển khai ứng dụng địi hỏi khắt khe thơng lượng, độ tin cậy tính sẵn sàng cao (2) Ý nghĩa khoa học: Kết nghiên cứu đề tài luận án góp phần hỗ trợ việc đào tạo cán trình độ cao, đẩy mạnh ứng dụng kết nghiên cứu bản, đóng góp thiết thực cho việc phát triển kinh tế - xã hội đất nước; góp phần nâng cao tiềm lực nghiên cứu lĩnh vực công nghệ cao, thúc đẩy đổi công nghệ lĩnh vực cách mạng cơng nghệ 4.0 Đóng góp vào tính đề tài luận án Đóng góp vào hướng nghiên cứu, luận án đề xuất hai nội dung có tính sau: (1) Luận án đề xuất phương pháp cải thiện chất lượng luồng liệu theo mức độ ưu tiên khác dựa chế điều chỉnh tham số TXOP động phương thức truy nhập phân tán nâng cao IEEE 802.11 EDCA (2) Luận án đề xuất phương pháp sử dụng Fuzzy logic để điều khiển thông minh số tham số phương thức truy nhập phân tán nâng cao IEEE 802.11 EDCA nhằm nâng cao tính cơng cho luồng liệu (3) Ngồi hai đề xuất có tính mang tính lý thuyết, luận án thực khảo sát phân tích, đánh giá ảnh hưởng tham số IEEE 802.11 EDCA tới hiệu mạng adhoc qua việc xây dựng mô với tham số riêng Luận án giới thiệu kết thực nghiệm việc truyền liệu đa phương tiện ứng dụng cho mạng VANET, trường hợp điển hình mạng adhoc Thực nghiệm này, thiết lập kênh truyền thơng kiểm sốt việc xử lý liệu đa phương tiện giúp mở hội việc triển khai ứng dụng mạng VANET với độ tin cậy cao nhằm sớm bắt kịp với công nghệ cách mạng 4.0 10 Bố cục luận án Bố cục luận án bao gồm phần Mở đầu, chương Nội dung, phần Kết luận hướng phát triển đề tài Cụ thể sau: Phần mở đầu: Tập trung phân tích, tính cấp thiết đề tài nghiên cứu, từ xác định mục tiêu nghiên cứu, đối tượng phạm vi nghiên cứu phương pháp nghiên cứu đề tài luận án Chương 1: Tổng quan mạng không dây adhoc Nội dung chương hệ thống hóa lại kiến thức sở, tập trung phân tích yếu tố liên quan đến hiệu mạng adhoc, hướng tiếp cận chủ đạo việc giải toán nâng cao hiệu mạng Phân tích, đánh giá nghiên cứu nước ngồi nước đạt được, từ xác định vấn đề tồn cần tiếp tục nghiên cứu Chương 2: Khảo sát, phân tích, đánh giá ảnh hưởng tham số IEEE 802.11 EDCA tới hiệu mạng adhoc Nội dung chương thực khảo sát chế điều khiển truy nhập kênh truyền phân tán nâng cao IEEE 802.11 EDCA thơng qua việc phân tích tham số truy nhập môi trường truyền IEEE 802.11 EDCA nhằm đánh giá tác động, ảnh hưởng đến chất lượng luồng ưu tiên cao luồng ưu tiên thấp Đây sở để đưa đề xuất với mục tiêu nâng cao hiệu năng, tăng chất lượng cho luồng liệu thực thi ứng dụng đòi hỏi khắt khe tiêu chí đảm bảo chất lượng QoS Chương 3: Đề xuất phương pháp cải thiện chất lượng luồng liệu theo mức độ ưu tiên khác dựa chế điều chỉnh tham số TXOP động IEEE 802.11 EDCA Nội dung chương trình bày phương pháp mới, thông qua việc điều chỉnh tham số TXOP theo chế động IEEE 802.11 EDCA Mục tiêu đề xuất nhằm nâng cao độ công đảm bảo thông lượng cho luồng liệu phù hợp với độ ưu tiên loại liệu môi trường mạng adhoc Chương 4: Đề xuất phương pháp sử dụng Fuzzy logic để điều khiển thông minh số tham số IEEE 802.11 EDCA nhằm nâng cao tính cơng cho luồng liệu Nội dung chương trình bày phương pháp tiếp cận cho việc điều khiển tham số phương thức truy nhập phân tán nâng cao IEEE 802.11 EDCA theo hướng ứng dụng trí tuệ nhân tạo Giải pháp sử dụng Fuzzy logic để điều chỉnh thông minh tham số TXOP, CW IEEE 802.11 EDCA áp dụng môi trường mạng adhoc theo độ ưu tiên loại liệu CHƯƠNG NGHIÊN CỨU TỔNG QUAN VỀ MẠNG KHÔNG DÂY ADHOC Trong chương này, luận án hệ thống hóa lại kiến thức sở liên quan đến mạng khơng dây adhoc, tập trung phân tích đặc tính, cấu trúc, ứng dụng, cơng nghệ truyền thơng mạng adhoc Phân tích yếu tố ảnh hưởng đến hiệu mạng, hướng tiếp cận chủ đạo việc giải toán nâng cao hiệu mạng adhoc, đồng thời đánh giá kết nghiên cứu nước nước đạt năm gần đây, từ xác định vấn đề tồn cần tiếp tục nghiên cứu Phần cuối chương trình bày hướng tiếp cận định hướng nghiên cứu luận án, xác định mục tiêu nội dung thực 1.1 Giới thiệu mạng adhoc 1.1.1 Định nghĩa mạng adhoc Thuật ngữ mạng adhoc đời từ năm 1972, thời điểm thường gọi với tên Packet Radio Networking (PRNET) phát triển dự án Defense Advanced Research Projects Agency (DARPA) [16] Đến năm đầu thập kỷ 1990, khái niệm adhoc thực phổ biến đề cập thiết bị dùng kết nối thông dụng notebook, computers Mạng khơng dây adhoc có nhiều định nghĩa, định nghĩa có cách diễn đạt khác thể đặc tính mạng adhoc tính độc lập tự kết nối Dưới trích dẫn hai định nghĩa mạng adhoc [17] Định nghĩa 1: Mạng adhoc network mạng khơng dây trạm liên lạc trực tiếp với trạm khác mà không cần dựa điểm truy nhập chung Các trạm mạng adhoc liên lạc trực tiếp chúng cung nằm vùng phủ sóng Định nghĩa 2: Mạng adhoc mạng tự cấu hình nút di động kết nối với thông qua liên kết không dây tạo nên mạng độc lập không phụ thuộc vào sở hạ tầng mạng Các thiết bị mạng di chuyển cách tự theo hướng Hình 1.1: Mạng adhoc di động Có thể hình dung mạng adhoc đồ thị, nút mạng biểu diễn đỉnh đồ thị Mỗi nút mạng thiết bị, máy tính riêng lẻ tham gia vào mạng Hai nút kết nối với liên kết chúng nằm phạm vi hoạt động (vùng phủ sóng / cự li truyền) Mạng adhoc có hai mơ hình đơn chặng đa chặng Mơ hình đơn chặng Hình 1.2 khoảng cách hai nút mạng S1 R nằm vùng truyền sóng Hình 1.2: Mơ hình đơn chặng Mơ hình đa chặng Hình 1.3 khoảng cách truyền sóng hai nút vượt 10 khỏi vùng truyền sóng Nút S2 muốn truyền liệu qua nút R phải qua nút S1 Trong mạng không dây quy định khoảng truyền khoảng cách trạm nhận nhận giải mã tín hiệu trạm gửi Hình 1.3: Mơ hình đa chặng Khu vực ngồi khoảng truyền, tín hiệu từ trạm gửi bị suy hao khơng thể giải mã đúng, cảm nhận tồn trạm gửi 1.1.2 Kiến trúc mạng adhoc Mạng không dây adhoc thiết kế phức tạp so với trạm mạng khơng dây có sở hạ tầng trạm phải cài đặt kỹ thuật truy cập đường truyền thực chức định tuyến Hình 1.4: Mơ hình tham chiếu OSI IEEE 802.11 130 $ns run } global argv arg0 default_options RunMultihops $argv File thiết lập kịch mô Tên file: pattern.tcl.tcl Chức năng: Thiết lập tô-pô mô proc initScenario {} { global ns val node # Define node initial position puts "Init model " if { $val(sce) == "chain" } { puts "Init $val(sce) $val(nn) nodes model " for {set i 0} {$i < $val(nn) } {incr i} { set node($i) [$ns node] $node($i) random-motion ;# disable random motion $node($i) set X_ [expr $val(distance)*($i+1)] #$node($i) set Y_ [expr 50.0+50.0*(($i+1)%2)] $node($i) set Y_ 50 $node($i) set Z_ 0.0 } } if { $val(sce) == "3node" } { puts "Init $val(sce) $val(nn) nodes model " for {set i 0} {$i < $val(nn) } {incr i} { set node($i) [$ns node] $node($i) random-motion ;# disable random motion $node($i) set Z_ 0.0 } # - - $node(0) set X_ 50 $node(0) set Y_ 250 $node(1) set X_ 250 $node(1) set Y_ 250 $node(2) set X_ 450 $node(2) set Y_ 250 } if { $val(sce) == "5node" } { puts "Init $val(sce) $val(nn) nodes model " for {set i 0} {$i < $val(nn) } {incr i} { set node($i) [$ns node] $node($i) random-motion ;# disable random motion $node($i) set Z_ 0.0 } 131 # - - - - - $node(0) set X_ 50 $node(0) set Y_ 200 $node(1) set X_ 250 $node(1) set Y_ 200 $node(2) set X_ 450 $node(2) set Y_ 200 $node(3) set X_ 650 $node(3) set Y_ 200 $node(4) set X_ 850 $node(4) set Y_ 200 } } File thiết lập kiểu dịch vụ Tên file: ser_arri.tcl Chức năng: Thiết lập kiểu dịch vụ #Multi-flow UDP connection if {$val(tra) == "mfudp"} { SetMFUDPConnection ActiveMFUDPConnection } } # #Set Multi-flows UDP connection with same offered load # proc SetMFUDPConnection {} { #$self instvar ns global ns val node udp cbr null puts "SetMSUDPConnection $val(nn) nodes " # UDP connections between node_(i) and node_(0) for {set i 1} {$i < $val(nn)} { incr i } { for {set j 0} {$j < $val(MAX_P)} { incr j } { set k [expr ($i-1)*$val(MAX_P)+$j] set udp($k) [new Agent/UDP] set null($k) [new Agent/Null] $udp($k) set fid_ $i $udp($k) set prio_ $j #$udp($k) set prio_ $ns attach-agent $node($i) $udp($k) $ns attach-agent $node(0) $null($k) 132 $ns connect $udp($k) $null($k) set cbr($k) [new Application/Traffic/CBR] $cbr($k) attach-agent $udp($k) $cbr($k) set packetSize_ 1024 $cbr($k) set interval_ [expr 1.0/(($val(MAX_P)-$j)*$val(lambda))] } } } proc ActiveMFUDPConnection {} { #$self instvar ns global ns val node udp cbr puts "ActiveMSUDPConnection $val(nn) nodes " for {set i 1} {$i < $val(nn)} { incr i } { for {set j 0} {$j < $val(MAX_P)} { incr j } { set k [expr ($i-1)*$val(MAX_P)+$j] set startsend [expr $val(init)+0.1*($val(nn)*$val(MAX_P)$k)/($val(nn)*$val(MAX_P))] #set startsend [expr $val(init)] #$ns at $val(init) "$cbr($i) start" ;#arrange for cbr to start $ns at $startsend "$cbr($k) start" ;#arrange for cbr to start $ns at $val(stop) "$cbr($k) stop" ;#arrange for cbr to start } } } Thiết lập định nghĩa cấu trúc liệu cho 802.11 EDCA Tên file: mac-802_11e.h Chức năng: Thiết lập cấu trúc liệu cho 802.11 EDCA class EDCA_PHY_MIB { friend class Mac802_11e; public: EDCA_PHY_MIB(Mac802_11e *parent); inline u_int32_t getCWMin() { return(CWMin); } inline u_int32_t getCWMax() { return(CWMax); } inline double getSlotTime() { return(SlotTime); } inline double getSIFS() { return(SIFSTime); } inline double getPIFS() { return(SIFSTime + SlotTime); } inline double getDIFS() { return(SIFSTime + * SlotTime); } inline double getEIFS() { return(getDIFS()); } inline u_int32_t getPreambleLength() { return(PreambleLength); } inline double getPLCPDataRate() { return(PLCPDataRate); } inline u_int32_t getPLCPhdrLen() { return((PreambleLength + PLCPHeaderLength) >> 3); } inline u_int32_t getHdrLen11() { 133 return(getPLCPhdrLen() + sizeof(struct hdr_mac802_11e) + ETHER_FCS_LEN); } inline u_int32_t getRTSlen() { return(getPLCPhdrLen() + sizeof(struct rts_frame)); } inline u_int32_t getCTSlen() { return(getPLCPhdrLen() + sizeof(struct cts_frame)); } inline u_int32_t getACKlen() { return(getPLCPhdrLen() + sizeof(struct ack_frame)); } private: u_int32_t CWMin; u_int32_t CWMax; double SlotTime; double SIFSTime; u_int32_t PreambleLength; u_int32_t PLCPHeaderLength; double PLCPDataRate; }; /* ====================================================================== The actual 802.11e MAC class ====================================================================== */ class Mac802_11e : public Mac { friend class DeferTimer_802_11e; friend class SIFSTimer_802_11e; friend class BackoffTimer_802_11e; friend class IFTimer_802_11e; friend class NavTimer_802_11e; friend class RxTimer_802_11e; friend class TxTimer_802_11e; friend class AkaroaTimer; public: Mac802_11e(); void recv(Packet *p, Handler *h); inline int hdr_dst(char* hdr, int dst = -2); inline int hdr_src(char* hdr, int src = -2); inline int hdr_type(char* hdr, u_int16_t type = 0); void setQ(PriQ* priqueue); PriQ* queue_; // for pointer to Queues in priq.cc //PCR2Queue* queue_; double getAIFS(int pri); void defer_stop(int pri); void calc_throughput(); 134 double idle_time; protected: inline void transmit(Packet *p, double t); inline void set_rx_state(MacState x); inline void set_tx_state(int pri, MacState x); void backoffHandler(int pri); void deferHandler(int pri); void navHandler(void); void recvHandler(void); void sendHandler(void); void txHandler(void); // methods for priority-parameters int getCW(int level); double interval_; private: int command(int argc, const char*const* argv); void check_backoff_timer(); bool AIFSset; bool CWset; int cw_[MAX_PRI]; int cwmin_[MAX_PRI]; int cwmax_[MAX_PRI]; int k_[MAX_PRI]; // 20140620 double txop_limit_[MAX_PRI]; Handler* callback_[MAX_PRI]; /* * Called by the timers */ void recv_timer(void); void send_timer(void); int check_pktCTRL(int pri); int check_pktRTS(int pri); int check_pktTx(int pri); int levels; int slotnum; double aifs_[MAX_PRI]; Packet* packets_[MAX_PRI]; /* * Packet Transmission Functions */ void send(Packet *p, Handler *h); void sendRTS(int pri, int dst); void sendCTS(int pri, int dst, double duration); void sendACK(int pri, int dst); void sendDATA(int pri, Packet *p); void RetransmitRTS(int pri); void RetransmitDATA(int pri); 135 /* * Packet Reception Functions */ void recvRTS(Packet *p); void recvCTS(Packet *p); void recvACK(Packet *p); void recvDATA(Packet *p); void void void void void capture(Packet *p); collision(Packet *p); discard(Packet *p, const char* why); rx_resume(void); tx_resume(void); inline int is_idle(void); /* * Debugging Functions */ void trace_pkt(Packet *p); void dump(char* fname); inline int initialized() { return (cache_ && logtarget_ && Mac::initialized()); } void mac_log(Packet *p) { logtarget_->recv(p, (Handler*) 0); } double txtime(Packet *p); double txtime(double psz, double drt); double txtime(int bytes) { /* clobber inherited txtime() */ abort(); } inline void inc_cw(int level) { //get persistence factor pf = queue_->pri_[level].getPF(); cw_old = cw_[level]; //calculate new cw_[pri] cw_[level] = ((cw_old + 1) * pf) - 1; if(cw_[level] > cwmax_[level]) cw_[level] = cwmax_[level]; } inline void rst_cw(int level) { cw_[level] = cwmin_[level]; } inline double sec(double t) { return(t *= 1.0e-6); } inline u_int16_t usec(double t) { u_int16_t us = (u_int16_t)floor((t *= 1e6) + 0.5); /* u_int16_t us = (u_int16_t)rint(t *= 1e6); */ return us; 136 } inline void set_nav(u_int16_t us) { double now = Scheduler::instance().clock(); double t = us * 1e-6; if((now + t) > nav_) { nav_ = now + t; if(mhNav_.busy()){ mhNav_.stop(); } mhNav_.start(t); } } inline void reset_eifs_nav(); bool inc_retryCounter(int pri); protected: EDCA_PHY_MIB phymib_; EDCA_MAC_MIB macmib_; private: double eifs_nav_; double basicRate_; double dataRate_; int numbytes_[MAX_PRI]; // for Akaroa Observation double start_handle_[MAX_PRI]; // for delay investigation double throughput; double jitter; int rtx_[MAX_PRI]; int pf; int cw_old; /* * Contention Free Burst */ int cfb_; int cfb_broadcast; double cfb_dur; int cfb_active; void cfb(int pri); /* * Mac Timers */ IFTimer_802_11e NavTimer_802_11e RxTimer_802_11e TxTimer_802_11e mhIF_; mhNav_; mhRecv_; mhSend_; // interface timer // NAV timer // incoming packets // outgoing packets 137 DeferTimer_802_11e mhDefer_; // defer timer SIFSTimer_802_11e mhSifs_; // defer timer for sifs, not stoppable! BackoffTimer_802_11e mhBackoff_; // backoff timer AkaroaTimer AK; /* ============================================================ Internal MAC State ============================================================ */ double nav_; // Network Allocation Vector MacState MacState int int Packet Packet Packet //u_int32_t u_int32_t u_int32_t double double double double //double //double //double rx_state_; // incoming state (MAC_RECV or MAC_IDLE) tx_state_[MAX_PRI]; // outgoint state tx_active_; // transmitter is ACTIVE sending; // transmitter is ACTIVE *pktRTS_[MAX_PRI]; // outgoing RTS packet *pktCTRL_[MAX_PRI]; // outgoing non-RTS packet *pktTx_[MAX_PRI]; cw_; // Contention Window ssrc_[MAX_PRI]; // STA Short Retry Count slrc_[MAX_PRI]; // STA Long Retry Count sifs_; // Short Interface Space pifs_; // PCF Interframe Space difs_; // DCF Interframe Space eifs_; // Extended Interframe Space tx_sifs_; tx_pifs_; tx_difs_; //int min_frame_len_; NsObject* logtarget_; /* ============================================================ Duplicate Detection state ============================================================ */ u_int16_t sta_seqno_; // next seqno that I'll use int cache_node_count_; Host *cache_; private: Packet* ppkt; RRTQueue *rr_rev_; RRTQueue *rr_snd_; int flow_rev_[MAX_PRI], flow_snd_[MAX_PRI]; // > array type bool delayed_; double para_delay_; void update_rev_flow (int prio, Packet* p); // Add prion prameter void update_snd_flow (int prio, Packet* p); // Add prion prameter 138 //void updateIdleTime(bool ended); //void updateCollisionTime(double ended = -1); void updateGlobalTime(); void estimation(Packet* p, bool detected = true); void debug (RRTQueue* cl); void TxopAdjust(int prio); // them bien bool isCtrPacket (Packet* p); public: void setdelay(bool d); double CurRevc[MAX_PRI], CurSend[MAX_PRI];//edit from double -> double[] double boa_[MAX_PRI]; double avePacket[MAX_PRI]; int nPacket[MAX_PRI]; double GlobalRevc[MAX_PRI], GlobalSend[MAX_PRI]; // > array double GlobalTime[MAX_PRI], EP_; // > array type //end ptg }; #endif /* mac_80211e_h */ Tên file: mac-802_11e.cc Chức năng: Thiết lập cấu trúc liệu cho 802.11 EDCA // Tinh prio cua tung Packet p void Mac802_11e::update_rev_flow (int prio, Packet* p) { //Update number of flow receive in CS Range and TX Range RRTQueue* cl = rr_rev_; //RRTQueue* next = 0; RRTQueue* tail = rr_rev_; bool find = false; u_int32_t src; nsaddr_t saddr; int32_t sport; u_int32_t dst; nsaddr_t daddr; int32_t dport; if (p == NULL){ //return; //Cerrier Sensing packet src = 255; dst = 255; saddr = 255; sport = 255; daddr = 0; dport = 255; } else { 139 hdr_mac802_11 *mh = HDR_MAC802_11(p); dst = ETHER_ADDR(mh->dh_ra); src = ETHER_ADDR(mh->dh_ta); struct hdr_ip *ih = HDR_IP(p); daddr = ih->daddr(); dport = ih->dport(); saddr = ih->saddr(); sport = ih->sport(); } //struct hdr_ip *ih1 = HDR_IP(pkt); //printf("packet: src->dst %d:%d:%d -> %d:%d:%d\n", src, ih->saddr(), ih->sport(), dst, ih->daddr(), ih->dport()); if (cl == 0) { cl = new RRTQueue(); cl->daddr = daddr; cl->dport = dport; cl->saddr = saddr; cl->sport = sport; cl->src = src; cl->dst = dst; cl->prio = prio; cl->setnext(cl); if ((cl->daddr != (int32_t) IP_BROADCAST) && (cl->daddr != cl->saddr)){ /*increase number of flow*/ flow_rev_[prio] ++; // them gia tri prio } rr_rev_ = cl; //printf("src->dst %d:%d -> %d:%d\n", ih->saddr(), ih->sport(), ih->daddr(), ih->dport() ); return; } { if((cl->daddr == daddr) && (cl->saddr == saddr) && (cl->dst == dst) && (cl->src == src) && (cl->prio == prio) && (!find)) { //found the flow of packet rr_rev_ = cl; return; } tail=cl; cl = cl->next(); } while (cl != rr_rev_); if(find == false) { //not found, create a new queue cl = new RRTQueue(); cl->daddr = daddr; cl->dport = dport; 140 cl->saddr = saddr; cl->sport = sport; cl->src = src; cl->dst = dst; cl->prio = prio; cl->setnext(rr_rev_); tail->setnext(cl);//insert next in tail rr_rev_ = cl; if ((cl->daddr != (int32_t) IP_BROADCAST) && (cl->daddr != cl->saddr)){ /*increase number of flow*/ flow_rev_[prio] ++; //printf("Tai %d: Gia tri flow_rev_[%d] = %d, packet: src->dst %d:%d:%d -> %d:%d:%d\n", index_, prio, flow_rev_[prio], src, cl->saddr, cl>sport, dst, cl->daddr, cl->dport); } } //debug(rr_rev_); } // Add prio forPacket p void Mac802_11e::update_snd_flow (int prio, Packet* p) { if (isCtrPacket(p)) return; RRTQueue* cl = rr_snd_; // RRTQueue* next = 0; RRTQueue* tail = rr_snd_; bool find = false; struct hdr_ip *ih = HDR_IP(p); hdr_mac802_11 *mh = HDR_MAC802_11(p); struct hdr_cmn *ch = HDR_CMN(p); //struct hdr_ip *ih1 = HDR_IP(pkt); //printf("packet: src->dst %d:%d -> %d:%d copy: src->dst %d:%d -> %d:%d \n", ih->saddr(), ih->sport(), ih->daddr(), ih->dport(), ih1->saddr(), ih1>sport(), ih1->daddr(), ih1->dport() ); if (cl == 0) { cl = new RRTQueue(); cl->src = ETHER_ADDR(mh->dh_ta); cl->dst = ETHER_ADDR(mh->dh_ra); cl->daddr = ih->daddr(); cl->dport = ih->dport(); cl->saddr = ih->saddr(); cl->sport = ih->sport(); cl->prio = prio; cl->setnext(cl); // 0301: moi chi kiem tra flow theo IP > chia flow theo port // port khac > tang if ((cl->daddr != (int32_t) IP_BROADCAST) && (cl->daddr != cl->saddr)){ /*increase number of flow*/ 141 //printf("src->dst %d::%d:%d -> %d::%d:%d\n", ih->saddr(), ih->sport(), ih>daddr(), ih->dport() ); flow_snd_[prio] ++; // Them gia tri prio //printf("Gia tri flow_snd_[%d] (trong if) = %d\n", prio, flow_snd_[prio]); } rr_snd_ = cl; //printf("src->dst %d:%d -> %d:%d\n", ih->saddr(), ih->sport(), ih->daddr(), ih->dport() ); return; } { if((cl->daddr == ih->daddr() && cl->saddr == ih->saddr() && cl->prio == prio) && (!find)) { //found the flow of packet rr_snd_ = cl; return; } tail=cl; cl = cl->next(); } while (cl != rr_snd_); if(find == false) { //not found, create a new queue // 0301: xem lai doan cl = new RRTQueue(); cl->src = ETHER_ADDR(mh->dh_ta); cl->dst = ETHER_ADDR(mh->dh_ra); cl->daddr = ih->daddr(); cl->dport = ih->dport(); cl->saddr = ih->saddr(); cl->sport = ih->sport(); cl->prio = prio; cl->setnext(rr_snd_); tail->setnext(cl);//insert next in tail rr_snd_ = cl; if ((cl->daddr != (int32_t) IP_BROADCAST) && (cl->daddr != cl->saddr)){ /*increase number of flow*/ flow_snd_[prio] ++; //printf("Tai %d: Gia tri flow_snd_[%d] = %d\n", index_, prio, flow_snd_[prio]); } } //if (ch->ptype() == PT_ACK) printf("src->dst %d::%d:%d -> %d::%d:%d\n", ETHER_ADDR(mh->dh_ta), ih->saddr(), ih->sport(), ETHER_ADDR(mh->dh_ra), ih>daddr(), ih->dport()); } void Mac802_11e::setdelay (bool d) { delayed_ = d; 142 double now = Scheduler::instance().clock(); //printf("%f Delayed index: %d \n", now, index_); } void Mac802_11e::debug (RRTQueue* rr) { double now = Scheduler::instance().clock(); printf("%f MAC %d\n", now, index_); RRTQueue* cl = rr; if(cl != 0) { { printf("queue: %d, src->dest: %d:%d:%d->%d:%d:%d\n", cl, cl->src, cl->saddr,cl->sport, cl->dst, cl->daddr,cl->dport); cl = cl->next(); }while (cl != rr); } } // Dua tham so prio vao ham void Mac802_11e::updateGlobalTime(){ double now = Scheduler::instance().clock(); int wTFlow_ = 0; for (int i=0; i < MAX_PRI; i++) { wTFlow_ = wTFlow_ + k_[i]*(flow_snd_[i]+flow_rev_[i]); //boa_[i]=1; } //return; for (int i=0; i < MAX_PRI; i++) { if ((GlobalTime[i] + EP_ < now) && (flow_snd_[i]>0)){ GlobalRevc[i] = (4*GlobalRevc[i] + CurRevc[i])/5; GlobalSend[i] = (4*GlobalSend[i] + CurSend[i])/5; // Time send tung flow GlobalTime[i] = now; if (nPacket[i] >= 1) { avePacket[i] = (4*avePacket[i]+ CurSend[i]/nPacket[i])/5 ; } //else avePacket[i] = 0; //30.8.2018 //boa_[i] = 1.0*GlobalSend[i]*wTFlow_/(k_[i]*flow_snd_[i]*EP_); if (GlobalSend[i]*wTFlow_>0) { boa_[i] = (k_[i]*flow_snd_[i]*EP_)/(GlobalSend[i]*wTFlow_);//edit date 24/8/2018 } //else boa_[i]=1; TxopAdjust(i); TxopAdjust(i); //printf("Now: %f, Index: %d, Prio: %d, GRevc: %f, GSend: %f, sndFlow: %d, revFlow: %d, avePacket: %f, nPacket : %d, txop_limit: %f, boa_[i] : %f \n", now, index_, i, GlobalRevc[i], GlobalSend[i], flow_snd_[i], flow_rev_[i], avePacket[i], nPacket[i], txop_limit_[i], boa_[i]); CurRevc[i] = CurSend[i] = 0; nPacket[i] = 0; //30.8.2018 //printf("avePacket[i]: %f \n", avePacket[i]); 143 //if (index_ ==1 ) printf("%f %d (GlobalSend %f / EP_ %f) * (flow_snd_[%d] %d / wTFlow_ %d = %f) = %f cw2 %d/cw %d\n",now, index_, GlobalSend[i], EP_, i, k_[i]*flow_snd_[i], wTFlow_, boa_[i]); } } } void Mac802_11e::estimation(Packet* p, bool detected) { double now = Scheduler::instance().clock(); //int prio = LEVEL(pktRx_); // Rx: Packet; Tx: array //printf("Truoc loi now = %f \n", now); int prio=0; if (p != NULL) { prio = LEVEL(p); } //printf("Sau loi now = %f prio = %d \n", now, prio); updateGlobalTime(); if (!detected) { //The packet out of Transmission range but in Carrier sensing range update_rev_flow(0,NULL); //20130705: update cho cac flow return; } hdr_cmn *ch = HDR_CMN(p); //struct hdr_cmn *sd = HDR_CMN(p); hdr_mac802_11 *mh = HDR_MAC802_11(p); u_int32_t dst = ETHER_ADDR(mh->dh_ra); u_int32_t src = ETHER_ADDR(mh->dh_ta); u_int8_t u_int8_t type = mh->dh_fc.fc_type; subtype = mh->dh_fc.fc_subtype; switch(type) { case MAC_Type_Control: switch(subtype) { case MAC_Subtype_RTS: break; case MAC_Subtype_CTS: if(dst == (u_int32_t)index_){ double t = txtime(phymib_.getRTSlen(), basicRate_) + phymib_.getSIFS() + txtime(phymib_.getCTSlen(), basicRate_) + phymib_.getSIFS(); CurSend[prio] += t; } break; case MAC_Subtype_ACK: if(dst == (u_int32_t)index_) { if (!isCtrPacket(pktTx_[prio])) { 144 double t = 0.5*cw_[prio]*phymib_.getSlotTime() + txtime(phymib_.getDIFS(), basicRate_) + txtime(pktTx_[prio]) + phymib_.getSIFS() + txtime(phymib_.getACKlen(), basicRate_)+phymib_.getSIFS(); CurSend[prio] += t; nPacket[prio] +=1; //Counter the sender flow } } //ptg //printf("%f, MAC ACK %d, src->dest: %d->%d seqno: %d\n", now, index_, ETHER_ADDR(mh->dh_ta),ETHER_ADDR(mh->dh_ra), mh->dh_scontrol, MAC_BROADCAST); break; default: printf("recvTimer1:Invalid MAC Control Subtype %x\n", subtype); } break; case MAC_Type_Data: switch(subtype) { case MAC_Subtype_Data: //printf("%f, MAC Data %d, src->dest: %d->%d seqno: %d\n", now, index_, ETHER_ADDR(mh->dh_ta),dst, mh->dh_scontrol, MAC_BROADCAST); update_rev_flow(prio, p); break; default: printf("recv_timer2:Invalid MAC Data Subtype %x\n",subtype); } break; default: printf("recv_timer3:Invalid MAC Type %x\n", type); } } // Add parameter prio void Mac802_11e::TxopAdjust(int prio) { double now = Scheduler::instance().clock(); if (txop_limit_[prio]>avePacket[prio]) { txop_limit_[prio] = boa_[prio]*txop_limit_[prio]; } if (txop_limit_[prio]>MAX_TXOP) { txop_limit_[prio]=MAX_TXOP; } //printf("txop_limit_[prio]: %f, boa_[prio]: %f , prio : %d \n", txop_limit_[prio], boa_[prio], prio); } ... nhằm đưa lại công thông lượng loại liệu chuẩn IEEE 802.1 1 38 1.6 Kết luận chương Trong chương này, luận án hệ thống lại lý thuyết mạng không dây nói chung mạng adhoc nói riêng Trong sâu phân... tín sử dụng rộng rãi nghiên cứu mạng truyền thông nói chung mạng adhoc nói riêng 27 1.4 Hướng tiếp cận giải toán hiệu mạng adhoc Để giải toán nâng cao hiệu mạng adhoc, có nhiều hướng tiếp cận,... Ứng dụng mạng adhoc Các ứng dụng tảng mạng không dây, đặc biệt mạng adhoc giao thông thông minh, y tế thông minh, nông nghiệp thông minh, thành phố thông minh phát triển mạnh mẽ Mạng adhoc với

Ngày đăng: 16/01/2023, 13:01

Tài liệu cùng người dùng

Tài liệu liên quan