一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在ns2中實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議的方案詳解

454398 ? 來(lái)源:博客園 ? 作者: 原來(lái)... ? 2020-10-27 14:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

用IE不會(huì)有顯示的問題Firefox有的代碼顯示不出來(lái);

這篇文章適合初學(xué)者,關(guān)于初學(xué)者應(yīng)該參考的文檔:NS by Example、NS2 Beginners Page都有很多實(shí)例可以參考。

本文通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的傳輸協(xié)議來(lái)說(shuō)明如何在 ns2 中實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議,當(dāng)然,這個(gè)協(xié)議非常簡(jiǎn)單,但是在ns2 中實(shí)現(xiàn)協(xié)議(不是修改)的流程大體就是這個(gè)樣子的了。我們稱這個(gè)簡(jiǎn)單的協(xié)議做: simple_trans 協(xié)議,我們一步一步來(lái),把 simple_trans 這個(gè)協(xié)議慢慢做的復(fù)雜。首先我想要明確一個(gè)概念:什么是在 ns2 中實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議,不把這個(gè)問題搞明白我們都不知道自己在做什么。網(wǎng)路協(xié)議顧名思義網(wǎng)絡(luò)上運(yùn)行的協(xié)議,網(wǎng)絡(luò)是由關(guān)系(無(wú)論什么關(guān)系)組成的,在這個(gè)網(wǎng)絡(luò)上運(yùn)行的規(guī)則(無(wú)論是優(yōu)化網(wǎng)絡(luò)數(shù)據(jù)傳輸還是共享網(wǎng)絡(luò)信息)就叫做協(xié)議,所以我覺得把協(xié)議理解為強(qiáng)邏輯的規(guī)則是沒有問題的。我們實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)協(xié)議的前提是這個(gè)協(xié)議被設(shè)計(jì)出來(lái),所以我們先要想好我們所要實(shí)現(xiàn)的協(xié)議是要用來(lái)做什么事情的;回到 ns2 , ns2 幫我們實(shí)現(xiàn)好了一個(gè)框架,這個(gè)框架給我們提供了數(shù)據(jù)包初始化,鏈路連接,數(shù)據(jù)包傳遞路由等功能,也就是說(shuō)我們只要搭建好我們的邏輯就可以完成協(xié)議的模擬了,在 ns2 中我們通過(guò)對(duì)數(shù)據(jù)包類型、發(fā)送數(shù)據(jù)包邏輯等等進(jìn)行控制。這就好比于 ns2 給我們提供了一個(gè)鐵路網(wǎng),火車需要的電也有了,火車不夠了還可以生產(chǎn),我們?cè)?ns2 中實(shí)現(xiàn)協(xié)議就是要對(duì)火車進(jìn)行調(diào)度,何時(shí)到站,到站后如何運(yùn)行等等就是協(xié)議的內(nèi)容。

下面就從我們的 simple_trans開始 說(shuō)起,在這個(gè)協(xié)議里,首先我們要實(shí)現(xiàn)的任務(wù)非常簡(jiǎn)單,簡(jiǎn)單到什么程度了呢,簡(jiǎn)單到這個(gè)協(xié)議就是 a 節(jié)點(diǎn)對(duì) b 節(jié)點(diǎn)說(shuō)一句話:“ hi!, I’m a ”。不要笑,這也是一個(gè)協(xié)議。要在 ns2 上完成這個(gè)任務(wù),我們首先要給 simple_trans 這個(gè)協(xié)議起個(gè)名字使得 ns2 可以發(fā)出這個(gè)協(xié)議的數(shù)據(jù)包并且認(rèn)得這個(gè)協(xié)議發(fā)出的數(shù)據(jù)包,現(xiàn)在開始就是第一步了。

1, 在 NS_HOME/common/packet.h 的 enum packet中 加入?yún)f(xié)議數(shù)據(jù)包名稱 PT_SIMPLE_TRANS_PACKET(必須的,注意不要加錯(cuò)地方,最好加在倒數(shù)第二的地方),在 class p_info 中加入name_[PT_SIMPLE_TRANS_PACKET] = “simple_trans_packet” (非必須的)。 Packet.cc 就不要?jiǎng)恿恕?/p>

2, 為了我們協(xié)議的獨(dú)立性、好看性,我們?cè)?NS_HOME 根目錄下創(chuàng)建一個(gè)文件夾,我就叫他 kgn ,好在 kgn目錄(也就是 NS_HOME/kgn )目錄下給協(xié)議的主角: simple_trans.h&simple_trans.cc 。兩個(gè)空文件沒什么用,下面我們添加協(xié)議內(nèi)容。

3, simple_trans.h 內(nèi)容:

view plain

#ifndef ns_simple_trans_h

#define ns_simple_trans_h

#include “agent.h”

#include “tclcl.h”

#include “packet.h”

#include “address.h”

#include “ip.h”

#define PROTOCOL_DEFAULT_PORT 1023

#define PROTOCOL_INIT_SYN 1

首先我們引用一些需要用到的頭文件,然后我們定義了兩個(gè)宏,第一個(gè)是我們 simple_trans 協(xié)議默認(rèn)傳輸?shù)?a target="_blank">端口(這方面如果有所疑問請(qǐng)參考這里 ),第二個(gè)是我們僅有的一條指令:同步指令(類似于 TCP 協(xié)議中三次握手的第一步,事實(shí)上我們的這個(gè)協(xié)議最終就是要實(shí)現(xiàn)一個(gè)簡(jiǎn)化版的三步握手)。繼續(xù)看:

view plain

struct hdr_simple_trans {

int type;

static int offset_;

inline static int& offset() {

return offset_;

}

inline static hdr_simple_trans * access(const Packet * p) {

return (hdr_simple_trans*) p-》access(offset_);

}

};

這些可以當(dāng)做領(lǐng)導(dǎo)講話的開頭部分內(nèi)容。就是定義一個(gè)我們協(xié)議的頭所包括的內(nèi)容,只有 type 這個(gè)是我定義的,其他的內(nèi)容是 ns2 系統(tǒng)需要的。再繼續(xù):

view plain

class simple_trans_agent : public Agent {

public :

simple_trans_agent();

virtual void recv(Packet *, Handler *);

void send_simple_msg(int type, int target);

int get_target(){ return simple_target; }

protected:

int simple_target;

int simple_port;

int command(int argc, const char*const*argv);

};

這里就是我們定義的負(fù)責(zé)“調(diào)度火車”的功能的類了。繼承的是 agent 類,在 ns2 中,這個(gè) agent 不可小覷,他是我們可以產(chǎn)生數(shù)據(jù)包、發(fā)送數(shù)據(jù)包、接收數(shù)據(jù)包的地方,包括的 target 變量就是數(shù)據(jù)包發(fā)送給的下一個(gè)目標(biāo)。recv 函數(shù)會(huì)在仿真的過(guò)程中“自動(dòng)”的收到網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包(更深層次的是經(jīng)過(guò)了地址和端口過(guò)濾器);send_simple_msg 函數(shù)用來(lái)執(zhí)行創(chuàng)建并發(fā)送數(shù)據(jù)的功能; get_target 就不用解釋了(接口保護(hù))。接下來(lái)是我們?cè)趨f(xié)議制定過(guò)程中經(jīng)常會(huì)用到的 timer 的定義, timer 顧名思義是一個(gè)定時(shí)器(鬧鐘)在到時(shí)時(shí)候會(huì)調(diào)用一個(gè)expire (超時(shí))函數(shù),這個(gè)被執(zhí)行的超時(shí)函數(shù)的內(nèi)容就是我們所感興趣的,因?yàn)橥ㄟ^(guò) timer 我們可以實(shí)現(xiàn)很多邏輯。

view plain

class SYNTimer : public TimerHandler {

public:

SYNTimer(simple_trans_agent* t) : TimerHandler(), t_(t) {

}

inline virtual void expire(Event *);

protected:

simple_trans_agent* t_;

};

我們只要實(shí)現(xiàn) expire 函數(shù)即可, timer 的初始和使用見 simpe_trans.cc 文件:

view plain

SYNTimer *syn_timer = new SYNTimer(this);

syn_timer-》resched(1.00);

resched 用來(lái)給“鬧鐘上弦”。

view plain

void SYNTimer::expire(Event *){

t_-》send_simple_msg(PROTOCOL_INIT_SYN, t_-》get_target());

this-》resched(1.00);

}

expire 可以實(shí)現(xiàn)我們的“理想”了,譬如,我們到時(shí)了就發(fā)送我們的 SYN 信息給我們的目標(biāo)節(jié)點(diǎn)(目標(biāo)節(jié)點(diǎn)通過(guò)tcl 文件定義,下文中我們會(huì)見到)。

4, simple_trans.cc 內(nèi)容:

view plain

int hdr_simple_trans::offset_;

static class simple_transHeaderClass : public PacketHeaderClass {

public:

simple_transHeaderClass() : PacketHeaderClass(“PacketHeader/simple_trans”,sizeof(hdr_simple_trans)) {

bind_offset(&hdr_simple_trans::offset_);

}

} class_simple_transhdr;

static class simple_transClass : public TclClass {

public:

simple_transClass() : TclClass(“Agent/simple_trans”) {}

TclObject* create(int, const char*const*) {

return (new simple_trans_agent());

}

} class_simple_trans;

simple_trans_agent::simple_trans_agent() : Agent(PT_SIMPLE_TRANS_PACKET),

simple_target(-1), simple_port(PROTOCOL_DEFAULT_PORT) {

bind(“simple_target_”, &simple_target);

bind(“simple_port_”, &simple_port);

}

這個(gè)又是八股文,前面幾個(gè)類照葫蘆畫瓢即可,如果想要理解是什么意思可以參考我的文章 ,最后一個(gè)我們bind 了幾個(gè)變量,這幾個(gè)變量通過(guò)綁定就可意思讓我們通過(guò) tcl 腳本方便的改變他們的值了(不需要重新編譯c++ 文件)。

5, 在這個(gè)文件中我們主要注意這么幾點(diǎn):

a) 在 send_simple_msg 中數(shù)據(jù)包的生成 Packet* pkt = allocpkt() ;

b) 數(shù)據(jù)包的訪問: hdr_ip *iph = hdr_ip::access(pkt) ;

c) 數(shù)據(jù)包 ip 地址和端口號(hào)的設(shè)定(從這里我們可以看出實(shí)現(xiàn)的是一個(gè)應(yīng)用層協(xié)議);

d) 發(fā)送數(shù)據(jù)包 send( pkt, 0 ) ,我們可以不用去管 0 是什么意思;

e) Command 命令中不要忘記 return (TCL_OK) 這句話,否則會(huì)出錯(cuò)的。

f) 在 recv 函數(shù)中實(shí)現(xiàn)我們的簡(jiǎn)單邏輯:顯示出我們收到了來(lái)自對(duì)方的一個(gè) simple_trans 的數(shù)據(jù)包。

6, 看我們這兩個(gè)宏命令:

view plain

#define NOW Scheduler::instance().clock()

#define MYNODE Address::instance().get_nodeaddr(addr())

這兩個(gè)命令給我們編程提供幫助,分別顯示系統(tǒng)時(shí)間和得到當(dāng)前節(jié)點(diǎn)的地址,也許以后我們會(huì)用得著。

7, 在 tcl 腳本中我們需要使用我們的 simple_trans 協(xié)議:

view plain

set sT1 [new Agent/simple_trans]

$sT1 set-target [AddrParams addr2id [$n1 node-addr]]

$n0 attach $sT1 1023

set sT2 [new Agent/simple_trans]

$n1 attach $sT2 1023

。.. 。..

$ns at 1.0 “$sT1 begin”

在 tcl 中 new 一個(gè)對(duì)象,比如 sT1 之后我們要將其 attach 到所屬的節(jié)點(diǎn)上,注意最后一個(gè) 1023 ,這是我們attach 到節(jié)點(diǎn)上的給我們 simple_trans 協(xié)議分配的端口(深層次的意思是端口分類器會(huì)把目的端口是 1023 的數(shù)據(jù)包分給 sT1 )。 begin 方法是在 command 中實(shí)現(xiàn)的,回過(guò)頭到 simple_trans.cc 中可以看到他的意思,我們可以好好理解一下 command 中函數(shù)和 tcl 中的使用關(guān)系。

8, 最后一步,就是編譯我們整個(gè)協(xié)議將其鍵入到 ns 中了,編譯前我們要修改 makefile 文件,由于我們是在NS_HOME/kgn 目錄中所以, makefile 需要修改的有兩個(gè)地方:在 INCLUDES = 中加入 -I./kgn ,加入這個(gè)的好處就是我們?cè)谄渌夸浭褂?simple_trans.h 的時(shí)候不用將 kgn 次級(jí)目錄包含進(jìn)去;在 OBJ_CC = 中加入 kgn/simple_trans.o / 。好了大功告成,下面回到 NS_HOME 目錄下 make 一下,如果成功,我們執(zhí)行一下我們的 tcl 腳本,看看是不是真的可以運(yùn)行了呢。

小結(jié):到了這里我們已經(jīng)添加了一個(gè)簡(jiǎn)單的協(xié)議了,好了,有的人會(huì)說(shuō)了,這么簡(jiǎn)單的協(xié)議有什么用呢?那好,我們想一想我們有什么可以改進(jìn)的嗎?以上的協(xié)議我們叫做 simpe_trans 協(xié)議 0.1 版,那么我們看看 0.2 版給我?guī)?lái)了什么新的變化。

ACK timer

首先要做的就是協(xié)議的復(fù)雜化,我們將協(xié)議改為三次握手過(guò)程如圖所示:

這個(gè)過(guò)程對(duì)應(yīng)以下代碼(修改simple_trans.h):

view plain

#define PROTOCOL_INIT_SYN 1

#define PROTOCOL_INIT_SYN_ACK 2

#define PROTOCOL_INIT_ACK 3

#define INTERVAL 0.3

class simple_trans_agent;

enum simple_state{

CLOSED,

SYN_SENT,

SYN_RCVD,

ESTABLISHED

};

其中 C-》CLOSED , SS-》SYN_SENT , SR-》SYN_RCVD , E-》ESTABLISHED 為節(jié)點(diǎn)可能處于的狀態(tài)在發(fā)送或接受 SYN 和發(fā)送 SYN-ACK 接受 ACK 后的變化,而兩個(gè) timer 的作用就是使得沒有正確到底目的地的數(shù)據(jù)包可以被重新發(fā)送,當(dāng)然這些 timer 需要在適當(dāng)?shù)臅r(shí)機(jī)取消比如: ack_timer-》cancel() ,取消 timer 使用 cancel 函數(shù)即可。具體代碼實(shí)現(xiàn)參考 0.2 版本的代碼。那么現(xiàn)在我們重新 make 編譯我們的程序,我們會(huì)發(fā)現(xiàn)兩個(gè)節(jié)點(diǎn)可以通過(guò)三次握手建立起來(lái)一個(gè)簡(jiǎn)單的鏈接了,可以說(shuō)我們?cè)谟羞@個(gè)簡(jiǎn)單的可以建立連接的程序之后我們馬上想到是不是還可以發(fā)送數(shù)據(jù)呢,在 ns2 中,數(shù)據(jù)的發(fā)送,我們常見的如 CBR 或者 FTP ,都可以發(fā)送數(shù)據(jù)但是他們之間有很大的不同 CBR 使用的是 trafficgenerater ,而 FTP 可以看成是一個(gè)帶發(fā)送數(shù)據(jù)包的 agent ,現(xiàn)在為了讓我們的 simple_trans 協(xié)議可以在建立起連接以后發(fā)送數(shù)據(jù),我們就有了兩種選擇,是繼承 trafficgenerater 成為數(shù)據(jù)發(fā)送源呢,還是類似 FTP 使用 agent 發(fā)送數(shù)據(jù),考慮到我們協(xié)議的簡(jiǎn)潔易懂性,我們直接使用一個(gè) timer ,在每次 timer 到時(shí)的時(shí)候都利用 simple_trans 的 send 函數(shù)發(fā)送一個(gè)具有 PROTOCOL_DATA 類型(標(biāo)識(shí)是一個(gè)數(shù)據(jù))的包給通信對(duì)端( CN )。在 sendmsg 函數(shù)中的實(shí)現(xiàn)如下:

view plain

hdr_rtp* rh = hdr_rtp::access(p);

hdr_simple_trans *shdr = hdr_simple_trans::access(p);

hdr_ip* ih = hdr_ip::access(p);

double local_time = NOW;

hdr_cmn::access(p)-》size() = size;

hdr_cmn::access(p)-》timestamp() =

(u_int32_t) (SAMPLERATE * local_time);

rh-》seqno() = seqno++;

ih-》daddr() = simple_target;

ih-》dport() = simple_port;

ih-》saddr() = MYNODE;

shdr-》type = PROTOCOL_DATA;

target_-》recv(p);

這里面我們還可以通過(guò) RTP 協(xié)議給每一個(gè)包設(shè)置序列號(hào),當(dāng)然也可以在 hdr_simple_trans 中添加一個(gè) seq 的屬性。當(dāng)然我們的協(xié)議升級(jí)到 0.3 版本后的變化并不只是有這些而已。我們還將 simple_trans 協(xié)議的數(shù)據(jù)包的大小以及發(fā)送頻率設(shè)置成可變的等,具體可以參考 0.3 的代碼。

小結(jié):通過(guò)以上的設(shè)計(jì),我們初步有了一個(gè)可以建立連接并發(fā)送數(shù)據(jù)的協(xié)議,什么?像是 SIP 協(xié)議,沒錯(cuò)我們也可以將我們的程序叫做一個(gè)簡(jiǎn)單的會(huì)話發(fā)起協(xié)議,當(dāng)然你可以實(shí)現(xiàn)的更加復(fù)雜。至此,我們?cè)?ns2 中添加一個(gè)基本網(wǎng)絡(luò)協(xié)議的事情已經(jīng)完成了,我們注意到:不同的協(xié)議使用節(jié)點(diǎn)上的不同的端口,這樣的協(xié)議是不能夠影響到諸如路由、無(wú)線鏈路等協(xié)議的結(jié)果的,所以并不是所有的 ns2 中的協(xié)議都可以這么添加,我們還可以修改節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)等方法添加我們自己的一些修改進(jìn) ns2 達(dá)到仿真的目的,所以這篇文章的目的還是介紹如何在 ns2 中實(shí)現(xiàn)協(xié)議的基礎(chǔ),我們要根據(jù)我們自己的仿真需要來(lái)設(shè)計(jì)我們的程序。通過(guò)以上的介紹我們應(yīng)該掌握的是在 ns2 中發(fā)送數(shù)據(jù)的方法、 ns2 中 timer 的使用方法等等技巧。下面我介紹一個(gè)比較有意思的利用我們的 simple_trans 做的協(xié)議修改實(shí)驗(yàn):添加無(wú)線節(jié)點(diǎn)丟包模型,在這里主要參考的是柯志亨老師的實(shí)現(xiàn)方法,但是在丟包方面我這里做的對(duì)原有協(xié)議破壞性更多(更不合理吧),我們將演示當(dāng)兩個(gè)無(wú)線節(jié)點(diǎn)距離增大的時(shí)候會(huì)丟失數(shù)據(jù)包并且我們的ACKTimer 以及 SYNTimer 的作用。好,下面就是如何修改的過(guò)程了:

在 NS_HOME/mac 目錄下的 wireless-phy.cc 的 380 行左右,我們添加如下代碼:

view plain

//error model.

hdr_cmn *hdr_err = HDR_CMN(p);

hdr_simple_trans *sh = hdr_simple_trans::access(p);

double ratio = Pr/RXThresh_;

double std = error_modle_lf(ratio);

//printf(“wireless-phy model receive packet ratio=%lf std=%lf/n”,ratio,std);

if (hdr_err-》ptype() == PT_SIMPLE_TRANS_PACKET){

if (!sh-》error){

double tmp=((double)rand())/RAND_MAX;

if (tmp》std){

sh-》error = false;

}else{

sh-》error = true;

//printf(“wireless-phy error model set the packet error/n”);

}

}

}

//end of error model.

我們修改的是 WirelessPhy::sendUp(Packet *p) 函數(shù),在發(fā)送數(shù)據(jù)包之前我們檢查數(shù)據(jù)包中 simple_trans 協(xié)議的數(shù)據(jù)包,并將該數(shù)據(jù)包中在 hdr_simple_trans 中定義好的 error 屬性置為 true (說(shuō)明這個(gè)數(shù)據(jù)包出錯(cuò)),實(shí)現(xiàn)數(shù)據(jù)包出錯(cuò)分布的函數(shù) error_modle_lf ,這是一個(gè)拉格朗日差值函數(shù)的實(shí)現(xiàn):

view plain

double error_modle_lf(double ratio){

if(ratio 》1.5)return 0;

double x[6] = {1,1.1,1.2,1.3,1.4,1.5};

double y[6] = {1,0.5,0.3,0.1,0.02,0};

double res = 0;

for(int i = 0; i 《 6; i++){

double temp = 1;

double temp1 = 1;

for(int j = 0; j 《 6; j++){

if(i == j)continue;

temp *= (x[i] - x[j]);

temp1 *= (ratio - x[j]);

}

res += (temp1 / temp) * y[i];

}

return res;

}

顯然,我們?cè)O(shè)計(jì)的是無(wú)線節(jié)點(diǎn)離基站越遠(yuǎn)對(duì)包個(gè)數(shù)越多。

1, 在 simple_trans.cc 中添加 if( shdr-》error )return ,這樣錯(cuò)誤的包我們就“裝作”收不到了

2, 這里補(bǔ)充說(shuō)明,柯志亨老師的錯(cuò)誤模型實(shí)現(xiàn)是基于無(wú)線層的,出錯(cuò)了就真的不發(fā)或者重發(fā),而我的實(shí)現(xiàn)可以說(shuō)是假的,還會(huì)造成無(wú)線網(wǎng)絡(luò)的吞吐,但是還是可以演示無(wú)線丟包情況的,具體結(jié)果可以編譯我稱作 0.4 版本的程序運(yùn)行。可以將包的序列號(hào)畫出來(lái),這樣會(huì)更形象的展現(xiàn)丟包情況。

3, 我們將包序列號(hào)、包收到時(shí)間等等信息都通過(guò) printf 函數(shù)打印出來(lái),這樣我們就可以不用去考慮如何通過(guò)trace 文件來(lái)分析得到數(shù)據(jù),這種方法有的時(shí)候更加有效,我們不必去了解 trace 機(jī)制,這也算是一個(gè)捷徑了。

總結(jié):

Ns2 作為一個(gè)在科研領(lǐng)域應(yīng)用廣泛的仿真器有著其內(nèi)在的很多優(yōu)勢(shì)的:開源協(xié)議修改自如、分裂設(shè)計(jì)可設(shè)計(jì)不同的仿真場(chǎng)景而不需要修改協(xié)議代碼,但是,我們?cè)谧鼍W(wǎng)絡(luò)協(xié)議的研究的時(shí)候往往會(huì)發(fā)現(xiàn) ns2 現(xiàn)有的協(xié)議不足以完成我們的仿真,這是就需要自己設(shè)計(jì)協(xié)議或者修改現(xiàn)有的協(xié)議,所以通過(guò)對(duì)這個(gè)簡(jiǎn)單的 simple_trans 協(xié)議的實(shí)現(xiàn)我們可以更加的有的放矢,知道如何在那里修改 ns2 的協(xié)議,雖然 simple_trans 只是一個(gè)超級(jí)笨的協(xié)議,但是它已經(jīng)展現(xiàn)了基本的協(xié)議設(shè)計(jì)技巧:集成 agent 、 timer 的使用、協(xié)議包頭設(shè)計(jì)等等。如果我們能夠再將 ns2有線無(wú)線節(jié)點(diǎn)結(jié)構(gòu)、路由模塊、無(wú)線 mac 等等這些代碼仔細(xì)研讀,那么到時(shí)你就會(huì)發(fā)現(xiàn)在 ns2 上面實(shí)現(xiàn)一個(gè)協(xié)議倒不是難事,反而是在協(xié)議自身的設(shè)計(jì)上,這就和我們高級(jí)程序語(yǔ)言一樣,語(yǔ)言的學(xué)習(xí)不是難事,而真正熟練的利用語(yǔ)言解決問題才是我們的學(xué)習(xí)目標(biāo)。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1037

    瀏覽量

    85388
  • 網(wǎng)絡(luò)協(xié)議

    關(guān)注

    3

    文章

    273

    瀏覽量

    22098
  • NS2
    NS2
    +關(guān)注

    關(guān)注

    4

    文章

    10

    瀏覽量

    12248
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SNMP協(xié)議設(shè)備監(jiān)控的使用

    介紹,并提供使用SNMP進(jìn)行網(wǎng)絡(luò)管理的基本指南。 1.簡(jiǎn)介 SNMP(Simple Network Management Protocol)是一個(gè)基于互聯(lián)網(wǎng)協(xié)議族(IP)的網(wǎng)絡(luò)管理標(biāo)準(zhǔn),用于
    的頭像 發(fā)表于 06-27 11:48 ?130次閱讀
    SNMP<b class='flag-5'>協(xié)議</b><b class='flag-5'>在</b>設(shè)備監(jiān)控<b class='flag-5'>中</b>的使用

    EtherCAT轉(zhuǎn)CANopen協(xié)議網(wǎng)關(guān)應(yīng)用詳解

    成為運(yùn)動(dòng)控制領(lǐng)域的“明星”,而CANopen則憑借靈活性和成本優(yōu)勢(shì)中小型設(shè)備中廣泛應(yīng)用。當(dāng)兩者相遇時(shí),如何打破協(xié)議阻礙,實(shí)現(xiàn)無(wú)縫互聯(lián)? EtherCAT轉(zhuǎn)CANopen網(wǎng)關(guān)通過(guò)智能協(xié)議
    的頭像 發(fā)表于 05-19 14:19 ?180次閱讀
    EtherCAT轉(zhuǎn)CANopen<b class='flag-5'>協(xié)議</b>網(wǎng)關(guān)應(yīng)用<b class='flag-5'>詳解</b>

    1588v2協(xié)議:精確時(shí)間同步技術(shù)深度解析與實(shí)測(cè)演示

    引言: 現(xiàn)代通信網(wǎng)絡(luò),精確的時(shí)間同步是確保系統(tǒng)高效運(yùn)行的關(guān)鍵。1588v2協(xié)議,也稱為精確時(shí)間協(xié)議
    的頭像 發(fā)表于 04-24 17:56 ?485次閱讀
    1588v<b class='flag-5'>2</b><b class='flag-5'>協(xié)議</b>:精確時(shí)間同步技術(shù)深度解析與實(shí)測(cè)演示

    三種藍(lán)牙架構(gòu)實(shí)現(xiàn)方案(藍(lán)牙協(xié)議方案

    藍(lán)牙架構(gòu)實(shí)現(xiàn)方案有哪幾種?我們一般把整個(gè)藍(lán)牙實(shí)現(xiàn)方案叫做藍(lán)牙協(xié)議棧,因此這個(gè)問題也可以這么闡述:藍(lán)牙協(xié)議
    的頭像 發(fā)表于 04-08 15:35 ?686次閱讀
    三種藍(lán)牙架構(gòu)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方案</b>(藍(lán)牙<b class='flag-5'>協(xié)議</b>棧<b class='flag-5'>方案</b>)

    iic協(xié)議物聯(lián)網(wǎng)的應(yīng)用

    物聯(lián)網(wǎng)(IoT)是一個(gè)由相互連接的智能設(shè)備組成的網(wǎng)絡(luò),這些設(shè)備能夠收集、交換和分析數(shù)據(jù)。物聯(lián)網(wǎng)的實(shí)現(xiàn),通信協(xié)議扮演著至關(guān)重要的角色,它們
    的頭像 發(fā)表于 02-05 11:32 ?644次閱讀

    MTP協(xié)議的步驟和流程詳解

    MTP(Message Transfer Part)協(xié)議是電信網(wǎng)絡(luò)中用于信令的協(xié)議之一,它是SS7(Signaling System No. 7)信令系統(tǒng)的一部分。MTP的主要功能是
    的頭像 發(fā)表于 01-03 09:58 ?1289次閱讀

    網(wǎng)絡(luò)協(xié)議與網(wǎng)關(guān)的關(guān)聯(lián)

    現(xiàn)代通信網(wǎng)絡(luò),數(shù)據(jù)的傳輸和接收依賴于一套復(fù)雜的規(guī)則和標(biāo)準(zhǔn),這些規(guī)則和標(biāo)準(zhǔn)統(tǒng)稱為網(wǎng)絡(luò)協(xié)議。網(wǎng)絡(luò)
    的頭像 發(fā)表于 01-02 18:07 ?657次閱讀

    mtu不同網(wǎng)絡(luò)協(xié)議的應(yīng)用

    現(xiàn)代網(wǎng)絡(luò)通信中,數(shù)據(jù)包的傳輸效率和可靠性是衡量網(wǎng)絡(luò)性能的關(guān)鍵指標(biāo)。MTU作為網(wǎng)絡(luò)協(xié)議的一個(gè)重
    的頭像 發(fā)表于 12-16 14:22 ?1326次閱讀

    dap協(xié)議跨鏈技術(shù)的應(yīng)用

    和通信協(xié)議,實(shí)現(xiàn)不同區(qū)塊鏈網(wǎng)絡(luò)之間的無(wú)縫連接。 一、DAP協(xié)議概述 DAP協(xié)議是一種去中心化應(yīng)用協(xié)議
    的頭像 發(fā)表于 11-22 15:45 ?870次閱讀

    ipc協(xié)議物聯(lián)網(wǎng)的應(yīng)用

    聯(lián)網(wǎng)概述 物聯(lián)網(wǎng)是一個(gè)由互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)、傳感器網(wǎng)絡(luò)等多種網(wǎng)絡(luò)組成的網(wǎng)絡(luò),它允許物體與物體、物體與人、人與人之間的智能互聯(lián)。物聯(lián)網(wǎng)的核心在于數(shù)據(jù)的收集、傳輸、處理和應(yīng)用,而通信協(xié)議
    的頭像 發(fā)表于 11-15 14:19 ?1266次閱讀

    受電端Type-C設(shè)計(jì),PD協(xié)議的純硬件實(shí)現(xiàn)詳解

    受電端Type-C設(shè)計(jì),PD協(xié)議的純硬件實(shí)現(xiàn)詳解 USB Type-C口電源主要有以下三個(gè)角色定義,分別為: ·SOURCE 純供電方
    的頭像 發(fā)表于 11-13 11:01 ?1156次閱讀

    打破網(wǎng)絡(luò)邊界:P2Link助力實(shí)現(xiàn)高效遠(yuǎn)程訪問與內(nèi)網(wǎng)穿透

    ,解決內(nèi)網(wǎng)穿透難題,讓用戶輕松實(shí)現(xiàn)遠(yuǎn)程訪問和管理。以下是一些典型的應(yīng)用場(chǎng)景: 遠(yuǎn)程辦公與文件訪問: 遠(yuǎn)程辦公場(chǎng)景,員工常常需要從外部網(wǎng)絡(luò)訪問公司內(nèi)網(wǎng)
    發(fā)表于 10-31 11:54

    華納云:探討可用于降低服務(wù)器網(wǎng)絡(luò)延遲的先進(jìn)的網(wǎng)絡(luò)協(xié)議

    網(wǎng)絡(luò)延遲是影響在線服務(wù)性能的重要因素之一,尤其是實(shí)時(shí)應(yīng)用和高交互性網(wǎng)站。通過(guò)采用更高級(jí)別的網(wǎng)絡(luò)協(xié)議,可以有效降低
    的頭像 發(fā)表于 09-30 15:14 ?557次閱讀

    NDP協(xié)議是怎樣幫助IPv6實(shí)現(xiàn)網(wǎng)絡(luò)安全運(yùn)行的?

    復(fù)雜多變的網(wǎng)絡(luò)環(huán)境,確保各節(jié)點(diǎn)之間能夠高效、準(zhǔn)確地發(fā)現(xiàn)與通信,是構(gòu)建穩(wěn)定、可擴(kuò)展網(wǎng)絡(luò)架構(gòu)的基石。那么IPv6是依靠什么實(shí)現(xiàn)
    的頭像 發(fā)表于 09-10 10:19 ?1106次閱讀
    NDP<b class='flag-5'>協(xié)議</b>是怎樣幫助IPv6<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>網(wǎng)絡(luò)</b>安全運(yùn)行的?

    Linux網(wǎng)絡(luò)協(xié)議棧的實(shí)現(xiàn)

    網(wǎng)絡(luò)協(xié)議棧是操作系統(tǒng)核心的一個(gè)重要組成部分,負(fù)責(zé)管理網(wǎng)絡(luò)通信中的數(shù)據(jù)包處理。 Linux 操作系統(tǒng),
    的頭像 發(fā)表于 09-10 09:51 ?691次閱讀
    Linux<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>協(xié)議</b>棧的<b class='flag-5'>實(shí)現(xiàn)</b>