BÁO
CÁO
MÔN
CƠ
SỞ
MẠNG
THÔNG
TIN
tính
tốc
độ
các
luồng
dữ
liệu
gửi
qua
mạng
để
các
luồng
chia
sẽ
băng
thông
kênh
truyền
dựa
theo
nguyên
lý
công
bằng
cực
đại
cực
tiểu
(max-
min
fairness)
và
dựng
kịch
bản
mô
phỏng
bằng
công
cụ
NS2.
M
ụ
c
đ
ích
Trong
môn
Cơ
sở
mạng
thông
tin,
chúng
ta
đã
làm
quen
với
phương
pháp
đánh
giá
hoạt
động
của
một
hệ
thống
thông
tin
bằng
phương
pháp
phân
tích
toán
học,
đặc
biệt
là
các
mô
hình
liên
quan
đến
hệ
thống
hàng
đợi
đơn,
mạng
hàng
đợi,cơ
sở
cho
các
cơ
chế
điều
khiển
luồng
và
định
tuyến
trong
mạng.
Trong
phần
bài
tập
lớn
này,
chúng
ta
sẽ
được
làm
quen
với
một
phương
pháp
khác
để
đánh
giá
hiệu
năng,
đó
là
phương
pháp
mô
phỏng.
Bài
tập
lớn
này
có
một
số
mục
đích
sau:
-
Kiểm
nghiệm
các
kết
quả
phân
tích,
đánh
giá
hệ
thống
khi
dùng
phương
pháp
phân
tích
toán
học
và
phương
pháp
mô
phỏng
-
Làm
quen
với
công
cụ
mô
phỏng
NS-2
–
công
cụ
mô
phỏng
mạng
thông
dụng
nhất
hiện
nay
-
Làm
quen
với
hệ
điều
hành
Linux
và
lập
trình
trong
môi
trường
GNU.
-
Phát
triển
kỹ
năng
làm
việc
theo
nhóm.
-
Phát
triển
kỹ
năng
làm
việc
độc
lập.
Yêu c ầu
của
BTL:
BTL
của
nhóm
yêu
cầu
tính
tốc
độ
các
luồng dữ
liệu
gửi
qua
mạng
để
các
luồng chia sẽ băng thông kênh truyền dựa theo nguyên lý công bằng cực đại cực
tiểu (max-min fairness) và dựng kịch bản mô phỏng bằng công cụ NS2.
Các
thành
viên
trong
nhóm
và
nhiệm
vụ
của
từng
thành
viên
1.Lương Xuân Tiến
Tìm hiểu nguyên lý công bằng cực đại cực tiểu Max-min fairness và tính toán
các tham số
λ
S1,
λ
S2,
λ
S3 dựa theo nguyên lý trên .
2.Lê Duy Tân
Tìm hiểu công cụ mô phỏng NS-2 và dựng kịch bản mô phỏng dựa theo các
thông số
λ
S1,
λ
S2,
λ
S3 đã tính.
3.Võ Văn Thế
Tìm hiểu công cụ mô phỏng NS-2 và dựng kịch bản mô phỏng.
4.Trần Hải Anh
Vẽ đồ thị băng thông và vẽ đồ thị tốc độ mất gói.
Th
ực
hiện
bài
t
ập
lớn:
I.Tìm
hi
ểu
về
nguy
ên
lý
công
b
ằng
cực
đại
cực
tiểu
(max
-min
fairness)
Trong trao đổi thông tin, khi phía phát truyền dữ liệu đến phía thu thì dữ liệu
đầu tiên được lưu trong bộ đêm phía thu. Dữ liệu trong bộ đệm này sau khi được
xử lý và chuyển lên các lớp phía trên thì sẽ được xóa đi, để dành bộ đệm cho các
dữ liệu kế tiếp.
Trên thực tế trao đổi thông tin trong mạng, có thể xảy ra tình trạng phía phát
truyền dữ liệu với tốc độ cao hơn khả năng xử lý của phía thu, dẫn đến bộ đệm của
phía
thu
sẽ
đầy
dần
và
bị
tràn.
Trong trường
hợp
này,
phía
thu
không
thể
nhận
thêm các gói dữ liệu từ phía phát dẫn đến việc phía phát phải thực hiện truyền lại
dữ liệu, gây lãng phí băng thông trên đường truyền.
Nhằm giảm thiểu việc phải truyền lại thông tin và mất gói do tràn hàng đợi,
cần có cơ chế thực hiện kiểm soát
và điều
khiển lưu lượng thông tin đi đến
một
thiết
bị/mạng.
Chức
năng
này
được
thực
hiện
bởi
kỹ
thuật
điều
khiển
luồng
và
kiểm soát tắc nghẽn.
Một
trong
những
vấn
đề
khó
khăn
nhất
của
thực
hiện
điều
khiển
luồng
và
kiểm soát tắc nghẽn là đảm báo tính công bằng cho các kết nối hoặc người dùng
khi xảy ra tắc nghẽn. Khái niệm tính công bằng thể hiện ở chỗ các kết nối, người
dùng được sử dụng tài nguyên mạng với cơ hội như nhau
Việc sử dụng tài nguyên mạng hiệu quả nhất có thể trong khi vẫn có thể đảm
bảo
được
tính
công bằng cho
các
kết
nối
được
thực
hiện
bởi
cơ
chế
điều
khiển
luồng cực đại – cực tiểu (max–min flow control). Cơ chế này được xây dựng trên
mô hình công bằng cực đại – cực tiểu (max-min fairness).
Nguyên tắc hoạt động cơ bản của cơ chế điều khiển luồng cực đại – cực tiểu
như sau:
Nguyên
tắc
:
Sau khi người dùng với yêu cầu ít nhất về tài nguyên đó được đáp ứng công
bằng,
các tài nguyên còn lại được tiếp tục phân chia (một cách công bằng) cho
những người dùng còn lại. Trong nhóm người dùng này, tài nguyên lại được phân
chia sao cho người dùng có yêu cầu ít nhất được đáp ứng, và quá trình cứ tiếp tục
đến hết. Nói một cách khác, việc cấp phát tài nguyên mạng cho một người dùng i
không được làm ảnh hưởng đến tài nguyên đó cấp các ngườii dùng khác với yêu
cầu ít hơn i.
Thuật
toán:
1.Khởi tạo tất cả các kết nối với tốc độ = 0
Tăng tốc độ của tất cả các kết nối với một lượng nhỏ bằng nhau
δ
, lặp lại quá
trình này cho đến khi tồn tại các liên kết có tổng băng thông đạt đến giá trị băng
thông cực đại (Fa = Ca). Lúc này:
Tất cả các kết nối chia sẻ liên kết này đều sử dụng băng thông bằng nhau
Liên kết này là điểm tắc nghẽn đối với tất cả các kết nối sử dụng liên kết này
Ngừng việc tăng băng thông cho các
kết nối này vỡ
các kết nối này đạt đến
trạng thái cân bằng cực đại – cực tiểu
2.Lặp
lại
quá
trình
tăng
tốc
độ
cho
các
kết
nối
khác
chưa
đạt
đến
điểm
tắc
nghẽn cho đến khi lại tìm thấy các điểm tắc nghẽn ứng với các kết nối khác (lặp lại
bước này)
3.Thuật toán kết thúc khi tất cả các kết nối đều đó tìm được điểm tắc nghẽn
n
a
:=
số
lượng
đường
p
∈
P
k
với
δ
p
(a)
=
1
r
k
:
=
min
(C
a
−
F
a
k1
)
/
n
a
a∈A
k
k
r
p
1
+
r
k
(
p
∈
P
k
)
r
p
=
k −1 k
r
p
(
p
∉
P
)
(a).r
a∈A
k+1
P
k1
:
=
{
p
|
δ
p
(a)
=
0,
for
all
a
∉
A
k+1
}
k := k +1
Nếu P
k
là tập hợp rỗng thì dừng lại, nếu không thì quay lại bước 1.
II.
Th
ực
hiện
:
1.
Yêu
cầu:
F
a
k
:
=
∑
δ
p p
k
A
:
=
{
a
|
C
a ak
>
0
}
− F
k
k
k
Với các tham số:
Đường
nối
L1
có
dung
lượng
là
C1=
1MB/s
trễ
lan
truyền
100ms
Đường
nối
L2
có
dung
lượng
l à
C2 =0,6MB/s,
trễ
lan
truyền
50ms
Nút
1,
2,
3
là
các
hàng
đợi
đơn
hoạt
động
theo
nguyên
tắc
FIFO
với
độ
lớn
hàng
đợi
K=5
gói.
Các
nguồn
Si
phát
gói
với
độ
dài
cố
định
125byte,tuân
theo
phân
bố
Poisson.
Băng
thông
đối
đa
tổng
cộng
mà
các
luồng
được
chiếm
trên
một
kênh
truyền
vật
lý
là
bằng
95%
dung
lượng
kênh
truyền
=>
C1sd=95%*1MB/s=0.95MB/s
C2sd=95%*0.6MB/s=0.57MB/s
λ
S1,
λ
S2,
λ
S3
=?
Tính toán:
-Các
đường
liên
kết
(1,2),(2,3)
-Các
kết
nối
(S1,D1),(S2,D2),(S3,D3)
-
P
k
là tập hợp các kết nối không đi qua liên kết bão hòa nào, tính tại lúc bắt đầu
của bước k
-nka là số lượng kết nối trong P
k
sử dụng liên kết a
Liên kết (1,2) nka =2
Liên kết (2,3) nka =2
- r
k
là phần băng thông tăng lên cho mỗi kết nối trong P
k
tại bước thứ k
Bước
1:
k = 1, F01 = 0, F02 =0, r0p = 0, P
1
=[(S1,D1),(S2,D2),(S3,D3)] và A
1
= A
r
k
=min((0.57-0)/2,(0.95-0)/2)=
0.285
MB/s
r
11
=
0.285MB
/
s
r
2
=
0.285MB
/
s
r
3
=
0.285MB
/
s
Bước
2:
k=2,
F
11
=0.285+0.285=0.57
MB/s
F
21
=0.285+0.285=0.57
MB/s
P
2
=[(S1,D1),(S2,D2)]
Liên
kết
(2,3)
đã
bão
hòa
do
vậy
các
đặt
giá
trị
λ
S1
=0.285
MB/s
λ
S3
=0.285
MB/s
Để
liên
kết
(1,2)
bão
hòa
tăng
λ
S2
lên
giá
trị
λ
S2=0.95-0.285=0.665
MB/s
Như
vậy
ta
đã
tính
được
các
tham
số
λ
S1,
λ
S2,
λ
S3
theo
nguyên
lý
max-min
fairness
2.
Mô
phỏng
Tạo
đối
tượng
mô
phỏng:
1
1
set ns [new Simulator]
Tạo
namfile
lưu
dữ
liệu
hệ
thống
khi
mô
phỏng
set nf [open out.nam w]
$ns namtrace-all $nf
Tạo
tracefile
lưu
dữ
liệu
để
vẽ
đồ
thị
băng
thông
set f0 [open S1_D1_Band.tr w]
set f1 [open S2_D2_Band.tr w]
set f2 [open S3_D3_Band.tr w]
và
đồ
thị
tốc
độ
mất
gói
set l0 [open S1_D1_Lost.tr w]
set l1 [open S2_D2_Lost.tr w]
set l2 [open S3_D3_Lost.tr w]
Tạo
9
nút
set s1 [$ns node]
set d1 [$ns node]
set s2 [$ns node]
set d2 [$ns node]
set s3 [$ns node]
set d3 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
Tạo
liên
kết
cho
các
nút
với
băng
thông
(MBits/s)
và
trễ
truyền
dẫn
(ms):
$ns duplex-link $s1 $n1 1Mb 10ms DropTail
$ns duplex-link $n1 $n2 1Mb 100ms DropTail
$ns duplex-link $n2 $n3 0.6Mb 50ms DropTail
$ns duplex-link $n3 $d1 1Mb 10ms DropTail
$ns duplex-link $n1 $s2 1Mb 10ms DropTail
$ns duplex-link $n2 $d2 1Mb 10ms DropTail
$ns duplex-link $n2 $s3 1Mb 10ms DropTail
$ns duplex-link $n3 $d3 1Mb 10ms DropTail
Thiết
lập
vị
trí
cho
các
nút
như
trên
$ns duplex-link-op $s1 $n1 orient right
$ns duplex-link-op $n1 $n2 orient right
$ns duplex-link-op $n2 $n3 orient right
$ns duplex-link-op $n3 $d1 orient right
$ns duplex-link-op $n1 $s2 orient down
$ns duplex-link-op $n2 $d2 orient down
$ns duplex-link-op $n2 $s3 orient up
$ns duplex-link-op $n3 $d3 orient up
Thiết
lập
vị
trí
hàng
đợi
và
kích
thước
hàng
đợi
$ns duplex-link-op $n2 $n1 queuePos 1.5
$ns duplex-link-op $n3 $n2 queuePos 1.5
$ns queue-limit $n1 $n2 5
$ns queue-limit $n2 $n3 5
Xây
dựng
Agent
cho
các
nút
s1,
s2,
s3,
d1,
d2,
d3
#Create a UDP agent and attach it to node s1
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $s1 $udp0
#Create a UDP agent and attach it to node s2
set udp1 [new Agent/UDP]
$udp1 set class_ 2
$ns attach-agent $s2 $udp1
#Create a UDP agent and attach it to node s3
set udp2 [new Agent/UDP]
$udp2 set class_ 3
$ns attach-agent $s3 $udp2
#Create a Sink agent (a traffic sink) and attach it to node d1, d2, d3
set sink0 [new Agent/LossMonitor]
$ns attach-agent $d1 $sink0
set sink1 [new Agent/LossMonitor]
$ns attach-agent $d2 $sink1
set sink2 [new Agent/LossMonitor]
$ns attach-agent $d3 $sink2
Liên
kết
các
nguồn
và
đích
tương
ứng
#Connect the traffic sources with the traffic sink
$ns connect $udp0 $sink0
$ns connect $udp1 $sink1
$ns connect $udp2 $sink2
Các
gói
truyền
đi
từ
các
nút
s1,
s2,
s3
tuân
theo
phân
bố
Poisson
được
thiết
lập
bởi
các
hàm
sendpacket:
proc sendpacket0 {} {
global ns udp0 ArrivalTime1 pksize
set time [$ns now]
$ns at [expr $time + [$ArrivalTime1 value]] "sendpacket0"
$udp0 send $pksize
}
proc sendpacket1 {} {
global ns udp1 ArrivalTime2 pksize
set time [$ns now]
$ns at [expr $time + [$ArrivalTime2 value]] "sendpacket1"
$udp1 send $pksize
}
proc sendpacket2 {} {
global ns udp2 ArrivalTime1 pksize
set time [$ns now]
$ns at [expr $time + [$ArrivalTime1 value]] "sendpacket2"
$udp2 send $pksize
}
Với
tốc
độ
phát
gói
của
các
nút
được
xác
định
bởi
các
biến
sau,
đơn
vị
gói/s:
set lambda1 300.0
set lambda2 500.0
thời
gian
để
phát
đi
một
gói
sẽ
là:
Set ArrivalTime1 [new RandomVariable/Exponential]
$ArrivalTime1 set avg_ [expr 1/$lambda1]
set ArrivalTime2 [new RandomVariable/Exponential]
$ArrivalTime2 set avg_ [expr 1/$lambda2]
kích
thước
mỗi
gói
(bytes)
xác
định
bởi
set pksize 125.0
Các
hàm
sau
lọc
dữ
liệu
và
lưu
vào
tracefile
để
vẽ
đồ
thị
băng
thông
và
đồ
thị
tốc
độ
mất
gói:
proc recordbw {} {
global sink0 sink1 sink2 f0 f1 f2
#Get an instance of the simulator
set ns [Simulator instance]
#Set the time after which the procedure should be called again
set time 0.5
#How many bytes have been received by the traffic sinks?
set bw0 [$sink0 set bytes_]
set bw1 [$sink1 set bytes_]
set bw2 [$sink2 set bytes_]
#Get the current time
set now [$ns now]
#Calculate the bandwidth (in MBit/s) and write it to the files
puts $f0 "$now [expr $bw0/$time*8/1000000]"
puts $f1 "$now [expr $bw1/$time*8/1000000]"
puts $f2 "$now [expr $bw2/$time*8/1000000]"
#Reset the bytes_ values on the traffic sinks
$sink0 set bytes_ 0
$sink1 set bytes_ 0
$sink2 set bytes_ 0
#Re-schedule the procedure
$ns at [expr $now+$time] "recordbw"
}
proc recordlost {} {
global sink0 sink1 sink2 l0 l1 l2
#Get an instance of the simulator
set ns [Simulator instance]
#Set the time after which the procedure should be called again
set time 0.5
#How many packet have been lost?
set lost0 [$sink0 set nlost_]
set lost1 [$sink1 set nlost_]
set lost2 [$sink2 set nlost_]
#Get the current time
set now [$ns now]
#Calculate number of packet lost
puts $l0 "$now [expr $lost0]"
puts $l1 "$now [expr $lost1]"
puts $l2 "$now [expr $lost2]"
#Reset the nlost_ values on the traffic sinks
$sink0 set nlost_ 0
$sink1 set nlost_ 0
$sink2 set nlost_ 0
#Re-schedule the procedure
$ns at [expr $now+$time] "recordlost"
}
Hàm
finish
dùng
để
kết
thúc
chương
trình
và
vẽ
đồ
thị:
proc finish {} {
global ns nf f0 f1 f2
$ns flush-trace
#Close the output files
close $f0
close $f1
close $f2
close $nf
#Execute nam on the trace file
exec nam out.nam &
#Call xgraph to display the results
exec xgraph S1_D1_Band.tr S2_D2_Band.tr S3_D3_Band.tr -geometry 800x400
-t "BandWidth" -x "s" -y "Mbit/s" &
exec xgraph S1_D1_Lost.tr B2_D2_Lost.tr S3_D3_Lost.tr -geometry 800x400 -t
"LostPacket" -x "s" -y "Packet" &
exit 0
}
Thực
hiện
chạy
mô
phỏng
trong
100s
#Schedule events for the CBR agents
$ns at 0.0 "recordbw"
$ns at 0.0 "recordlost"
$ns at 0.5 "sendpacket0"
$ns at 0.5 "sendpacket1"
$ns at 0.5 "sendpacket2"
#Call the finish procedure
$ns at 100 "finish"
#Run the simulation
$ns run
3.
Kết
quả
mô
phỏng:
Kết
quả
mô
phỏng
trên
nam
Đồ
thị
băng
thông
của
các
luồng
Tốc
độ
mất
gói