Tạo nguồn lƣu lƣợng đến từ mạng thực

Một phần của tài liệu Nghiên cứu khả năng tương tác với mạng thực của bộ mô phỏng NS-2 (Trang 80)

Nguồn lưu lượng đến từ mạng thực có thể được sử dụng với hai mục đích khác nhau. Đó là, có thể sử dụng trực tiếp vào bộ mô phỏng để tương tác với các luồng lưu lượng được tạo ra bởi các mô hình sinh lưu lượng, hoặc có thể sử dụng để tạo một nguồn lưu lượng thực cho bộ mô phỏng bằng cách ghi lại dưới dạng tệp tin vết (trace file), để sử dụng sau này.

Để đưa nguồn lưu lượng thực vào bộ mô phỏng, cần phải tạo một đối tượng mạng Pcap/Live để bắt các gói tin từ giao diện mạng, sau đó gắn với một một Tap Agent.

Thí dụ, để đưa nguồn lưu lượng thực TCP đến từ máy có địa chỉ IP là 192.168.0.1, thông qua giao diện mạng eth0 vào bộ mô phỏng, thực hiện như sau:

# Tạo đối tượng mạng ipnetIN để bắt gói tin

set ipnetIN new Network/Pcap/Live

# Chỉ cho ipnetIN đọc gói tin từ giao diện mạng eth0

set nd $ipnetIN open readonly eth0

#Lọc các gói tin TCP có địa chỉ nguồn là 192.168.0.1

$ipnetIN filter "src 192.168.0.1 and tcp"

#Thiết lập kết nối đối tượng mạng ipnetIN tới Tap Agent aIn.

set aIn new Agent/TCPTap $aIn network $ipnetIN

Công việc mô phỏng thường được lặp đi lặp lại nhiều lần, mỗi lần thực hiện mô phỏng tốn nhiều thời gian. Đặc biệt là mô phỏng tương tác với mạng thực, vì cần một khoảng thời gian tương ứng với thời gian thực tế để thực hiện mô phỏng. Hơn nữa, để chuẩn bị một mạng thực cho việc mô phỏng cũng tốn khá nhiều thời gian, sức lực và đòi hỏi người nghiên cứu phải có một số kỹ năng thực hành mạng nhất định.

Tuy nhiên, chúng ta có thể tự mình tạo ra một nguồn sinh lưu lượng từ vết của một nguồn lưu lượng thực được ghi lại dưới dạng tệp vết, hoặc sử dụng tệp vết của các nhà nghiên cứu khác chia sẻ cho cộng đồng nghiên cứu. Từ đó, chúng ta có thể dùng cho các mô phỏng sau này như là một nguồn phát sinh lưu lượng. Tệp vết bao gồm các bản ghi (record), mỗi bản ghi có dạng cấu trúc như sau:

Với trec_time là thời gian tính theo micro giây đến khi gói tin tiếp theo được sinh ra. Và trec_size là chiều dài (tính theo bytes) của gói tin tiếp theo.

Với cách lưu trữ tệp vết như trên, ta dễ dàng tạo ra bằng cách thực hiện như sau:

– Trích nguồn lưu lượng đến từ mạng thực ra một tệp vết tạm thời, có thể được thực hiện bằng các lệnh cat, grep, awk,... Tệp tin vết tạm gồm 2 cột

cho mỗi sự kiện nhận gói tin. Cột thứ nhất là khoảng thời gian kế tiếp gói tin được nhận. Cột thứ hai là kích thước gói tin (tính bằng byte).

– Sau đó chuyển mỗi dòng của tệp tin vết tạm thành mỗi bản ghi tracerec và lưu lại.

Thí dụ, chúng tôi sẽ tạo nguồn sinh lưu lượng từ vết của nguồn FTP, truyền từ máy A đến máy C (lấy thí dụ từ thực nghiệm 3 – Hình 5.8). Giả sử rằng, khi chạy mô phỏng, chúng tôi đã thu được tệp vết out.tr. Để đơn giản, chúng tôi sẽ tạo ra file vết tạm từ file out.tr gồm nhiều dòng, mỗi dòng ứng với một sự kiện nhận gói tin TCP từ máy A gửi đến máy C. Cột thứ nhất là

trec_time, cột thứ hai là trec_size như mô tả ở trên, nhưng giá trị được lưu dưới định dạng văn bản thông thường (Plain Text).

Cụ thể, chúng tôi sẽ dùng lệnh sau để tạo file vết tạm, có tên là tcptrace.tr:

cat out.tr | grep " 2 0 live" | grep ^+ | awk '{dif = $2 - old2; if(dif<0) dif = 0;{printf("%d\t%d\n", dif*1000000, $6); old2 = $2}}' > tcptrace.tr

Tiếp theo, để chuyển mỗi dòng của tệp tin tcptrace.tr thành mỗi bản ghi tracerec và lưu lại thành nguồn lưu lượng (tcplivetrace), chúng tôi sử dụng chương trình C với đoạn mã chính như sau:

if ((fin = fopen("tcptrace.tr", "r")) == NULL) { printf("can't open file to read \n"); return -1;

};

if ((fout = fopen("tcplivetrace", "wb")) == NULL) { printf("can't open file to write \n"); return -1;

};

while(fscanf(fin,"%d\t%d",&t.trec_time,t.trec_size)!=-1){

t.trec_time = htonl(t.trec_time); // chuyển sang Big-Endian t.trec_size = htonl(t.trec_size); // chuyển sang Big-Endian fwrite(&t, sizeof(tracerec), 1, fout);

}

fclose(fout);fclose(fin);

Kết quả trả về của đoạn chương trình trên là tệp tin tcplivetrace, chúng ta hoàn toàn có thể sử dụng như một nguồn lưu lượng sẵn có trong NS.

CHƢƠNG 5: THỰC NGHIỆM MÔ PHỎNG TƢƠNG TÁC VỚI MẠNG THỰC

Chương này trình bày một số thực nghiệm mô phỏng có sử dụng tính năng tương tác với mạng thực, nhằm kiểm chứng các khả năng tương tác với mạng thực của bộ mô phỏng NS-2, thực nghiệm cũng giúp hiểu rõ hơn về hoạt động của các giao thức tại tầng Giao vận. Qua thời gian nghiên cứu, tôi có thể làm được hết các thí nghiệm phức tạp, nhưng thử một vài thí nghiệm cho thấy: Mô phỏng đòi hỏi thiết bị mạnh, với thiết bị hiện tại chạy rất lâu nên trong điều kiện cụ thể, tôi chỉ làm một số mô phỏng được trình bày ở các phần sau.

5.1 THỰC NGHIỆM 1: MINH HỌA CHẾ ĐỘ PROTOCOL 5.1.1 Mục tiêu của thực nghiệm 1

Mục tiêu của thực nghiệm: là kiểm chứng khả năng tương tác với mạng thực ở chế độ protocol, cụ thể là tính năng nhận các gói tin đến từ mạng thực và tạo gói tin thực để tương tác với đối tượng ở thế giới mạng thực. Chúng tôi sẽ chọn ứng dụng phản hồi lệnh Ping của bộ mô phỏng NS-2 để kiểm chứng tính năng này [16].

Tôi đã thử lệnh Ping trên mạng thực tới máy có địa chỉ IP là 206.190.60.37 của một máy chủ Yahoo, kết quả nhận được như trên hình sau:

Kết quả lệnh Ping đến máy chủ Yahoo có Round Trip Time trung bình là 316 ms. Chúng tôi sẽ thiết lập một mạng mô phỏng, với tham số Round Trip Time (316 ms) và địa chỉ IP (206.190.60.37) giống tham số của mạng thực, được trình bày dưới đây.

5.1.2 Thiết lập cấu hình mạng mô phỏng 1

Hình 5.2 Topo mạng mô phỏng 1

Mạng mô phỏng bao gồm 4 máy tính có địa chỉ IP như Hình 5.2, các máy A, B, C chạy hệ điều hành WindowXP (có thể sử dụng các hệ điều hành khác), máy D chạy hệ điều hành Linux Fedora core 4, là máy được cài đặt NSE (NS-Emulation). Kịch bản mô phỏng được chạy trên máy D, nhằm tạo tạo ra sơ đồ mạng mô phỏng như Hình 5.3, trong sơ đồ này, có một Agent PingResponder (có địa chỉ IP là 206.190.60.37, giống địa chỉ IP của máy chủ Yahoo) có nhiệm vụ phản hồi lệnh ping từ các máy tính khác (các máy A, B, C).

Tổng độ trễ của 2 đường truyền giữa Node1-Node2 và Node2-Node0 được thiết lập bằng ½ giá trị Round Trip Time nhận được bằng lệnh Ping trên mạng thực, là 158 ms (316/2 ms). Như vậy, kết quả Round Trip Time ping đến Agent PingResponder sẽ là: 158ms x 2 + (2 lần độ trễ đường truyền từ máy A đến máy D + độ trễ xử lý gói tin của Agent PingResponder).

Hình sau minh họa cách thức hoạt động của Agent PingResponder trả lời lệnh Ping từ một máy tính bất kỳ trên mạng thực.

D Modem NSE LAN A C B 192.168.0.1 192.168.0.3 192.168.0.4 192.168.0.5 192.168.0.2

Hình 5.3 Sơ đồ minh họa cách NS-2 phản hồi lệnh Ping

Đối tượng mạng Pcap/BPF sẽ được gắn với Node1 làm nhiệm vụ nhận tất cả các gói tin ICMP có địa chỉ đích là 206.190.60.37 (đây là địa chỉ của Agent PingResponder) rồi chuyển cho Agent PingResponder, được gắn trên Node2. Sau khi nhận gói tin ICMP từ một máy tính khác trên mạng thực, Agent PingResponder sẽ tạo gói tin ICMP phản hồi và trả lời cho máy yêu cầu thông qua đối tượng mạng Raw IP, được gắn trên Node0.

5.1.3 Kịch bản mô phỏng:

#Tên tệp emping.tcl, có thể tìm thấy tại trong thư mục ns-2.xx\emulate của #hệ thống file của NS-2

# Đặt địa chỉ cho agent PingResponder

set myaddr "206.190.60.37" set delay 158ms

set ns [new Simulator] $ns use-scheduler RealTime

set bpf [new Network/Pcap/Live]; # Sử dụng để đọc gói tin từ mạng thực

$bpf set promisc_ true

set dev2 [$bpf open readonly eth0]

set ipnet [new Network/IP]; # Đưa gói tin ra mạng thực

$ipnet open writeonly

# Chỉ nhận gói tin icmp với địa chỉ đích là myaddr

$bpf filter "icmp and dst $myaddr"

# Tạo các agent tương tác với mạng thực

set ipa [new Agent/Tap]

set echoagent [new Agent/PingResponder] puts "install nets into taps..."

$pfa set fid_ 0 $ipa set fid_ 1 $pfa network $bpf $ipa network $ipnet set node0 [$ns node] set node1 [$ns node] set node2 [$ns node]

# Tạo các đường truyền giữa các node

$ns simplex-link $node0 $node2 1Mb $delay DropTail $ns simplex-link $node2 $node0 1Mb $delay DropTail $ns simplex-link $node1 $node2 1Mb $delay DropTail $ns simplex-link $node2 $node1 1Mb $delay DropTail

$ns attach-agent $node0 $pfa; # Gắn agent pfa lên node0

$ns attach-agent $node1 $ipa; # Gắn agent ipa lên node1 # Gắn agent PingResponder lên node2

$ns attach-agent $node2 $echoagent

# Thiết lập kết nối giữa các agent

$ns simplex-connect $pfa $echoagent $ns simplex-connect $echoagent $ipa

puts "here we go.., listening for pings on addr $myaddr"

$ns run

5.1.4 Cách thực hiện và kết quả mô phỏng

Cách thực hiện: Giả sử chúng ta đã lưu kịch bản mô phỏng ở trên với tên là emping.tcl, khi đó, máy tính A (thực hiện tương tự đối với máy tính B và C) muốn ping đến Agent PingResponder, được cài trên máy tính D có địa chỉ IP là IP_D), cần thực hiện theo thứ tự như sau:

– Tại máy D: thực hiện kịch bản mô phỏng: nse emping.tcl.

– Tại máy A: thêm lệnh định tuyến đến Agent PingResponder và thực hiện Ping:

+ route add 206.190.60.37 IP_D + ping 206.190.60.37

Kết quả:

Bất kỳ một máy tính nào trên mạng thực cũng có thể sử dụng lệnh Ping để ping đến địa chỉ 206.190.60.37 và sau đó sẽ nhận được trả lời từ Agent PingResponder.

Với cách thực hiện tại máy A như trên, chúng tôi nhận kết quả như hình sau:

Hình 5.4 Kết quả mô phỏng thực nghiệm 1

Các nhận xét:

1. Agent PingResponder có khả năng phản hồi lệnh Ping như một máy tính trên mạng thực. Thực hiện ping đến một máy thật với ping đến Agent PingResponder cho kết quả hoàn toàn giống nhau.

2. Kết quả Round Trip Time của thực nghiệm 1 là 317 ms, giá trị này hoàn toàn hợp lý. Bởi vì, theo kịch bản mô phỏng, độ trễ của gói tin truyền từ node1 đến node0 là 316 ms nên tổng 2 lần độ trễ đường truyền từ máy A đến máy D cộng với độ trễ xử lý gói tin của Agent PingResponder là 1 ms. Để

khẳng định lại giá trị độ trễ này, chúng tôi làm thực nghiệm như trên với độ trễ của 2 đường truyền giữa Node1-Node2 và Node2-Node0 là 0 ms, kết quả giá trị Round Trip Time nhận được là 1 ms.

5.2 THỰC NGHIỆM 2: MINH HỌA CHẾ ĐỘ OPAQUE 5.2.1 Mục tiêu của thực nghiệm 2 5.2.1 Mục tiêu của thực nghiệm 2

Mục tiêu: là thực nghiệm khả năng tương tác với mạng thực ở chế độ opaque, cụ thể là tính năng đưa nguồn lưu lượng UDP từ mạng thực vào mạng mô phỏng NS, nguồn lưu lượng này được truyền qua các node mạng mô phỏng, sau đó được đưa ra lại mạng thực để đến đích.

5.2.2 Thiết lập cấu hình mạng mô phỏng 2

Hình 5.5 Topo mạng mô phỏng 2 Hệ thống mô phỏng gồm ba máy tính:

Máy A có địa chỉ IP: 10.0.0.2 Máy B có địa chỉ IP: 192.168.1.2

Máy C có hai card mạng, lần lượt có địa chỉ IP: 10.0.0.1 và 192.168.1.1. Cả hai đường truyền giữa B và C, giữa C và A là hai đường truyền LAN 100Mbps.

Nguồn Video phát từ máy B, nhờ một chương trình VLC (Video LAN Control) phát với tốc độ 9.716 Mbps đến địa chỉ 192.168.1.1. Tại máy C, NS sẽ bắt các gói tin này từ card mạng có địa chỉ IP là 192.168.1.1 để đưa vào bộ mô phỏng. Sau khi cho truyền nguồn Video qua các node mạng mô phỏng sẽ được NS đưa ra card mạng có địa chỉ IP là 10.0.0.1 để đến máy A. Trong bộ mô phỏng, chúng ta hoàn toàn có thể sử dụng nguồn lưu lượng Video như là một nguồn lưu lượng sẵn có trong NS. Khi đó ta có thể can thiệp nguồn lưu

A – 10.0.0.2

NSE

C

192.168.1.1 10.0.0.1

Video Video Video

lượng này như: làm cho một số gói tin bị mất, tạo độ trễ cho các gói tin,... tại bộ mô phỏng trước khi cho ra mạng thực đến máy A.

5.2.3 Kịch bản mô phỏng[18]:

# Tạo đối tượng mô phỏng ns và gọi bộ lập lịch thời gian thực

set ns [new Simulator] $ns use-scheduler RealTime

# Ghi vết mô phỏng vào file Out.tr

set traceFile [open Out.tr w] $ns trace-all $traceFile proc finish {} { global ns global traceFile $ns flush-trace close $traceFile exit 0 }

# Tạo ba node mô phỏng

set node0 $ns node set node1 $ns node set node2 $ns node

# Đưa nguồn lưu lượng thực UDP vào bộ mô phỏng từ UDP client (B)

set ipnetIN [new Network/Pcap/Live] $ipnetIN set promisc_ true

set nd $ipnetIN [open readonly eth0]

$ipnetIN filter "udp and not icmp" # Loại bỏ các gói tin icmp #Thiết lập kết nối đối tượng mạng ipnetIN tới Tap Agent aIn.

set aIn new Agent/Tap $aIn network $ipnetIN

set ipnetOUT [new Network/IP/UDP] $ipnetOUT open writeonly

$ipnetOUT connect 10.0.0.2 12345

#Thiết lập kết nối đối tượng mạng ipnetOUT tới Tap Agent aOut.

set aOut new Agent/Tap $aOut network $ipnetOUT

#Thiết lập đường truyền giữa các node.

$ns duplex-link $node0 $node1 100Mb 0ms DropTail $ns duplex-link $node1 $node2 100Mb 0ms DropTail

$ns queue-limit $node0 $node1 100 # Thiết lập hàng đợi tại node0 đến node1

$ns queue-limit $node1 $node2 100 # Thiết lập hàng đợi tại node1 đến node2

# Gắn Tap Agent aIn cho node0.

$ns attach-agent $node0 $aIn

# Gắn Tap Agent aOut cho node2.

$ns attach-agent $node2 $aOut

# Thiết lập kết nối cho hai agent.

$ns connect $aIn $aOut

# Bắt đầu thực hiện mô phỏng.

$ns run

Để thực hiện các kịch bản mô phỏng tương tác với mạng thực, chúng ta sử dụng lệnh nse <tên_kịch_bản>.tcl, còn kịch bản mô phỏng ns thông thường thì dùng lện ns <tên_kịch_bản>.tcl.

5.2.4 Kết quả nhận đƣợc từ thực nghiệm 2:

1/ Thông lượng trung bình của luồng video (đi qua C) là: 9.519076Mbps. 2/ Sự thay đổi của thông lượng luồng video (đi qua C) theo thời gian mô phỏng

Hình 5.6 Thông lượng luồng video của thực nghiệm 2

3/ Chúng tôi đưa vào mô hình lỗi với tỉ lệ lỗi gói tin lần lượt 10%, 20%, 30% và 50% đồng thời quan sát thông lượng tại card mạng vào và card mạng ra của máy C, được các kết quả như sau:

Hình 5.7(b) Thông lượng luồng video tại hai card mạng với tỉ lệ lỗi 20%

Hình 5.7(c) Thông lượng luồng video tại hai card mạng với tỉ lệ lỗi 30%

Từ các kết quả mô phỏng trên, chúng tôi rút ra một số nhận xét:

1. Thông lượng luồng video do giao thức UDP vận chuyển luôn ổn định và bị thăng giáng nhẹ. Nguyên nhân là phần mềm VLC tại máy thu và máy phát luôn có một bộ đệm thu và bộ đêm phát nên bên phát không cần phải phát với tốc độ đều tuyệt đối.

2. Có thể sử dụng các mô hình lỗi và kích thước hàng đợi để tác động lên các nguồn lưu lượng thực khi nó qua các node mạng mô phỏng NS.

5.3 THỰC NGHIỆM 3: MÔ PHỎNG TRÊN MẠNG LAN: 5.3.1 Mục tiêu của thực nghiệm 3 5.3.1 Mục tiêu của thực nghiệm 3

Mục tiêu của thực nghiệm là quan sát, ghi lại vết các nguồn lưu lượng thực được vận chuyển bởi các giao thức tầng Giao vận, nhằm hiểu rõ hơn về sự hoạt động của các giao thức này trên mạng thực tế.

Cụ thể, chúng tôi sẽ sử dụng vết mô phỏng với hai mục tiêu sau:

– Trình diễn các sự kiện mô phỏng trên NAM, giúp người xem có thể thấy được các luồng lưu lượng giống như chúng được truyền trên đường truyền thực.

– Phân tích vết thu được để đánh giá thông lượng của các kết nối trên đường truyền thực.

5.3.2 Thiết lập cấu hình mạng mô phỏng 3

Mạng thực nghiệm gồm 4 máy tính: Máy A, B, D chạy hệ điều hành WinXP, máy C chạy hệ điều hành Linux Fedora 4 cài đặt NS-2.30. Để tạo ra nguồn lưu lượng UDP, máy B sẽ truyền một luồng Video Mpeg 2 với tốc độ

Một phần của tài liệu Nghiên cứu khả năng tương tác với mạng thực của bộ mô phỏng NS-2 (Trang 80)