文件名称:mtcpsink.cc mtcpsink.h mtcpsink.o mudp.cc mudp.o mudp.h mudpsink.cc
文件大小:18KB
文件格式:ZIP
更新时间:2021-12-27 13:05:52
ns2 mUDP
當封包從應用程式層到 UDP 層時,就把封包的序號、時間、和大小紀錄到一個檔案中(發送端記錄檔)
當封包到達接收端時,同樣把收到的封包序號、傳送時間(在傳送端要發送封包時會把當時的時間放在封包的標頭檔(common header)中)、到達時間、封包延遲時間( = 到達時間 - 傳送時間)、和封包大小紀錄到另一個檔案中(接收端記錄檔)
有了這兩個記錄檔,我們要求得吞吐量、封包延遲、抖動率、或封包遺失率就變得很簡單了。
mUDP是UDP的延伸,除了具有UDP的功能外,還能記錄所發送的封包的訊息。mUdpSink可以把接收到的封包訊息記錄到文件中。
mTcpSink是TCPsink的延伸,除了具有TCPSink功能外,還能記錄所發出的封包的訊息。
1.下載 measure.zip
內容: mudp.cc mudp.h mudpsink.cc mudpsink.h mtcpsink.cc mtcpsink.h
2.新建 //ns-allinone-2.33/ns-2.33/measure 文件夾,把這些文件放入其中
3.修改 //ns-allinone-2.33/ns-2.33/common/packet.h 如下
struct hdr_cmn {
......
dir_t direction_; // direction: 0=none, 1=up, -1=down
int frametype_;
double sendtime_;
unsigned int pkt_id_;
unsigned int frame_pkt_id_;
// source routing
char src_rt_valid;
......
};
4.修改 //ns-allinone-2.33/ns-2.33/Makefile 如下
OBJ_CC = \
......
apps/pbc.o \
measure/mtcpsink.o measure/mudp.o measure/mudpsink.o \
$(OBJ_STL)
......
5.修改 //ns-allinone-2.33/ns-2.33/tcl/lib/ns-default.tcl 如下
......
Agent/Ping set packetSize_ 64
Agent/mUDP set packetSize_ 1000
Agent/UDP set packetSize_ 1000
......
6.重新編譯NS2
# make clean
# make
若編譯成功,即加入完成
7.使用
於 tcl 檔內加入
......
#使用mTcpSink
set sink [new Agent/TCPSink/mTcpSink]
$sink set_filename tcp_sink
......
......
#使用mUDP
set udp [new Agent/mUDP]
$udp set_filename sd_udp
#使用mUdpSink
set null [new Agent/mUdpSink]
$null set_filename rd_udp
......
即可使用
[編輯] 使用threshold程式
由於 Hidden Terminal Problem 與有效的傳輸距離有關,所以如何計算出有效的傳輸距離和其相關參數就變的非常重要
NS2有提供一個小工具,讓使用者輸入有效的傳輸距離和使用的傳輸模型後,即顯示相對應的參數
1.編譯程式
# cd ns-allinone-2.33/ns-2.33/indep-utils/propagation
# g++ -lm threshold.cc -o threshold
2.使用
# ./threshold
USAGE: find receiving threshold for certain communication range (distance)
SYNOPSIS: threshold -m
【文件预览】:
measure
----mudp.o(18KB)
----mudpsink.h(386B)
----mudpsink.o(13KB)
----mudp.cc(3KB)
----mtcpsink.h(398B)
----mudp.h(324B)
----mudpsink.cc(1KB)
----mtcpsink.cc(2KB)
----mtcpsink.o(17KB)