Tutorial simuladair lìonra ns-3. Caibideil 4

Tutorial simuladair lìonra ns-3. Caibideil 4
caibideil 1,2
caibideil 3

4 Sealladh farsaing air bun-bheachd
4.1 Prìomh gheàrr-chunntasan
4.1.1 Nòd
4.1.2 Iarrtas
4.1.3 Seanail
4.1.4 Inneal Lìon
4.1.5 Luchd-cuideachaidh topological
4.2 A’ chiad sgriobt ns-3
4.2.1 Còd boilerplate
4.2.2 Plug-ins
4.2.3 ns3 ainm-àite
4.2.4 Logadh
4.2.5 Prìomh ghnìomh
4.2.6 A' cleachdadh luchd-cuideachaidh topology
4.2.7 Cleachdadh Iarrtas
4.2.8 Simulator
4.2.9 A’ togail do sgriobt
4.3 ns-3 Còd stòr

Caibideil 4

Sealladh farsaing air bun-bheachd

Is e a’ chiad rud a dh’fheumas sinn a dhèanamh mus tòisich sinn ag ionnsachadh no a’ sgrìobhadh còd ns-3 a bhith a’ mìneachadh beagan bhun-bheachdan bunaiteach agus eas-òrdughan san t-siostam. Is dòcha gu bheil tòrr den seo follaiseach do chuid, ach tha sinn a’ moladh ùine a ghabhail gus an earrann seo a leughadh gus dèanamh cinnteach gu bheil thu a’ tòiseachadh air bunait làidir.

4.1 Prìomh gheàrr-chunntasan

Anns an earrainn seo, seallaidh sinn ri cuid de bhriathran a thathas a’ cleachdadh gu bitheanta air an lìon ach aig a bheil brìgh sònraichte ann an ns-3.

4.1.1 Nòd

Ann am jargon eadar-lìn, canar aoigheachd no uaireannan siostam crìochnachaidh ri inneal coimpiutair a cheanglas ri lìonra. Leis gur e simuladair lìonra a th’ ann an ns-3 agus chan e simuladair eadar-lìn, cha bhith sinn a’ cleachdadh an teirm aoigheachd a dh’aona ghnothach, leis gu bheil seo dlùth cheangailte ris an eadar-lìn agus na protocolaidhean aige. An àite sin, bidh sinn a’ cleachdadh teirm nas fharsainge, cuideachd air a chleachdadh le simuladairean eile, a thig bho theòiridh grafa: nód (nód).

Ann an ns-3, is e nód a chanar ris an tarraing bunaiteach air inneal coimpiutaireachd. Tha an tarraing seo air a riochdachadh ann an C ++ leis a’ chlas Node. Clas Nodad (node) a’ toirt seachad dhòighean airson a bhith a’ làimhseachadh riochdachaidhean de dh’ innealan coimpiutaireachd ann an samhlaidhean.

Feumaidh tu tuigsinn Node mar choimpiutair ris an cuir thu comas-gnìomh. Cuiridh tu rudan mar aplacaidean, stacan pròtacal, agus cairtean iomaill le draibhearan a leigeas leis a’ choimpiutair obair fheumail a dhèanamh. Cleachdaidh sinn an aon mhodail bunaiteach ann an ns-3.

4.1.2 Iarrtas

San fharsaingeachd, tha bathar-bog coimpiutair air a roinn ann an dà chlas farsaing. Bidh bathar-bog an t-siostaim ag eagrachadh diofar ghoireasan coimpiutair leithid cuimhne, cearcallan pròiseasar, diosc, lìonra, msaa a rèir cuid de mhodail coimpiutaireachd. Mar as trice cha bhith bathar-bog an t-siostaim a’ cleachdadh nan goireasan sin gus gnìomhan a choileanadh a bheir buannachd dhìreach don neach-cleachdaidh. Mar as trice bidh neach-cleachdaidh a’ ruith tagradh gus amas sònraichte a choileanadh, a gheibh agus a chleachdas goireasan a tha fo smachd bathar-bog an t-siostaim.

Gu tric bidh an loidhne dealachaidh eadar siostam agus bathar-bog tagraidh air a tharraing aig atharrachaidhean ìre sochair a tha a’ tachairt ann an ribeachan an t-siostaim obrachaidh. Chan eil fìor bhun-bheachd aig ns-3 de shiostam-obrachaidh agus mar sin chan eil bun-bheachd air ìrean sochair no gairmean siostam. Ach, tha beachd againn airson app. Dìreach mar anns an “fìor shaoghal” tha tagraidhean bathar-bog a’ ruith air coimpiutairean gus gnìomhan a choileanadh, bidh tagraidhean ns-3 a’ ruith air nodan ns-3 gus smachd a chumail air samhlaidhean san t-saoghal atharrais.

Ann an ns-3, is e tagradh an tarraing bunaiteach airson prògram cleachdaiche a ghineas cuid de ghnìomhachd airson modaladh. Tha an tarraing seo air a riochdachadh ann an C ++ leis a’ chlas Iarrtais. Tha an clas Iarrtais a’ toirt seachad dhòighean airson a bhith a’ làimhseachadh bheachdan air an dreach againn aig ìre neach-cleachdaidh de thagraidhean ann an samhlaidhean. Thathas an dùil gum bi luchd-leasachaidh a’ speisealachadh sa chlas Iarrtais ann an dòigh prògramadh a tha ag amas air nithean gus tagraidhean ùra a chruthachadh. San oideachadh seo, cleachdaidh sinn speisealaichean den chlas Iarrtais ris an canar Iarrtas udpEchoClient и Iarrtas udpEchoServer. Mar a bhiodh dùil agad, tha na tagraidhean sin a’ dèanamh suas seata de thagraidhean teachdaiche / frithealaiche a thathas a’ cleachdadh gus pacaidean lìonra a ghineadh agus mac-talla.

4.1.3 Seanail

Anns an fhìor shaoghal, faodaidh tu coimpiutair a cheangal ri lìonra. Gu tric canar seanalan ris na meadhanan air a bheil dàta air a ghluasad anns na lìonraidhean sin. Nuair a chuireas tu càball Ethernet a-steach do bhalla a-muigh, tha thu a’ ceangal do choimpiutair ri ceangal Ethernet. Anns an t-saoghal samhlachail ns-3, tha nód ceangailte ri nì a tha a’ riochdachadh sianal conaltraidh. An seo, canar sianal ris an tarraing bunaiteach den subnetwork conaltraidh agus tha e air a riochdachadh ann an C ++ leis a’ chlas Channel.

Clas Sianal a’ toirt seachad dhòighean airson eadar-obrachadh nithean subnet a riaghladh agus luchd-aoigheachd a cheangal riutha. Faodaidh luchd-leasachaidh seanalan a bhith speisealaichte cuideachd ann an dòigh prògramadh a tha ag amas air nithean. Faodaidh speisealachadh seanail rudeigin cho sìmplidh ri uèir a mhodail. Faodaidh seanal sònraichte cuideachd rudan iom-fhillte a mhodaladh leithid tionndadh Ethernet mòr no àite trì-thaobhach làn de chnapan-starra a thaobh lìonraidhean gun uèir.

Bidh sinn a’ cleachdadh dreachan sònraichte den t-sianal san oideachadh seo ris an canar CsmaChannelCsmaChannel, Sianal PointToPointPointToPointChannel и Sianal WifiChannel. CsmaChannel, mar eisimpleir, a’ modail dreach de subnet conaltraidh a bhios a’ cur an gnìomh àrainneachd conaltraidh ioma-ruigsinneach le mothachadh neach-giùlain. Bheir seo dhuinn comas-gnìomh coltach ri Ethernet.

4.1.4 Inneal Lìon

B’ àbhaist ma bha thu airson coimpiutair a cheangal ri lìonra, gum feumadh tu càball lìonra sònraichte a cheannach agus inneal bathar-cruaidh ris an canar (ann am briathrachas PC) cairt iomaill a dh’ fheumadh a chuir a-steach don choimpiutair. Nan cuireadh cairt iomaill cuid de ghnìomhan lìonraidh an gnìomh, b' e cairtean eadar-aghaidh lìonraidh no cairtean lìonraidh a bh' orra. An-diugh, bidh a’ mhòr-chuid de choimpiutairean a’ tighinn le bathar-cruaidh eadar-aghaidh lìonra aonaichte agus chan eil luchd-cleachdaidh gam faicinn mar innealan air leth.

Chan obraich cairt lìonra às aonais draibhear bathar-bog a bhios a’ cumail smachd air a’ bhathar-chruaidh aige. Ann an Unix (no Linux), tha pìos uidheamachd iomaill air a sheòrsachadh mar inneal. Tha innealan air an riaghladh le bhith a’ cleachdadh draibhearan inneal, agus tha innealan lìonra (NICn) air an riaghladh a’ cleachdadh draibhearan inneal lìonra (Draibhearan airson uidheaman lìonraidh) agus canar innealan lìonra riutha còmhla (innealan lìn). Ann an Unix agus Linux, bidh thu a’ toirt iomradh air innealan lìonra le ainmean mar eth0.

Ann an ns-3, tha tarraing inneal lìonra a’ còmhdach an dà chuid draibhear a’ bhathar-bhog agus am bathar-cruaidh a thathar a’ dealbhadh. Anns an atharrais, tha inneal lìonra “air a chuir a-steach” ann an nód gus leigeil leis conaltradh le nodan eile tro shianalan. Dìreach mar choimpiutair fìor, faodar nód a cheangal ri iomadh seanal tro iomadh inneal Innealan Net.

Tha tarraing lìonra inneal air a riochdachadh ann an C ++ leis a’ chlas Inneal Lìon. Clas Inneal Lìon a’ toirt seachad dòighean airson ceanglaichean ri nithean Node is Channel a stiùireadh; agus faodaidh luchd-leasachaidh a bhith speisealaichte ann am mothachadh prògramadh a tha ag amas air nithean. San oideachadh seo cleachdaidh sinn grunn dhreachan sònraichte de NetDevice ris an canar Inneal CsmaNet, Inneal PointToPointNet и WifiNetDevice. Dìreach mar inneal lìonra Ethernet air a dhealbhadh gus obrachadh le lìonra Ethernet, Inneal CsmaNet air a dhealbhadh airson obrachadh leis CsmaChannel, Inneal PointToPointNet air a dhealbhadh airson obrachadh leis Sianal PointToPointagus WifiNetDevice - air a dhealbhadh airson obrachadh leis Sianal Wifi.

4.1.5 Luchd-cuideachaidh topological

Ann an lìonra fìor, gheibh thu coimpiutairean aoigheachd le cairtean lìonra air an cur ris (no air an togail a-steach). Ann an ns-3 chanadh sinn gum faic thu nodan le NetDevices ceangailte. Ann an lìonra mòr samhlachail, feumaidh tu ceanglaichean a chuir air dòigh eadar mòran de nithean Node, Inneal Lìon и Channel.

Bho bhith a’ ceangal NetDevices ri nodan, NetDevices gu ceanglaichean, a’ sònrachadh seòlaidhean IP, msaa. ann an ns-3 mar obair chumanta, gus seo a dhèanamh cho furasta ‘s a ghabhas tha sinn a’ toirt seachad luchd-cuideachaidh topology ris an canar. Mar eisimpleir, gus NetDevice a chruthachadh, feumaidh tu mòran obrachaidhean kernel ns-3 a dhèanamh, seòladh MAC a chuir ris, an inneal lìonra a chuir a-steach ann an Node, rèiteachadh stac protocol an nód, agus an uairsin an NetDevice a cheangal ris an t-Sianal. Bidh feum air eadhon barrachd obrach gus iomadh inneal a cheangal ri ceanglaichean ioma-phuing agus an uairsin na lìonraidhean fa leth a cheangal ri lìonra Internetworks. Bidh sinn a’ toirt seachad stuthan cuideachaidh topology a bhios a’ cothlamadh an iomadh gnìomh sin ann am modail a tha furasta a chleachdadh airson do ghoireasachd.

4.2 A’ chiad sgriobt ns-3

Ma chuir thu a-steach an siostam mar a chaidh a mholadh gu h-àrd, bidh an sgaoileadh ns-3 agad ann an eòlaire ris an canar repos san eòlaire dachaigh agad. Rach don eòlaire release

Mura h-eil an leithid de chlàr agad, tha e a’ ciallachadh nach do shònraich thu an eòlaire toraidh nuair a bha thu a’ togail an dreach fuasglaidh de ns-3, tog mar seo:
$ ./waf configure -build-profile=release -out=togail/release,
$ ./waf togail

an sin bu chòir dhut structar eòlaire fhaicinn coltach ris na leanas:

AUTHORS       examples      scratch       utils       waf.bat*
bindings      LICENSE       src           utils.py    waf-tools
build         ns3           test.py*      utils.pyc   wscript
CHANGES.html  README        testpy-output VERSION     wutils.py
doc           RELEASE_NOTES testpy.supp   waf*        wutils.pyc

Rach don eòlaire eisimpleirean / oideachadh. Bu chòir dhut faidhle fhaicinn a tha suidhichte an sin ris an canar chiad.cc. Is e seo sgriobt a chruthaicheas ceangal sìmplidh puing-gu-puing eadar dà nodan agus a bheir seachad aon phacaid eadar na nodan. Bheir sinn sùil air an sgriobt seo loidhne air loidhne; gus seo a dhèanamh, fosgail first.cc anns an deasaiche as fheàrr leat.

4.2.1 Còd boilerplate
Is e a’ chiad loidhne san fhaidhle an loidhne modh deasachaidh emacs. Tha e ag innse do emacs mu na gnàthasan cruthachaidh (stoidhle còdaidh) a bhios sinn a’ cleachdadh nar còd stòr.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

Tha seo an-còmhnaidh na chùis gu math connspaideach, agus mar sin feumaidh sinn an clàr a shuidheachadh gu dìreach airson a thoirt a-mach às an rathad sa bhad. Tha am pròiseact ns-3, mar a’ mhòr-chuid de phròiseactan mòra, air gabhail ri stoidhle còdaidh a dh’ fheumas a h-uile còd a chuir ris. Ma tha thu airson do chòd a chuir ris a’ phròiseact, aig a’ cheann thall feumaidh tu cumail ri inbhe còdaidh ns-3, mar a tha air a mhìneachadh san fhaidhle doc/codingstd.txt no air a shealltainn air duilleag-lìn a’ phròiseict: https://www.nsnam.org/develop/contributing-code/coding-style/.

Tha sinn a’ moladh gum fàs thu cleachdte ri coltas agus faireachdainn còd ns-3 agus gun cuir thu an inbhe seo an sàs nuair a bhios tu ag obair leis a’ chòd againn. Dh’ aontaich an sgioba leasachaidh gu lèir agus na com-pàirtichean ri seo às deidh beagan gearain. Tha an loidhne modh emacs gu h-àrd ga dhèanamh furasta cruth ceart a dhèanamh ma tha thu a’ cleachdadh an deasaiche emacs.

Tha cead aig an simuladair ns-3 a chleachdadh GNU General Public License. Chì thu an bann-cinn laghail GNU iomchaidh anns gach faidhle cuairteachaidh ns-3. Gu math tric chì thu sanas dlighe-sgrìobhaidh airson aon de na h-institiudan a tha an sàs sa phròiseact ns-3 os cionn teacsa agus ùghdar GPL, a chithear gu h-ìosal.

/* 
* This program is free software; you can redistribute it and/or modify 
* it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation; 
*
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details. 
* 
* You should have received a copy of the GNU General Public License 
* along with this program; if not, write to the Free Software 
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
*/

4.2.2 Plug-ins

Tha an còd fhèin a’ tòiseachadh le sreath de dh’ aithrisean in-ghabhail (gabhail a-steach).

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"

Gus ar luchd-cleachdaidh sgriobtaidh àrd-ìre a chuideachadh gus dèiligeadh ris an àireamh mhòr de fhaidhlichean cinn a tha an làthair san t-siostam, bidh sinn gan cruinneachadh a rèir an cleachdadh ann am modalan mòra. Bidh sinn a’ toirt seachad aon fhaidhle cinn a bhios a’ luchdachadh a h-uile faidhle cinn a thèid a chleachdadh ann am modal sònraichte. An àite a bhith a’ lorg dè dìreach an ceann-cinn a tha a dhìth ort agus is dòcha an liosta cheart de eisimeileachd fhaighinn, bheir sinn an comas dhut buidheann de fhaidhlichean a luchdachadh sìos ann an granularity mòr. Chan e seo an dòigh-obrach as èifeachdaiche, ach gu cinnteach tha e a’ dèanamh sgrìobhadh sgriobtaichean gu math nas fhasa.

Tha gach aon de na ns-3 a’ toirt a-steach faidhlichean air an cur ann an eòlaire ris an canar ns3 (tog fo-eòlaire) gus còmhstri ainm faidhle a sheachnadh tron ​​​​phròiseas togail. Faidhle ns3/core-module.h a’ freagairt ris a’ mhodal ns-3, a lorgas tu san eòlaire src/bunaiteach anns an fhoillseachadh a chuir thu a-steach. Ann an liostadh an eòlaire seo gheibh thu àireamh mhòr de fhaidhlichean cinn. Nuair a nì thu an co-chruinneachadh, Ci cuir faidhlichean cinn poblach san eòlaire ns3 ann am fo-eòlaire togail/debug

Mura h-eil an leithid de chlàr agad, tha e a’ ciallachadh nach do shònraich thu an eòlaire toraidh nuair a bha thu a’ togail an dreach fuasglaidh de ns-3, tog mar seo:
$ ./waf configure --build-profile=debug --out=togail/debug
$ ./waf togail
no
$ ./waf configure --build-profile=optimized --out=togail/optimized
$ ./waf togail

no togail/optimized, a rèir an rèiteachaidh agad. Ci cruthaichidh e cuideachd modal a’ toirt a-steach faidhle gus a h-uile faidhle cinn poblach a luchdachadh. Leis gu bheil thu gu dearbh a’ leantainn an iùil seo gu cràbhach, tha thu air a dhèanamh mu thràth

$ ./waf -d debug --enable-examples --enable-tests configure

gus am pròiseact a rèiteachadh gus togail deasbaid a ruith anns a bheil eisimpleirean agus deuchainnean. Rinn thu cuideachd

$ ./waf

gus am pròiseact a chruinneachadh. Mar sin a-nis nuair a choimheadas tu san eòlaire ../../build/debug/ns3, an uairsin lorgaidh tu, am measg feadhainn eile, faidhlichean cinn nan ceithir modalan a chithear gu h-àrd. Faodaidh tu coimhead air susbaint nam faidhlichean sin agus faighinn a-mach gu bheil iad a’ toirt a-steach a h-uile faidhle poblach a bhios na modalan co-fhreagarrach a’ cleachdadh.

4.2.3 ns3 ainm-àite

An ath loidhne ann an sgriobt chiad.cc tha e na dhearbhadh ainm-àite.

using namespace ns3;

Tha am pròiseact ns-3 air a chur an gnìomh ann an àite-ainm C++ ris an canar ns3. Bidh seo a’ cur a h-uile dearbhadh co-cheangailte ri ns-3 ann an raon taobh a-muigh raon ainmean na cruinne, a bhios an dòchas a chuidicheas le bhith ag amalachadh le còd eile. Le bhith a’ cleachdadh a’ ghnìomhaiche C++ bheir e a-steach an t-ainm-àite ns-3 a-steach don roinn dearbhaidh gnàthach (cruinneil). Is e dòigh iongantach a tha seo airson a ràdh, às deidh an dearbhadh seo, nach fheum thu an gnìomhaiche cead ns3 ::scope a thaipeadh mus cleachd thu a’ chòd ns-3 agad gu lèir. Mura h-eil thu eòlach air ainmean-àite, thoir sùil air cha mhòr leabhar-teacsa C++ sam bith agus dèan coimeas eadar an àrainn-ainm ns3 a’ cleachdadh an std namespace agus dearbhadh using namespace std; ann an eisimpleirean de bhith ag obair leis a’ ghnìomhaiche toraidh cosgais agus sruthan.

4.2.4 Logadh

Is e an ath loidhne den sgriobt,

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Cleachdaidh sinn an aithris seo mar àite iomchaidh airson beachdachadh air an t-siostam sgrìobhainnean againn doxygen. Ma choimheadas tu air làrach-lìn pròiseact ns-3, gheibh thu ceangal Sgrìobhainnean anns a’ bhàr seòlaidh. Ma bhriogas tu air a’ cheangal seo thèid do thoirt chun duilleag sgrìobhainnean againn. Tha ceangal “Fios mu dheireadh” ann a bheir thu chun na sgrìobhainnean airson an tionndadh seasmhach as ùire de ns-3. Ma thaghas tu an ceangal “API Documentation”, thèid do thoirt gu duilleag sgrìobhainnean API ns-3.

Air taobh clì na duilleige gheibh thu riochdachadh grafaigeach de structar nan sgrìobhainnean. Is e deagh àite tòiseachaidh an “leabhar” Modalan ns-3 anns a’ chraobh seòlaidh ns-3. Ma nochdas tu modalan, chì thu liosta de sgrìobhainnean mhodalan ns-3. Mar a chaidh a dheasbad gu h-àrd, tha bun-bheachd modal an seo ceangailte gu dìreach ris na faidhlichean a tha sa mhodal gu h-àrd. Thathas a’ bruidhinn air fo-shiostam logaidh ns-3 san earrann A’ cleachdadh a’ mhodail logaidh, mar sin thig sinn air ais thuige nas fhaide air adhart san oideachadh seo, ach faodaidh tu ionnsachadh mun aithris gu h-àrd le bhith a’ coimhead air a’ mhodal prìomhagus an uairsin fosgail an leabhar Innealan debuggingagus an uairsin tagh an duilleag Logadh. Cliog air Logadh.

Bu chòir dhut a-nis ath-sgrùdadh a dhèanamh air na sgrìobhainnean doxygen airson modal Logadh. Anns an liosta macros aig mullach na duilleige, chì thu inntrig airson NS_LOG_COMPONENT_DEFINE. Mus cliog thu air a’ cheangal, dèan cinnteach gun coimhead thu air an “Tuairisgeul Mionaideach” den mhodal clàraidh gus tuigse fhaighinn air mar a tha e ag obair san fharsaingeachd. Gus seo a dhèanamh faodaidh tu sgrolaich sìos no tagh "Tuilleadh ..." fon chlàr.

Aon uair ‘s gu bheil beachd coitcheann agad air na tha dol, rachaibh air adhart agus thoir sùil air na sgrìobhainnean airson an NS_LOG_COMPONENT_DEFINE sònraichte. Cha bhith mi a’ dùblachadh na sgrìobhainnean an seo, ach airson geàrr-chunntas, tha an loidhne seo ag ainmeachadh pàirt clàraidh ris an canar Eisimpleir FirstScript, a leigeas leat logadh teachdaireachdan tòcan a chomasachadh no a dhì-cheadachadh le bhith a’ toirt iomradh air ainm.

4.2.5 Prìomh ghnìomh

Anns na sreathan a leanas den sgriobt chì thu,

int 
main (int argc, char *argv[])
{ 

Chan eil an seo ach dearbhadh air prìomh obair a’ phrògraim agad (sgriobt). Coltach ri prògram C ++ sam bith, feumaidh tu prìomh dhleastanas a mhìneachadh, thèid seo a chuir gu bàs an toiseach. Chan eil dad sònraichte an seo. Chan eil anns an sgriobt ns-3 agad ach prògram C++. Bidh an loidhne a leanas a’ suidheachadh an rùn ùine gu 1 nanosecond, is e sin am fear bunaiteach:

Time::SetResolution (Time::NS);

Is e rùn ùine, no dìreach rùn, an luach ùine as lugha a ghabhas cleachdadh (an eadar-dhealachadh as lugha a ghabhas riochdachadh eadar dà thuras). Faodaidh tu an rùn atharrachadh dìreach aon turas. Bidh an uidheamachd a bheir seachad an sùbailteachd seo ag ithe cuimhne, agus mar sin aon uair ‘s gu bheil an rùn air a shuidheachadh gu soilleir, bidh sinn a’ saoradh a ’chuimhne, a’ casg tuilleadh ùrachaidhean. (Mura suidhich thu an rùn gu soilleir, bidh e bunaiteach gu aon nanosecond agus thèid an cuimhne a shaoradh nuair a thòisicheas an atharrais.)

Tha an dà loidhne de sgriobt a leanas air an cleachdadh gus dà phàirt logaidh a tha air an togail a-steach do thagraidhean a chomasachadh EchoClient и Frith-fhrithealaiche:

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

Ma leughas tu na sgrìobhainnean airson a’ phàirt Logaidh, chì thu gu bheil grunn ìrean de logadh / granularity as urrainn dhut a chomasachadh air gach pàirt. Tha an dà loidhne còd seo a’ comasachadh logadh deasbaid gu ìre INFO airson teachdaichean mac-talla agus frithealaichean. Aig an ìre seo, clò-bhuailidh an tagradh teachdaireachdan fhad ‘s a bhios e a’ cur agus a ’faighinn phasganan rè atharrais.

A-nis gheibh sinn sìos chun ghnìomhachas a bhith a’ cruthachadh an topology agus a’ ruith an atharrais. Bidh sinn a’ cleachdadh stuthan cuideachaidh topology gus an obair seo a dhèanamh cho furasta sa ghabhas.

4.2.6 A' cleachdadh luchd-cuideachaidh topology

Cruthaichidh an ath dhà loidhne de chòd san sgriobt againn na nithean Node ns-3 a bhios a’ riochdachadh nan coimpiutairean san atharrais.

NodeContainer nodes;
nodes.Create (2);

Mus lean sinn oirnn, lorg sinn na sgrìobhainnean airson a’ chlas Neach-gleidhidh Node. Is e dòigh eile air faighinn gu na sgrìobhainnean airson clas sònraichte tron ​​​​tab clasaichean air na duilleagan doxygen. Ma tha Doxygen fosgailte agad mu thràth, dìreach sgrolaich suas gu mullach na duilleige agus tagh an taba Clasaichean. Bu chòir dhut seata tabaichean ùra fhaicinn, aon dhiubh na liosta de chlasaichean. Fon taba seo chì thu liosta de na clasaichean ns-3 gu lèir. Scrollaich sìos gu ns3 ::NodeContainer. Nuair a lorgas tu clas, tagh e airson a dhol gu na sgrìobhainnean airson a’ chlas.

Mar a chuimhnicheas sinn, is e an nód aon de na prìomh tharraingean againn. Tha e a’ riochdachadh a’ choimpiutair ris a bheil sinn gu bhith a’ cur rudan mar stacan protocol, tagraidhean, agus cairtean iomaill. Neach-taic Topology Neach-gleidhidh Node a’ toirt seachad dòigh fhreagarrach airson nithean sam bith a chruthachadh, a riaghladh agus faighinn thuige Node, a chruthaicheas sinn gus an atharrais a ruith. Tha a’ chiad loidhne gu h-àrd dìreach ag innse Neach-gleidhidh Node, ris an can sinn nodan. Tha an dàrna loidhne a’ gairm an dòigh Cruthaich air an nì nodan agus ag iarraidh air a’ ghobhar dà nodan a chruthachadh. Mar a chaidh a mhìneachadh ann an doxygen, tha an soitheach ag iarraidh air an t-siostam ns-3 dà rud a chruthachadh Node agus a’ stòradh chomharran dha na nithean sin air an taobh a-staigh.

Chan eil na nodan a chaidh a chruthachadh san sgriobt a’ dèanamh dad fhathast. Is e an ath cheum ann a bhith a’ togail an topology a bhith a’ ceangal ar nodan ris an lìonra. Is e an cruth lìonra as sìmplidh ris a bheil sinn a’ toirt taic ceangal puing-gu-puing eadar dà nod. Cruthaichidh sinn a leithid de cheangal a-nis.

Neach-cuideachaidh PointToPoint

Bidh sinn a’ cruthachadh ceangal puing-gu-puing a’ cleachdadh pàtran air a bheil sinn eòlach, a’ cleachdadh nì cuideachaidh topology gus an obair aig ìre ìosal a tha a dhìth airson a’ cheangail a dhèanamh. Cuimhnich gu bheil an dà phrìomh tharraing againn Inneal Lìon и Channel. Anns an fhìor shaoghal, tha na teirmean sin gu ìre mhòr a ’freagairt ri cairtean iomaill agus càballan lìonra. Mar as trice, tha an dà rud seo dlùth cheangailte ri chèile, agus chan urrainn do dhuine sam bith cunntadh air roinneadh, mar eisimpleir, innealan Ethernet thairis air sianal gun uèir. Bidh an luchd-cuideachaidh topology againn a’ leantainn an dàimh dlùth seo agus mar sin cleachdaidh tu aon nì san t-suidheachadh seo Neach-cuideachaidh PointToPoint airson nithean ns-3 a stèidheachadh agus a cheangal Inneal PointToPointNet и Sianal PointToPoint. Na trì loidhnichean a tha romhainn san sgriobt:

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

A' chiad loidhne,

PointToPointHelper pointToPoint;

a’ cruthachadh eisimpleir de nì air a’ chruaich Neach-cuideachaidh PointToPoint. Bho shealladh àrd-ìre tha an loidhne a leanas,

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

ag innse don nì Neach-cuideachaidh PointToPoint cleachd an luach "5 Mbit/s" (còig megabits gach diog) mar "Ìre dàta".

Bho shealladh nas mionaidiche, tha an sreang "DataRate" a 'freagairt ris an rud ris an can sinn feart Inneal PointToPointNet. Ma sheallas tu air doxygen airson clas ns3 :: PointToPointNetDevice agus anns na sgrìobhainnean airson an dòigh-obrach GetTypeId gheibh thu liosta de bhuadhan a chaidh a mhìneachadh airson an inneal. Nam measg bidh am feart “Ìre dàta" Tha liostaichean buadhan co-chosmhail aig a’ mhòr-chuid de nithean ns-3 a chithear leis an neach-cleachdaidh. Bidh sinn a’ cleachdadh an uidheamachd seo gus an atharrais a chuir air dòigh gu furasta gun ath-chruinneachadh, mar a chì thu san ath earrann.

Coltach ri "Ìre dàta" ann am PointToPointNetDevice, lorgaidh tu am feart "Dàil" co-cheangailte ris an PointToPointChannel. An loidhne mu dheireadh

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

ag ràdh Neach-cuideachaidh PointToPoint cleachd an luach “2 ms” (dà mhileisecond) mar luach dàil iomadachaidh airson a’ cheangal puing-gu-puing a chruthaicheas e às deidh sin.

NetDeviceContainer

Aig an àm seo tha againn anns an sgriobt Neach-gleidhidh Node, anns a bheil dà nod. Tha againn Neach-cuideachaidh PointToPoint, a tha deiseil airson rudan a chruthachadh Innealan PointToPointNet agus gan ceangal a’ cleachdadh rud PointToPointChannel. Dìreach mar a chleachd sinn an stuth cuideachaidh topology NodeContainer gus nodan a chruthachadh, faighnichidh sinn Neach-cuideachaidh PointToPoint dèan obair dhuinn co-cheangailte ri cruthachadh, rèiteachadh agus stàladh ar n-innealan. Feumaidh sinn liosta de gach nì a chaidh a chruthachadh Inneal Lìon, mar sin bidh sinn a 'cleachdadh NetDeviceContainer airson an stòradh san aon dòigh a chleachd sinn Neach-gleidhidh Node gus na nodan a chruthaich sinn a stòradh. An ath dhà loidhne de chòd,

NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

inneal iomlan agus suidheachadh seanail. Bidh a 'chiad loidhne a' cur an cèill an inneal inneal a tha air ainmeachadh gu h-àrd, agus an dàrna fear a 'dèanamh a' phrìomh obair. Dòigh-obrach Stàlaich goireas Neach-cuideachaidh PointToPoint a ’gabhail ris Neach-gleidhidh Node mar pharamadair. Taobh a-staigh NetDeviceContainer airson gach nòta a tha suidhichte ann Neach-gleidhidh Node air a chruthachadh (airson conaltradh puing-gu-puing feumaidh dìreach dhà dhiubh a bhith ann) Inneal PointToPointNet air a chruthachadh agus air a shàbhaladh ann an soitheach an uidheim. Sianal PointToPoint air a chruthachadh agus tha dhà ceangailte ris Innealan PointToPointNet. An dèidh a bhith a 'cruthachadh stuthan, na buadhan a tha air a stòradh ann Neach-cuideachaidh PointToPoint, air an cleachdadh gus na buadhan co-fhreagarrach anns na nithean cruthaichte a thòiseachadh.

Às deidh gairm a dhèanamh pointToPoint.Install (nodan) bidh dà nodan againn, gach fear le inneal lìonra puing-gu-puing air a chuir a-steach agus aon cheangal puing-gu-puing eatorra. Bidh an dà inneal air an rèiteachadh gus dàta a thar-chuir aig astar còig megabits gach diog le dàil tar-chuir de dhà mhileiseconds thairis air an t-sianal.

InternetStackHelper

Tha nodan agus innealan againn a-nis air an rèiteachadh, ach chan eil stacan protocol air na nodan againn. Bidh an ath dhà loidhne de chòd a’ gabhail cùram de seo.

InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper - na neach-cuideachaidh topology airson cruachan eadar-lìn, coltach ri PointToPointHelper airson innealan lìonra puing-gu-puing. Dòigh-obrach Stàlaich a’ gabhail NodeContainer mar pharamadair. Nuair a thèid a chuir gu bàs, stàlaidhidh e an stac eadar-lìn (TCP, UDP, IP, msaa) air gach nód soithich.

IPv4 Seòladh Cuideachadh

An uairsin feumaidh sinn na h-innealan againn a cheangal ri seòlaidhean IP. Bidh sinn a’ toirt seachad neach-cuideachaidh topology gus riarachadh seòladh IP a riaghladh. Is e an aon API a tha follaiseach don neach-cleachdaidh a bhith a’ suidheachadh an seòladh IP bunaiteach agus an netmask airson a chleachdadh nuair a bhios tu a’ dèanamh an fhìor chuairteachadh seòlaidh (tha seo air a dhèanamh aig ìre nas ìsle taobh a-staigh an neach-cuideachaidh). An ath dhà loidhne de chòd anns an sgriobt eisimpleir againn chiad.cc,

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

cuir an cèill an nì neach-cuideachaidh seòlaidh agus innis dha gum bu chòir dha tòiseachadh air seòlaidhean IP a riarachadh bho lìonra 10.1.1.0, a’ cleachdadh an bitmask 255.255.255.0 gus faighinn a-mach. Gu gnàthach, tòisichidh seòlaidhean ainmichte aig aon agus àrdaichidh iad gu monotonach, agus mar sin is e 10.1.1.1 a’ chiad sheòladh a thèid a thoirt bhon bhunait seo, an uairsin 10.1.1.2, msaa. Ann an da-rìribh, aig ìre ìosal, tha an siostam ns-3 a’ cuimhneachadh air a h-uile seòladh IP a chaidh a thoirt seachad agus a’ gineadh mearachd marbhtach ma chruthaicheas tu suidheachadh gun fhiosta far a bheil an aon sheòladh air a chruthachadh dà uair (co-dhiù, tha am mearachd seo duilich a dheasbad).

An loidhne chòd a leanas,

Ipv4InterfaceContainer interfaces = address.Assign (devices);

a 'coileanadh an fhìor shònrachadh seòladh. Ann an ns-3 bidh sinn a’ stèidheachadh ceangal eadar seòladh IP agus inneal a’ cleachdadh an nì IPv4 Eadar-aghaidh. Dìreach mar a bhios feum againn uaireannan air liosta de dh’ innealan lìonraidh a chruthaich an neach-cuideachaidh airson an cleachdadh nas fhaide air adhart, uaireannan bidh feum againn air liosta de nithean IPv4 Eadar-aghaidh. IPv4 Container Eadar-aghaidh a 'toirt seachad an gnìomh seo.

Thog sinn lìonra puing-gu-puing, le stacan air an cur a-steach agus seòlaidhean IP air an sònrachadh. A-nis feumaidh sinn tagraidhean anns gach nód gus trafaic a ghineadh.

4.2.7 Cleachdadh Iarrtas

Is e fear eile de na prìomh tharraingean den t-siostam ns-3 iarrtas (tagradh). Anns an t-suidheachadh seo tha sinn a’ cleachdadh dà speisealachadh clas bunaiteach iarrtas ns-3 air a ghairm Iarrtas udpEchoServer и Iarrtas udpEchoClient. Mar a thachair roimhe, bidh sinn a’ cleachdadh stuthan taice gus na prìomh nithean a rèiteachadh agus a riaghladh. An seo tha sinn a 'cleachdadh Cuideachadh le UdpEchoServer и Cuideachadh udpEchoClientr nithean gus ar beatha a dhèanamh nas fhasa.

Cuideachadh le UdpEchoServer

Tha na loidhnichean còd a leanas anns an sgriobt eisimpleir first.cc againn air an cleachdadh gus tagradh frithealaiche mac-talla UDP a rèiteachadh air aon de na nodan a chruthaich sinn na bu thràithe.

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

Bidh a’ chiad loidhne de chòd anns a’ chriomag gu h-àrd a’ cruthachadh Cuideachadh le UdpEchoServer. Mar as àbhaist, chan e tagradh fhèin a tha seo, is e rud a th’ ann a chuidicheas sinn gus fìor thagraidhean a chruthachadh. Is e aon de na gnàthasan againn na buadhan riatanach a thoirt do neach-togail an nì cuideachaidh. Anns a 'chùis seo, chan urrainn don neach-cuideachaidh dad sam bith feumail a dhèanamh mura faigh e an àireamh port air an èist am frithealaiche airson pacaidean, feumaidh an neach-dèiligidh fios a bhith aig an àireamh seo cuideachd. Anns a 'chùis seo, bidh sinn a' toirt seachad àireamh a 'phuirt chun an neach-togail cuideachaidh. Bidh an neach-togail, an uair sin, dìreach a’ dèanamh SetAttribute leis an luach a chaidh seachad. Nas fhaide air adhart, ma thogras tu, faodaidh tu SetAttribute a chleachdadh gus luach eadar-dhealaichte a shuidheachadh airson feart Port.

Coltach ri iomadh nì taice eile, an nì Cuideachadh le UdpEchoServer tha dòigh-obrach Stàlaich. Le bhith a’ cur an gnìomh an dòigh seo gu h-èifeachdach cruthaichidh e tagradh frithealaiche mac-talla bunaiteach agus ga cheangal ris an aoigh. Gu inntinneach, an dòigh-obrach Stàlaich a ’gabhail ris Neach-gleidhidh Node mar pharamadair dìreach mar an fheadhainn eile Stàlaich dòighean a chunnaic sinn.

Bidh an tionndadh C ++ ag obair an seo a’ toirt toradh an dòigh nód.Faigh(1) (a thilleas comharraiche snasail don nì nód - Ptr) agus ga chleachdadh anns an inneal-togail airson an nì gun urra Neach-gleidhidh Nodea tha an uairsin air a thoirt don mhodh Stàlaich. Mura h-urrainn dhut faighinn a-mach ann an còd C ++ dè an t-ainm-sgrìobhte modh a tha air a chur ri chèile agus air a chuir gu bàs, an uairsin coimhead am measg nan atharrachaidhean inntinneach.

A-nis tha sinn a 'faicinn sin echoServer.Stàlaich mu dheidhinn an aplacaid a stàladh Iarrtas udpEchoServer air lorg ann Neach-gleidhidh Nodea chleachdas sinn airson ar n-ionadan a riaghladh, nòd le clàr-amais 1. Modh Stàlaich tillidh sinn soitheach anns a bheil comharran gu gach tagradh (sa chùis seo fear, bhon a chaidh sinn seachad air gun urra Neach-gleidhidh Node, anns a bheil aon nód) air a chruthachadh leis an neach-cuideachaidh.

Feumaidh tagraidhean sònrachadh cuin a thòisicheas iad a’ gineadh trafaic "tòiseachadh" agus dh’ fhaodadh gum feum iad cuideachd àm a shònrachadh airson stad a chuir air "stad". Bidh sinn a 'toirt seachad an dà roghainn. Tha na h-amannan sin air an suidheachadh a 'cleachdadh nan dòighean Iarrtas Container Start и stad. Tha na modhan sin a 'gabhail ri crìochan seòrsa Time. Anns a 'chùis seo bidh sinn a' cleachdadh sreath soilleir de thionndaidhean C ++ gus C ++ a ghabhail dùbailte 1.0 agus tionndaidh e gu nì tns-3 Time a chleachdas an nì Seconds gus tionndadh gu diogan. Cuimhnich gum faod an t-ùghdar modail smachd a chumail air na riaghailtean tionndaidh, agus tha na riaghailtean aige fhèin aig C ++, agus mar sin chan urrainn dhut an-còmhnaidh cunntadh air na crìochan air an tionndadh mar a bha dùil agad. Dà loidhne

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

bheir e air adhart an tagradh frithealaiche mac-talla tòiseachadh (tionndaidh air gu fèin-ghluasadach) aon diog às deidh don atharrais tòiseachadh agus stad (cuir dheth) às deidh deich diogan den atharrais. Leis gun do dh’ ainmich sinn tachartas atharrais (tachartas stad tagraidh), a thèid a chuir gu bàs ann an deich diogan, thèid co-dhiù deich diogan de ghnìomhachd lìonra a shamhlachadh.

Cuideachadh le UdpEchoClient

Iarrtas teachdaiche echo air a rèiteachadh ann an dòigh cha mhòr coltach ris an fhrithealaiche. Tha stuth bunaiteach ann Iarrtas udpEchoClient, a tha fo smachd
Cuideachadh le UdpEchoClient.

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));;

Ach, airson an neach-dèiligidh mac-talla feumaidh sinn còig buadhan eadar-dhealaichte a shuidheachadh. Tha a’ chiad dà fheart air an suidheachadh aig àm cruthachaidh Cuideachadh le UdpEchoClient. Bidh sinn a 'dol seachad air crìochan a thathar a' cleachdadh (taobh a-staigh an neach-cuideachaidh) gus na feartan a shuidheachadh "Seòladh Iomallach" и "Cuairt-iomallach" a rèir an aonta againn na crìochan riatanach a thoirt don neach-togail cuideachaidh.

Cuimhnichidh sinn gun do chleachd sinn IPv4 Container Eadar-aghaidh gus sùil a chumail air na seòlaidhean IP a tha sinn air a shònrachadh dha na h-innealan againn. Bidh an eadar-aghaidh null anns a’ ghobhar eadar-aghaidh a’ freagairt ri seòladh IP an nód null anns a’ ghobhar nodan. Tha a 'chiad eadar-aghaidh anns a' ghobhar eadar-aghaidh a 'freagairt ri seòladh IP a' chiad nód anns a 'ghobhar nodan. Mar sin, anns a 'chiad loidhne de chòd (gu h-àrd), bidh sinn a' cruthachadh neach-cuideachaidh agus ag innse dha gur e seòladh iomallach an neach-dèiligidh an seòladh IP a chaidh a shònrachadh don òstair far a bheil am frithealaiche suidhichte. Tha sinn cuideachd ag ràdh gum feum sinn ullachadh airson pacaidean a chuir gu port a naoi.

Tha am feart “MaxPackets” ag innse don neach-dèiligidh an àireamh as motha de phasganan as urrainn dhuinn a chuir tron ​​​​atharrais. Tha am feart “Eadar-ama” ag innse don neach-dèiligidh dè cho fada ri feitheamh eadar pacaidean, agus tha am feart “PacketSize” ag innse don neach-dèiligidh dè cho mòr ‘s a bu chòir uallach pàighidh a’ phacaid a bhith. Leis a’ chothlamadh feart seo bidh sinn ag iarraidh air an neach-dèiligidh aon phasgan 1024-byte a chuir.

Coltach ris an t-seirbheisiche mac-talla, shuidhich sinn buadhan an neach-dèiligidh mac-talla Start и stad, ach an seo bidh sinn a’ tòiseachadh an neach-dèiligidh diog às deidh don fhrithealaiche a bhith air a thionndadh air (dà dhiog às deidh toiseach an atharrais).

4.2.8 Simulator

Aig an ìre seo feumaidh sinn an atharrais a ruith. Tha seo air a dhèanamh a’ cleachdadh gnìomh cruinne Simulator::Ruith.

Simulator::Run ();

Nuair a dh’ ainmich sinn dòighean roimhe,

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
... 
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

chuir sinn gu dearbh tachartasan air dòigh san t-simuladair aig 1,0 diogan, 2,0 diogan, agus dà thachartas aig 10,0 diogan. Às deidh a 'ghairm Simulator::Ruith, tòisichidh an siostam a’ coimhead air an liosta de thachartasan clàraichte agus gan cur an gnìomh. Cuiridh e tachartas às deidh 1,0 diogan an toiseach, a bhrosnaicheas an tagradh frithealaiche mac-talla (faodaidh an tachartas seo grunn thachartasan eile a chlàradh). Cuiridh e às an uairsin tachartas clàraichte aig t = 2,0 diogan a chuireas air bhog an tagradh cleachdaiche mac-talla. A-rithist, is dòcha gum bi tòrr a bharrachd thachartasan air an dealbhadh aig an tachartas seo. Tòisichidh buileachadh tachartas tòiseachaidh anns an neach-dèiligidh mac-talla ìre gluasad dàta an atharrais le bhith a’ cur pacaid chun t-seirbheisiche.

Brosnaichidh an gnìomh a bhith a’ cur pacaid chun t-seirbheisiche sreath de thachartasan a thèid a chlàradh gu fèin-ghluasadach air cùl na seallaidhean agus a chuireas an gnìomh meacanaig airson pacaid mac-talla a chuir a rèir nam paramadairean tìm a shuidhich sinn san sgriobt.

Mar thoradh air an sin, leis nach eil sinn a’ cur ach aon phacaid (cuimhnich, am feart Pacaidean Max air a shuidheachadh gu aon), thig an t-sreath de thachartasan a thòisich an aon neach-dèiligidh ping seo gu crìch agus thèid an atharrais a-steach gu modh cùl-taic. Aon uair ‘s gun tachair seo, is e na tachartasan clàraichte a tha air fhàgail na tachartasan stad airson frithealaiche agus neach-dèiligidh. Nuair a thèid na tachartasan sin a chuir gu bàs, cha bhith tachartasan air fhàgail airson tuilleadh giollachd agus Simulator::Ruith bheir e smachd air ais. Tha an atharrais coileanta.

Chan eil air fhàgail ach glanadh às do dhèidh fhèin. Tha seo air a dhèanamh le bhith a’ gairm gnìomh cruinne Simulator::sgrios. Leis gun deach na gnìomhan cuideachaidh (no còd ns-3 aig ìre ìosal) a ghairm, a tha air an eagrachadh gus an deach dubhan a chuir a-steach don simuladair gus a h-uile nì a chaidh a chruthachadh a sgrios. Cha robh feum agad sùil a chumail air gin de na stuthan sin thu fhèin - cha robh agad ach a ghairm Simulator::sgrios agus falbh. Nì an siostam ns-3 an obair chruaidh seo dhut. Tha na loidhnichean a tha air fhàgail den chiad sgriobt ns-3 againn, first.cc, a’ dèanamh dìreach sin:

Simulator::Destroy ();
return 0;
}

Cuin a stadas an simuladair?

Tha ns-3 na simuladair tachartas air leth (DE). Ann an leithid de simuladair, tha gach tachartas co-cheangailte ris an ùine cur gu bàs aige, agus tha an atharrais a ’leantainn le bhith a’ giullachd thachartasan san òrdugh a thachras iad mar a thèid an atharrais air adhart. Faodaidh tachartasan adhbhrachadh gun tèid tachartasan san àm ri teachd a chlàradh (mar eisimpleir, faodaidh timer e fhèin ath-eagrachadh gus crìoch a chuir air cunntadh san ath eadar-ama).

Mar as trice bidh tachartasan tùsail air an tòiseachadh leis an eintiteas, mar eisimpleir bidh IPv6 a’ clàradh lorg sheirbheisean air an lìonra, iarrtasan nàbaidhean, msaa. Bidh an tagradh a’ clàradh a’ chiad tachartas cur pacaid, agus mar sin air adhart. Nuair a thèid tachartas a phròiseasadh, faodaidh e neoni, aon no barrachd thachartasan a ghineadh. Mar a thèid an atharrais air adhart, bidh tachartasan a’ tachairt, an dàrna cuid a’ crìochnachadh no a’ cruthachadh feadhainn ùra. Stadaidh an atharrais gu fèin-ghluasadach ma tha ciudha an tachartais falamh no ma lorgar tachartas sònraichte stad. Tachartas stad air a chruthachadh leis a’ ghnìomh Simulator:: Stad (stad ùine).

Tha cùis àbhaisteach ann far a bheil Simulator ::Stop gu tur riatanach gus stad a chuir air an atharrais: nuair a tha tachartasan fèin-sheasmhach ann. Tha tachartasan fèin-sheasmhach (no ath-aithris) nan tachartasan a tha an-còmhnaidh air an ath-eagrachadh. Mar thoradh air an sin, bidh iad an-còmhnaidh a’ cumail ciudha an tachartais falamh. Tha mòran phròtacalan agus mhodalan anns a bheil tachartasan ath-aithris, mar eisimpleir:

• FlowMonitor - sgrùdadh bho àm gu àm airson pacaidean caillte;

• RIPng – craoladh bho àm gu àm air ùrachaidhean bùird slighe;

• etc.

Ann an leithid de chùisean Simulator:: Stad riatanach gus stad a chuir air an atharrais gu ceart. A bharrachd air an sin, nuair a tha ns-3 ann am modh emulation, tha an RealtimeSimulator air a chleachdadh gus an gleoc atharrais a shioncronachadh le gleoc an inneil, agus Simulator:: Stad riatanach gus stad a chur air a 'phròiseas.

Chan eil mòran de na prògraman atharrais san leabhar-teacsa a’ gairm Simulator:: Stad gu soilleir, leis gu bheil iad a’ tighinn gu crìch gu fèin-ghluasadach nuair a tha na tachartasan ciudha sgìth. Ach, gabhaidh na prògraman sin ris an Simulator ::Stop call. Mar eisimpleir, bhiodh an aithris a bharrachd a leanas sa chiad eisimpleir de phrògram a’ clàradh stad sònraichte aig 11 diogan:

+ Simulator::Stop (Seconds (11.0));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

Cha atharraich na tha gu h-àrd giùlan a’ phrògraim seo, leis gu bheil an atharrais sònraichte seo gu nàdarrach a’ tighinn gu crìch às deidh 10 diogan. Ach nan atharraicheadh ​​​​tu an ùine stad anns an aithris gu h-àrd bho 11 diogan gu 1 diog, bheireadh tu an aire gu bheil an atharrais a’ stad mus buail toradh sam bith air an sgrion (leis gu bheil an toradh a’ tachairt às deidh timcheall air 2 diogan de ùine atharrais).

Tha e cudromach fios a chuir gu Simulator ::Stad mus cuir thu fios gu Simulator ::Ruith; air neo eile Simulator ::Is dòcha nach till Run gu bràth smachd air a’ phrìomh phrògram gus an stad a chuir an gnìomh!

4.2.9 A’ togail do sgriobt

Tha sinn air na sgriobtaichean sìmplidh agad a chruthachadh gu math beag. Chan eil agad ach do sgriobt a chuir san eòlaire sgrìobadh agus thèid a thogail gu fèin-ghluasadach ma ruitheas tu Ci. Feuch sinn. Rach air ais chun eòlaire àrd-ìre agus dèan lethbhreac eisimpleirean/oideachadh/ciad.cc dhan chatalog Scratch

$ cd ../.. 
$ cp examples/tutorial/first.cc scratch/myfirst.cc

A-nis tog a’ chiad sgriobt sampall agad a’ cleachdadh waf:

$ ./waf

Bu chòir dhut teachdaireachdan fhaicinn a’ nochdadh gun deach a’ chiad eisimpleir agad a chruthachadh gu soirbheachail.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
[614/708] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_3.o
[706/708] cxx_link: build/debug/scratch/myfirst_3.o -> build/debug/scratch/myfirst
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (2.357s)

A-nis faodaidh tu an eisimpleir a ruith (thoir an aire ma thogas tu am prògram agad san eòlaire sgrìobadh, feumaidh tu a ruith bho Scratch):

$ ./waf --run scratch/myfirst

Bu chòir dhut toradh coltach ris fhaicinn:

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s) Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

An seo chì thu gu bheil an siostam togail a’ dearbhadh gun deach am faidhle a thogail agus an uairsin ga ruith. Chì thu gu bheil an inntrigeadh co-phàirteach air an neach-dèiligidh mac-talla a’ nochdadh gun do chuir e aon phasgan 1024-byte gu mac-talla frithealaiche 10.1.1.2. Chì thu cuideachd am pàirt logaidh air an t-seirbheisiche mac-talla gus a ràdh gun d’ fhuair e 1024 bytes bho 10.1.1.1. Bidh am frithealaiche mac-talla gu sàmhach ag ath-chluich a’ phacaid agus chì thu ann an log an neach-dèiligidh mac-talla gun d’ fhuair e a phacaid air ais bhon t-seirbheisiche.

4.3 ns-3 Còd stòr

A-nis gu bheil thu air cuid den luchd-cuideachaidh ns-3 a chleachdadh, faodaidh tu sùil a thoirt air cuid den chòd stòr a chuireas an gnìomh seo an gnìomh. Faodar an còd as ùire fhaicinn air an t-seirbheisiche lìn againn aig a’ cheangal a leanas: https://gitlab.com/nsnam/ns-3-dev.git. An sin chì thu duilleag geàrr-chunntas Mercurial airson ar craobh leasachaidh ns-3. Aig mullach na duilleige chì thu grunn cheanglaichean,

summary | shortlog | changelog | graph | tags | files

Rach air adhart agus tagh an ceangal faidhlichean. Seo cò ris a bhios an ìre as àirde den mhòr-chuid de na tasgaidhean againn coltach:

drwxr-xr-x                               [up]
drwxr-xr-x                               bindings python  files
drwxr-xr-x                               doc              files
drwxr-xr-x                               examples         files
drwxr-xr-x                               ns3              files
drwxr-xr-x                               scratch          files
drwxr-xr-x                               src              files
drwxr-xr-x                               utils            files
-rw-r--r-- 2009-07-01 12:47 +0200 560    .hgignore        file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1886   .hgtags          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1276   AUTHORS          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 30961  CHANGES.html     file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 17987  LICENSE          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 3742   README           file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 16171  RELEASE_NOTES    file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 6      VERSION          file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 88110  waf              file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 28     waf.bat          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 35395  wscript          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 7673   wutils.py        file | revisions | annotate

Tha na sgriobtaichean eisimpleir againn anns an eòlaire eisimpleirean. Ma bhriogas tu air na h-eisimpleirean chì thu liosta de fho-eòlairean. Aon de na faidhlichean san fho-eòlaire oideachadh - ciad.cc. Ma bhriogas tu air chiad.cc chì thu an còd a dh’ ionnsaich thu.

Tha an còd tùsail suidhichte sa mhòr-chuid san eòlaire SRC. Chì thu an còd tùsail le bhith a’ briogadh air ainm an eòlaire no a’ briogadh air ceangal nam faidhlichean air taobh deas ainm an eòlaire. Ma bhriogas tu air an eòlaire src, gheibh thu liosta de fho-eòlairean src. Ma bhriogas tu an uairsin air a’ phrìomh fho-eòlaire, gheibh thu liosta de fhaidhlichean. Is e a’ chiad fhaidhle a chì thu (aig àm sgrìobhaidh an iùl seo). giorrachadh.h. Ma bhriogas tu air a’ cheangal giorrachadh.h, thèid do chuir chun fhaidhle stòr airson giorrachadh.h, anns a bheil macros feumail airson sgriobtaichean fhàgail ma lorgar suidheachaidhean neo-àbhaisteach. Gheibhear an còd tùsail airson an luchd-cuideachaidh a chleachd sinn sa chaibideil seo san eòlaire src/Applications/helper. Faodaidh tu a dhol timcheall craobh an eòlaire gus faighinn a-mach càite a bheil agus stoidhle phrògraman ns-3 a thuigsinn.

Source: www.habr.com

Cuir beachd ann