ìŽê²ì Ubuntu Online, Fedora Online, Windows ìšëŒìž ì뮬ë ìŽí° ëë MAC OS ìšëŒìž ì뮬ë ìŽí°ì ê°ì ì¬ë¬ ë¬Žë£ ìšëŒìž ìí¬ì€í ìŽì ì€ íë륌 ì¬ì©íì¬ OnWorks ë¬Žë£ ížì€í ê³µêžììì ì€íí ì ìë ns-3-tutorial ëª ë ¹ì ëë€.
íë¡ê·žëš:
ìŽëŠ
ns-3-tutorial - ns-3 íí 늬ìŒ
ìŽê²ì NS-3 íí 늬ìŒ. ns-3 íë¡ì ížì ëí Ʞ볞 묞ìë XNUMXê°ì§ íììŒë¡ ì ê³µë©ëë€.
íí :
· NS-3 ë ì: ì뮬ë ìŽí°ì ê³µê° API 묞ì
· íí ëŠ¬ìŒ (ìŽ ë¬žì), 맀ëŽìŒ ë° ëªšëž ëŒìŽëžë¬ëŠ¬ ìµê·Œ ê³µê° and
ê°ë° ë묎
· NS-3 ìí€
ìŽ ë¬žìë reStructuredText for ì€íí¬ì€ ê·žëŠ¬ê³ ìì ì ì§ë©ëë€
묞ì/íí ëŠ¬ìŒ ns-3ì ìì€ ìœë ëë í 늬.
ìê°
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì뮬ë ìŽí°ë ì£Œë¡ ì°êµ¬ë¥Œ 목íë¡ íë ìŽì° ìŽë²€íž ë€ížìí¬ ì뮬ë ìŽí°ì ëë€.
ë° êµì¡ì©. ê·žë§íŒ NS-3 íë¡ì ížë 2006ë ì ììë ì€í ìì€ íë¡ì ížì ëë€.
ê°ë° NS-3.
ìŽ íí 늬ìŒì 목ì ì ìë¡ìŽ êž°ë¥ì ìê°íë ê²ì ëë€. NS-3 구조íë ìì€í ìì ì¬ì©ì
ë°©ë². ì ê· ì¬ì©ìê° ììží ì 볎ìì íì ì 볎륌 ìì§íë ê²ìŽ ëëë¡ ìŽë €ìž ì ììµëë€.
맀ëŽìŒì ìì±íê³ ìŽ ì 볎륌 ìì ì뮬ë ìŽì ìŒë¡ ë³íí©ëë€. ìŽ íí 늬ìŒìì ì°ëŠ¬ë
죌ì ê°ë ì ìê°íê³ ì€ëª íë ëª ê°ì§ ìì ì뮬ë ìŽì ì 구ì¶íê³
êž°ë¥ì ì ê³µí©ëë€.
íí 늬ìŒìŽ ì§íëšì ë°ëŒ ì 첎 ëŽì©ì ìê°í©ëë€. NS-3 묞ìí ë° ì ê³µ
ìì ì ëíŽ ë ê¹ìŽ íê³ ë€ê³ ì íë ì¬ëë€ì ìí ìì€ ìœëì ëí í¬ìží°
ìì€í .
ëª ê°ì§ íµì¬ ì¬íì ì²ìë¶í° 죌목í ê°ì¹ê° ììµëë€.
· NS-3 ì€í ìì€ìŽë©° íë¡ì ížë ì€í í겜ì ì ì§íêž° ìíŽ ë žë ¥í©ëë€.
ìíížìšìŽë¥Œ êž°ì¬íê³ ê³µì í ì ììµëë€.
· NS-3 ìŽì ë²ì 곌 ížíëë íì¥ìŽ ìëëë€. NS-2; ê·žê²ì ìë¡ìŽ ì뮬ë ìŽí°ì ëë€. ë
ì뮬ë ìŽí°ë ë ë€ C++ë¡ ìì±ëìì§ë§ NS-3 ì§ìíì§ ìë ìë¡ìŽ ì뮬ë ìŽí°ì ëë€.
NS-2 ìíŒì€. ì ìŒë¶ ëªšëž NS-2 ìì ìŽë¯ž í¬í ëììµëë€. NS-2 ì NS-3. ê·žë§íŒ
íë¡ì ížë ê³ì ì ì§ë©ëë€ NS-2 ëì NS-3 ê±Žì€ ì€ìŽë©° ì°êµ¬ í ê²ì ëë€.
ì í ë° íµí© ë©ì»€ëìŠ.
ìê° NS-3
NS-3 ê°ë°©ì ìŽê³ íì¥ ê°ë¥í ë€ížìí¬ ì뮬ë ìŽì íë«íŒì ì ê³µíêž° ìíŽ ê°ë°ëììµëë€.
ë€ížìí¹ ì°êµ¬ ë° êµì¡. ê°ëší ë§íŽì, NS-3 íší· ë°ìŽí°ì 몚ëžì ì ê³µí©ëë€.
ë€ížìí¬ê° ìëíê³ ìííë©° ì¬ì©ìê° ìíí ì ìë ì뮬ë ìŽì ìì§ì ì ê³µí©ëë€.
ì뮬ë ìŽì ì€í. ì¬ì©íë ëª ê°ì§ ìŽì NS-3 ìííë ì°êµ¬ë¥Œ í¬íší©ëë€.
ìì€í ëìì ì°êµ¬íêž° ìíŽ ì€ì ìì€í ìì ìííë ê²ìŽ ë ìŽë µê±°ë ë¶ê°ë¥í©ëë€.
ê³ ëë¡ ì ìŽëê³ ì¬í ê°ë¥í í겜ìì ë€ížìí¬ ìë ë°©ìì ëíŽ íìµí©ëë€.
ì¬ì©ìë ì¬ì© ê°ë¥í 몚ëžìŽ NS-3 ìží°ë·ìŽ ìŽë»ê² ìëíëì§ ëªšëžë§íë ë° ì€ì ì ë¡ëë€.
íë¡í ìœê³Œ ë€ížìí¬ë ìëíì§ë§ NS-3 ìží°ë· ìì€í ì êµíëì§ ììµëë€. ì¬ë¬ ì¬ì©ì
ì¬ì©íê³ ììµëë€ NS-3 ìží°ë· êž°ë°ìŽ ìë ìì€í ì 몚ëžë§í©ëë€.
ë€ížìí¬ ì뮬ë ìŽì ì°êµ¬ë¥Œ ìí ë§ì ì뮬ë ìŽì ëêµ¬ê° ììµëë€. ìëë ëª ê°ì§
ì 구ë³ëë í¹ì§ NS-3 ë€ë¥ž ë구ì ë¬ëŠ¬.
· NS-3 íšê» ê²°í©í ì ìê³ ë€ë¥ž ëŒìŽëžë¬ëŠ¬ìë ê²°í©í ì ìë ëŒìŽëžë¬ëŠ¬ ìžížë¡ ì€ê³ëììµëë€.
ìžë¶ ìíížìšìŽ ëŒìŽëžë¬ëŠ¬. ìŒë¶ ì뮬ë ìŽì íë«íŒì ì¬ì©ììê²
몚ë ìì ìŽ ìíëë ëšìŒ íµí© ê·žëíœ ì¬ì©ì ìží°íìŽì€ í겜
ven, NS-3 ìŽì êŽë šíì¬ ë 몚ëíëìŽ ììµëë€. ì¬ë¬ ìžë¶ ì ëë©ìŽí° ë° ë°ìŽí° ë¶ì
ë° ìê°í ë구륌 íšê» ì¬ì©í ì ììµëë€. NS-3. ê·žë¬ë ì¬ì©ìë
ëª ë ¹ì€ê³Œ C++ ë°/ëë Python ìíížìšìŽ ê°ë° ë구륌 ì¬ì©í©ëë€.
· NS-3 FreeBSD, Cygwinì ëí ì§ììŽ ìì§ë§ ì£Œë¡ Linux ìì€í ìì ì¬ì©ë©ëë€.
(Windowsì 겜ì°) Ʞ볞 Windows Visual Studio ì§ìì íì¬ ì§í ì€ì ëë€.
ê°ë°íë€.
· NS-3 ê³µìì ìŒë¡ ì§ìëë íì¬ì ìíížìšìŽ ì íìŽ ìëëë€. ìì§ ì§íë€ NS-3
ns-3-users ë©ìŒë§ 늬ì€ížìì ìµì ì ë€íŽ ìíë©ëë€.
ëì 늬 NS-2 ì¬ì©ì
ìµìí ì¬ëë€ì ìíŽ NS-2 (ìŽì ì ìžêž° ìë ë구 NS-3), ê°ì¥ ëì ëë ìžë¶
ìŽì¬í ë ë³ê²œ NS-3 ì€í¬ëŠœíž ìžìŽì ì íì ëë€. íë¡ê·žëš NS-2 are
OTclìì ì€í¬ëŠœí ëê³ ì뮬ë ìŽì 결곌ë Network Animator륌 ì¬ì©íì¬ ìê°íí ì ììµëë€.
ëš. ìì ì뮬ë ìŽì ì ì€íí ì ììµëë€. NS-2 ìì í C++ìì(ìŠ, main()
OTclìŽ ìë íë¡ê·žëš). ê²ë€ê° ìŒë¶ 구ì±ììë NS-2 C++ë¡ ìì±ëììŒë©°
OTclì ë€ë¥ž ì¬ëë€. ~ ìì NS-3, ì뮬ë ìŽí°ë ì íì Python곌 íšê» C++ë¡ ìì í ìì±ë©ëë€.
ë°ìžë©. ë°ëŒì ì뮬ë ìŽì ì€í¬ëŠœížë C++ ëë PythonìŒë¡ ìì±í ì ììµëë€. ìë¡ìŽ ì ëë©ìŽí°
ìê°í ë구륌 ì¬ì©í ì ììŒë©° íì¬ ê°ë° ì€ì ëë€. ë¶í° NS-3 pcap ìì±
íší· ì¶ì íìŒ, ë€ë¥ž ì ížëŠ¬í°ë¥Œ ì¬ì©íì¬ ì¶ì ë ë¶ìí ì ììµëë€. ìŽì
ììµìììë 뚌ì C++ìì ì§ì ì€í¬ëŠœí íê³ ê²°ê³Œë¥Œ íŽìíë ë° ì§ì€í©ëë€.
ì¶ì íìŒì íµíŽ.
ê·žë¬ë ì ì¬ì ë ììµëë€(ì륌 ë€ìŽ ë ë€ C++ ê°ì²Žë¥Œ êž°ë°ìŒë¡ íë©° ìŒë¶
ìœë NS-2 ë¡ ìŽë¯ž í¬í ëììµëë€ NS-3). ì°ëŠ¬ë ì°šìŽì ì ê°ì¡°íë €ê³ ë žë ¥í ê²ì ëë€
ì¬ìŽì NS-2 and NS-3 ìŽ ììµì륌 ì§ííë©Žì.
ì°ëŠ¬ê° ì죌 ë£ë ì§ë¬žì "ê³ì ì¬ì©íŽìŒ í©ëê¹? NS-2 ëë ìŽë NS-3?" ìŽì
ìì±ìì ì견, ì¬ì©ìê° ìŽë»ê²ë ê·ìëì§ ìë í NS-2 (êž°ì¡Ž êž°ì€ìŒë¡
ê°ìžì ìž ížìíšê³Œ ì§ì NS-2, ëë í¹ì ì뮬ë ìŽì 몚ëžì êž°ë°ìŒë¡
ììë§ ì¬ì©í ì ììµëë€. NS-2), ì¬ì©ìë ë€ìì íµíŽ ìì°ì±ì ëìŒ ì ììµëë€. NS-3 ë€ìì ìíŽ
ììž:
· NS-3 íëì ìŽê³ ë°ììŽ ë¹ ë¥ž ì¬ì©ì ë©ìŒë§ 늬ì€ížë¡ ì ê·¹ì ìŒë¡ ì ì§ êŽëŠ¬ëë ë°ë©Ž NS-2 is
ê°ë³ê² ì ì§ êŽëŠ¬ëë©° Ʞ볞 ìœë ížëŠ¬ìì ì€ìí ê°ë°ì ë³Žì§ ëª»íìµëë€.
10 ë ìŽì.
· NS-3 ìì ì¬ì©í ì ìë êž°ë¥ì ì ê³µí©ëë€. NS-2, 구í ìœë ì€í곌 ê°ì
í겜(ì¬ì©ìê° ì뮬ë ìŽí°ìì ì€ì 구í ìœë륌 ì€íí ì ìëë¡ íš)
· NS-3 ì ë¹íŽ ë®ì Ʞ볞 ìì€ì ì¶ìí륌 ì ê³µí©ëë€. NS-2, ì ë ¬í ì ìëë¡
ì€ì ìì€í ìŽ ê²°í©ëë ë°©ììŽ ë ì¢ìµëë€. ìì ë°ê²¬ë ëª ê°ì§ ì í ì¬í NS-2 (ì :
ë žëìì ì¬ë¬ ì íì ìží°íìŽì€ë¥Œ ì¬ë°ë¥Žê² ì§ì)ê° íŽê²°ëììµëë€. NS-3.
NS-2 ë³Žë€ ë€ìí êž°ì¬ ëªšë ìžížë¥Œ 볎ì íê³ ììµëë€. NS-3, ê·žê²ì ꞎ ë묞ì
ìì¬. íì§ë§, NS-3 ì¬ë¬ ìžêž° ìë ì°êµ¬ ë¶ìŒìì ë ììží 몚ëžì ê°ì§ê³ ììµëë€.
(ê³ êž LTE ë° WiFi ëªšëž í¬íš) ë° êµ¬í ìœë ì§ì
ë§€ì° êŽë²ìí ê³ ì¶©ì€ë 몚ëžì ìžì í©ëë€. ì¬ì©ìê° ìë©Ž ëë ì ììµëë€.
ì 첎 Linux ë€ížìí¹ ì€íì 캡ìíí ì ììµëë€. NS-3 ë žë, ì§ì ì¬ì©
ìœë ì€í(DCE) íë ììí¬. NS-2 ëëë¡ ëªšëžì í¬í í ì ììµëë€. NS-3, í¹í
C++ë¡ êµ¬íë 겜ì°.
ìì¬ì€ë¬ìŽ ê²œì° ì¢ì ì§ì¹šì ë ì뮬ë ìŽí°(ë° êž°í
ì뮬ë ìŽí°), í¹í ì°êµ¬ì ì¬ì©í ì ìë 몚ëžìŽì§ë§ ëª ì¬íììì€.
ì ê·¹ì ìŒë¡ ê°ë° ì€ìž ë구륌 ì¬ì©íë©Ž ë ëì 겜íì í ì ììŒë©°
ì ì§ (NS-3).
êž°ì¬
NS-3 ì°êµ¬ 컀뮀ëí°ì ìí, ì°êµ¬ 컀뮀ëí°ë¥Œ ìí ì°êµ¬ ë° êµì¡ ì뮬ë ìŽí°ì ëë€. ê·žê²ì
컀뮀ëí°ì ì§ìì ìž êž°ì¬ì ìì¡Žíì¬ ì 몚ëžì ê°ë°íê±°ë ëë²ê·žíê±°ë
êž°ì¡Ž í목ì ì ì§íê³ ê²°ê³Œë¥Œ ê³µì í©ëë€. ì°ëŠ¬ê° í¬ë§íë ëª ê°ì§ ì ì± ìŽ ììµëë€.
ì¬ëë€ìŽ êž°ì¬íëë¡ ê²©ë € NS-3 ê·žë€ìŽ ê°ì§ê³ ìë ê²ì²ëŒ NS-2:
· GNU GPLv2 ížíì±ì êž°ë°ìŒë¡ íë ì€í ìì€ ëŒìŽì ì€
· ìí€
· êž°ì¬ ìíž íìŽì§, ì ì¬ NS-2ì ìžêž° êž°ì¬ ìœë íìŽì§
· ìŽë€ ë²ê·ž ížë컀
ìŽ ë¬žì륌 ìœê³ ìë€ë©Ž íë¡ì ížì ë€ì êž°ì¬íë ê²ìŽ
ìë§ë ìŽ ìì ìì ê·íì ê°ì¥ í° êŽì¬ì¬ë ìë ê²ì ëë€. ê·žë¬ë ì°ëŠ¬ë ê·íê°
êž°ì¬íë ê²ì íë¡ì ížì ì ì ì ììŒë©° ì°ëŠ¬ìê² ë©ëªšë¥Œ ëšêž°ë íìì¡°ì°šë
ê·íì ìŽêž° 겜íì ëíŽ NS-3 (ì: "ìŽ íí ëŠ¬ìŒ ì¹ì ì ëª ííì§ ìììµëë€..."),
ë¶ì€í 묞ì ë±ì ëí ë³Žê³ ë ëëší ê°ì¬í©ëë€.
íí ëŠ¬ìŒ íì¬ì¡°ì§
ììµìììë ì ì¬ì©ìê° ì²ìì ë€ì곌 ê°ì 겜ë¡ë¥Œ ë°ë¥Œ ì ìë€ê³ ê°ì í©ëë€.
· ì¬ë³žì ë€ìŽë¡ëíê³ ë¹ëíŽ ë³Žììì€.
· ëª ê°ì§ ìí íë¡ê·žëšì ì€ííŽ ë³Žììì€.
· ì뮬ë ìŽì ì¶ë ¥ì ë³Žê³ ì¡°ì íŽ ë³Žììì€.
결곌ì ìŒë¡ ì°ëŠ¬ë ìì êŽë²ìí ììì ë°ëŒ íí 늬ìŒì 구ì±íë €ê³ ë žë ¥íìµëë€.
ìŽë²€íž.
늬ìì€
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë Web
ëª ê°ì§ ì€ìí 늬ìì€ê° ììµëë€. NS-3 ì¬ì©ìê° ìì§íŽìŒ í©ëë€. ë©ìž ì¹
ì¬ìŽíž ìì¹ http://www.nsnam.org ì ëí Ʞ볞 ì 볎ì ëí ì¡ìžì€ë¥Œ ì ê³µí©ëë€.
NS-3 첎ê³. ììží 묞ìë Ʞ볞 ì¹ ì¬ìŽížìì ì ê³µë©ëë€.
http://www.nsnam.org/documentation/. ìì€í 곌 êŽë šë 묞ìë ì°Ÿì ì ììµëë€.
ìŽ íìŽì§ì ìí€í ì².
ë©ìžì 볎ìíë ìí€ê° ììµëë€. NS-3 ë¹ì ìŽ ì°Ÿì ì¹ ì¬ìŽíž
http://www.nsnam.org/wiki/. ê±°êž°ìì ì¬ì©ì ë° ê°ë°ì FAQ륌 ì°Ÿì ì ìì ë¿ë§ ìëëŒ
묞ì íŽê²° ê°ìŽë, íì¬ ì ê³µ ìœë, 묞ì ë±
ìì€ ìœëë ë€ììì ì°Ÿì 볌 ì ììµëë€. http://code.nsnam.org/. ê±°êž° ë¹ì ì ì°Ÿì ê²ì ëë€
ìŽëŠìŽ ì§ì ë ì ì¥ìì íì¬ ê°ë° ížëŠ¬ ns-3-dev. ì§ë ëŠŽëŠ¬ì€ ë°
íµì¬ ê°ë°ìì ì€íì ì ì¥ìë ì¬êž°ìì ì°Ÿì ì ììµëë€.
ììì
ë³µì¡í ìíížìšìŽ ìì€í ìë ì¡°ì§ê³Œ ë³ê²œ ì¬íì êŽëŠ¬í ì ìë ë°©ë²ìŽ íìí©ëë€.
Ʞ볞 ìœë ë° ë¬žì. ìŽ ìì ì ìííë ë°©ë²ìë ì¬ë¬ ê°ì§ê° ììŒë©°
íì¬ ìŽë¥Œ ìííë ë° ì¬ì©ëë ìŒë¶ ìì€í ì ëíŽ ë€ììµëë€. ëì
ë²ì ìì€í (CVS)ìŽ ê°ì¥ ì ìë €ì ž ììµëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 íë¡ì ížë Mercurialì ìì€ ìœë êŽëŠ¬ ìì€í ìŒë¡ ì¬ì©í©ëë€. ë¹ì ìíì§ ìì§ë§
ìŽ íí 늬ìŒì ìë£íë €ë©Ž Mercurialì ëíŽ ë§ìŽ ìììŒ í©ëë€.
Mercurialì ìµìíŽì§ê³ Mercurialì ì¬ì©íì¬ ìì€ ìœëì ì¡ìžì€í©ëë€. ëšží늬ìŒì
ì¹ ì¬ìŽíž http://www.selenic.com/mercurial/, ë°ìŽë늬 ëë ìì€ë¥Œ ì»ì ì ììµëë€.
ìŽ ìíížìšìŽ êµ¬ì± êŽëŠ¬(SCM) ìì€í ì 늎늬ì€ì ëë€. Selenic(ê°ë°ì
of Mercurial)ìì íí 늬ìŒë ì ê³µí©ëë€.
http://www.selenic.com/mercurial/wiki/index.cgi/Tutorial/ë° QuickStart ê°ìŽëë
http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart/.
ëí Mercurial ë° NS-3 ë©ìžì NS-3 ì¹
ì¬ìŽíž.
ìí
ë¡ì»¬ ìì€í ì ìì€ ìœë륌 ë€ìŽë¡ëíìŒë©Ž 컎íìŒíŽìŒ í©ëë€.
ì¬ì© ê°ë¥í íë¡ê·žëšì ìì±íë ìì€. ìì€ìœë êŽëŠ¬ì 겜ì°ì ë§ì°¬ê°ì§ë¡
ìŽ êž°ë¥ì ìííë ë° ì¬ì©í ì ìë ë§ì ëêµ¬ê° ììµëë€. ìë§ ìŽ ì€ ê°ì¥ ì ìë €ì§
ë구ë íìž. ê°ì¥ ì ìë €ì ž ìì ë¿ë§ ìëëŒ, íìž ìë§ë ê°ì¥ ìŽë €ìŽ
ë§€ì° í¬ê³ ê³ ëë¡ êµ¬ì± ê°ë¥í ìì€í ìì ì¬ì©í©ëë€. ìŽ ë묞ì ë§ì ëì
ê°ë°ëììµëë€. ìµê·Œì ìŽë¬í ìì€í ì Pythonì ì¬ì©íì¬ ê°ë°ëììµëë€.
ìžìŽ.
ë¹ë ìì€í Wafë NS-3 íë¡ì íž. ê·žê²ì ìë¡ìŽ ìžëì íëì ëë€
Python êž°ë° ë¹ë ìì€í . ë¹ëíêž° ìíŽ Pythonì ìŽíŽí íìê° ììµëë€.
íì¡Žíë NS-3 ìì€í .
Wafì íŒí¬ì±ìŽ ìžë¶ ì¬íì êŽì¬ìŽ ìë ì¬ì©ìë Ʞ볞 ì¹ ì¬ìŽížìì ì°Ÿì ì ììµëë€.
http://code.google.com/p/waf/.
ê°ë° í겜
ììì ìžêžíë¯ìŽ ì€í¬ëŠœí ì NS-3 C++ ëë Pythonìì ìíë©ëë€. ëë¶ë¶ì NS-3 APIë
Pythonìì ì¬ì©í ì ìì§ë§ 몚ëžì ë ê²œì° ëªšë C++ë¡ ìì±ë©ëë€. ìŒíë
ìŽ ë¬žìììë C++ ë° ê°ì²Ž ì§í¥ ê°ë ì ëí ì§ììŽ ìë€ê³ ê°ì í©ëë€. ì°ëŠ¬ë 걞늎 ê²ì ëë€
ìŒë¶ ê³ êž ê°ë ìŽë ììí ìžìŽë¥Œ ê²í í ìê°
êž°ë¥, êŽì©êµ¬ ë° ëììž íšíŽìŽ ëíëë ëë¡. ì°ëŠ¬ë ìŽ íí 늬ìŒìŽ
ê·žë¬ë C++ íí 늬ìŒë¡ ëìŽê°ë¯ë¡ ìžìŽì Ʞ볞 ëª ë ¹ì êž°ëí©ëë€.
ê±°ì ììí ì ìì ì ëë¡ ë§ì C++ ì 볎 ìì€ê° ììµëë€.
ì¹ ëë ìžì묌.
C++륌 ì²ì ì¬ì©íë ê²œì° ììµì ëë ìëŠ¬ì± êž°ë° ì± ìŽë ì¹ ì¬ìŽížë¥Œ ì°Ÿì ì ììµëë€.
ì§ííêž° ì ì ì ìŽë ìžìŽì Ʞ볞 êž°ë¥ì íµíŽ ìì íììì€. ì ìí
ì, ìŽ ì§ë ìê°.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ìì€í ì ê°ë°ì ìíŽ GNU "ë구 첎ìž"ì ì¬ë¬ êµ¬ì± ìì륌 ì¬ì©í©ëë€. ã
ìíížìšìŽ íŽì²Žìžì 죌ìŽì§ í겜ìì ì¬ì©í ì ìë íë¡ê·žëë° ë구 ìžížì ëë€. ì ìí
GNU ë구 첎ìžì í¬íšë ëŽì©ì ëí ë¹ ë¥ž ê²í ë ë€ìì ì°žì¡°íììì€.
http://en.wikipedia.org/wiki/GNU_toolchain. NS-3 gcc, GNU binutils ë° gdb륌 ì¬ì©í©ëë€.
ê·žë¬ë ì°ëŠ¬ë GNU ë¹ë ìì€í ë구ë makeë autotools륌 ì¬ì©íì§ ììµëë€. ì°ëŠ¬ë ìí륌 ì¬ì©í©ëë€
ìŽë¬í êž°ë¥ì ìíŽ.
ìŒë°ì ìŒë¡ NS-3 ìì±ìë Linux ëë Linuxì ì ì¬í í겜ìì ìì í©ëë€. ê·žë° ë¶ë€ì ìíŽ
Windowsìì ì€íëë Linux í겜ì ì뮬ë ìŽížíë íê²œìŽ ì¡Žì¬í©ëë€.
ë€ìí ì ë. ê·žë§íŒ NS-3 íë¡ì ížê° 곌거ì(íì¬ë ìë) ì§ìëš
ìŽë¬í ì¬ì©ì륌 ìíŽ Cygwin í겜ìì ê°ë°í©ëë€. ë³Žë€ http://www.cygwin.com/ for
ë€ìŽë¡ëì ëí ììží ëŽì©ì íìžíê³ NS-3 Cygwin ë°
NS-3. MinGWë íì¬ ê³µìì ìŒë¡ ì§ìëì§ ììµëë€. Cygwinì ë ë€ë¥ž ëìì
VMware ìë²ì ê°ì ê°ì ëšžì í겜ì ì€ì¹íê³ Linux ê°ìì ì€ì¹íììì€.
êž°ê³.
ììŒ íë¡ê·žëš ìì±
ìŽ ìì ìì ì¬ì©ë ìì ììë Berkeley Sockets APIê° ìë Ʞ볞 êž°ë¥ì ê°ì í©ëë€.
ì§ë ìê°. ììŒì ì²ì ì¬ì©íë ê²œì° API ë° ìŒë°ì ìž ì¬ì©ë²ì ê²í íë ê²ìŽ ì¢ìµëë€.
ì¬ë¡. TCP/IP ììŒ íë¡ê·žëë°ì ëí ì¢ì ê°ì륌 ë³Žë €ë©Ž ë€ìì ê¶ì¥í©ëë€. TCP / IP ììŒ in
C, ëëí and 칌 ë²íž.
ìŽ ì± ì ìì ì ëí ìì€ë¥Œ í¬íšíë êŽë š ì¹ ì¬ìŽížê° ììµëë€.
ë€ììì ì°Ÿì ì ììµëë€. http://cs.baylor.edu/~donahoo/practical/CSockets/.
ì± ì ì²ì ë€ ì±í°ë¥Œ ìŽíŽíë€ë©Ž(ëë ì ê·Œ ê¶íìŽ ìë ì¬ëë€ì ìíŽ)
ì± ì ì¬ë³ž, ìì ì¹ì¬ìŽížì íìë ììœ íŽëŒìŽìžíž ë° ìë²ì)
íí 늬ìŒì ìŽíŽíêž°ì ì¢ì ìíì¬ìŒ í©ëë€. Multicastì ë¹ì·í ì± ìŽ ììµëë€.
ììŒ, ë©í° ìºì€íž ììŒ, ë§ìœíì€ìŒ and ìë©ë¡ì€. íìí ìë£ë¥Œ ë€ë£¹ëë€.
ë°°í¬íì ë©í°ìºì€íž ì륌 볎멎 ìŽíŽí ì ììµëë€.
ììíêž° ììíììì€
ìŽ ì¹ì ì ë€ì곌 ê°ì ìì€í ìŒë¡ ììíì¬ ì¬ì©ì륌 ìì ìíë¡ ë§ëë ê²ì 목íë¡ í©ëë€.
í ë²ë ììì ìë ììµëë€ NS-3 ì€ì¹. ì§ìëë íë«íŒ, ì ì 조걎, ë°©ë²ì ë€ë£¹ëë€.
íë NS-3, êµ¬ì¶ ë°©ë² NS-3, ë¹ë륌 íìžíê³ ê°ëší íë¡ê·žëšì ì€ííë ë°©ë².
ìŽíŽë³Žêž°
NS-3 íšê» ìëíë ìíížìšìŽ ëŒìŽëžë¬ëŠ¬ ìì€í ìŒë¡ 구ì¶ëììµëë€. ì¬ì©ì íë¡ê·žëšì ë€ì곌 ê°ì ì ììµëë€.
ìŽë¬í ëŒìŽëžë¬ëŠ¬ì ì°ê²°(ëë ê°ì žì€êž°)íëë¡ ìì±ëììµëë€. ì¬ì©ì íë¡ê·žëšì
C++ ëë Python íë¡ê·žëë° ìžìŽ.
NS-3 ìì€ ìœëë¡ ë°°í¬ë©ëë€. ìŠ, ëì ìì€í ì
뚌ì ëŒìŽëžë¬ëŠ¬ë¥Œ 구ì¶í ë€ì ì¬ì©ì륌 구ì¶íë ìíížìšìŽ ê°ë° í겜
íë¡ê·žëš) NS-3 ìì¹ì ìŒë¡ ì íí ì¬ì©ì륌 ìíŽ ì¬ì 구ì¶ë ëŒìŽëžë¬ëŠ¬ë¡ ë°°í¬í ì ììµëë€.
믞ëìë ê·žë° ììŒë¡ ë°°í¬ë ì ìì§ë§ íì¬ ë§ì ì¬ì©ìê°
ì€ì ë¡ ížì§ì íµíŽ ìì ì ìíí©ëë€. NS-3 ë°ëŒì ìì€ ìœë륌 ë€ì ë¹ëíŽìŒ í©ëë€.
ëŒìŽëžë¬ëŠ¬ê° ì ì©í©ëë€. ëêµ°ê° ì¬ì ì ì ìì ì ìííë €ë 겜ì°
ìŽì 첎ì ì© ëŒìŽëžë¬ëŠ¬ ë° íší€ì§ë ns-developers ë©ìŒë§ì 묞ìíììì€.
ëª ë¶.
ë€ìììë ë€ìŽë¡ë ë° ë¹ëì ë ê°ì§ ë°©ë²ì ìŽíŽë³Žê² ìµëë€. NS-3. 첫 ë²ì§žë
Ʞ볞 ì¹ ì¬ìŽížìì ê³µì 늎늬ì€ë¥Œ ë€ìŽë¡ëíê³ ë¹ëí©ëë€. ë ë²ì§žë ê°ì žì€êž°
ì ê°ë° ì¬ë³žì 구ì¶í©ëë€. NS-3. ë구 ìŽí ë ê°ì§ ì륌 ìŽíŽë³Žê² ìµëë€.
êŽì¬ëê° ìœê° ë€ëŠ ëë€.
ë€ìŽë¡ë NS-3
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì 첎ì ìŒë¡ ìì€í ì ìë¹í ë³µì¡í ìì€í ìŽë©° ë€ìì ëí ë§ì ì¢ ìì±ìŽ ììµëë€.
ë€ë¥ž êµ¬ì± ìì. ë§€ìŒ ì²ëŠ¬íê² ë ìì€í 곌 íšê»(
GNU ë구 첎ìž, Mercurial, í ì€íž ížì§êž°) ì¬ë¬ ê°ì§ë¥Œ íìžíŽìŒ í©ëë€.
ê³ìíêž° ì ì ìì€í ì ì¶ê° ëŒìŽëžë¬ëŠ¬ê° ììµëë€. NS-3 ìí€ ì ê³µ
ì ì©í íížì íìŽ ë§ì íìŽì§ê° í¬íšë íìŽì§ì ëë€. ê·žë¬í íìŽì§ ì€ íëë
"ì€ì¹" íìŽì§, http://www.nsnam.org/wiki/Installation.
ìŽ wiki íìŽì§ì "ì ì 조걎" ì¹ì ììë ë€ìì ìííë ë° íìí íší€ì§ì ëíŽ ì€ëª í©ëë€.
ìŒë° ì§ì NS-3 ìµì ì ì€ì¹íë ë° ì¬ì©ëë ëª ë ¹ë ì ê³µí©ëë€.
ìŒë°ì ìž Linux ë³ì¢ . Cygwin ì¬ì©ìë Cygwin ì€ì¹ íë¡ê·žëšì ì¬ì©íŽìŒ í©ëë€(ê·íê°
Cygwin ì¬ì©ìë Cygwinì ì€ì¹íë ë° ì¬ì©íìµëë€).
ìŽ êž°íì NS-3 ì ë§ ìêž° ë묞ì ì¡°êž ìí€
ê±°êž°ì íë¶í ì 볎.
ìŽ ìì ë¶í° 늬ëê° Linux ëë
Linux ì뮬ë ìŽì í겜(Linux, Cygwin ë±) ë° GNU íŽì²Žìž ì€ì¹ ë°
ììì ìžêží ì ì 조걎곌 íšê» íìžëììµëë€. ì°ëŠ¬ë ëí
ëì ìì€í ì Mercurial ë° Wafê° ì€ì¹ëìŽ ì€í ì€ì ëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ìœëë ìë²ì Mercurial 늬í¬ì§í 늬ìì ì¬ì©í ì ììµëë€. http://code.nsnam.org.
ë€ì ì¬ìŽížìì tarball 늎늬ì€ë¥Œ ë€ìŽë¡ëí ìë ììµëë€. http://www.nsnam.org/release/, ëë ë¹ì ì ìŒí ì ììµëë€
Mercurialì ì¬ì©íë 늬í¬ì§í 늬. ì¢ì 겜ì°ê° ìëë©Ž Mercurialì ì¬ì©íë ê²ìŽ ì¢ìµëë€.
íì§ ìë ìŽì . tarballì ì»ë ë°©ë²ì ëí ì§ì¹šì ìŽ ì¹ì ì ë ë¶ë¶ì ì°žì¡°íììì€.
ëìµëë€.
Mercurial 늬í¬ì§í 늬 ì¬ì©ì ììíë ê°ì¥ ê°ëší ë°©ë²ì ë€ìì ì¬ì©íë ê²ì ëë€. ns-3-ìëŠ¬ë Œ
í겜. ë€ìŽë¡ë ë° ë¹ë륌 êŽëŠ¬íë ì€í¬ëŠœíž ìžížì ëë€.
ì ë€ìí ìëžìì€í NS-3 ë¹ì ì ìí. ììíë ê²ìŽ ì¢ìµëë€. NS-3 ìŽê²ìì ìŒíë€
í겜ì ì ê³µí©ëë€.
í ê°ì§ ë°©ë²ì ë€ì곌 ê°ì ëë í 늬륌 ë§ëë ê²ì ëë€. ìì ê³µê° ìì ì í ëë í 늬ìì
ë¡ì»¬ Mercurial 늬í¬ì§í 늬륌 ì ì§í ì ììµëë€. 몚ë ëë í 늬 ìŽëŠìŽ ê°ë¥íì§ë§
ê·ž ìì ê³µê° ì¬êž°ìì ì¬ì©ë©ëë€(ì°žê³ : repos ìŒë¶ 묞ìììë ë€ì곌 ê°ìŽ ì¬ì©ë ìë ììµëë€.
ì ëë í 늬 ìŽëŠ).
ë€ìŽë¡ë NS-3 ì¬ì© a í륎볌
tarballì ì¬ë¬ íìŒìŽ ë¬¶ìž ìíížìšìŽ ì칎ìŽëžì í¹ì íìì ëë€.
íšê» ì칎ìŽëžê° ìì¶ë ì ììµëë€. NS-3 ìíížìšìŽ 늎늬ì€ë
ë€ìŽë¡ë ê°ë¥í í륎볌. ë€ìŽë¡ë íë¡ìžì€ NS-3 tarballì íµí ë°©ë²ì ê°ëší©ëë€. ë°©êž
늎늬ì€ë¥Œ ì ííê³ ë€ìŽë¡ëíê³ ìì¶ì íìŽìŒ í©ëë€.
ë¹ì ìŽ ì¬ì©ìë¡ì NS-3 ëŒë ë¡ì»¬ ëë í 늬ìì
ìì ê³µê°. ë¹ì ìŽ ì±ííë ê²œì° ìì ê³µê° ëë í 늬 ì ê·Œ ë°©ìì ì¬ì©íë©Ž ëŠŽëŠ¬ì€ ì¬ë³žì ì»ì ì ììµëë€.
Linux ìì ë€ìì ì ë ¥íì¬(ì ì í ë²ì ë²ížë¡ ë첎,
ë¬Œë¡ ):
$ cd
$ mkdir ìì ê³µê°
$ cd ìì ê³µê°
$ wget http://www.nsnam.org/release/ns-allinone-3.22.tar.bz2
$ tar xjf ns-allinone-3.22.tar.bz2
ëë í ëŠ¬ë¡ ë³ê²œíë©Ž ns-ìëŠ¬ë Œ-3.22 ì¬ë¬ íìŒìŽ íìë©ëë€.
$ls
ìì륌 굜ìµëë€.py ns-3.22 README
build.py netanim-3.105 pybindgen-0.16.0.886 util.py
ìŽì êž°ë°ì 구ì¶í ì€ë¹ê° ëììµëë€. NS-3 ì íµ.
ë€ìŽë¡ë NS-3 ì¬ì© ë¹µ 굜Ʞ
Bakeë ë¶ì° íµí© ë° êµ¬ì¶ì ìí ë구ë¡, ë€ìì ìíŽ ê°ë°ëììµëë€. NS-3 íë¡ì íž.
Bakeë ë€ìì ê°ë° ë²ì ì ê°ì žì€ë ë° ì¬ì©í ì ììµëë€. NS-3 ìíížìšìŽ ë° ë€ìŽë¡ë ë°
ë² ìŽì€ íì¥ ë¹ë NS-3 ì§ì ìœë ì€í곌 ê°ì ë°°í¬
í겜, ë€ížìí¬ ì뮬ë ìŽì í¬ëë€, ìë¡ìŽ Python ë°ìžë© ìì± êž°ë¥ ë±.
ìµê·Œ NS-3 늎늬ì€, Bakeë ëŠŽëŠ¬ì€ tarballì í¬íšëììµëë€. 구ì±
늎늬ì€ë ë²ì ì í¬íšë íìŒì ì¬ì©íë©Ž ìŽì ì ìë 몚ë ìíížìšìŽë¥Œ ë€ìŽë¡ëí ì ììµëë€.
ì¶ì ë¹ì íì¬. ì륌 ë€ìŽ Bakeì ë²ì ì ë€ì곌 ê°ìµëë€.
ì íšê» ë°°í¬ NS-3.21 늎늬ì€ë íŽë¹ êµ¬ì± ìì륌 ê°ì žì€ë ë° ì¬ì©í ì ììµëë€. NS-3 ê³µê°
ëë ìŽì ë²ì ìŽì§ë§ ìŽí 늎늬ì€ë¥Œ ìíŽ êµ¬ì± ìì륌 ê°ì žì€ë ë° ì¬ì©í ì ììµëë€(
bakingconf.xml íìŒìŽ ì ë°ìŽížë©ëë€).
ìµì ì¬ë³žì ì»ì ìë ììµëë€. 굜ââë€ Linuxì ë€ìì ì ë ¥íì¬
ì(Mercurialì ì€ì¹íë€ê³ ê°ì ):
$ cd
$ mkdir ìì ê³µê°
$ cd ìì ê³µê°
$ hg íŽë¡ http://code.nsnam.org/bake
hg(Mercurial) ëª ë ¹ìŽ ì€íëë©Ž ë€ì곌 ê°ì ëŽì©ìŽ íìë©ëë€.
íì,
...
ëì ëë í 늬: ë² ìŽí¬
몚ë ë³ê²œ ìì²
ë³ê²œ ìžíž ì¶ê°
맀ëíì€íž ì¶ê°
íìŒ ë³ê²œ ì¬í ì¶ê°
339ê° íìŒì 796ê° ë³ê²œ ì¬íìŽ í¬íšë 63ê° ë³ê²œ ìžíž ì¶ê°
ë¶êž° Ʞ볞ê°ìŒë¡ ì ë°ìŽíž
45ê°ì íìŒìŽ ì ë°ìŽížëš, 0ê°ì íìŒìŽ ë³í©ëš, 0ê°ì íìŒìŽ ì ê±°ëš, 0ê°ì íìŒìŽ íŽê²°ëì§ ìì
ë³µì ëª ë ¹ìŽ ìë£ëë©Ž ë€ììŽëŒë ëë í ëŠ¬ê° ììŽìŒ í©ëë€. 굜ââë€, ëŽì©
ë€ì곌 ê°ììŒ í©ëë€.
$ls
bake bakeconf.xml 묞ì generate-binary.py TODO
bake.py ìì í ì€íž
ìŒë¶ Python ì€í¬ëŠœížì Python 몚ëì ë€ìŽë¡ëíìµëë€.
굜ââë€. ë€ì ëšê³ë íŽë¹ ì€í¬ëŠœížë¥Œ ì¬ì©íì¬ NS-3
ë¹ì ì ì íì ë¶ë°°.
ì¬ì© ê°ë¥í ëª ê°ì§ êµ¬ì± ëììŽ ììµëë€.
1. NS-3.22: 늎늬ì€ì íŽë¹íë 몚ë; ì ì¬í êµ¬ì± ìì륌 ë€ìŽë¡ëí©ëë€
ëŠŽëŠ¬ì€ í륎볌ì.
2. ns-3-dev: ì ì¬í 몚ëìŽì§ë§ ê°ë° ìœë ížëŠ¬ë¥Œ ì¬ì©íš
3. ns-ìëŠ¬ë Œ-3.22: íŽëŠê³Œ ê°ì êž°í ì íì êž°ë¥ì í¬íšíë 몚ë
ëŒì°í , ì€ííë¡ì° NS-3ë° ë€ížìí¬ ì뮬ë ìŽì í¬ëë€
4. ns-3-ìëŠ¬ë Œ: ì늬ì 몚ëì ì¶ì ë²ì 곌 ì ì¬íì§ë§,
ê°ë° ìœë.
ì íì¬ ê°ë° ì€ë ì·(믞공ê°) NS-3 ìì ì°Ÿì ì ììµëë€
http://code.nsnam.org/ns-3-dev/. ê°ë°ìë ìŽë¬í ì ì¥ì륌
ìŒêŽëê³ ìëíë ìíìŽì§ë§ 늎늬ì€ëì§ ìì ìœëê° ìë ê°ë° ììì ììµëë€.
íìíì§ ìì ê²œì° ê³µì 늎늬ì€ë¥Œ ì ì§íë ê²ìŽ ì¢ìµëë€.
ìë¡ ëì ë êž°ë¥.
늬í¬ì§í 늬 목ë¡ì ê²ì¬íì¬ ìµì ë²ì ì ìœë륌 ì°Ÿì ì ììµëë€.
ëë "ns-3 늎늬ì€" ì¹ íìŽì§ìì ìµì ëŠŽëŠ¬ì€ ë§í¬ë¥Œ íŽëŠí©ëë€.
ìŽ ììµì ìì ììë ë€ìì ì¬ì©íì¬ ì§íí©ëë€. NS-3.22.
ìŽì 굜Ʞ ë구륌 ì¬ì©íì¬ ë€ìí ì¡°ê°ì ëìŽëŽëŠŽ ê²ì ëë€. NS-3 ë¹ì ì ë ê²ì ëë€
ì¬ì©. 뚌ì ë² ìŽí¬ ì€íì ëíŽ íë§ë íê² ìµëë€.
ë² ìŽí¬ë ìì€ íší€ì§ë¥Œ ìì€ ëë í 늬ì ë€ìŽë¡ëíê³ ì€ì¹íë ë°©ììŒë¡ ìëí©ëë€.
ëŒìŽëžë¬ëŠ¬ë¥Œ ë¹ë ëë í 늬ì ì¶ê°í©ëë€. ë² ìŽí¬ë ë°ìŽë늬륌 ì°žì¡°íì¬ ì€íí ì ìì§ë§
ë€ìŽë¡ëí ëë í 늬 ìžë¶ìì ë² ìŽí¬ë¥Œ ì€ííëë¡ ì íí©ëë€.
ë€ì곌 ê°ìŽ ë² ìŽí¬ë¥Œ 겜ë¡ì ë£ìµëë€(Linux bash ì ž ì). 첫짞, ë³í
'bake' ëë í ëŠ¬ë¡ ìŽëí í ë€ì í겜 ë³ì륌 ì€ì í©ëë€.
$ ëŽë³ŽëŽêž° BAKE_HOME=`pwd`
$ ëŽë³ŽëŽêž° 겜ë¡=$PATH:$BAKE_HOME:$BAKE_HOME/ë¹ë/ë¹
$ ëŽë³ŽëŽêž° PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/ë¹ë/lib
ê·žë¬ë©Ž bake.py íë¡ê·žëšìŽ ì žì 겜ë¡ì ë€ìŽê°ê³ ë€ë¥ž íë¡ê·žëšìŽ
bakeë¡ ìì±ë ì€í íìŒ ë° ëŒìŽëžë¬ëŠ¬ë¥Œ ì°Ÿìµëë€. ëªëª ë² ìŽí¬ ì¬ì© ì¬ë¡ë ê·žë ì§ ìì§ë§
ìì ê°ìŽ PATH ë° PYTHONPATH륌 ì€ì íŽìŒ í©ëë€. ns-3-allinoneì ì 첎 ë¹ë(
ì íì íší€ì§) ìŒë°ì ìŒë¡ ìíí©ëë€.
ìì ê³µê° ëë í ëŠ¬ë¡ ìŽëíì¬ ìì ë€ìì ì ë ¥íììì€.
$ ./bake.py êµ¬ì± -e ns-3.22
ë€ììŒë¡ ë€ìí êµ¬ì± ìì륌 ë€ìŽë¡ëí ì ìë ëêµ¬ê° ì¶©ë¶íì§ íìžíêž° ìíŽ bake륌 ìì²í©ëë€.
ì í:
$ ./bake.py íìž
ë€ì곌 ê°ì ëŽì©ìŽ íìëìŽìŒ í©ëë€.
> íìŽì¬ - íìž
> GNU C++ 컎íìŒë¬ - íìž
> ëšžíëŠ¬ìŒ - OK
> CVS-íìž
> ì§íž - íìž
> ë°ì - OK
> í륎 ë구 - OK
> ìì¶ íŽì ë구 - íìž
> Unrar ë구 - ëëœëš
> 7z ë°ìŽí° ìì¶ ì ížëŠ¬í° - íìž
> XZ ë°ìŽí° ìì¶ ì ížëŠ¬í° - OK
> íìž - íìž
> cMake - íìž
> íšì¹ ë구 - OK
> autoreconf ë구 - íìž
> ë구 ê²ì 겜ë¡: /usr/lib64/qt-3.3/bin /usr/lib64/ccache
/ usr / local / bin /í° ìì / usr / bin / usr / local / sbin / usr / sbin / sbin
/home/tomh/ë¹ ë¹
í¹í, Mercurial, CVS, GIT, Bazaar ë±ì ë€ìŽë¡ë íŽì Ʞ볞ìŒë¡ íê³ ììµëë€.
ìœë륌 ê°ì žì¬ ì ìêž° ë묞ì ìŽ ìì ìì 묞ì ê° ë©ëë€. ëëœë ê²ì ì€ì¹íììì€
ìŽ ëšê³ìì ìì€í ì ëí ìŒë°ì ìž ë°©ë²(ê°ë¥í 겜ì°)ìŒë¡ ë구륌 ì¬ì©íê±°ë
ìŽë¬í ë구륌 ì€ì¹íë €ë©Ž íìì ë°ëŒ ìì€í êŽëŠ¬ììê² ë¬žìíììì€.
ë€ììŒë¡ ìíížìšìŽ ë€ìŽë¡ë륌 ìëí©ëë€.
$ ./bake.py ë€ìŽë¡ë
ë€ì곌 ê°ì ê²°ê³Œê° ëììŒ í©ëë€.
>> ìì€í ì¢ ìì± pygoocanvas ê²ì - OK
>> ìì€í ì¢ ìì± ê²ì python-dev - OK
>> ìì€í ì¢ ìì± ê²ì pygraphviz - OK
>> pybindgen-0.16.0.886 ë€ìŽë¡ë - íìž
>> ìì€í ì¢ ìì± ê²ì ì€ g++ - íìž
>> ìì€í ì¢ ìì± qt4 ê²ì ì€ - íìž
>> netanim-3.105 ë€ìŽë¡ë - íìž
>> ns-3.22 ë€ìŽë¡ë - íìž
ìì ìž ê°ì§ ìì€ê° ë€ìŽë¡ëëììì ëíë ëë€. ì ì²Ží¬ íŽëŽ ìë°° ê·ì¹ì
ì§êž ì ë ¥ ls; ë€ìì íìžíŽìŒ í©ëë€.
$ls
netanim-3.105 ns-3.22 pybindgen-0.16.0.886
ìŽì ë¹ëí ì€ë¹ê° ëììµëë€. NS-3 ì íµ.
걎묌 NS-3
걎묌 곌 build.py
늎늬ì€ë tarballìì ìì í ë ì²ì ë¹ëí ë NS-3 í ì ìë íë¡ì íž
ì ìë ížì íë¡ê·žëšì ì¬ì©íì¬ ë¹ë allinone ìë°° ê·ì¹ì. ìŽ íë¡ê·žëšì
build.py. ìŽ íë¡ê·žëšì ê°ì¥ ìŒë°ì ìŒë¡ ì¬ì©ì륌 ìíŽ êµ¬ì±ë íë¡ì ížë¥Œ ê°ì žìµëë€.
ì ì©í ë°©ë². ê·žë¬ë ê³ êž êµ¬ì± ë° ìì ì ì ìíììì€. NS-3 ìì§
ìŒë°ì ìŒë¡ ë€ìŽí°ëž NS-3 ëì€ì ìê°í ë¹ë ìì€í Waf
íí 늬ìŒ.
tarballì ì¬ì©íì¬ ë€ìŽë¡ëí ê²œì° ë€ì곌 ê°ì ëë í ëŠ¬ê° ììŽìŒ í©ëë€.
ns-ìëŠ¬ë Œ-3.22 ìëì ë¹ì ì ~/ìì ê³µê° ìë°° ê·ì¹ì. ë€ìì ì ë ¥í©ëë€.
$ ./build.py --enable-examples --enable-tests
ìŽ íí 늬ìŒìì ìì ì í ì€ížë¡ ìì íê³ ìêž° ë묞ì
Ʞ볞ì ìŒë¡ ëŽì¥ NS-3, build.pyì ëí ìžìë ì°ëŠ¬ë¥Œ ìíŽ ë¹ëíëë¡ ì§ìí©ëë€. ê·žë§íŒ
íë¡ê·žëšì ëí Ʞ볞ì ìŒë¡ ì¬ì© ê°ë¥í 몚ë 몚ëì ë¹ëí©ëë€. ëì€ì ë¹ëí ì ììµëë€. NS-3
ìì ì í ì€íž ììŽ ìì íê±°ë ìì ì íìíì§ ìì 몚ëì ì ê±°íê±°ë,
ë¹ì ìŽ ìíë 겜ì°.
ë¹ë ì€í¬ëŠœíž ë¹ëë¡ íìëë ë§ì ìŒë°ì ìž ì»ŽíìŒë¬ ì¶ë ¥ ë©ìì§ë¥Œ 볌 ì ììµëë€.
ë¹ì ìŽ ë€ìŽë¡ëí ë€ìí ì¡°ê°. ê²°êµ ë€ìì 볌 ì ììµëë€.
Waf: `/path/to/workspace/ns-allinone-3.22/ns-3.22/build' ëë í 늬ìì ëê°êž°
'build'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(6m25.032s).
ë¹ëë 몚ë:
ìí ë aodv ì í늬ìŒìŽì
êµë 걎묌 êµ¬ì± ì ì¥ì
ìœìŽ csma csma-ë ìŽìì
dsdv dsr ìëì§
fd-net-ì¥ì¹ íëŠ ëªšëí° ìží°ë·
lr-wpan lte ë©ì¬
ìŽëì± mpi netanim(Python ìì)
ë€ížìí¬ nix-벡í°-ëŒì°í olsr
ì ëì ì ëì ë ìŽìì ì í
Sixlowpan ì€íížëŒ íµê³
í ëžëŠ¬ì§ í ì€íž(Python ìì) topology-read
uan virtual-net-device ìšìŽëž
ììŽíìŽ ììŽë§¥ì€
ë¹ëëì§ ìì 몚ë(ì€ëª ì ns-3 ììµì ì°žì¡°):
ëžëŒìŽížíŽëŠ ì€ííë¡ì°
ë¹ì£ŒìŒ ëŒìŽì
`./ns-3.22' ëë í 늬륌 ë ë©ëë€.
ë¹ëëì§ ìì 몚ëì ëí ë¶ë¶:
ë¹ëëì§ ìì 몚ë(ì€ëª ì ns-3 ììµì ì°žì¡°):
ëžëŒìŽížíŽëŠ ì€ííë¡ì°
ë¹ì£ŒìŒ ëŒìŽì
ìŽê²ì ëšì§ ìŒë¶ NS-3 ìžë¶ ëŒìŽëžë¬ëŠ¬ì ëí ì¢ ìì±ìŽ ìë 몚ëì ê·žë ì§ ìì ì ììµëë€.
ë¹ëëìê±°ë 구ì±ìì í¹ë³í ë¹ëíì§ ìëë¡ ìì²íìµëë€. ê·žë ìµëë€
ì뮬ë ìŽí°ê° ì±ê³µì ìŒë¡ ë¹ëëì§ ììê±°ë ì못ë ì 볎륌 ì ê³µíë€ë ì믞ë ìëëë€.
ë¹ë ì€ìž ê²ìŒë¡ ëìŽë 몚ëì ëí 결곌ì ëë€.
걎묌 곌 굜ââë€
ìì ë² ìŽí¹ì ì¬ì©íì¬ íë¡ì íž ëŠ¬í¬ì§í 늬ìì ìì€ ìœë륌 ê°ì žìš ê²œì° ê³ìíŽì
구ì¶ì ì¬ì© NS-3. ì í
$ ./bake.py ë¹ë
ë€ì곌 ê°ìŽ íìëìŽìŒ í©ëë€.
>> pybindgen-0.16.0.886 ë¹ë - íìž
>> netanim-3.105 êµ¬ì¶ - íìž
>> ns-3.22 ë¹ë - íìž
ííž: ì견ì ë£ê³ ì¶ìµëë€. ëí ìí ë ëšê³, ë€ìŽë¡ë and ë¹ë by ë¶ëŠ 'bake.py ì ê°'.
ì€ë¥ê° ë°ìíë©Ž ë€ì ëª ë ¹ìŽ ë¬Žìì ë§íëì§ ìŽíŽë³Žììì€.
ë; ëëœë ì¢ ìì±ì ëí íížë¥Œ ì ê³µí ì ììµëë€.
$ ./bake.py ìŒ
ë¹ëíë €ë íší€ì§ì ë€ìí ì¢ ìì±ìŽ ëìŽë©ëë€.
걎묌 곌 ìí
ì§êžê¹ì§ ì°ëŠ¬ë ë€ì ì€ íë륌 ì¬ì©íìµëë€. build.py ì€í¬ëŠœíž ëë 굜ââë€ ë구, ì»êž°
ì§ë ê²ë¶í° ììíë€ NS-3. ìŽë¬í ë구ë 구ì¶ì ì ì©í©ëë€. NS-3 ë° ì§ì
ëŒìŽëžë¬ëŠ¬ìì ížì¶í©ëë€. NS-3 Waf ë¹ë ë구륌 ížì¶íì¬
ì€ì 걎묌. ëë¶ë¶ì ì¬ì©ìë Waf륌 ì§ì ì¬ì©íì¬ êµ¬ì± ë°
ë¹ë NS-3. ê³ì ì§ííë €ë©Ž ìì ëë í 늬륌 ë€ììŒë¡ ë³ê²œíììì€. NS-3 ìë°° ê·ì¹ì
ë¹ì ìŽ ì²ìì ë§ë .
ìŽ ìì ìì êŒ íìí ê²ì ìëì§ë§ ìœê° ì°ííë ê²ìŽ ì€ìí©ëë€.
íë¡ì íž êµ¬ì±ì ë³ê²œíë ë°©ë²ì ìŽíŽë³Žììì€. ìë§ë ê°ì¥
ì ì©í êµ¬ì± ë³ê²œì ë€ìì ìµì íë ë²ì ì ë¹ëíë ê²ì ëë€.
ìíž. Ʞ볞ì ìŒë¡ ëë²ê·ž ë²ì ì ë¹ëíëë¡ íë¡ì ížë¥Œ 구ì±íìµëë€. ë§íì
ìµì íë ë¹ë륌 ë§ëë íë¡ì íž. ìµì ííŽìŒ íë€ê³ Wafì ì€ëª íêž° ìíŽ
ìì ì í ì€ížê° í¬íšë ë¹ë륌 ì€ííë €ë©Ž ë€ìì ì€ííŽìŒ í©ëë€.
ëª ë ¹ :
$ ./waf ì²ì
$ ./waf --build-profile=optimized --enable-examples --enable-tests 구ì±
ìŽë ê² íë©Ž ë¡ì»¬ ëë í°ëŠ¬ìì Wafê° ì€íë©ëë€(ížì륌 ìíŽ ì ê³µëš).
ìŽì ë¹ë륌 ì 늬íë 첫 ë²ì§ž ëª ë ¹ì ìŒë°ì ìŒë¡ ë°ëì íìí ê²ì ìëì§ë§
ì¢ì ìµêŽì ëë€(íì§ë§ ì§ë€ íë¡í, ìëì); ìŽì ì ë¹ëë ê²ì ì ê±°í©ëë€.
ëë í 늬ì ìë ëŒìŽëžë¬ëŠ¬ ë° ê°ì²Ž íìŒ ì§ë€/. íë¡ì ížê° ì¬êµ¬ì±ëë 겜ì°
ë¹ë ìì€í ìŽ ë€ìí ì¢ ìì±ì íìžíë©Ž ë€ì곌 ê°ì ì¶ë ¥ìŽ íìëìŽìŒ í©ëë€.
ë€ì곌 ì ì¬í©ëë€.
ìëš ì€ì : .
ì¶ë°: ë¹ë
'gcc' íìž ì€(c 컎íìŒë¬): /usr/bin/gcc
cc ë²ì íìž ì€ : 4.2.1
'g++' íìž ì€(C++ 컎íìŒë¬): /usr/bin/g++
íìž ë¶ì€íž í¬íš: 1_46_1
ë¶ì€íž ëŒìŽëžë¬ëŠ¬ íìž ì€ : íìž
ë¶ì€íž ì°ë íìž ì€ : ok
íŽëŠ ìì¹ íìž ì€ : ì°Ÿì ì ìì
pkg-config íë¡ê·žëš íìž ì€: /sw/bin/pkg-config
'gtk+-2.0' >= 2.12 íìž ì€: ì
'libxml-2.0' >= 2.7 íìž ì€: ì
uint128_t ì í íìž ì€: ì°Ÿì ì ìì
__uint128_t ì í íìž ì€: ì
ê³ ì ë° êµ¬í íìž : 128ë¹íž ì ì(Ʞ볞ê°)
í€ë stdint.h íìž ì€ : ì
í€ë inttypes.h íìž ì€ : ì
í€ë sys/inttypes.h íìž ì€: ì°Ÿì ì ìì
í€ë sys/types.h íìž ì€: ì
í€ë sys/stat.h íìž ì€: ì
í€ë dirent.h íìž ì€ : ì
í€ë stdlib.h íìž ì€ : ì
í€ë signal.h íìž ì€ : ì
í€ë pthread.h íìž ì€ : ì
í€ë stdint.h íìž ì€ : ì
í€ë inttypes.h íìž ì€ : ì
í€ë sys/inttypes.h íìž ì€: ì°Ÿì ì ìì
ëŒìŽëžë¬ëŠ¬ rt íìž ì€: ì°Ÿì ì ìì
í€ë netpacket/packet.h íìž ì€: ì°Ÿì ì ìì
í€ë sys/ioctl.h íìž ì€: ì
í€ë net/if.h íìž ì€ : ì°Ÿì ì ìì
í€ë net/ethernet.h íìž ì€: ì
linux/if_tun.h í€ë íìž ì€: ì°Ÿì ì ìì
í€ë netpacket/packet.h íìž ì€: ì°Ÿì ì ìì
NSC ìì¹ íìž ì€ : ì°Ÿì ì ìì
'mpic++' íìž ì€: ì
'sqlite3' íìž ì€: ì
linux/if_tun.h í€ë íìž ì€: ì°Ÿì ì ìì
íë¡ê·žëš íìž ì€ sudo : /usr/ë¹/sudo
íë¡ê·žëš valgrind íìž ì€: /sw/bin/valgrind
'gsl' íìž ì€: ì
컎íìŒ íëê·ž íìž ì€ -Wno-error=deprecated-d... ì§ì: íìž
컎íìŒ íëê·ž íìž ì€ -Wno-error=deprecated-d... ì§ì: íìž
컎íìŒ íëê·ž íìž ì€ -fstrict-aliasing... ì§ì: ok
컎íìŒ íëê·ž íìž ì€ -fstrict-aliasing... ì§ì: ok
컎íìŒ íëê·ž íìž ì€ -Wstrict-aliasing... ì§ì: ok
컎íìŒ íëê·ž íìž ì€ -Wstrict-aliasing... ì§ì: ok
íë¡ê·žëš doxygen íìž ì€: /usr/local/bin/doxygen
---- NS-3 ìµì êž°ë¥ ììœ:
ë¹ë íë¡í: ëë²ê·ž
ë¹ë ëë í 늬 : build
Python ë°ìžë©: ì¬ì©
BRITE íµí©: íì±íëì§ ìì(BRITE íì±íëì§ ìì(--with-brite ìµì ì°žì¡°))
NS-3 íŽëŠ íµí©: íì±íëì§ ìì(nsclick íì±íëì§ ìì(--with-nsclick ìµì ì°žì¡°))
GtkConfigStore : íì±í
XmlIo : íì±í
ì€ë ë© í늬믞í°ëž: ì¬ì©
ì€ìê° ì뮬ë ìŽí°: íì±íëš(librtë ì¬ì©í ì ìì)
ì뮬ë ìŽížë ë€íž ì¥ì¹: íì±í( ê°ì§ëì§ ìì í¬íš)
íìŒ ì€ëª ì NetDevice: ì¬ì©
FdNetDevice í: íì±íëì§ ìì(linux/if_tun.h íì)
ì뮬ë ìŽì FdNetDevice: íì±íëì§ ìì(netpacket/packet.h íì)
PlanetLab FdNetDevice: íì±íëì§ ìì(PlanetLab ìŽì 첎ì ê° ê°ì§ëì§ ìì(--force-planetlab ìµì ì°žì¡°))
ë€ížìí¬ ì뮬ë ìŽì í¬ëë€: íì±íëì§ ìì(NSC륌 ì°Ÿì ì ìì(--with-nsc ìµì ì°žì¡°))
MPI ì§ì: ì¬ì©
NS-3 OpenFlow íµí©: íì±íëì§ ìì(íì ë¶ì€íž ëŒìŽëžë¬ëŠ¬ë¥Œ ì°Ÿì ì ìì, ëëœ: ìì€í , ì íž, íìŒ ìì€í )
SQlite íµê³ ë°ìŽí° ì¶ë ¥: ì¬ì©
í ëžëŠ¬ì§: íì±íëì§ ìì( ê°ì§ëì§ ìì í¬íš)
PyViz ìê°í ëì°ë¯ž: ì¬ì©
sudo륌 ì¬ì©íì¬ suid ë¹íž ì€ì : íì±íëì§ ìì(--enable-sudo ìµì ìŽ ì íëì§ ìì)
ë¹ë í ì€íž: ì¬ì©
ë¹ë ìì : ì¬ì©
GNU 곌í ëŒìŽëžë¬ëŠ¬(GSL): ì¬ì©
'구ì±'ìŽ ì±ê³µì ìŒë¡ ìë£ëììµëë€(1.944ìŽ).
ì ì¶ë ¥ì ë§ì§ë§ ë¶ë¶ì ì ìíììì€. ìŒë¶ NS-3 ìµì ì Ʞ볞ì ìŒë¡ íì±íëìŽ ìì§ ìê±°ë
ì ëë¡ ìëíë €ë©Ž Ʞ볞 ìì€í ì ì§ììŽ íìí©ëë€. ì륌 ë€ìŽ íì±ííë €ë©Ž
XmlTo, ëŒìŽëžë¬ëŠ¬ libxml-2.0ìŽ ìì€í ìì ë°ê²¬ëìŽìŒ í©ëë€. ìŽ ëŒìŽëžë¬ëŠ¬ê° ìëìë€ë©Ž
ë°ê²¬, íŽë¹ NS-3 êž°ë¥ìŽ íì±íëì§ ìê³ ë©ìì§ê° íìë©ëë€.
íìë©ëë€. íë¡ê·žëšì ì¬ì©íë êž°ë¥ìŽ ìë€ë ì ì ì ìíììì€. sudoë suid륌 ì€ì íêž° ìíŽ
í¹ì íë¡ê·žëšì ë¹íž. ìŽê²ì Ʞ볞ì ìŒë¡ íì±íëìŽ ìì§ ììŒë¯ë¡ ìŽ êž°ë¥ìŽ ë³Žê³ ë©ëë€.
"íì±íëì§ ìì"ìŒë¡.
ìŽì ìì ì í ì€ížê° í¬íšë ëë²ê·ž ë¹ëë¡ ë€ì ì ííììì€.
$ ./waf ì²ì
$ ./waf --build-profile=debug --enable-examples --enable-tests 구ì±
ìŽì ë¹ë ìì€í ìŽ êµ¬ì±ëììŒë©° ë€ìì ëë²ê·ž ë²ì ì ë¹ëí ì ììµëë€. NS-3
ëšìí ì ë ¥íì¬ íë¡ê·žëš
$ ./ìí
ì¢ìì, ì£ì¡í©ëë€. NS-3 ìì€í ì ìŒë¶ë¥Œ ë ë² ì¬ì©íì§ë§ ìŽì ë°©ë²ì ìê³ ììµëë€.
구ì±ì ë³ê²œíê³ ìµì íë ìœë륌 ë¹ëí©ëë€.
ììì ë Œìí build.py ì€í¬ëŠœížë --íì±í ìì and íì±í í ì€íž
ìžììŽì§ë§ ìŒë°ì ìŒë¡ ë€ë¥ž waf ìµì ì ì§ì ì§ìíì§ ììµëë€. ì륌 ë€ìŽ, ìŽ
ìë ì í ê²ìŽë€:
$ ./build.py --ë¹íì±í-íìŽì¬
결곌ì ìŒë¡
build.py: ì€ë¥: íŽë¹ ìµì ìì: --disable-python
ê·žë¬ë í¹ì ì°ì°ì -- wafì ì¶ê° ìµì ì ì ë¬íë ë° ì¬ì©í ì ììŒë¯ë¡
ìì ëì ë€ììŽ ìëí©ëë€.
$ ./build.py -- --disable-python
Ʞ볞 ëª ë ¹ì ìì±íë¯ë¡ ./ìí êµ¬ì± --ë¹íì±í-íìŽì¬.
ë€ìì Wafì ëí ëª ê°ì§ ì 묞 íì ëë€.
êµ¬ì± ë ì§ë€
ìŒë¶ Waf ëª ë ¹ì êµ¬ì± ëšê³ììë§ ìë¯žê° ììŒë©° ìŒë¶ ëª ë ¹ì
ë¹ë ëšê³ìì ì íší©ëë€. ì륌 ë€ìŽ, ë€ìì ì뮬ë ìŽì êž°ë¥ì ì¬ì©íë €ë 겜ì°
NS-3, ììì ì€ëª í ëë¡ sudo륌 ì¬ì©íì¬ suid ë¹íž ì€ì ì íì±íí ì ììµëë€. ìŽê²
êµ¬ì± ìê° ëª ë ¹ìŒë¡ íëª ëììŒë¯ë¡ ë€ìì ì¬ì©íì¬ ì¬êµ¬ì±í ì ììµëë€.
ìì ì í ì€ížë í¬íšíë ë€ì ëª ë ¹ì ëë€.
$ ./waf êµ¬ì± --enable-sudo --enable-examples --enable-tests
ìŽë ê² íë©Ž Wafë sudo륌 ì€ííì¬ ììŒ ìì±êž° íë¡ê·žëšì ë³ê²œí©ëë€.
룚ížë¡ ì€íí ì뮬ë ìŽì ìœë.
Wafìì ì¬ì©í ì ìë ë€ë¥ž ë§ì êµ¬ì± ë° ë¹ë ìê° ìµì ìŽ ììµëë€. ìŽê²ë€ì í구íêž° ìíŽ
ìµì ìì ë€ìì ì ë ¥í©ëë€.
$ ./waf --ëìë§
ë€ì ì¹ì ìì ìŒë¶ í ì€íž êŽë š ëª ë ¹ì ì¬ì©í©ëë€.
ì§ë€ íë¡í
ì°ëŠ¬ë ìŽë¯ž Waf륌 구ì±íë ë°©ë²ì 볎ììµëë€. ëë²ê·ž or ìµì í ë¹ë:
$ ./waf --ë¹ë-íë¡í=ëë²ê·ž
ì€ê° ë¹ë íë¡íë ììµëë€. ê³µê°. -d ì ëììŽì ëë€
--ë¹ë íë¡í.
Ʞ볞ì ìŒë¡ Wafë ë¹ë ìí°í©ížë¥Œ ë¹ë ìë°° ê·ì¹ì. ë€ìì ì§ì í ì ììµëë€.
ë€ë¥ž ì¶ë ¥ ëë í 늬 --ë° ìµì , ì
$ ./waf êµ¬ì± --out=foo
ìŽë¥Œ ë¹ë íë¡í곌 ê²°í©íë©Ž ë€ë¥ž 컎íìŒ ìµì ê°ì ì íí ì ììµëë€.
깚ëí ë°©ë²ìŒë¡:
$ ./waf êµ¬ì± --ë¹ë-íë¡í=ëë²ê·ž --out=ë¹ë/ëë²ê·ž
$ ./waf ë¹ë
...
$ ./waf êµ¬ì± --build-profile=optimized --out=build/optimized
$ ./waf ë¹ë
...
ìŽë ê² íë©Ž íì ë§ì§ë§ ë¹ë륌 ë®ìŽì°ì§ ìê³ ì¬ë¬ ë¹ëë¡ ìì í ì ììµëë€.
ì§ë€. ì ííë©Ž Wafë ë€ì 컎íìŒíë ëì íìí íëª©ë§ ì»ŽíìŒí©ëë€.
ë€.
ìŽì ê°ìŽ ë¹ë íë¡íì ì íí ë ëìŒí ë³ê²œ ì¬íì ì ê³µíëë¡ ì£ŒìíŽìŒ í©ëë€.
ë§€ë² êµ¬ì± ë§€ê°ë³ì. ìŒë¶ í겜ì ì ìíë ê²ìŽ ížëŠ¬í ì ììµëë€.
ì€ì륌 ë°©ì§íë ë° ëììŽ ëë ë³ì:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--ë¹ë-íë¡í=ëë²ê·ž --out=ë¹ë/ëë²ê·ž"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized"
$ ./waf êµ¬ì± $NS3CONFIG $NS3DEBUG
$ ./waf ë¹ë
...
$ ./waf êµ¬ì± $NS3CONFIG $NS3OPT
$ ./waf ë¹ë
컎íìŒë¬
ìì ììì Wafë GCC C++ 컎íìŒë¬ë¥Œ ì¬ì©í©ëë€. g ++, 걎ì¶ì© NS-3. ê·žë¬ë,
ë€ìì ì ìíì¬ Wafìì ì¬ì©íë C++ 컎íìŒë¬ë¥Œ ë³ê²œí ì ììµëë€. ìšìì€ í겜
ë³íêž° ì¬ìŽ. ì륌 ë€ìŽ Clang C++ 컎íìŒë¬ë¥Œ ì¬ì©íë €ë©Ž íŽë++,
$ CXX="clang++" ./waf 구ì±
$ ./waf ë¹ë
ë¶ì° 컎íìŒì ìííëë¡ Waf륌 ì€ì í ìë ììµëë€. distcc ë¹ì·í ë°©ììŒë¡:
$ CXX="distcc g++" ./waf 구ì±
$ ./waf ë¹ë
ë ë§ì ì 볎 distcc ë¶ì° 컎íìŒì ë€ììì ì°Ÿì ì ììµëë€. íë¡ì íž íìŽì§ ìëì
ì€ëª ì ì¹ì .
ì€ì¹
Wafë ìì€í ì ë€ìí ìì¹ì ëŒìŽëžë¬ëŠ¬ë¥Œ ì€ì¹íë ë° ì¬ì©ë ì ììµëë€. Ʞ볞ê°
ëŒìŽëžë¬ëŠ¬ ë° ì€í íìŒìŽ ë¹ëëë ìì¹ë ë¹ë ëë í 늬, ê·žëŠ¬ê³ ë묞ì
Wafë ìŽë¬í ëŒìŽëžë¬ëŠ¬ ë° ì€í íìŒì ìì¹ë¥Œ ââìê³ ììŒë¯ë¡ ì€ì¹í íìê° ììµëë€.
ë€ë¥ž ê³³ì ëìêŽ.
ì¬ì©ìê° ë¹ë ëë í 늬 ìžë¶ì ì€ì¹íêž°ë¡ ì íí ê²œì° ì¬ì©ìë ë€ìì ë°íí ì ììµëë€.
./ìí ì€ì¹ ëª ë ¹. Ʞ볞ì ìŒë¡ ì€ì¹ ì ëì¬ë ë€ì곌 ê°ìµëë€. / usr / localê·žëì ./ìí
ì€ì¹ ì íë¡ê·žëšì ì€ì¹í©ëë€ / usr / local / bin, ëŒìŽëžë¬ëŠ¬ë¥Œ / usr / local / libë°
ì í€ë /usr/ë¡ì»¬/í¬íš. ìíŒì ì ê¶íì ìŒë°ì ìŒë¡ ì€ì¹ì íìí©ëë€.
Ʞ볞 ì ëì¬ìŽë¯ë¡ ìŒë°ì ìž ëª ë ¹ì ë€ì곌 ê°ìµëë€. sudoë ./ìí ì€ì¹. ì€íí ë
Waf륌 ì¬ì©íë íë¡ê·žëš, Wafë 뚌ì ë¹ë ëë í 늬ìì ê³µì ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íë ê²ì ì íží©ëë€.
ê·žë° ë€ì ë¡ì»¬ í겜ì 구ì±ë ëŒìŽëžë¬ëŠ¬ 겜ë¡ìì ëŒìŽëžë¬ëŠ¬ë¥Œ ì°Ÿìµëë€. ê·žëì
ëŒìŽëžë¬ëŠ¬ë¥Œ ìì€í ì ì€ì¹í ë ìëí ëë¡ íìžíë ê²ìŽ ì¢ìµëë€.
ëŒìŽëžë¬ëŠ¬ê° ì¬ì©ëê³ ììµëë€.
ì¬ì©ìë ë€ìì ì ë¬íì¬ ë€ë¥ž ì ëì¬ì ì€ì¹íëë¡ ì íí ì ììµëë€. --ì ëì¬ ìµì
ë€ì곌 ê°ìŽ ìê°ì 구ì±í©ëë€.
./waf êµ¬ì± --prefix=/opt/local
ëì€ì ë¹ë í ì¬ì©ìê° ./ìí ì€ì¹ ëª ë ¹, ì ëì¬ /ì í/ë¡ì»¬
ì¬ì©íê² ë ê²ìŽë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ./ìí í©ìŽ 묎늬 Wafê° êµ¬ì±ë ê²œì° íë¡ì ížë¥Œ ì¬êµ¬ì±íêž° ì ì ëª ë ¹ì ì¬ì©íŽìŒ í©ëë€.
ë€ë¥ž ì ëì¬ì 묌걎ì ì€ì¹íë ë° ì¬ì©ë©ëë€.
ììœíìë©Ž ì íí íìê° ììµëë€. ./ìí ì€ì¹ ì¬ì© NS-3. ëë¶ë¶ì ì¬ì©ìë
Wafê° íì¬ ëŒìŽëžë¬ëŠ¬ë¥Œ ì ííêž° ë묞ì ìŽ ëª ë ¹ìŽ íìí©ëë€. ë¹ë ìë°° ê·ì¹ì,
ê·žë¬ë ìŒë¶ ì¬ì©ìë ì¬ì© ì¬ë¡ê° ìžë¶ íë¡ê·žëš ìì 곌 êŽë šë ê²œì° ì ì©í ì ììµëë€.
ì NS-3 ëë í 늬.
í ìí
Waf ì€í¬ëŠœížë ìµìì ìì€ì íëë§ ììµëë€. NS-3 ìì€ ížëŠ¬. ë¹ì ìŽ ìŒíë©Žì, ë¹ì ì
ìì ë§ì ìê°ì 볎ëŽë ìì ì ë°ê²¬í ì ììµëë€. í íŽë€/, ëë ê¹ì ìì€/..., ê·žëŠ¬ê³ íì
Waf륌 ížì¶í©ëë€. íì¬ ìì¹ë¥Œ êž°ìµíê³ ë€ì곌 ê°ìŽ Waf륌 ížì¶í ì ììµëë€.
$ ../../../ìí ...
íì§ë§ ê·ž ìì ì ì§ë£šíê³ ì€ë¥ê° ë°ìíêž° ì¬ì°ë©° ë ëì ì룚ì ìŽ ììµëë€.
ê°ë ì°š ìë€ë©Ž NS-3 ì ì¥ì ìŽ ìì 볎ìì ììì ëë€.
$ cd $(hg 룚íž) && ./waf ...
ìŽê²ì ì íšìë¡ ì ìíë ê²ìŽ ë ì¢ìµëë€.
$ êž°ë¥ waff { cd $(hg 룚íž) && ./waf $* ; }
$ ìí ë¹ë
tarballë§ ìë ê²œì° í겜 ë³ìê° ëììŽ ë ì ììµëë€.
$ ëŽë³ŽëŽêž° NS3DIR="$PWD"
$ êž°ë¥ waff { cd $NS3DIR && ./waf $* ; }
$ CD ì€í¬ëì¹
$ ìí ë¹ë
몚ë ëë í 늬ìì ì¬ìí ê²ì ì¶ê°íê³ ì¶ì ìë ììµëë€. waf ëŒìžì ë°ëŒ ì€í¬ëŠœíž
ìì ../../ìí. íì§ ë§ìžì. ìë¡ ìš ì¬ëë€ìê² íŒëì€ëœê³ ì ëë¡ ìíëì§ ììŒë©Ž
믞ë¬í ë¹ë ì€ë¥ê° ë°ìí©ëë€. ìì ì룚ì ì ê° êžžì ëë€.
ì§ì NS-3
ì ëšì í ì€ížë¥Œ ì€íí ì ììµëë€. NS-3 ì€ííì¬ ë°°í¬ ./test.py -c core
ì€í¬ëŠœíž:
$ ./test.py -c ìœìŽ
ìŽë¬í í ì€ížë Wafìì ë³ë ¬ë¡ ì€íë©ëë€. ê²°êµ ë€ì곌 ê°ì ë³Žê³ ìê° íìë©ëë€.
92ê° í ì€íž ì€ 92ê° íµê³Œ(92ê° íµê³Œ, 0ê° ì€íš, 0ê° ì¶©ë, 0 valgrind ì€ë¥)
ìŽê²ìŽ ì€ìí ë©ìì§ì ëë€.
ëí Wafì ììœ ì¶ë ¥ê³Œ ê° í ì€ížë¥Œ ì€ííë í ì€íž ë¬ë륌 볌 ì ììµëë€.
ì€ì ë¡ ë€ì곌 ê°ìŽ íìë©ëë€.
Waf: `/path/to/workspace/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/path/to/workspace/ns-3-allinone/ns-3-dev/build' ëë í 늬ìì ëê°êž°
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(1.799ìŽ).
ë¹ëë 몚ë:
aodv ì í늬ìŒìŽì ëžëŠ¬ì§
config-store ìœìŽë¥Œ íŽëŠíììì€.
csma csma-ë ìŽìì dsdv
emu ìëì§ íëŠ ëªšëí°
ìží°ë· lte ë©ì¬
몚ë¹ëŠ¬í° mpi ë€íë
ë€ížìí¬ nix-벡í°-ëŒì°í ns3tcp
ns3wifi olsr ì€ííë¡
ì ëì ì ëì ë ìŽìì ì í
ì€íížëŒ íµê³ í ëžëŠ¬ì§
í í늿 í ì€íž ë구
í íŽë¡ì§ ìœêž° uan virtual-net-device
ìê°í ììŽíìŽ wimax
íµê³Œ: TestSuite ns3-wifi-interference
íµê³Œ: TestSuite íì€í ê·žëš
...
íšì€: TestSuite ê°ì²Ž
íµê³Œ: TestSuite ëì ìì±êž°
92ê° í ì€íž ì€ 92ê° íµê³Œ(92ê° íµê³Œ, 0ê° ì€íš, 0ê° ì¶©ë, 0 valgrind ì€ë¥)
ìŽ ëª ë ¹ì ìŒë°ì ìŒë¡ ì¬ì©ìê° ì€ííì¬ NS-3 ì íµì
ì¬ë°ë¥Žê² 구ì¶ëììµëë€. (ììë ì°žê³ íµê³Œíë€: ... ëŒìžì ë€ë¥Œ ì ìì§ë§ êŽì°®ìµëë€. ëìŒ
ì€ìí ê²ì ë§ì§ë§ ë³Žê³ ìì ììœ ëŒìžìŽ 몚ë í ì€ížê° íµê³Œíìì ë³Žê³ íë€ë ê²ì ëë€. ì묎ë ì€íšíì§ ììê±°ë
ì¶ëœíë€.)
ë¬ëŠ¬ë a ì€í¬ëŠœíž
ì°ëŠ¬ë ìŒë°ì ìŒë¡ Wafì ì ìŽíì ì€í¬ëŠœížë¥Œ ì€íí©ëë€. ìŽë¥Œ íµíŽ ë¹ë ìì€í ì
ê³µì ëŒìŽëžë¬ëŠ¬ 겜ë¡ê° ì¬ë°ë¥Žê² ì€ì ëìŽ ìê³ ëŒìŽëžë¬ëŠ¬ë¥Œ ë€ì ìì¹ìì ì¬ì©í ì ìëì§ íìží©ëë€.
ì€í ìê°. íë¡ê·žëšì ì€ííë €ë©Ž ëšìí --ìŽì Wafì ìµì . ì€ííì NS-3
ë€ìì ì ë ¥íì¬ ì ë¹ì¿Œí°ì€ Hello World íë¡ê·žëšê³Œ ëìŒí©ëë€.
$ ./waf --ìë íìžì ì뮬ë ìŽí° ì€í
Wafë 뚌ì íë¡ê·žëšìŽ ì¬ë°ë¥Žê² ë¹ëëìëì§ íìžíê³ ë€ì곌 ê°ì ê²œì° ë¹ë륌 ì€íí©ëë€.
íìì. ê·žë° ë€ì Wafë ë€ì ì¶ë ¥ì ìì±íë íë¡ê·žëšì ì€íí©ëë€.
ìë íìžì ì뮬ë ìŽí°
ì¶ííŽì! ìŽì ns-3 ì¬ì©ìì ëë€!
ë do I do if I íì§ ì°žì¡° ì ì, ì°ì¶?
ë¹ëê° ì±ê³µì ìŒë¡ ìë£ëììì ëíëŽë Waf ë©ìì§ê° íìëì§ë§
"Hello Simulator" ì¶ë ¥ì 볎멎 ë¹ë 몚ë륌 ë€ììŒë¡ ì ííì ê°ë¥ì±ìŽ ììµëë€.
ìµì í FBI ìŠì€ ë²ì£ ë³Žê³ ì 걎묌 곌 ìí ì¹ì ìŒë¡ ëìê°ì§ë§ ë³ê²œ ì¬íì ëì³€ìµëë€. ëë²ê·ž ë°©ë².
ìŽ íí 늬ìŒìì ì¬ì©ëë 몚ë ìœì ì¶ë ¥ì í¹ë³í NS-3 ë¡ê¹ êµ¬ì± ìì
ì¬ì©ì ë©ìì§ë¥Œ ìœìì ìžìíë ë° ì ì©í©ëë€. ìŽ êµ¬ì± ììì ì¶ë ¥ì
ìµì íë ìœë륌 컎íìŒíë©Ž ìëìŒë¡ ë¹íì±íë©ëë€. "ìµì íë©ëë€." ë§ìœ ëëŒë©Ž
"Hello Simulator" ì¶ë ¥ìŽ íìëì§ ììŒë©Ž ë€ìì ì ë ¥í©ëë€.
$ ./waf êµ¬ì± --build-profile=debug --enable-examples --enable-tests
Wafìê² ëë²ê·ž ë²ì ì ë¹ëíëë¡ ì§ìí©ëë€. NS-3 ìì 륌 í¬íšíë íë¡ê·žëš
ê·žëŠ¬ê³ í ì€íž. ì¬ì í ë€ìì ì ë ¥íì¬ ìœëì ì€ì ëë²ê·ž ë²ì ì ë¹ëíŽìŒ í©ëë€.
$ ./ìí
ìŽì ì€ííë©Ž ìë íìžì ì뮬ë ìŽí° íë¡ê·žëšì ì€ííë©Ž ììëë ì¶ë ¥ìŽ íìëìŽìŒ í©ëë€.
íë¡ê·žëš ìžì
ëª ë ¹ì€ ìžì륌 NS-3 íë¡ê·žëšì ë€ì íšíŽì ì¬ì©í©ëë€.
$ ./waf --ì€í --ëª ë ¹ í í늿="%s "
íë¡ê·žëš ìŽëŠì ë€ììŒë¡ ë첎íììì€. ì ëí ìžì . ê·žë§íŒ
--ëª ë ¹ í í늿 Wafì ëí ìžìë Ʞ볞ì ìŒë¡ ì€ì
ëª ë ¹ì€ Wafë íë¡ê·žëšì ì€ííë ë° ì¬ì©íŽìŒ í©ëë€. Wafë ë¹ëê° ë€ì곌 ê°ìì§ íìží©ëë€.
ìë£íê³ ê³µì ëŒìŽëžë¬ëŠ¬ 겜ë¡ë¥Œ ì€ì í ë€ì ì ê³µë
ëª ë ¹ì€ í í늿, íë¡ê·žëš ìŽëŠ ìœì %s ì늬 íìì (ìŽê±Ž ìžì í©ëë€
ì¡°êž ìŽìíì§ë§ ê·žê² ë°©ë²ì ëë€. íšì¹ íì!)
í¹í ì ì©í ë ë€ë¥ž ìë ì첎ì ìŒë¡ í ì€íž ë구 몚ìì ì€ííë ê²ì ëë€. ê°ì íì
ê°ì¥ ìµê·Œì í ì€íž ì€ìížê° ì¡Žì¬í©ëë€(ììµëë€). ììì ì°ëŠ¬ë ./test.py ì 첎륌 ì€ííë ì€í¬ëŠœíž
ì€ì í ì€íž íë¡ê·žëšì ë°ë³µì ìŒë¡ ížì¶íì¬ ë§ì í ì€ížë¥Œ ë³ë ¬ë¡ ìíí©ëë€. í ì€íž ë¬ë.
ížì¶íë €ë©Ž í ì€íž ë¬ë ëšìŒ í ì€ížë¥Œ ìíŽ ì§ì :
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
ìŽê²ì ìžì륌 í ì€íž ë¬ë íë¡ê·žëš. ë¶í° ê°ì¥ ìµê·Œì ì¡Žì¬íì§ ìë,
ì€ë¥ ë©ìì§ê° ìì±ë©ëë€. ì¬ì© ê°ë¥í ìžìíë €ë©Ž í ì€íž ë¬ë ìµì :
$ ./waf --run test-runner --command-template="%s --help"
ëë²ê¹
ì€ííë €ë©Ž NS-3 ëë²ê±°(ì gdb)
ëë ë©ëªšëŠ¬ ê²ì¬êž°(ì Valgrind), ë¹ì ì ë¹ì·í --ëª ë ¹-í í늿="..." ìì.
ì륌 ë€ìŽ, NS-3 íë¡ê·žëš ìë íìžì ì뮬ë ìŽí° ìžìì íšê» ìë
gdb ëë²ê±°:
$ ./waf --run=hello-simulator --command-template="gdb %s --args "
ììì 죌목íëŒ NS-3 íë¡ê·žëš ìŽëŠì --ìŽì ìžì ë° ì ìŽ ì ížëŠ¬í°
(ì¬êž° gdb)ë 첫 ë²ì§ž í í°ì ëë€. --ëª ë ¹ í í늿 ë Œì. ê·žë§íŒ --ìžì ë§íë€ gdb
ëª ë ¹ì€ì ëëšžì§ ë¶ë¶ì "ìŽë±í" íë¡ê·žëšì ìí©ëë€. (ìŒë¶ gdb's
ìŽíŽíì§ ëª»íë€ --ìžì í¹ì§. ìŽ ê²œì° íë¡ê·žëš ìžì륌 ìëµíììì€.
--ëª ë ¹ í í늿, ê·žëŠ¬ê³ gdb ëª ë ¹ ìžíž ìžì.)
ìŽ ë ìíŒì ìŽì ë ìíŒë¥Œ ê²°í©íì¬ ëë²ê±°ìì í ì€ížë¥Œ ì€íí ì ììµëë€.
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
ìŒ ëª ë¶ ëŽë¹
Wafë 맚 ìì ìë ìì¹ìì ì€ííŽìŒ í©ëë€. NS-3 ë묎. ìŽê²ìŽ ìì ìŽ ë©ëë€
ì¶ë ¥ íìŒìŽ êž°ë¡ë ëë í 늬. ê·žë¬ë ë¹ì ìŽ ê·žê²ë€ì ì ì§íê³ ì¶ë€ë©Ž ìŽë»ê² íŽìŒ í ê¹ì?
ì ì, NS-3 ìì€ ížëŠ¬? ì¬ì© --cwd ë Œì:
$ ./waf --cwd=...
ì¶ë ¥ì ìíë ìì ëë í 늬ìì ììíë ê²ìŽ ë ížëŠ¬í ì ììµëë€.
ìŽ ê²œì° ìœê°ì ê°ì ì°žì¡°ê° ëììŽ ë ì ììµëë€.
$ íšì ìí {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd ->/dev/null
}
ìŽì ë²ì ì ìŽ ì¥ìì íì¬ ìì ëë í 늬륌 ì ì¥í©ëë€. cd~ê¹ì§
ê·žë° ë€ì Wafì ìì ëë í°ëŠ¬ë¥Œ ë³ê²œíëë¡ ì§ìí©ëë€. ë€ë¡ ì ì¥ë
íë¡ê·žëšì ì€ííêž° ì ì íì¬ ìì ëë í 늬.
ê°ë ì ê°ì
ì€ì ë¡ ë³Žê±°ë ì°êž° ììíêž° ì ì 뚌ì íŽìŒ í ìŒ NS-3 ìœëë
ìì€í ì ëª ê°ì§ íµì¬ ê°ë 곌 ì¶ìí륌 ì€ëª í©ëë€. ìŽ ë§ìŽ ëíë ì ììµëë€.
ìŒë¶ìê²ë ëª ë°±íì§ë§ ìê°ì ëŽìŽ ìŽ ëŽì©ì ììží ìœìŽ 볎ìêž° ë°ëëë€.
íê³ í êž°ìŽ ììì ììíê³ ìëì§ íìžíêž° ìí ì¹ì ì ëë€.
í€ ì¶ìí
ìŽ ì¹ì ììë ë€ížìí¹ìì ìŒë°ì ìŒë¡ ì¬ì©ëë ëª ê°ì§ ì©ìŽë¥Œ ê²í íì§ë§
구첎ì ìž ì믞 NS-3.
ë žë
ìží°ë· ì 묞 ì©ìŽë¡ ë€ížìí¬ì ì°ê²°ëë 컎íší ì¥ì¹ë¥Œ 컎íší°ëŒê³ í©ëë€. ì£Œìž or
ëë¡ë end 첎ê³. ë묞ì NS-3 íë ë€ížìí¬ ì뮬ë ìŽí°, 구첎ì ìŒë¡
ìží°ë· ì뮬ë ìŽí°ì ë°ì íê² êŽë šëìŽ ììŒë¯ë¡ ìëì ìŒë¡ ížì€ížëŒë ì©ìŽë¥Œ ì¬ì©íì§ ììµëë€.
ìží°ë· ë° íŽë¹ íë¡í ìœê³Œ êŽë šìŽ ììµëë€. ëì ë ìŒë°ì ìž ì©ìŽë¥Œ ì¬ì©í©ëë€.
ê·žëí ìŽë¡ ìì ë¹ë¡¯ë ë€ë¥ž ì뮬ë ìŽí°ìì ì¬ì© --- ë žë.
In NS-3 Ʞ볞 컎íší ì¥ì¹ ì¶ìí륌 ë žëëŒê³ í©ëë€. ìŽ ì¶ìíë
C++ìì íŽëì€ë¡ íí ë žë. ê·žë§íŒ ë žë íŽëì€ë
ì뮬ë ìŽì ìì 컎íší ì¥ì¹ì íí.
ë¹ì ì ìê°íŽìŒ ë žë êž°ë¥ì ì¶ê°í 컎íší°ë¡. íëë ì¶ê°
ì í늬ìŒìŽì , íë¡í ìœ ì€í ë° êŽë š ì£Œë³ ì¥ì¹ 칎ëì ê°ì ê²
컎íší°ê° ì ì©í ìì ì ìíí ì ìëë¡ íë ëëŒìŽë²ì ëë€. ì°ëŠ¬ë ëìŒí Ʞ볞 몚ëžì ì¬ì©í©ëë€. NS-3.
ìŽí늬ìŒìŽì
ìŒë°ì ìŒë¡ 컎íší° ìíížìšìŽë í¬ê² ë ë¶ë¥ë¡ ëë©ëë€. ìíížìšìŽ ì¡°ì§
ë©ëªšëŠ¬, íë¡ìžì 죌Ʞ, ëì€í¬, ë€ížìí¬ ë±ê³Œ ê°ì ë€ìí 컎íší° 늬ìì€,
ìŒë¶ 컎íší 몚ëžì ë°ë¥Žë©Ž. ìì€í ìíížìšìŽë ìŒë°ì ìŒë¡ ìŽë¬í 늬ìì€ë¥Œ ì¬ì©íì§ ììµëë€.
ì¬ì©ììê² ì§ì ì ìž ííì 죌ë ìì ì ìë£íêž° ìíŽ. ì¬ì©ìë ìŒë°ì ìŒë¡ ì ì²
ìŒë¶ë¥Œ ë¬ì±íêž° ìíŽ ìì€í ìíížìšìŽì ìíŽ ì ìŽëë 늬ìì€ë¥Œ íëíê³ ì¬ì©íë
곚.
ì¢ ì¢ ìì€í 곌 ì í늬ìŒìŽì ìíížìšìŽ ì¬ìŽì ë¶ëŠ¬ ëŒìžì
ìŽì 첎ì ížë©ìì ë°ìíë ê¶í ìì€ ë³ê²œ. ~ ìì NS-3 ì§ì§ê° ìë€
ìŽì 첎ì ì ê°ë , í¹í ê¶í ìì€ìŽë ìì€í ížì¶ì ê°ë ìŽ ììµëë€.
ê·žë¬ë ì°ëŠ¬ë ìì© íë¡ê·žëšì ëí ììŽëìŽë¥Œ ê°ì§ê³ ììµëë€. ìíížìšìŽ ìì© íë¡ê·žëšìŽ ì€íëë ê²ì²ëŒ
"ì€ì ìžê³"ìì ìì ì ìííë 컎íší°, NS-3 ì í늬ìŒìŽì ì€í NS-3 ë žë ì
ì뮬ë ìŽì ìžê³ìì ì뮬ë ìŽì ì ìŽì íììì€.
In NS-3 ìŒë¶ íëì ìì±íë ì¬ì©ì íë¡ê·žëšì Ʞ볞 ì¶ìí
ì뮬ë ìŽì ì ìì© íë¡ê·žëšì ëë€. ìŽ ì¶ìíë C++ìì íŽëì€ë¡ ííë©ëë€.
ìŽí늬ìŒìŽì . ê·žë§íŒ ìŽí늬ìŒìŽì íŽëì€ë ííì êŽëŠ¬íêž° ìí ë©ìë륌 ì ê³µí©ëë€.
ì뮬ë ìŽì ì ì¬ì©ì ìì€ ìì© íë¡ê·žëš ë²ì . ê°ë°ìë ë€ìì ìíí ê²ìŒë¡ ììë©ëë€.
ì 묞ííë€ ìŽí늬ìŒìŽì ê°ì²Ž ì§í¥ íë¡ê·žëë° ê°ê°ì íŽëì€ë ìë¡ìŽ ê²ì ìì±í©ëë€.
ìì© íë¡ê·žëš. ìŽ ììµìììë íŽëì€ì í¹ìí륌 ì¬ì©í©ëë€. ìŽí늬ìŒìŽì ëŒë
UdpEchoClientìì© íë¡ê·žëš and UdpEchoServerìì© íë¡ê·žëš. ììí ì ìë¯ìŽ ìŽë¬í
ì í늬ìŒìŽì ì ì뮬ë ìŽì ì ìì±íê³ ë°í¥íë ë° ì¬ì©ëë íŽëŒìŽìžíž/ìë² ì í늬ìŒìŽì ìžížë¥Œ 구ì±í©ëë€.
ë€ížìí¬ íší·
ì±ë
íì€ ìžê³ììë 컎íší°ë¥Œ ë€ížìí¬ì ì°ê²°í ì ììµëë€. ì¢ ì¢ ë€ë£šë 믞ëìŽ
ìŽë¬í ë€ížìí¬ì ë°ìŽí° íëŠì ížì¶í©ëë€. ì±ë. ìŽëë· ìŒìŽëžì ì°ê²°íë©Ž
벜ì íë¬ê·ž, ë¹ì ì ìŽëë· íµì ì 컎íší°ë¥Œ ì°ê²°íê³ ììµëë€
ì±ë. ì뮬ë ìŽì ìžê³ìì NS-3, íëë ë žë ëíëŽë ê°ì²Žì
컀뮀ëìŒìŽì ì±ë. ì¬êž°ì Ʞ볞ì ìž íµì ìëžë€ížìí¬ ì¶ìíë
ì±ëìŽë©° C++ìì íŽëì€ë¡ íìë©ëë€. ì±ë.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ì±ë íŽëì€ë íµì ìëžë€ížìí¬ ê°ì²Žë¥Œ êŽëŠ¬íêž° ìí ë©ìë륌 ì ê³µíê³
ê·žë€ì ë žë륌 ì°ê²°í©ëë€. ì±ë ê°ì²Žì ê°ë°ìê° ì 묞íí ìë ììµëë€.
ì§í¥ íë¡ê·žëë° ê°ê°. ã ì±ë ì 묞íë ë€ì곌 ê°ìŽ ëšìí ê²ì 몚ëžë§í ì ììµëë€.
ì² ì¬. ì 묞 ì±ë ëê·ëªš ìŽëë·ì²ëŒ ë³µì¡í ê²ì 몚ëžë§í ìë ììµëë€.
ì€ìì¹, ëë 묎ì ë€ížìí¬ì ê²œì° ì¥ì ë¬Œë¡ ê°ë ì°¬ XNUMXì°šì ê³µê°.
ì°ëŠ¬ë í¹ì ë²ì ì ì¬ì©í ê²ì ëë€. ì±ë ëŒë Csmaì±ë, í¬ìžíží¬í¬ìžížì±ë
and ììŽíìŽ ì±ë ìŽ íí 늬ìŒìì. ê·žë§íŒ Csmaì±ë, ì륌 ë€ìŽ,
구ííë íµì ìëžë€ížìí¬ ë°ì¡í ê°ê° ì¬ë¬ ACCESS íµì
ì€ê°. ìŽê²ì ì°ëŠ¬ìê² ìŽëë·ê³Œ ê°ì êž°ë¥ì ì ê³µí©ëë€.
귞묌 ì¥ì¹
ìì ìë 컎íší°ë¥Œ ë€ížìí¬ì ì°ê²°íë €ë©Ž
í¹ì ì¢ ë¥ì ë€ížìí¬ ìŒìŽëžê³Œ (PC ì©ìŽë¡)
죌ìì 칎ë 컎íší°ì ì€ì¹íŽìŒ íìµëë€. ì£Œë³ ì¹Žëì 겜ì°
ìŒë¶ ë€ížìí¹ êž°ë¥ì 구ííìŒë©° ìŽë¥Œ ë€ížìí¬ ìží°íìŽì€ 칎ëëŒê³ ë¶ë ìµëë€. NIC.
ì€ëë ëë¶ë¶ì 컎íší°ìë ë€ížìí¬ ìží°íìŽì€ íëìšìŽê° ëŽì¥ëìŽ ììŒë©° ì¬ì©ìë
ìŽ ë¹ë© ëžë¡.
NICë íëìšìŽë¥Œ ì ìŽíë ââìíížìšìŽ ëëŒìŽë²ê° ììŒë©Ž ìëíì§ ììµëë€. ì ëì€ìì (ëë
Linux), ì£Œë³ íëìšìŽì ìŒë¶ë ë€ì곌 ê°ìŽ ë¶ë¥ë©ëë€. ì¥ì¹. ì¥ì¹ê° ì ìŽëš
ì¬ì© ì¥ì¹ ëëŒìŽë², ë€ížìí¬ ì¥ì¹(NIC)ë ë€ìì ì¬ì©íì¬ ì ìŽë©ëë€. ë€ížìí¬ ì¥ì¹
ëëŒìŽë² ìŽì¹íì¬ ê·žë¬Œ ì¥ì¹. Unix ë° Linuxììë ìŽë¬í ë€ížìí¬ë¥Œ ì°žì¡°í©ëë€.
ë€ì곌 ê°ì ìŽëŠìŒë¡ ì¥ì¹ eth0.
In NS-3 ì ì, 귞묌 ì¥ì¹ ì¶ìíë ìíížìšìŽ ëëŒìŽë²ì ì뮬ë ìŽì ì 몚ë í¬íší©ëë€.
íëìšìŽ. ë€íž ì¥ì¹ë ë žë íì±ííêž° ìíŽ ë žë ì
ë€ë¥ž ì¬ë곌 ìì¬ ìíµ ë žë íµíŽ ì뮬ë ìŽì ìì ì±ë. ì€ì 컎íší°ììì²ëŒ,
a ë žë íë ìŽìì ì°ê²°ë ì ììµëë€. ì±ë ë€ì€ì íµíŽ NetDevices.
ì ì¥ì¹ ì¶ìíë C++ìì íŽëì€ë¡ ííë©ëë€. NetDevice. ê·žë§íŒ NetDevice
íŽëì€ë ë€ìì ëí ì°ê²°ì êŽëŠ¬íë ë°©ë²ì ì ê³µí©ëë€. ë žë and ì±ë ì¬ë¬Œ; ê·žëŠ¬ê³ ë ì ììµëë€
ê°ì²Ž ì§í¥ íë¡ê·žëë° ê°ê°ì ê°ë°ìì ìíŽ ì 묞íë©ëë€. ì°ëŠ¬ë
ì¬ë¬ í¹ì ë²ì ì NetDevice ëŒë CsmaNetì¥ì¹, PointToPointNetì¥ì¹,
and WifiNetì¥ì¹ ìŽ íí 늬ìŒìì. ìŽëë· NICê° ë€ì곌 íšê» ìëíëë¡ ì€ê³ë ê²ì²ëŒ
ìŽëë· ë€ížìí¬, CsmaNetì¥ì¹ ì íšê» ìëíëë¡ ì€ê³ëììµëë€. Csmaì±ë;
PointToPointNetì¥ì¹ ì íšê» ìëíëë¡ ì€ê³ëììµëë€. í¬ìžíží¬í¬ìžížì±ë ë° WifiNetì¥ì¹
ì íšê» ìëíëë¡ ì€ê³ëììµëë€. ììŽíìŽ ì±ë.
í íŽë¡ì§ ëì°ë¯ž
ì€ì ë€ížìí¬ììë NICê° ì¶ê°(ëë ëŽì¥)ë ížì€íž 컎íší°ë¥Œ ì°Ÿì ì ììµëë€. ~ ìì NS-3 we
ë¹ì ìŽ ì°Ÿì ê²ìŽëŒê³ ë§í ê²ì ëë€ ë žë ì²šë¶ ë NetDevices. ëê·ëªš ì뮬ë ìŽì ë€ížìí¬ìì
ì¬ìŽì ë§ì ì°ê²°ì ì¡°ì íŽìŒ í©ëë€. ë žë, NetDevices and ì±ë.
ì°ê²° ìŽí NetDevices ì ë žë, NetDevices ì ì±ë, IP 죌ì í ë¹,
ë±ì ìŒë°ì ìž ìì ì ëë€. NS-3, ì°ëŠ¬ë ì°ëŠ¬ê° ë¶ë¥Žë ê²ì ì ê³µí©ëë€ í íŽë¡ì§ ëì°ë¯ž ìŽê²ì ë§ë€êž° ìíŽ
ê°ë¥í í ìœê². ì륌 ë€ìŽ, ë§ì ê°ë³ íëª©ìŽ íìí ì ììµëë€. NS-3 íµì¬ ìì
NetDevice륌 ìì±íê³ , MAC 죌ì륌 ì¶ê°íê³ , íŽë¹ ë€ížìí¬ ì¥ì¹ë¥Œ ë žë, 구ì±
ë žëì íë¡í ìœ ì€íì ì°ê²°í ë€ì NetDevice ì ì±ë. ë ë§ì ìì
ë©í°í¬ìžíž ì±ëì ì¬ë¬ ì¥ì¹ë¥Œ ì°ê²°í ë€ì ì°ê²°íŽìŒ í©ëë€.
ê°ë³ ë€ížìí¬ë¥Œ ìží°ë€ížìí¬ë¡ íµí©í©ëë€. ì°ëŠ¬ë í íŽë¡ì§ ëì°ë¯ž ê°ì²Žë¥Œ ì ê³µí©ëë€.
ìŽë¬í ë§ì ê³ ì í ìì ì ì¬ì©ìì ížì륌 ìíŽ ì¬ì©íêž° ì¬ìŽ 몚ëžë¡ ê²°í©í©ëë€.
A 뚌ì , NS-3 ì€í¬ëŠœíž
ììì ì ìí ëë¡ ìì€í ì ë€ìŽë¡ëíë€ë©Ž NS-3 ì
ì í ë²ížë¶ repos í ëë í 늬 ìë. íŽë¹ ëŠŽëŠ¬ì€ ëë í ëŠ¬ë¡ ë³ê²œíê³
ë€ì곌 ê°ì ëë í 늬 구조륌 ì°ŸììŒ í©ëë€.
ìì±ì ìì ì€í¬ëì¹ ì ížëŠ¬í° waf.bat*
ë°ìžë© ëŒìŽìŒì€ src utils.py waf-tools
ë¹ë ns3 test.py* utils.pyc wscript
CHANGES.html README testpy ì¶ë ¥ ë²ì wutils.py
묞ì RELEASE_NOTES testpy.supp waf* wutils.pyc
ë¡ ë³ê²œ ìì /íí ëŠ¬ìŒ ìë°° ê·ì¹ì. ìŽëŠìŽ ì§ì ë íìŒìŽ íìëìŽìŒ í©ëë€. 첫 ë²ì§ž.cc ìì¹í
ê±°êž°. ìŽê²ì ë ë žë ì¬ìŽì ê°ëší ì§ì ê° ë§í¬ë¥Œ ë§ëë ì€í¬ëŠœížì ëë€.
ë žë ê°ì ëšìŒ íší·ì ììœí©ëë€. ì€í¬ëŠœíž ëŒìžì ìŽíŽë³Žê² ìµëë€.
ì , ê·žë¬ë ê³ìíŽì ìŽìŽ 첫 ë²ì§ž.cc ì¢ìíë ížì§êž°ìì.
볎ìŒë¬ íë ìŽíž
íìŒì 첫 ë²ì§ž ì€ì emacs 몚ë ì€ì ëë€. ìŽê²ì í¬ë§·ì ëíŽ emacsì ìë €ì€ëë€.
ìì€ ìœëìì ì¬ì©íë ê·ì¹(ìœë© ì€íìŒ).
/* -*- 몚ë:C++; c-íìŒ ì€íìŒ:"gnu"; ë€ì¬ì°êž° í 몚ë:nil; -*- */
ìŽê²ì íì ë€ì ë Œìì ì¬ì§ê° ìë 죌ì ìŽë¯ë¡ ì°ëŠ¬ë ê·žê²ì ë°©íŽíì§ ìë ížìŽ ë«ìµëë€.
ë°ë¡. ê·žë§íŒ NS-3 íë¡ì ížë ëë¶ë¶ì ëê·ëªš íë¡ì ížì ë§ì°¬ê°ì§ë¡ ë€ìì ìíŽ ìœë© ì€íìŒì ì±ííìµëë€.
êž°ì¬í 몚ë ìœëê° ì€ìíŽìŒ í©ëë€. ê·íì ìœë륌
ê²°êµ íë¡ì ížë¥Œ ì€ìíŽìŒ í©ëë€. NS-3 ì ì€ëª ë ìœë© íì€
íìŒ ë¬žì/codingstd.txt ëë íë¡ì íž ì¹ íìŽì§ì íì LINK.
ì 몚ì곌 ëëì ìµìíŽì§ë ê²ìŽ ì¢ìµëë€. NS-3 ìœë© ë° ì±í
ì°ëŠ¬ ìœëë¡ ìì í ëë§ë€ ìŽ íì€ì ëë€. ê°ë°í 몚ëì
êž°ê³ ìë€ì ë€ìí ìì ë¶íìŒë¡ ê·žë ê²íìµëë€. ìì emacs 몚ë í
emacs ížì§êž°ë¥Œ ì¬ì©íë©Ž ì¬ë°ë¥ž íìì ìœê² ì»ì ì ììµëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì뮬ë ìŽí°ë GNU General Public License륌 ì¬ì©íì¬ ëŒìŽìŒì€ê° ë¶ì¬ë©ëë€. ë¹ì ì 볌 ì ììµëë€
몚ë íìŒì í€ëì ìë ì ì í GNU ë²ë¥ ì©ìŽ NS-3 ë¶í¬. ì¢ ì¢ ë¹ì ì
êŽë šë êž°êŽ ì€ íëì ëí ì ìê¶ íìê° íìë©ëë€. NS-3 ìì íë¡ì íž
ìëì ëìŽë GPL í ì€íž ë° ìì±ì.
/*
* ìŽ íë¡ê·žëšì ë¬Žë£ ìíížìšìŽì ëë€. ì¬ë°°í¬ ë°/ëë ìì í ì ììµëë€.
* ë€ì곌 ê°ìŽ GNU General Public License ë²ì 2ì 조걎ì ë°ëŠ ëë€.
* ìì ìíížìšìŽ ì¬ëšìì ë°í;
*
* ìŽ íë¡ê·žëšì ì ì©íê² ì¬ì©ëêžž ë°ëŒë ë§ììì ë°°í¬ëë©°,
* ê·žë¬ë ìŽë í 볎ìŠë ì ê³µíì§ ììµëë€. 묵ìì 볎ìŠë ììŽ
* ìíì± ëë í¹ì 목ì ìì ì í©ì±. ì°žì¡°
* ììží ëŽì©ì GNU General Public License륌 ì°žì¡°íììì€.
*
* GNU General Public License ì¬ë³žì ë°ììŽìŒ í©ëë€.
* ìŽ íë¡ê·žëšê³Œ íšê»; ê·žë ì§ ìì ê²œì° ìì ìíížìšìŽì ì°êž°
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
몚ë í¬íš ì¬í
ì ì í ìœëë ì¬ë¬ include 묞ìŒë¡ ììí©ëë€.
#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"
ì°ëŠ¬ì ëì ìì€ì ì€í¬ëŠœíž ì¬ì©ìê°
ìì€í ì ìëì ìŒë¡ í° ëªšëì ë°ëŒ 귞룹íí©ëë€. ì°ëŠ¬ë ëšìŒ ì ê³µ
ê° ëªšëìì ì¬ì©ëë 몚ë í¬íš íìŒì ì¬ê·ì ìŒë¡ ë¡ëíë í¬íš íìŒ.
íìí í€ë륌 ì íí ì°Ÿì볎ê³
ì¢ ìì±ì ìì ë°ëŒ íìŒ ê·žë£¹ì ëê·ëªšë¡ ë¡ëí ì ìë êž°ë¥ì ì ê³µí©ëë€.
ìžë¶ì±. ìŽê²ì ê°ì¥ íšìšì ìž ì ê·Œ ë°©ìì ìëì§ë§ íì€í êžì°êž°ë¥Œ
ì€í¬ëŠœížê° íšì¬ ì¬ìì¡ìµëë€.
ì ê° NS-3 í¬íš íìŒì ë€ì ëë í 늬ì ììµëë€. ns3 (ë¹ë ìë
í¬íš íìŒ ìŽëŠ 충ëì ë°©ì§íë ë° ëììŽ ëëë¡ ë¹ë íë¡ìžì€ ì€ì ê·žë§íŒ
ns3/core-module.h íìŒì ëë í 늬ìì ì°Ÿì ns-3 몚ëì íŽë¹í©ëë€.
ìì€/ìœìŽ ë€ìŽë¡ëí ëŠŽëŠ¬ì€ ë°°í¬íìì. ìŽ ëë í 늬륌 ëìŽíë©Ž
ë§ì ìì í€ë íìŒì ì°ŸìŒììì€. ë¹ë륌 í ë Wafë ê³µê° í€ë륌 ë°°ì¹í©ëë€.
ì íìŒ ns3 íŽë¹ ëë í 늬 ìë ë¹ë/ëë²ê·ž or ë¹ë/ìµì í ìë°° ê·ì¹ì
구ì±ì ë°ëŒ. Wafë ìëìŒë¡ 몚ë í¬íšì ìì±í©ëë€.
íìŒì ì¬ì©íì¬ ëªšë ê³µê° í€ë íìŒì ë¡ëí©ëë€.
ë¬Œë¡ ìŽ íí 늬ìŒì ì¢ êµì ìŒë¡ ë°ë¥Žê³ ìêž° ë묞ì ìŽë¯ž ìë£íì ê²ì ëë€.
a
$ ./waf -d ëë²ê·ž --enable-examples --enable-tests 구ì±
ìì ë° í ì€ížë¥Œ í¬íšíë ëë²ê·ž ë¹ë륌 ìííëë¡ íë¡ì ížë¥Œ 구ì±íêž° ìíŽ.
ë¹ì ì ëí
$ ./ìí
íë¡ì ížë¥Œ ë¹ëí©ëë€. ìŽì ëë í 늬륌 볎멎 ../../ë¹ë/ëë²ê·ž/ns3 ë¹ì ê²ì ëë€
ìì íìë XNUMXê°ì 몚ë í¬íš íìŒì ì°Ÿìµëë€. ì ëŽì©ì ìŽíŽë³Œ ì ììµëë€.
ìŽë¬í íìŒì 몚ë ê³µê° í¬íš íìŒì
ê° ëªšë.
NS3 ë€ì ì€íìŽì€
ì ë€ì ì€ ì²« ë²ì§ž.cc scriptë ë€ìì€íìŽì€ ì ìžì ëë€.
ë€ìì€íìŽì€ ns3 ì¬ì©;
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 íë¡ì ížë C++ ë€ìì€íìŽì€ìì 구íë©ëë€. ns3. ìŽ ê·žë£¹ì 몚ë
NS-3-êžë¡ë² ë€ìì€íìŽì€ ìžë¶ ë²ìì êŽë š ì ìž, ëììŽ ëêžž ë°ëëë€.
ë€ë¥ž ìœëìì íµí©. C++ ì¬ì© ì±ëª ìë NS-3 ë€ì ì€íìŽì€
íì¬(ì ì) ì ìžì ìììŒë¡. ìŽê²ì ëì€ì ë§íë ë©ì§ ë°©ë²ì ëë€.
ìŽ ì ìžì ì ë ¥í íìê° ììµëë€. ns3:: 몚ë ë²ì ìŽì ì ë²ì ê²°ì ì°ì°ì
ì ì, NS-3 ì¬ì©íêž° ìí ìœëì ëë€. ë€ìì€íìŽì€ì ìµìíì§ ìì ê²œì° ë¬žìíììì€.
ê±°ì 몚ë C++ íí 늬ìŒê³Œ ns3 ì¬êž°ì ë€ìì€íìŽì€ ë° ì¬ì©ë²ì
íì€ ë€ìì€íìŽì€ì ì¬ì© ë€ì ì€íìŽì€ íì€; í ë¡ ìì ì죌 볌 ì ìë ì§ì
of ìœì°íž ê·žëŠ¬ê³ ìëŽ.
ë¡ê¹
ì€í¬ëŠœížì ë€ì ì€ì ë€ì곌 ê°ìµëë€.
NS_LOG_COMPONENT_DEFINE("FirstScriptExample");
ìŽ ë¬žì¥ì Doxygen 묞ìì ëíŽ ìŽìŒêž°í ì ìë ížëŠ¬í ì¥ìë¡ ì¬ì©í ê²ì ëë€.
첎ê³. íë¡ì íž ì¹ì¬ìŽížë¥Œ 볎멎, NS-3 íë¡ì ížì ëí ë§í¬ë¥Œ ì°Ÿì ì ììµëë€.
ëŽë¹ê²ìŽì ë°ì "묞ì". ìŽ ë§í¬ë¥Œ ì ííë©Ž ë¹ì¬ë¡ ìŽëí©ëë€.
묞ì íìŽì§. ë€ììŒë¡ ìŽëíë "ìµì 늎늬ì€" ë§í¬ê° ììµëë€.
ì ìµì ìì 늎늬ì€ì ëí 묞ì NS-3. "API"륌 ì ííë©Ž
Documentation' ë§í¬ë¥Œ íŽëŠíë©Ž ë€ììŒë¡ ìŽëí©ëë€. NS-3 API ì€ëª ì íìŽì§.
ìŒìªœì ë°ëŒ 구조ì ê·žëíœ ííì ì°Ÿì ì ììµëë€.
ì ì ìë¥ ë¹ì¹. ììíêž°ì ì¢ì ê³³ì NS-3 몚ë ì "ì± " NS-3 ííŽ
ë묎. íì¥íë©Ž 몚ë ë¹ì ì 목ë¡ì 볌 ì ììµëë€ NS-3 몚ë ì€ëª ì. ê·žë§íŒ
ì¬êž°ì 몚ëì ê°ë ì ììì ì€ëª í 몚ë í¬íš íìŒì ì§ì ì°ê²°ë©ëë€. ê·žë§íŒ
NS-3 ë¡ê¹ íì ìì€í ì C + + êµ¬ì± ì¬ì© ë by All 몚ë ì¹ì , ê·žëì
ê³ìíŽì íŽë¹ 묞ì ë žë륌 íì¥íììì€. ìŽì íì¥ ëë²ê¹ ììœ í
륌 ì íí©ëë€ ë¡ê¹ íìŽì§.
ìŽì Logging 몚ëì ëí Doxygen ì€ëª ì륌 ìŽíŽëŽìŒ í©ëë€. ìì
ëª©ë¡ #ë°íë€íìŽì§ ìëšì íëª©ìŽ íìë©ëë€.
NS_LOG_COMPONENT_DEFINE. ë€ìŽê°êž° ì ì ê²ìíŽë³Žë©Ž ì¢ì ê² ê°ìì
ì 첎 ìì ì ëí ëëì ì»êž° ìí ë¡ê¹ 몚ëì "ììží ì€ëª ". ë
ìëë¡ ì€í¬ë¡€íê±°ë íì ë€ìŽìŽê·žëš ìëì "ììží..." ë§í¬ë¥Œ ì ííì¬ ìíí ì ììµëë€.
ìŽ.
ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ì ëí ìŒë°ì ìž ììŽëìŽê° ììŒë©Ž ê³ìíŽì 구첎ì ìž ëŽì©ì ìŽíŽë³Žììì€.
NS_LOG_COMPONENT_DEFINE ì ì ìë¥ ë¹ì¹. ì¬êž°ì 묞ì륌 ë³µì íì§ë ìê² ì§ë§
ììœíë©Ž ìŽ ì€ì ë€ì곌 ê°ì ë¡ê¹ êµ¬ì± ìì륌 ì ìží©ëë€. FirstScriptì íëœíë
ìŽëŠì ì°žì¡°íì¬ ìœì ë©ìì§ ë¡ê¹ ì íì±í ë° ë¹íì±íí ì ììµëë€.
ë³žêŽ íšì
ì°Ÿì ì€í¬ëŠœížì ë€ì ì€ì ë€ì곌 ê°ìµëë€.
INT
ë©ìž(int argc, char *argv[])
{
ìŽê²ì íë¡ê·žëš(ì€í¬ëŠœíž)ì 죌ì êž°ë¥ì ëí ì ìžìŒ ë¿ì ëë€. ììì²ëŒ
몚ë C++ íë¡ê·žëšìì ì€íëë 첫 ë²ì§ž íšìê° ë Ʞ볞 íšì륌 ì ìíŽìŒ í©ëë€.
ì¬êž°ìë ì í í¹ë³í ê²ìŽ ììµëë€. ë¹ì ì NS-3 ì€í¬ëŠœížë C++ íë¡ê·žëšìŒ ë¿ì ëë€.
ë€ì ì€ì ìê° ë¶íŽë¥ì XNUMXëë žìŽë¡ ì€ì íë©° ìŽë Ʞ볞ê°ì ëë€.
ê° :
ìê°::SetResolution(ìê°::NS);
ë¶íŽë¥ì ííí ì ìë ê°ì¥ ìì ìê° ê°ì ëë€.
ë ìê° ê° ì¬ìŽì íí ê°ë¥í ì°šìŽ). íŽìë륌 ì ííê² ë³ê²œí ì ììµëë€.
í ë². ìŽë¬í ì ì°ì±ì ê°ë¥íê² íë ë©ì»€ëìŠì ë€ì ë©ëªšëŠ¬ê° ë¶ì¡±íë¯ë¡ ìŒëš
íŽìëê° ëª ìì ìŒë¡ ì€ì ëë©Ž ë©ëªšëŠ¬ë¥Œ íŽì íì¬ ì¶ê° ì ë°ìŽížë¥Œ ë°©ì§í©ëë€.
(íŽìë륌 ëª ìì ìŒë¡ ì€ì íì§ ììŒë©Ž Ʞ볞ì ìŒë¡ XNUMXëë žìŽë¡ ì€ì ëë©°
ì뮬ë ìŽì ìŽ ììëë©Ž ë©ëªšëŠ¬ê° íŽì ë©ëë€.)
ì€í¬ëŠœížì ë€ì ë ì€ì ë¹ëë ë ê°ì ë¡ê¹ êµ¬ì± ìì륌 íì±ííë ë° ì¬ì©ë©ëë€.
Echo íŽëŒìŽìžíž ë° Echo ìë² ì í늬ìŒìŽì ì:
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
Logging 구ì±ìì ì€ëª ì륌 ìœìŽ 볞 ì ìŽ ìë€ë©Ž
ê° êµ¬ì± ìììì íì±íí ì ìë ì¬ë¬ ìì€ì ë¡ê¹ ìžë¶ ì 볎/ìžë¶ ì¬íì ëë€.
ìŽ ë ì€ì ìœëë ììœ íŽëŒìŽìžíž ë°
ìë². ê·žë¬ë©Ž íší·ìŽ ì ì¡ë ë ìì© íë¡ê·žëšìì ë©ìì§ë¥Œ ìžìíê² ë©ëë€.
ì뮬ë ìŽì ì€ì ìì ëììµëë€.
ìŽì ì°ëŠ¬ë í íŽë¡ì§ë¥Œ ìì±íê³ ì뮬ë ìŽì ì ì€ííë ë¹ìŠëì€ë¡ ì§ì ìŽëí©ëë€.
ìŽ ìì ì ê°ë¥í í ìœê² ë§ë€êž° ìíŽ í íŽë¡ì§ ëì°ë¯ž ê°ì²Žë¥Œ ì¬ì©í©ëë€.
í íŽë¡ì§ ëì°ë¯ž
ë žë컚í ìŽë
ì€í¬ëŠœížì ë€ì ë ì€ ìœëë ì€ì ë¡ NS-3 ë žë ê°ì²Ž
ì뮬ë ìŽì ìì 컎íší°ë¥Œ ëíë ëë€.
NodeContainer ë žë;
ë žë.ë§ë€êž°(2);
ì ëí 묞ì륌 ì°ŸìëŽ ìë€. ë žë컚í ìŽë ìì ì ê³ìíêž° ì ì. ë ë€ë¥ž ë°©ë²
죌ìŽì§ íŽëì€ì ëí 묞ìì ë€ìŽê°ë ê²ì íŽëì€ Doxygenì í
íìŽì§. ì¬ì í DoxygenìŽ ížëŠ¬í ê²œì° íìŽì§ ìëšìŒë¡ ì€í¬ë¡€íì¬
륌 ì íí©ëë€ íŽëì€ í. ìë¡ìŽ í ìžížê° íìëìŽìŒ íë©° ê·ž ì€ íëë íŽëì€
ëª ë¶. íŽë¹ í ìëì 몚ë 목ë¡ìŽ íìë©ëë€. NS-3 íŽëì€. ìëë¡ ì€í¬ë¡€,
ì°Ÿê³ ns3::ë žë컚í ìŽë. ìì ì ì°ŸìŒë©Ž ê³ìíŽì ì ííì¬ ë€ììŒë¡ ìŽëí©ëë€.
ìì ì ëí 묞ì.
ì°ëŠ¬ì íµì¬ ì¶ìí ì€ íëê° ë žë. ìŽê²ì 컎íší°ë¥Œ ëíë ëë€.
íë¡í ìœ ì€í, ìì© íë¡ê·žëš ë° ì£Œë³ ì¥ì¹ì ê°ì ê²ì ì¶ê°í ê²ì ëë€.
칎ë. ê·žë§íŒ ë žë컚í ìŽë í íŽë¡ì§ ëì°ë¯žë ìì±, êŽëŠ¬ ë°
ì¡ìžì€ ë žë ì뮬ë ìŽì ì ì€ííêž° ìíŽ ìì±íë ê°ì²Žì ëë€. ìì 첫 ë²ì§ž ì€
ì°ëŠ¬ê° ížì¶íë NodeContainer륌 ì ìží©ëë€. ë žë. ë ë²ì§ž ì€ì ë€ìì ížì¶í©ëë€. ë§ë€êž°
ë°©ë²ì ë žë ê°ì²Žë¥Œ ë§ë€ê³ 컚í ìŽëì ë ê°ì ë žë륌 ìì±íëë¡ ìì²í©ëë€. ì ì€ëª ë ë°ì ê°ìŽ
Doxygen, 컚í ìŽëë NS-3 ë ê°ë¥Œ ë§ëë ë° ì í©í ìì€í ë žë
ê°ì²Žì ëí í¬ìží°ë¥Œ ëŽë¶ì ì ì¥í©ëë€.
ì€í¬ëŠœížì ìë ë žëë ì묎 ìì ë ìííì§ ììµëë€. 구ì¶ì ë€ì ëšê³
í íŽë¡ì§ë ë žë륌 ë€ížìí¬ë¡ ì°ê²°íë ê²ì ëë€. ê°ì¥ ëšìí ííì ë€ížìí¬
ì§ìì ë ë žë ì¬ìŽì ëšìŒ ì§ì ê° ë§í¬ì ëë€. ì°ëŠ¬ë ê·ž ì€ íë륌 ë§ë€ ê²ì ëë€
ì¬êž° ë§í¬.
í¬ìžíží¬í¬ìžížëì°ë¯ž
ì°ëŠ¬ë ì ëì ë§í¬ë¥Œ 구ì±íê³ ììŒë©°, ꜀ ë íšíŽìŒë¡
ë¹ì ìê² ì¹ìíì§ë§, ì°ëŠ¬ë í íŽë¡ì§ ëì°ë¯ž ê°ì²Žë¥Œ ì¬ì©íì¬ ë°°ì¹íë ë° íìí ì ìì€ ìì ì ìíí©ëë€.
íšê» ë§í¬. íµì¬ ì¶ìí ì€ ë ê°ì§ê° NetDevice 귞늬ê³
ì±ë. íì€ ìžê³ìì ìŽë¬í ì©ìŽë ëëµ ì£Œë³ ì¥ì¹ 칎ë ë°
ë€ížìí¬ ìŒìŽëž. ìŒë°ì ìŒë¡ ìŽ ë ê°ì§ë ë°ì íê² ì°ê²°ëìŽ ììŒë©° íëë
ì륌 ë€ìŽ ìŽëë· ì¥ì¹ì 묎ì ì±ëì êµíí ê²ìŒë¡ ììë©ëë€. ì°ëŠ¬ì í íŽë¡ì§
ëì°ë¯žë ìŽ ì¹ë°í ê²°í©ì ë°ë¥Žë¯ë¡ ëšìŒ ë구륌 ì¬ì©í©ëë€.
í¬ìžíží¬í¬ìžížëì°ë¯ž êµ¬ì± ë° ì°ê²° NS-3 PointToPointNetì¥ì¹ and
í¬ìžíží¬í¬ìžížì±ë ìŽ ì€í¬ëŠœížì ê°ì²Ž.
ì€í¬ëŠœížì ë€ì ìž ì€ì ë€ì곌 ê°ìµëë€.
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("ì§ì°", StringValue("2ms"));
첫 ë²ì§ž ì€,
PointToPointHelper pointToPoint;
ìžì€íŽì€í í¬ìžíží¬í¬ìžížëì°ë¯ž ì€íì ê°ì²Ž. ëì ìì€ì êŽì ìì 볎멎
ë€ì ì€,
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
ê·žìê² ë§íë€. í¬ìžíží¬í¬ìžížëì°ë¯ž ê° "5Mbps"(ìŽë¹ XNUMXë©ê°ë¹íž)륌 ë€ì곌 ê°ìŽ ì¬ì©íë ê°ì²Ž
ìì±í ë "DataRate" PointToPointNetì¥ì¹ 목ì .
ë³Žë€ ììží êŽì ìì 묞ììŽ "DataRate"ë ì°ëŠ¬ê° ížì¶íë ê²ì íŽë¹í©ëë€.
ìì± ì PointToPointNetì¥ì¹. Doxygen for class륌 볎멎
ns3::PointToPointNetDevice ì ëí ì€ëª ì륌 ì°ŸìŒììì€. ì í ID ê°ì žì€êž° ë°©ë², ë¹ì ì
목ë¡ì ì°Ÿì Attributes ì¥ì¹ì ëíŽ ì ìë©ëë€. ìŽ ì€ "DataRate"ê° ììµëë€.
ìì±. ì¬ì©ìê° ê°ì¥ ë§ìŽ 볌 ì ìë NS-3 ê°ì²Žë ì ì¬í 목ë¡ì ê°ì§ê³ ììµëë€. Attributes. ì°ëŠ¬ë ìŽê²ì ì¬ì©í©ëë€
ë€ì 컎íìŒíì§ ìê³ ì뮬ë ìŽì ì ìœê² 구ì±í ì ìë ë©ì»€ëìŠ
ë€ì ì¹ì .
ì "DataRate"ì ì ì¬ PointToPointNetì¥ì¹ ë¹ì ì "ì§ì°"ì ì°Ÿì ì ììµëë€ ìì±
êŽë š í¬ìžíží¬í¬ìžížì±ë. ë§ì§ë§ ì€,
pointToPoint.SetChannelAttribute("ì§ì°", StringValue("2ms"));
ê·žìê² ë§íë€. í¬ìžíží¬í¬ìžížëì°ë¯ž "2ms"(XNUMXë°ëŠ¬ìŽ) ê°ì
ìŽí ìì±ëë 몚ë í¬ìžíž í¬ í¬ìžíž ì±ëì ì ì¡ ì§ì°.
NetDevice컚í ìŽë
ì€í¬ëŠœížì ìŽ ìì ìì ì°ëŠ¬ë ë žë컚í ìŽë ë ê°ì ë žëê° í¬íšëìŽ ììµëë€. ì°ëŠ¬ë
í¬ìžíží¬í¬ìžížëì°ë¯ž ê·žê²ì íëŒìŽë°ëê³ ë§ë€ ì€ë¹ê° PointToPointNetì¥ì¹ ë° ììŽìŽ
í¬ìžíží¬í¬ìžížì±ë ê·žë€ ì¬ìŽì ê°ì²Ž. ì°ëŠ¬ê° ì¬ì©í ê²ì²ëŒ ë žë컚í ìŽë í íŽë¡ì§
í¬íŒ ê°ì²Žë¥Œ ìì±íêž° ìí ë žë ì뮬ë ìŽì ì ìíŽ í¬ìžíží¬í¬ìžížëì°ë¯ž
ì°ëŠ¬ë¥Œ ìíŽ ì¥ì¹ë¥Œ ìì±, êµ¬ì± ë° ì€ì¹íë ê²ê³Œ êŽë šë ìì ì ìíí©ëë€. ì°ëŠ¬
ìì±ë 몚ë NetDevice ê°ì²Ž 목ë¡ìŽ íìíë¯ë¡
NodeContainer륌 ì¬ì©íì¬ ì°ëŠ¬ê° ë žë륌 볎ì íë ê²ì²ëŒ NetDeviceContainerê° ìŽë€ì 볎ì í©ëë€.
ë§ë€ìŽì§. ë€ì ë ì€ì ìœëë
NetDeviceContainer ì¥ì¹;
ì¥ì¹ = pointToPoint.Install(ë žë);
ì¥ì¹ ë° ì±ë 구ì±ì ìë£í©ëë€. 첫 ë²ì§ž ì€ì ì¥ì¹ë¥Œ ì ìží©ëë€.
ììì ìžêží 컚í ìŽëì ë ë²ì§ž 컚í ìŽëê° ë¬Žê±°ìŽ ìì ì ìíí©ëë€. ê·žë§íŒ ì€ì¹ ì ë°©ë²
ì ì, í¬ìžíží¬í¬ìžížëì°ë¯ž ìì ë žë컚í ìŽë 맀ê°ë³ìë¡. ëŽë¶ì ìŒë¡
NetDevice컚í ìŽë ìì±ë©ëë€. ê° ë žëì ëíŽ ë žë컚í ìŽë (ì íí ììŽìŒ
ì ëì ë§í¬ì ê²œì° XNUMXê°) a PointToPointNetì¥ì¹ ìì±ëìŽ ì¥ì¹ì ì ì¥ë©ëë€.
컚í ìŽë. ã í¬ìžíží¬í¬ìžížì±ë ìì±ëê³ ë PointToPointNetì¥ì¹ are
첚ë¶ë. ì ìíŽ ê°ì²Žê° ìì±ë ë í¬ìžíží¬í¬ìžížëì°ë¯žWalk Through California íë¡ê·žëš, Attributes ìŽì ì
í¬íŒì ì€ì ë ê°ì íŽë¹ ìŽêž°íì ì¬ì©ë©ëë€. Attributes ìì±ë
ì¬ë¬Œ.
ì€í í pointToPoint.ì€ì¹ (ë žë) ì°ëŠ¬ë ë ê°ì ë žë륌 ê°ê² ë ê²ì ëë€.
ì€ì¹ë ì ëì ë€íž ì¥ì¹ì ìŽë€ ì¬ìŽì ëšìŒ ì ëì ì±ë.
ë ì¥ì¹ 몚ë ìŽë¹ XNUMXë©ê°ë¹ížë¡ ë°ìŽí°ë¥Œ ì ì¡íëë¡ êµ¬ì±ë©ëë€.
ì ì¡ ì§ì°ìŽ XNUMXë°ëŠ¬ìŽìž ì±ë.
ìží°ë·ì€íí¬íŒ
ìŽì ë žëì ì¥ì¹ê° 구ì±ëìì§ë§ íë¡í ìœ ì€íìŽ ì€ì¹ëìŽ ìì§ ììµëë€.
ì°ëŠ¬ ë žëìì. ë€ì ë ì€ì ìœëê° ìŽë¥Œ ì²ëŠ¬í©ëë€.
InternetStackHelper ì€í;
stack.Install(ë žë);
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ìží°ë·ì€íí¬íŒ ìží°ë· ì€íì ìë í íŽë¡ì§ ëì°ë¯žì ëë€.
í¬ìžíží¬í¬ìžížëì°ë¯ž ì ëì ë€íž ì¥ì¹ì ëí ê²ì ëë€. ê·žë§íŒ ì€ì¹ ë°©ë²ì
ë žë컚í ìŽë 맀ê°ë³ìë¡. ì€íëë©Ž ìží°ë· ì€íì ì€ì¹í©ëë€.
(TCP, UDP, IP ë±) ë žë 컚í ìŽëì ê° ë žëìì.
IPv4AddressHelper
ë€ììŒë¡ ë žëì ì¥ì¹ë¥Œ IP 죌ìì ì°ê²°íŽìŒ í©ëë€. ì°ëŠ¬ë
IP 죌ì í ë¹ì êŽëŠ¬íë í íŽë¡ì§ í¬íŒ. ì¬ì©ìê° ë³Œ ì ìë ì ìŒí APIë
ì€ì 죌ì륌 ìíí ë ì¬ì©í Ʞ볞 IP 죌ì ë° ë€ížìí¬ ë§ì€í¬ ì€ì
í ë¹(ëì°ë¯ž ëŽë¶ì íì ìì€ìì ìíëš).
ìì ì€í¬ëŠœížìì ë€ì ë ì€ì ìœëë 첫 ë²ì§ž.cc,
Ipv4AddressHelper 죌ì;
address.SetBase("10.1.1.0", "255.255.255.0");
죌ì ëì°ë¯ž ê°ì²Žë¥Œ ì ìžíê³ IP 죌ì í ë¹ì ììíŽìŒ íë€ê³ ìë €ì€ëë€.
ë€ížìí¬ 10.1.1.0ìì ë§ì€í¬ 255.255.255.0ì ì¬ì©íì¬ í ë¹ ê°ë¥í ë¹ížë¥Œ ì ìí©ëë€. ì ìíŽ
Ʞ볞ì ìŒë¡ í ë¹ë 죌ìë XNUMXìì ììíì¬ ëšì¡°ë¡ê² ìŠê°íë¯ë¡ 첫 ë²ì§ž
ìŽ ë² ìŽì€ìì í ë¹ë 죌ìë 10.1.1.1, 10.1.1.2 ë±ìŽ ë©ëë€.
ìí NS-3 ìì€í ì ì€ì ë¡ í ë¹ë 몚ë IP 죌ì륌 êž°ìµíê³
ì€ìë¡ ëìŒí 죌ì륌 ë ë² ìì±íë©Ž ì¹ëª ì ìž ì€ë¥ê° ë°ìí©ëë€(ìŠ,
ê·žë°ë° ì€ë¥ë¥Œ ëë²ê¹ íêž°ê° ë§€ì° ìŽë µìµëë€.)
ìœëì ë€ì ì€,
Ipv4InterfaceContainer ìží°íìŽì€ = address.Assign(ì¥ì¹);
ì€ì 죌ì í ë¹ì ìíí©ëë€. ~ ìì NS-3 ì°ëŠ¬ë IP ì¬ìŽì ì°ê²°ì ë§ëëë€
죌ì ë° ì¥ì¹ë¥Œ ì¬ì©íë IPv4ìží°íìŽì€ 묌첎. ëëë¡ ëª©ë¡ìŽ íìí ê²ì²ëŒ
ëì€ì ì°žì¡°í ì ìëë¡ ëì°ë¯žê° ë§ë ë€íž ì¥ì¹ 목ë¡ìŽ íìí ëê° ììµëë€.
IPv4ìží°íìŽì€ ì¬ë¬Œ. ê·žë§íŒ IPv4ìží°íìŽì€ 컚í ìŽë ìŽ êž°ë¥ì ì ê³µí©ëë€.
ìŽì ì€íìŽ ì€ì¹ëê³ IP 죌ìê° ìë ì§ì ê° ë€ížìí¬ê° 구ì¶ëììµëë€.
í ë¹ë. ìŽ ìì ìì ì°ëŠ¬ìê² íìí ê²ì ížëíœì ìì±íë ì í늬ìŒìŽì ì ëë€.
ìŽí늬ìŒìŽì
ns-3 ìì€í ì íµì¬ ì¶ìí ì€ ë ë€ë¥ž íëë ìŽí늬ìŒìŽì . ìŽë²ì
ì°ëŠ¬ë íµì¬ì ë ê°ì§ ì 묞í륌 ì¬ì©íë ì€í¬ëŠœíž NS-3 ìì ìŽí늬ìŒìŽì ëŒë
UdpEchoServerìì© íë¡ê·žëš and UdpEchoClientìì© íë¡ê·žëš. ì°ëŠ¬ê° ìŽì ì ê·žë¬ë ê²ì²ëŒ
Ʞ볞 ê°ì²Žë¥Œ 구ì±íê³ êŽëŠ¬íë ë° ëììŽ ëë ëì°ë¯ž ê°ì²Žë¥Œ ì¬ì©í©ëë€.
ì¬êž°ì ì°ëŠ¬ê° ì¬ì©íë UdpEchoServerëì°ë¯ž and UdpEchoClientëì°ë¯ž ì°ëŠ¬ì ì¶ì ížíê² íŽì£Œë 묌걎ë€.
UdpEchoServerëì°ë¯ž
ìì ì€í¬ëŠœížì ë€ì ìœë ì€ì 첫 ë²ì§ž.cc, UDP ììœë¥Œ ì€ì íë ë° ì¬ì©ë©ëë€.
ìŽì ì ìì±í ë žë ì€ íëì ìë ìë² ìì© íë¡ê·žëšì ëë€.
UdpEchoServerHelper echoServer(9);
ApplicationContainer serverApps = echoServer.Install(nodes.Get(1));
serverApps.Start(ìŽ(1.0));
serverApps.Stop(ìŽ(10.0));
ì ì€ëí«ì 첫 ë²ì§ž ìœë ì€ì ë€ìì ì ìží©ëë€. UdpEchoServerëì°ë¯ž. íìì ê°ìŽ,
ìŽê²ì ìì© íë¡ê·žëš ìì²Žê° ìëëŒ ì€ì ìì© íë¡ê·žëšì ë§ëë ë° ëììŽ ëë ê°ì²Žì ëë€.
ìì© íë¡ê·žëš. ì°ëŠ¬ì êŽìµ ì€ íëë íì Attributes ëì°ë¯žìì
걎ì€ì. ìŽ ê²œì° ëì°ë¯žë ë€ì곌 ê°ìŽ ì ê³µëì§ ìë í ì ì©í ìì ì ìíí ì ììµëë€.
íŽëŒìŽìžížë ìê³ ìë í¬íž ë²íž. íëë§ ê³ ë¥Žê³ êž°ëíꞰ볎ë€
몚ë ì ìëíë¯ë¡ ìì±ìì ëí 맀ê°ë³ìë¡ í¬íž ë²ížê° íìí©ëë€. ê·žë§íŒ
ìì±ìë ì°šë¡ë¡ ëšìí ìì± ì€ì ì ë¬ë ê°ìŒë¡. ë¹ì ìŽ ìíë€ë©Ž, ë¹ì ì
"í¬íž"륌 ì€ì í ì ììµëë€. ìì± ëì€ì ë€ë¥ž ê°ìŒë¡ ìì± ì€ì .
ë€ë¥ž ë§ì ëì°ë¯ž ê°ì²Žì ì ì¬íê² UdpEchoServerëì°ë¯ž ê°ì²Žë ì€ì¹
ë°©ë². ì€ì ë¡ êž°ë³ž ììœë¥Œ ì ë°íë ê²ì ìŽ ë©ìëì ì€íì ëë€.
ìžì€íŽì€íëê³ ë žëì ì°ê²°ë ìë² ìì© íë¡ê·žëšì ëë€. í¥ë¯žë¡ê²ë ì€ì¹
ë°©ë²ì ë žë컚í ìŽë ë€ë¥ž ê²ê³Œ ë§ì°¬ê°ì§ë¡ 맀ê°ë³ìë¡ ì€ì¹ ì°ëŠ¬ê° ê°ì§ê³ ìë ë°©ë²
볞. ìŽê²ì ê·žë ê² ë³ŽìŽì§ ìëëŒë ì€ì ë¡ ë©ìëì ì ë¬ëë ê²ì ëë€.
ìŽ ê²œì°. C++ìŽ ììµëë€. ì ëì ìž ë³í 결곌륌 ê°ì žì€ë ì¬êž° ìì ìì
ë žë.ê°ì žì€êž° (1) (ë žë ê°ì²Žì ëí ì€ë§íž í¬ìží°ë¥Œ ë°íí©ëë€ --- Ptr) ê·žëŠ¬ê³ ê·žê²ì ì¬ì©
ìŽëŠ ìë ìì±ììì ë žë컚í ìŽë ê·žë° ë€ì ì€ì¹. ë¹ì ìŽìë 겜ì°
컎íìŒíê³ ì€ííë C++ ìœëìì í¹ì ë©ìë ìê·žëì²ë¥Œ ì°Ÿêž° ìíŽ íì í€ë§€ê³ ììµëë€.
ì¢ìµëë€. ìŽë¬í ì¢ ë¥ì ììì ë³íì ì°ŸìŒììì€.
ì°ëŠ¬ë ì§êž ê·žê²ì ë³žë€ echoServer.ì€ì¹ 륌 ì€ì¹í ê²ì ëë€ UdpEchoServerìì© íë¡ê·žëš 륌 ìì²íì¬ ìŽì ëíŽ ë ë§ì ì 볎륌 ì»ì ì ììµëë€.
ìžë±ì€ ë²íž XNUMXìì ì°Ÿì ë žë ë žë컚í ìŽë ì°ëŠ¬ë ë žë륌 êŽëŠ¬íìµëë€. ì€ì¹
몚ë ìì© íë¡ê·žëšì ëí í¬ìží°ë¥Œ 볎ì íë 컚í ìŽë륌 ë°íí©ëë€(ìŽ ê²œì° íë
ì°ëŠ¬ê° íµê³Œ ìŽí ë žë컚í ìŽë íëì ë žë í¬íš) ëì°ë¯žì ìíŽ ìì±ë©ëë€.
ì í늬ìŒìŽì ì ížëíœ ìì±ì "ìì"íë ë° ìê°ìŽ íìíë©° ì íì ìž ìê°ìŽ 걞늎 ì ììµëë€.
"ë©ì¶ë€". ì°ëŠ¬ë ë ë€ ì ê³µí©ëë€. ìŽ ìê°ì ë€ìì ì¬ì©íì¬ ì€ì ë©ëë€. ì í늬ìŒìŽì 컚í ìŽë ë°©ë²
ì€ííž and ì€ì§. ìŽë¬í ë°©ë²ì Time 맀ê°ë³ì. ìŽ ê²œì°, ì°ëŠ¬ë ëª ë°±í C + +
C++ double 1.0ì ê°ì žìì NS-3 Time ì¬ì©íë ê°ì²Ž
a ìŽ ê¹ì€. ë³í ê·ì¹ì ëªšëž ìì±ìê° ì ìŽí ì ììµëë€.
C++ìë ê³ ì í ê·ì¹ìŽ ììŒë¯ë¡ íì 맀ê°ë³ìê° ë§ì¡±ì€ë¬ìž ê²ìŽëŒê³ ê°ì í ìë ììµëë€.
ë¹ì ì ìíŽ ë³í. ë ì€,
serverApps.Start(ìŽ(1.0));
serverApps.Stop(ìŽ(10.0));
ììœ ìë² ì í늬ìŒìŽì ìŽ ì€ííž (íì±í) XNUMXìŽì
ì뮬ë ìŽì ë° ì€ì§ (ë¹íì±í) ì뮬ë ìŽì ìì XNUMXìŽ í. ì 믞ë
ì뮬ë ìŽì ìŽë²€íž(ìì© íë¡ê·žëš ì€ì§ ìŽë²€íž)륌 ë€ì곌 ê°ìŽ ì ìžíë€ë ì¬ì€
XNUMXìŽì ì€íëë©Ž ì뮬ë ìŽì ìŽ ì§ìë©ëë€. at ê°ì¥ ìì XNUMX ìŽ
UdpEchoClientëì°ë¯ž
ììœ íŽëŒìŽìžíž ìì© íë¡ê·žëšì ê±°ì ì ì¬í ë°©ë²ìŒë¡ ì€ì ë©ëë€.
ì¬êž°ë ì¬ë. êž°ë³žìŽ ììµëë€ UdpEchoClientìì© íë¡ê·žëš ì ìíŽ êŽëŠ¬ëë
UdpEchoClientëì°ë¯ž.
UdpEchoClientHelper echoClient(ìží°íìŽì€.GetAddress(1), 9);
echoClient.SetAttribute("MaxPackets", UintegerValue (1));
echoClient.SetAttribute("ê°ê²©", TimeValue(ìŽ(1.0)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));
ApplicationContainer clientApps = echoClient.Install(nodes.Get(0));
clientApps.Start(ìŽ(2.0));
clientApps.Stop(ìŽ(10.0));
ê·žë¬ë ììœ íŽëŒìŽìžížì ê²œì° XNUMXê°ì§ë¥Œ ìë¡ ë€ë¥Žê² ì€ì íŽìŒ í©ëë€. Attributes. ì²ì ë
Attributes ê±Žì€ ì€ì ì€ì ë©ëë€. UdpEchoClientëì°ë¯ž. 맀ê°ë³ì륌 ì ë¬í©ëë€.
"RemoteAddress" ë° "RemotePort"륌 ì€ì íêž° ìíŽ (ëì°ë¯ž ëŽë¶ì ìŒë¡) ì¬ì©ëë
Attributes ì°ëŠ¬ì íìœì ë°ëŒ íì Attributes ë§€ê° ë³ì
ëì°ë¯ž ìì±ì.
ì°ëŠ¬ê° ì¬ì©í ê²ì êž°ìµíììì€ IPv4ìží°íìŽì€ 컚í ìŽë ì°ëŠ¬ê° IP 죌ì륌 ì¶ì íêž° ìíŽ
ì°ëŠ¬ ì¥ì¹ì í ë¹ëììµëë€. XNUMXë²ì§ž ìží°íìŽì€ ìží°íìŽì€ 컚í ìŽëë
ìì XNUMXë²ì§ž ë žëì IP 죌ìì íŽë¹í©ëë€. ë žë 컚í ìŽë. 첫ë²ì§ž
ìží°íìŽì€ ìží°íìŽì€ 컚í ìŽëë 첫 ë²ì§ž ë žëì IP 죌ìì íŽë¹í©ëë€.
ì ì, ë žë 컚í ìŽë. ë°ëŒì ìœëì 첫 ë²ì§ž ì€(ììì)ìì
ëì°ë¯ž ë° íŽëŒìŽìžížì ì격 죌ì륌 IP 죌ìë¡ ì€ì íëë¡ ì§ìí©ëë€.
ìë²ê° ì죌íë ë žëì í ë¹ë©ëë€. ì°ëŠ¬ë ëí ê·žê²ì 볎ëŽëë¡ ì€ë¹íëŒê³ ë§í©ëë€
í¬íž XNUMXì ëí íší·.
"맥ì€íší·" ìì± íŽëŒìŽìžížìê² íì©íë ìµë íší· ì륌 ìë €ì€ëë€.
ì뮬ë ìŽì ì€ì 볎ë ëë€. "ê°ê²©" ìì± íŽëŒìŽìžížìê² ëêž° ìê°ì ìë €ì€ëë€.
íší· ì¬ìŽ ë° "PacketSize" ìì± íŽëŒìŽìžížìê² íší·ì í¬êž°ë¥Œ ìë €ì€ëë€.
íìŽë¡ëê° ììŽìŒ í©ëë€. ìŽ í¹ì ì¡°í©ìŒë¡ Attributes, ì°ëŠ¬ë
íŽëŒìŽìžížë íëì 1024ë°ìŽíž íší·ì 볎ë ëë€.
ììœ ìë²ì 겜ì°ì ë§ì°¬ê°ì§ë¡ ììœ íŽëŒìŽìžížìê² ë€ì곌 ê°ìŽ ì§ìí©ëë€. ì€ííž and ì€ì§íì§ë§,
ì¬êž°ìë ìë²ê° íì±íë í XNUMXìŽ íì íŽëŒìŽìžížë¥Œ ììí©ëë€.
ì뮬ë ìŽì ).
몚ì ì€í ì¥ì¹
ìŽ ìì ìì íŽìŒ í ìŒì ì€ì ë¡ ì뮬ë ìŽì ì ì€ííë ê²ì ëë€. ìŽê²ì ë€ìì ì¬ì©íì¬ ìíë©ëë€.
êžë¡ë² êž°ë¥ ì뮬ë ìŽí°::ì€í.
ì뮬ë ìŽí°::ì€í();
ìŽì ì ë©ìë륌 ížì¶íì ë,
serverApps.Start(ìŽ(1.0));
serverApps.Stop(ìŽ(10.0));
...
clientApps.Start(ìŽ(2.0));
clientApps.Stop(ìŽ(10.0));
ì€ì ë¡ ì뮬ë ìŽí°ìì ìŽë²€ížë¥Œ 1.0ìŽ, 2.0ìŽ ë° ë ê°ì ìŽë²€ížë¡ ììœíìµëë€.
10.0ìŽ. ìžì ì뮬ë ìŽí°::ì€í ížì¶ëë©Ž ìì€í ì ë€ìì íµíŽ 볎Ʞ ììí©ëë€.
ììœë ìŽë²€íž ëª©ë¡ ë° ì€í. 뚌ì 1.0ìŽì ìŽë²€ížë¥Œ ì€ííê³ ,
ê·žë¬ë©Ž ììœ ìë² ìì© íë¡ê·žëšìŽ íì±íë©ëë€(ìŽ ìŽë²€ížë ì°šë¡ë¡ ë§ì
êž°í ìŽë²€íž). ê·žë° ë€ì ììëë t=2.0ìŽ ëì ììœë ìŽë²€ížë¥Œ ì€íí©ëë€.
ììœ íŽëŒìŽìžíž ì í늬ìŒìŽì . ë€ì ë§íì§ë§ ìŽ ìŽë²€ížë ë ë§ì ìŽë²€ížë¥Œ ììœí ì ììµëë€. ìì
ììœ íŽëŒìŽìžíž ìì© íë¡ê·žëšì ìŽë²€íž 구íì ë€ìì ë°ìŽí° ì ì¡ ëšê³ë¥Œ ììí©ëë€.
ìë²ì íší·ì ì ì¡íì¬ ì뮬ë ìŽì .
íší·ì ìë²ë¡ 볎ëŽë íìë ë€ì곌 ê°ì ìŒë šì ìŽë²€ížë¥Œ ížëŠ¬ê±°í©ëë€.
ì¥ë©Ž ë€ìì ìëìŒë¡ ìŒì ìŽ ì¡íê³
ì€í¬ëŠœížìì ì€ì í ë€ìí íìŽë° 맀ê°ë³ìì ë°ëŒ íší· ììœ.
ê²°êµ ì°ëŠ¬ë íëì íší·ë§ 볎ëŽêž° ë묞ì( ìµë íší· ìì± ì ì€ì ëììµëë€.
íë) ëšìŒ íŽëŒìŽìžíž ììœ ââìì²ì ìíŽ ížëŠ¬ê±°ë ìŽë²€íž 첎ìžìŽ ì ì ì€ìŽë€ê³
ì뮬ë ìŽì ìŽ ì íŽ ìíê° ë©ëë€. ìŽ ìŒìŽ ë°ìíë©Ž ëëšžì§ ìŽë²€ížë ë€ì곌 ê°ìµëë€. ì€ì§
ìë²ì íŽëŒìŽìžížì ëí ìŽë²€íž. ìŽë¬í ìŽë²€ížê° ì€íë ë
ì²ëŠ¬í ì¶ê° ìŽë²€íž ë° ì뮬ë ìŽí°::ì€í ë³Žê³ . ê·žë¬ë©Ž ì뮬ë ìŽì ìŽ ìë£ë©ëë€.
ëšì ê²ì ì²ìíë ê²ë¿ì ëë€. ìŽë ì ì íšì륌 ížì¶íì¬ ìíë©ëë€.
ì뮬ë ìŽí°::íꎎ. ëì°ë¯ž êž°ë¥(ëë ì ìì€ NS-3 ìœë) ì€í, ê·žë€ì
몚ë ê°ì²Žë¥Œ íꎎíêž° ìíŽ ì뮬ë ìŽí°ì íí¬ê° ìœì ëëë¡ ë°°ìŽíìµëë€.
ìì±ëììµëë€. --- ìŽë¬í ê°ì²Žë¥Œ ì§ì ì¶ì í íìê° ìììµëë€.
ë¹ì ìŽíŽìŒ í ìŒì ì ííë ê²ë¿ìŽììµëë€ ì뮬ë ìŽí°::íꎎ ì¢ ë£í©ëë€. ê·žë§íŒ NS-3 ìì€í ìŽ ì²ëŠ¬
ë¹ì ìê² ìŽë €ìŽ ë¶ë¶. 첫 ë²ì§žì ëëšžì§ ì€ NS-3 ì€í¬ëŠœíž, 첫 ë²ì§ž.cc, ê·žë¥
ê·ž :
ì뮬ë ìŽí°::íꎎ();
0ê° ëì;
}
ìžì ë€ ê³µì í맀ì ìž ì ì, ì뮬ë ìŽí° ìì§ ì€ì§?
NS-3 ë¶ì°ì ìŽë²€íž(DE) ì뮬ë ìŽí°ì ëë€. ìŽë¬í ì뮬ë ìŽí°ììë ê° ìŽë²€ížê° ì°ê²°ë©ëë€.
ì€í ìê°ê³Œ íšê» ì뮬ë ìŽì ìŽ ì§íë©ëë€.
ì뮬ë ìŽì ìê°ì ìì. ìŽë²€ížë¡ ìžíŽ í¥í ìŽë²€ížê° ììœë ì ììµëë€(ì:
íìŽëšžë ë€ì ê°ê²©ìì ë§ë£ëëë¡ ì첎 ìŒì ì ë³ê²œí ì ììµëë€).
ìŽêž° ìŽë²€ížë ìŒë°ì ìŒë¡ ê° ê°ì²Žì ìíŽ ížëŠ¬ê±°ë©ëë€. ì륌 ë€ìŽ IPv6ì ëŒì°í°ë¥Œ ììœí©ëë€.
êŽê³ , Neighbor Solicitations ë±, Applicationì 첫 ë²ì§ž íší·ì ììœí©ëë€.
볎ëŽë ìŽë²€íž ë±
ìŽë²€ížê° ì²ëŠ¬ë ë XNUMXê° ëë íë ìŽìì ìŽë²€ížë¥Œ ìì±í ì ììµëë€. ì뮬ë ìŽì ìŒë¡
ì€íëê³ ìŽë²€ížê° ìë¹ëì§ë§ ë ë§ì ìŽë²€ížê° ìì±ë ìë ìê³ ìì±ëì§ ìì ìë ììµëë€. ê·žë§íŒ
ìŽë²€íž ëêž°ìŽì ë ìŽìì ìŽë²€ížê° ìê±°ë ë€ì곌 ê°ì ê²œì° ì뮬ë ìŽì ìŽ ìëìŒë¡ ì€ì§ë©ëë€.
í¹ë³í ì€ì§ ìŽë²€ížê° ë°ê²¬ëììµëë€. Stop ìŽë²€ížë ë€ìì íµíŽ ìì±ë©ëë€. ì뮬ë ìŽí°::ì ì§
(ì ì§ìê°); êž°ë¥.
ëíì ìž ê²œì°ê° ìëë° ì뮬ë ìŽí°::ì ì§ ì€ëšíêž° ìíŽ ì ëì ìŒë¡ íìíë€.
ì뮬ë ìŽì : ì첎ì ìŒë¡ ì§ìëë ìŽë²€ížê° ìì ë. ì첎 ì ì§(ëë ë°ë³µ) ìŽë²€íž
íì ìŒì ì ì¬ì¡°ì íë ìŽë²€ížì ëë€. 결곌ì ìŒë¡ ê·žë€ì íì ìŽë²€ížë¥Œ ì ì§í©ëë€.
ëêž°ìŽìŽ ë¹ìŽ ìì§ ììµëë€.
ë°ë³µ ìŽë²€ížë¥Œ í¬íšíë ë§ì íë¡í ìœê³Œ 몚ëìŽ ììµëë€. ì:
· FlowMonitor - ìì€ë íší·ì 죌Ʞì ìŒë¡ íìž
· RIPng - ëŒì°í í ìŽëž ì ë°ìŽížì 죌Ʞì ìž ëžë¡ëìºì€íž
· ë±.
ìŽ ê²œì°, ì뮬ë ìŽí°::ì ì§ ì뮬ë ìŽì ì ì ìì ìŒë¡ ì€ì§íë ë° íìí©ëë€. ~ ìì
ì¶ê°ë¡ ìžì NS-3 ì뮬ë ìŽì 몚ëì ììŒë©°, ì€ìê° ì뮬ë ìŽí° ì ì§íë ë° ì¬ì©ë©ëë€.
êž°ê³ ìê³ì ì ë ¬ë ì뮬ë ìŽì ìê³ ì뮬ë ìŽí°::ì ì§ ì€ì§íë ë° íìí©ëë€
곌ì .
ììµìì ë§ì ì뮬ë ìŽì íë¡ê·žëšì ëª ìì ìŒë¡ ížì¶íì§ ììµëë€. ì뮬ë ìŽí°::ì ì§,
ìŽë²€íž ëêž°ìŽì ìëìŒë¡ ìŽë²€ížê° ë¶ì¡±íêž° ë묞ì ëë€. ê·žë¬ë ìŽë¬í íë¡ê·žëšì
ì íë ë°ì ì뮬ë ìŽí°::ì ì§. ì륌 ë€ìŽ ë€ì ì¶ê° 묞ì
첫 ë²ì§ž ìì íë¡ê·žëšì 11ìŽì ëª ìì ìŒë¡ ì€ì§íëë¡ ììœí©ëë€.
+ ì뮬ë ìŽí°::ì ì§(ìŽ(11.0));
ì뮬ë ìŽí°::ì€í();
ì뮬ë ìŽí°::íꎎ();
0ê° ëì;
}
ìì ëŽì©ì ì€ì ë¡ ìŽ íë¡ê·žëšì ëìì ë³ê²œíì§ ììµëë€.
ì뮬ë ìŽì ì 10ìŽ íì ìì°ì€ëœê² ì¢ ë£ë©ëë€. íì§ë§ ì ì§ ìê°ì ë³ê²œíë €ë©Ž
ìì ì€ëª ì 11ìŽìì 1ìŽë¡ ì€ì íë©Ž ì뮬ë ìŽì ìŽ
ì¶ë ¥ìŽ íë©Žì ìžìëêž° ì ì ì€ì§í©ëë€(ì¶ë ¥ì ìœ 2 ìê°ì ë°ìíêž° ë묞ì ëë€.
ì뮬ë ìŽì ìê° ìŽ).
ì ííë ê²ìŽ ì€ìí©ëë€ ì뮬ë ìŽí°::ì ì§ ì ì ë¶ëŠ ì뮬ë ìŽí°::ì€í; ê·žë ì§ ììŒë©Ž,
ì뮬ë ìŽí°::ì€í ì€ì§ë¥Œ ì€ííêž° ìíŽ ë©ìž íë¡ê·žëšìŒë¡ ì ìŽë¥Œ ë°ííì§ ìì ì ììµëë€!
걎묌 ëì ì€í¬ëŠœíž
ì°ëŠ¬ë ê°ëší ì€í¬ëŠœížë¥Œ ìì±íë ê²ì ìœê² ë§ë€ììµëë€. ë¹ì ìŽíŽìŒ í ìŒì ë¹ì ì ëšìŽ ëšëŠ¬ë ê²ì ëë€
ì€í¬ëŠœížë¥Œ ì€í¬ëì¹ ëë í 늬ì ë£ê³ Waf륌 ì€ííë©Ž ìëìŒë¡ ë¹ëë©ëë€.
íŽ ë³Žì. ë³µì¬ ìì /íí 늬ìŒ/first.cc ë¡ í íŽë€ ë³ê²œ í ëë í 늬
ìµìì ëë í ëŠ¬ë¡ ëìê°ëë€.
$cd ../ ..
$ cp ì/íí 늬ìŒ/first.cc ì€í¬ëì¹/myfirst.cc
ìŽì waf륌 ì¬ì©íì¬ ì²« ë²ì§ž ìì ì€í¬ëŠœížë¥Œ ë¹ëí©ëë€.
$ ./ìí
ë€ìì ë³Žê³ íë ë©ìì§ê° íìëìŽìŒ í©ëë€. ëŽ ì²« ë²ì§ž ìì ê° ì±ê³µì ìŒë¡ ë¹ëëììµëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
[614/708] cxx: ì€í¬ëì¹/myfirst.cc -> ë¹ë/ëë²ê·ž/scratch/myfirst_3.o
[706/708] cxx_link: ë¹ë/ëë²ê·ž/ì€í¬ëì¹/myfirst_3.o -> ë¹ë/ëë²ê·ž/ì€í¬ëì¹/myfirst
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(2.357ìŽ).
ìŽì ìì 륌 ì€íí ì ììµëë€(ì€í¬ëì¹ ëë í 늬ì íë¡ê·žëšì ë¹ëíë 겜ì°
ì€í¬ëì¹ ëë í 늬ìì ì€ííŽìŒ íš):
$ ./waf --ì€í¬ëì¹/myfirst ì€í
ëª ê°ì§ ì¶ë ¥ìŽ íìë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.418ìŽ).
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
1024ìì 10.1.1.1ë°ìŽíž ìì ëš
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
ì¬êž°ìì ë¹ë ìì€í ìŽ íìŒìŽ ë¹ëëìëì§ íìžíê³
ê·žë° ë€ì ì€íí©ëë€. ììœ íŽëŒìŽìžížì ë¡ê¹ êµ¬ì± ììê° ì ì¡ëììì ëíëŽë ê²ì 볌 ì ììµëë€.
1024ì Echo ìë²ì íëì 10.1.1.2ë°ìŽíž íší·. ë¡ê¹ êµ¬ì± ììë íìë©ëë€.
ììœ ìë²ìì 1024ìì 10.1.1.1ë°ìŽížë¥Œ ìì íë€ê³ ë§í©ëë€. ììœ ìë²
ìëìŒë¡ íší·ì ë°í¥íê³ íší·ì ìì í ë°í¥ íŽëŒìŽìžíž ë¡ê·žë¥Œ 볌 ì ììµëë€.
ë€ì ìë²ìì.
NS-3 ì¶ì² ìíž
ìŽì ëª ê°ì§ë¥Œ ì¬ì©íìŒë¯ë¡ NS-3 ëì°ë¯ž ì€ ìŒë¶ë¥Œ ìŽíŽë³Žê³ ì¶ì ì ììµëë€.
íŽë¹ êž°ë¥ì 구ííë ìì€ ìœë. ìµì ìœëë ìì ì°Ÿì볌 ì ììµëë€.
ë€ì ë§í¬ì ì¹ ìë²: http://code.nsnam.org/ns-3-dev. ê±°êž°, ë¹ì ì 볌 ì ììµëë€
Mercurial ììœ íìŽì§ NS-3 ê°ë° ížëŠ¬.
íìŽì§ ìëšì ì¬ë¬ ë§í¬ê° íìë©ëë€.
ììœ | ìŒížë¡ê·ž | ë³ê²œ ë¡ê·ž | ê·žëí | íê·ž | íìŒ
ê³ìíŽì ë€ìì ì ííììì€. íìŒ ë§í¬. ìŽê²ìŽ ì°ëŠ¬ ëë¶ë¶ì ìµìì ìì€ì ëë€.
ì ì¥ì 볌 ê²ìŽë€:
drwxr-xr-x [ì ]
drwxr-xr-x ë°ìžë© íìŽì¬ íìŒ
drwxr-xr-x 묞ì íìŒ
drwxr-xr-x ìì íìŒ
drwxr-xr-x ns3 íìŒ
drwxr-xr-x ì€í¬ëì¹ íìŒ
drwxr-xr-x src íìŒ
drwxr-xr-x ì ížëŠ¬í° íìŒ
-rw-r--r-- 2009-07-01 12:47 +0200 560 .hgignore íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 1886 .hgtags íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 1276 ìì±ì íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 30961 CHANGES.html íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 17987 ëŒìŽìŒì€ íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 3742 README íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 16171 RELEASE_NOTES íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 6 ë²ì íìŒ | ê°ì í | 죌ìì ë¬ë€
-rwxr-xr-x 2009-07-01 12:47 +0200 88110 waf íìŒ | ê°ì í | 죌ìì ë¬ë€
-rwxr-xr-x 2009-07-01 12:47 +0200 28 waf.bat íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 35395 wscript íìŒ | ê°ì í | 죌ìì ë¬ë€
-rw-r--r-- 2009-07-01 12:47 +0200 7673 wutils.py íìŒ | ê°ì í | 죌ìì ë¬ë€
ìì ì€í¬ëŠœížë ì ìë°° ê·ì¹ì. íŽëŠíë©Ž ì ë¹ì ì 볌 ì
íì ëë í 늬 목ë¡. ì ìë íìŒ ì€ íë ì§ë ìê° íì ëë í 늬ë 첫 ë²ì§ž.cc. ë§ìœì
íŽëŠ 첫 ë²ì§ž.cc ë°©êž íµê³Œí ìœë륌 ì°Ÿì ì ììµëë€.
ìì€ ìœëë ì£Œë¡ SRC ìë°° ê·ì¹ì. ë€ì ì€ íë륌 íµíŽ ìì€ ìœë륌 볌 ì ììµëë€.
ëë í 늬 ìŽëŠì íŽëŠíê±°ë íìŒ ì ì€ë¥žìªœì ë§í¬
ëë í 늬 ìŽëŠ. 륌 íŽëŠíë©Ž SRC ëë í 늬, ë¹ì ì 목ë¡ìŒë¡ ìŽëí©ëë€
ì ì, SRC íì ëë í 늬. ë€ìì íŽëŠíë©Ž core íì ëë í 늬ìì 목ë¡ì ì°Ÿì ì ììµëë€.
íìŒ. (ìŽ êžì ì°ë ìì ìì) ì°Ÿì 첫 ë²ì§ž íìŒì ì€ëš.h. íŽëŠíë©Ž
ì€ëš.h ë§í¬ë¥Œ íŽëŠíë©Ž ìì€ íìŒë¡ ì ì¡ë©ëë€. ì€ëš.h ì ì©í 맀í¬ë¡ê° í¬íšë
ë¹ì ìì ìž ì¡°ê±ŽìŽ ê°ì§ëë©Ž ì€í¬ëŠœížë¥Œ ì¢ ë£í©ëë€.
ìŽ ì¥ìì ì¬ì©í ëì°ë¯žì ìì€ ìœëë ë€ììì ì°Ÿì ì ììµëë€.
src/ìì© íë¡ê·žëš/ëì°ë¯ž ìë°° ê·ì¹ì. ëë í 늬 ížëŠ¬ìì ìì ë¡ê² ì°ë¥Žë©Ž ì»ì ì ììµëë€.
ê±°êž°ì ëí ëë곌 ì€íìŒ NS-3 íë¡ê·žëš.
ì¡°ì
ì¬ì© ì ì, ë¡ê¹ 몚ë
ì°ëŠ¬ë ìŽë¯ž ì ëíŽ ê°ëµí ìŽíŽë³Žììµëë€. NS-3 ëìŽê°ë ëì ë¡ê¹ 몚ë
첫 ë²ì§ž.cc ì€í¬ëŠœíž. ìŽì ììží ìŽíŽë³Žê³ ìŽë€ ì¢ ë¥ì ì¬ì© ì¬ë¡ê° ìëì§ ìŽíŽë³Žê² ìµëë€.
ë¡ê¹ íì ìì€í ì ë€ë£šëë¡ ì€ê³ëììµëë€.
ë¡ê¹ ìŽíŽë³Žêž°
ë§ì ëí ìì€í ì ìŒì¢ ì ë©ìì§ ë¡ê¹ êž°ë¥ì ì§ìíë©° NS-3 ìëë€
ììž. 겜ì°ì ë°ëŒ ì€ë¥ ë©ìì§ë§ "ìŽìì ìœì"ì êž°ë¡ë©ëë€.
ìŒë°ì ìŒë¡ íì€ ì€ë¥ Unix êž°ë° ìì€í ìì). ë€ë¥ž ìì€í ììë ê²œê³ ë©ìì§ê°
ë ììží ì 볎 ë©ìì§ë¥Œ ì¶ë ¥í©ëë€. 겜ì°ì ë°ëŒ ë¡ê¹ êž°ë¥
ì¶ë ¥ì ë¹ ë¥Žê² íëŠ¬ê² ë§ë€ ì ìë ëë²ê·ž ë©ìì§ë¥Œ ì¶ë ¥íë ë° ì¬ì©ë©ëë€.
NS-3 ë ìŽë¬í 몚ë ììž ìì€ìŽ ì ì©íë€ë 견íŽë¥Œ ê°ì§ê³ ììŒë©°
ë©ìì§ ë¡ê¹ ì ëí ì í ê°ë¥í ë€ëšê³ ì ê·Œ ë°©ì. ë¡ê¹ ì ìì í ë¹íì±íí ì ììµëë€.
êµ¬ì± ììë³ë¡ íì±íëê±°ë ì ìì ìŒë¡ íì±íë©ëë€. ì í ê°ë¥í êž°ë¥ì ì ê³µí©ëë€.
ììží ìì€. ê·žë§íŒ NS-3 log 몚ëì ê°ëšíê³ ìëì ìŒë¡ ì¬ì©íêž° ì¬ìŽ êž°ë¥ì ì ê³µí©ëë€.
ì뮬ë ìŽì ìì ì ì©í ì 볎륌 ì»ë ë°©ë².
ì°ëŠ¬ë ë²ì© ë©ì»€ëìŠ --- ì¶ì ---ì ì ê³µíë€ë ê²ì ìŽíŽíŽìŒ í©ëë€.
ì뮬ë ìŽì ì¶ë ¥ì ì ížëë ë°ìŽí°ë¥Œ 몚ëžìì ê°ì žìµëë€(ì°žì¡°:
ì¶ì ìì€í ì ëí ììží ëŽì©ì ì¶ì ìì€í ì¬ì© íí ëŠ¬ìŒ ì¹ì ì°žì¡°).
ëë²ê¹ ì 볎, ê²œê³ , ì€ë¥ ë©ìì§ ëë 몚ë
ì€í¬ëŠœížë 몚ëžìì ë¹ ë¥ž ë©ìì§ë¥Œ ìœê² ì»ê³ ì¶ì ë.
íì¬ XNUMXê° ë 벚ì ë¡ê·ž ë©ìì§ê° ì ìëìŽ ììµëë€.
ìì€í .
· LOG_ERROR --- ë¡ê·ž ì€ë¥ ë©ìì§(ì°ê²°ë 맀í¬ë¡: NS_LOG_ERROR);
· LOG_WARN --- ë¡ê·ž ê²œê³ ë©ìì§(ì°ê²°ë 맀í¬ë¡: NS_LOG_WARN);
· LOG_DEBUG --- ë¹êµì ë묞 ìì ëë²ê¹ ë©ìì§ë¥Œ êž°ë¡í©ëë€(êŽë š 맀í¬ë¡:
NS_LOG_DEBUG);
· LOG_INFO --- íë¡ê·žëš ì§íì ëí ë¡ê·ž ì 볎 ë©ìì§(êŽë š 맀í¬ë¡:
NS_LOG_INFO);
· LOG_FUNCTION --- ížì¶ë ê° íšì륌 ì€ëª íë ë©ìì§ë¥Œ êž°ë¡í©ëë€(XNUMXê°ì êŽë š 맀í¬ë¡:
구ì±ì íšìì ì¬ì©ëë NS_LOG_FUNCTION ë° ì ì ì ì¬ì©ëë NS_LOG_FUNCTION_NOARGS
êž°ë¥);
· LOG_LOGIC -- íšì ëŽì ë ŒëŠ¬ì íëŠì ì€ëª íë ë¡ê·ž ë©ìì§(êŽë š 맀í¬ë¡:
NS_LOG_LOGIC);
· LOG_ALL --- ììì ìžêží 몚ë í목ì êž°ë¡í©ëë€(ì°ê²°ë 맀í¬ë¡ ìì).
ê° LOG_TYPEìë LOG_LEVEL_TYPEë ììµëë€. ìŽ ì íì ì¬ì©íë©Ž 몚ë
ê·žê²ì ìì€ì ëíì¬ ê·ž ìì ìì€. (ìŽë¡ ìžíŽ LOG_ERROR ë°
LOG_LEVEL_ERRORì LOG_ALL ë° LOG_LEVEL_ALLì êž°ë¥ì ìŒë¡ ëìŒí©ëë€.)
ì륌 ë€ìŽ, LOG_INFO륌 íì±ííë©Ž NS_LOG_INFO 맀í¬ë¡ìì ì ê³µíë ë©ìì§ë§ íì±íë©ëë€.
LOG_LEVEL_INFO륌 íì±ííë©Ž NS_LOG_DEBUG, NS_LOG_WARNìì ì ê³µíë ë©ìì§ë íì±íë©ëë€.
ë° NS_LOG_ERROR 맀í¬ë¡.
ëí 조걎ì êŽê³ììŽ íì íìëë 묎조걎 ë¡ê¹ 맀í¬ë¡ë¥Œ ì ê³µí©ëë€.
ë¡ê¹ ìì€ ëë êµ¬ì± ìì ì í.
· NS_LOG_UNCOND -- ì°ê²°ë ë©ìì§ë¥Œ 묎조걎ì ìŒë¡ êž°ë¡í©ëë€(ì°ê²°ë ë¡ê·ž ìì€ ìì).
ê° ë 벚ì ê°ë³ì ìŒë¡ ëë ëì íì¬ ìì²í ì ììµëë€. ë¡ê¹ ì ë€ìì ì¬ì©íì¬ ì€ì í ì ììµëë€.
ì í겜 ë³ì(NS_LOG) ëë ë¡ê¹ ìì€í íšì ížì¶. 볞 ë°ì ê°ìŽ
íí 늬ìŒì ìë¶ë¶ìì ë¡ê¹ ìì€í ìë Doxygen 묞ìê° ììŒë©° ìŽì
ë¡ê¹ 몚ë 묞ì륌 ì ë íì§ ìì ê²œì° ì ë í ì¢ì ìê°ì ëë€.
ìŽì ì€ëª ì륌 ììží ìœììŒë¯ë¡ íŽë¹ ì§ì ì€ ìŒë¶ë¥Œ ì¬ì©íê² ìµëë€.
í¥ë¯žë¡ìŽ ì 볎륌 ì»êž° ìíŽ ì€í¬ëì¹/myfirst.cc ë¹ì ìŽ ê°ì§ê³ ìë ìì ì€í¬ëŠœíž
ìŽë¯ž ì§ìŽì¡ìµëë€.
ì¬ì© ë¡ê¹
NS_LOG í겜 ë³ì륌 ì¬ì©íì¬ ë ë§ì ë¡ê¹ ì ì€ì íŽ ë³Žê² ìµëë€.
ë°©í¥ì ì¡ê³ ìŽì ì íë ê²ì²ëŒ ë§ì§ë§ ì€í¬ëŠœížë¥Œ ì€íí©ëë€.
$ ./waf --ì€í¬ëì¹/myfirst ì€í
ìŽì ì¹ìí 첫 ë²ì§ž ì¶ë ¥ìŽ íìëìŽìŒ í©ëë€. NS-3 ìì íë¡ê·žëš
$ Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.413ìŽ).
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
1024ìì 10.1.1.1ë°ìŽíž ìì ëš
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
ìì 볎ìŽë "Sent" ë° "Received" ë©ìì§ê° ì€ì ë¡ êž°ë¡ëê³ ìë ê²ìŒë¡ ëíë¬ìµëë€.
ì ë©ìì§ UdpEchoClientìì© íë¡ê·žëš and UdpEchoServerìì© íë¡ê·žëš. ì°ëŠ¬ë 묌ìŽë³Œ ì ììµëë€
ì륌 ë€ìŽ ë¡ê¹ ìì€ì ì€ì íì¬ ë ë§ì ì 볎륌 ìžìíêž° ìí íŽëŒìŽìžíž ì í늬ìŒìŽì
NS_LOG í겜 ë³ì륌 íµíŽ.
ì¬êž°ìë¶í°ë ë€ìì ì¬ì©íë shì ê°ì ì žì ì¬ì©íë€ê³ ê°ì íê² ìµëë€.
"VARIABLE=value" 구묞. cshì ê°ì ìì ì¬ì©íë ê²œì° ë€ìì ìííŽìŒ í©ëë€.
ëŽ ìì 륌 íŽë¹ ì žì íìí "setenv VARIABLE value" 구묞ìŒë¡ ë³íí©ëë€.
íì¬ UDP ììœ íŽëŒìŽìžíž ì í늬ìŒìŽì ì ë€ì ìœë íì ìëµíê³ ììµëë€.
ì€í¬ëì¹/myfirst.cc,
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
ìŽ ìœë ì€ì LOG_LEVEL_INFO ë¡ê¹ ìì€. ë¡ê¹ ì íµê³Œí ë
ë 벚 íëê·ž, ì°ëŠ¬ë ì€ì ë¡ ì£ŒìŽì§ ë 벚곌 몚ë íì ë 벚ì íì±íí©ëë€. ìŽ ê²œì°,
ì°ëŠ¬ë íì±ííìµëë€ NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN and NS_LOG_ERROR. ì°ëŠ¬ë ìŠê°ìí¬ ì ììµëë€
ë¡ê¹ ìì€ì ë³ê²œíê³ ì€í¬ëŠœížë¥Œ ë³ê²œíê³ ë€ì 컎íìŒíì§ ìê³ ë ë ë§ì ì 볎륌 ì»ì ì ììµëë€.
ë€ì곌 ê°ìŽ NS_LOG í겜 ë³ì륌 ì€ì í©ëë€.
$ ëŽë³ŽëŽêž° NS_LOG=UdpEchoClientApplication=level_all
ìŽê²ì ì í겜 ë³ì륌 ì€ì í©ëë€ NS_LOG 묞ììŽì,
UdpEchoClientApplication=level_all
í ë¹ì ìŒìªœì ì€ì íë €ë ë¡ê¹ êµ¬ì± ììì ìŽëŠì ëë€.
ì€ë¥žìªœì ì¬ì©íë €ë íëê·žì ëë€. ìŽ ê²œì° ì ìì ìŒê² ìµëë€.
ìì© íë¡ê·žëšì 몚ë ëë²ê¹ ìì€. NS_LOGê° ì€ì ë ìíìì ì€í¬ëŠœížë¥Œ ì€ííë©Ž
ìŽë ê², NS-3 ë¡ê¹ ìì€í ìŽ ë³ê²œ ì¬íì ì ííê³ ë€ììŽ íìëìŽìŒ í©ëë€.
ì¶ë ¥ :
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.404ìŽ).
UdpEchoClientìì© íë¡ê·žëš:UdpEchoClient()
UdpEchoClientìì© íë¡ê·žëš:ë°ìŽí° í¬êž° ì€ì (1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientìì© íë¡ê·žëš:볎ëŽêž°()
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
1024ìì 10.1.1.1ë°ìŽíž ìì ëš
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientìì© íë¡ê·žëš:~UdpEchoClient()
ì í늬ìŒìŽì ìì ì ê³µíë ì¶ê° ëë²ê·ž ì 볎ë NS_LOG_FUNCTIONìì ê°ì žìµëë€.
ìì€. ì€í¬ëŠœíž ì€ì ìì© íë¡ê·žëšì íšìê° ížì¶ë ëë§ë€ íìë©ëë€.
ì€í. ìŒë°ì ìŒë¡ ë©€ë² íšììì (ì ìŽë) NS_LOG_FUNCTION(this)륌 ì¬ì©íë ê²ì
ì°ì ì. ì ì íšìììë§ NS_LOG_FUNCTION_NOARGS()륌 ì¬ì©íììì€. ê·žë¬ë
ìë ì구 ì¬íìŽ ììµëë€. NS-3 몚ëžìŽ í¹ì í¹ì í목ì ì§ìíŽìŒ íë ìì€í
ë¡ê¹ êž°ë¥. êž°ë¡ëë ì 볎ì ìì ëí ê²°ì ì
ê°ë³ ëªšëž ê°ë°ì. ììœ ì í늬ìŒìŽì ì ê²œì° ìë¹í ìì ë¡ê·ž
ì¶ë ¥ìŽ ê°ë¥í©ëë€.
ìŽì ì í늬ìŒìŽì ì ëí íšì ížì¶ ë¡ê·žë¥Œ 볌 ì ììµëë€. ë§ìœ ëëŒë©Ž
ììží 볎멎 묞ììŽ ì¬ìŽì íëì ìœë¡ ìŽ ììì ì ì ììµëë€. UdpEchoClientìì© íë¡ê·žëš
ë° C++ ë²ì ì°ì°ìê° ììëë ë©ìë ìŽëŠ(::). ìŽê²ì
ìëì .
ìŽëŠì ì€ì ë¡ íŽëì€ ìŽëŠìŽ ìëëŒ ë¡ê¹ êµ¬ì± ìì ìŽëŠì ëë€. ìì ë
ìì€ íìŒê³Œ íŽëì€ ì¬ìŽì ìŒëìŒ ëì, ìŽê²ì ìŒë°ì ìŒë¡
íŽëì€ ìŽëŠìŽì§ë§ ì€ì ë¡ë íŽëì€ ìŽëŠìŽ ìëëŒë ì ì ìŽíŽíŽìŒ í©ëë€.
ìŽì€ ìœë¡ ëì ëšìŒ ìœë¡ ì ì¬ì©íì¬ ìëì ìŒë¡ 믞ë¬íê²
ë¡ê¹ êµ¬ì± ìì ìŽëŠê³Œ íŽëì€ ìŽëŠì ê°ë ì ìŒë¡ 구ë¶í©ëë€.
겜ì°ì ë°ëŒ ì€ì ë¡ ìŽë€ ë°©ë²ì ê²°ì íêž° ìŽë €ìž ì ìììŽ ë°íì¡ìµëë€.
ë¡ê·ž ë©ìì§ë¥Œ ìì±í©ëë€. ìì í ì€ížë¥Œ 볎멎 묞ììŽìŽ ìŽëì ìëì§ ê¶êží ì ììµëë€.
"ìì 1024 ë°ìŽíž ì 10.1.1.2"ìì ìµëë€. OR'ingìŒë¡ ìŽ ë¬žì 륌 íŽê²°í ì ììµëë€.
ì ëì¬_íí¬ ìì€ìŒë¡ NS_LOG í겜 ë³ì. ë€ìì ìëíììì€.
$ ëŽë³ŽëŽêž° 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
ORì ëíëŽë ë° ì¬ì©íë ìì§ ë§ë ë묞ì ë°ìŽíê° íìí©ëë€.
ìì ì Unix íìŽí 컀ë¥í°ìŽêž°ë í©ëë€.
ìŽì ì€í¬ëŠœížë¥Œ ì€ííë©Ž ë¡ê¹ ìì€í ìŽ ëªšë
ì§ì ë ë¡ê·ž êµ¬ì± ììì ë©ìì§ìë êµ¬ì± ìì ìŽëŠìŽ ì ëì¬ë¡ ì¶ê°ë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.417ìŽ).
UdpEchoClientìì© íë¡ê·žëš:UdpEchoClient()
UdpEchoClientìì© íë¡ê·žëš:ë°ìŽí° í¬êž° ì€ì (1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientìì© íë¡ê·žëš:볎ëŽêž°()
UdpEchoClientApplication:Send(): 1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
1024ìì 10.1.1.1ë°ìŽíž ìì ëš
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): 1024ìì 10.1.1.2ë°ìŽížë¥Œ ë°ììµëë€.
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientìì© íë¡ê·žëš:~UdpEchoClient()
ìŽì UDP ììœ íŽëŒìŽìžíž ì í늬ìŒìŽì ìì ì€ë 몚ë ë©ìì§ê°
ìŽì ê°ìŽ ìë³ë©ëë€. "Received 1024 bytes from 10.1.1.2" ë©ìì§ê° ìŽì ëª ííê² íìë©ëë€.
ììœ íŽëŒìŽìžíž ì í늬ìŒìŽì ìì ì€ë ê²ìŒë¡ ìë³ë©ëë€. ëëšžì§ ë©ìì§ë
UDP ììœ ìë² ì í늬ìŒìŽì ìì ì€ë ê²ì ëë€. ë€ìì ì ë ¥íì¬ íŽë¹ êµ¬ì± ìì륌 íì±íí ì ììµëë€.
NS_LOG í겜 ë³ììì ìœë¡ ìŒë¡ 구ë¶ë êµ¬ì± ìì 목ë¡ì ëë€.
$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
UdpEchoServerApplication=level_all|prefix_func'
ê²œê³ : ë€ì ì€ ë°ê¿ì ì ê±°íŽìŒ í©ëë€. : ìì ìì í ì€ížìì
묞ì íì ì§ì 목ì ìŒë¡ë§ ì¡Žì¬í©ëë€.
ìŽì ì€í¬ëŠœížë¥Œ ì€ííë©Ž ë ììœ íŽëŒìŽìžížì 몚ë ë¡ê·ž ë©ìì§ê° íìë©ëë€.
ê·žëŠ¬ê³ ìë² ì í늬ìŒìŽì . ìŽê²ìŽ 묞ì 륌 ëë²ê¹ íë ë° ë§€ì° ì ì©í ì ììì ì ì ììµëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.406ìŽ).
UdpEchoServerìì© íë¡ê·žëš:UdpEchoServer()
UdpEchoClientìì© íë¡ê·žëš:UdpEchoClient()
UdpEchoClientìì© íë¡ê·žëš:ë°ìŽí° í¬êž° ì€ì (1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientìì© íë¡ê·žëš:볎ëŽêž°()
UdpEchoClientApplication:Send(): 1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
UdpEchoServerApplication:HandleRead(): 1024ìì 10.1.1.1ë°ìŽížë¥Œ ë°ììµëë€.
UdpEchoServerApplication:HandleRead(): ììœ íší·
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): 1024ìì 10.1.1.2ë°ìŽížë¥Œ ë°ììµëë€.
UdpEchoServerApplication:StopApplication()
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientìì© íë¡ê·žëš:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
ëí ëëë¡ ë¡ê·ž ë©ìì§ê° ìì±ëë ì뮬ë ìŽì ìê°ì 볌 ì ìë ê²ìŽ ì ì©í©ëë€.
ìì±ë©ëë€. prefix_time ë¹ížìì ORì ìííì¬ ìŽë¥Œ ìíí ì ììµëë€.
$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:
UdpEchoServerApplication=level_all|prefix_func|prefix_time'
ë€ì ë§íì§ë§ ìì ì€ ë°ê¿ì ì ê±°íŽìŒ í©ëë€. ì§êž ì€í¬ëŠœížë¥Œ ì€ííë©Ž
ë€ì ì¶ë ¥ì ì°žì¡°íììì€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.418ìŽ).
0s UdpEchoServerìì© íë¡ê·žëš:UdpEchoServer()
0s UdpEchoClientìì© íë¡ê·žëš:UdpEchoClient()
0s UdpEchoClientìì© íë¡ê·žëš:ë°ìŽí° í¬êž° ì€ì (1024)
1ìŽ UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2ìŽ UdpEchoClientìì© íë¡ê·žëš:볎ëŽêž°()
2s UdpEchoClientApplication:Send(): 1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
2.00369s UdpEchoServerApplication:HandleRead(): 1024ìì 10.1.1.1ë°ìŽíž ìì ëš
2.00369s UdpEchoServerApplication:HandleRead(): ììœ íší·
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): 1024ìì 10.1.1.2ë°ìŽížë¥Œ ìì íìµëë€.
10ìŽ UdpEchoServerApplication:StopApplication()
10ìŽ UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientìì© íë¡ê·žëš:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
ì뮬ë ìŽì ìê°ì UdpEchoServerì ìì±ìê° ížì¶ëììì ì ì ììµëë€.
0ìŽ. ìŽê²ì ì뮬ë ìŽì ìŽ ììëêž° ì ì ì€ì ë¡ ë°ìíì§ë§ ìê°ì
XNUMXìŽë¡ íìë©ëë€. UdpEchoClient ìì±ì ë©ìì§ë ë§ì°¬ê°ì§ì ëë€.
ëŠ¬ìœ ì€í¬ëì¹/first.cc ì€í¬ëŠœížë XNUMXìŽì ììœ ìë² ì í늬ìŒìŽì ì ììíìµëë€.
ì뮬ë ìŽì ì. ìŽì ìì© íë¡ê·žëš ìì ìë²ì ë°©ë²ì,
ì€ì ë¡ë XNUMXìŽì ížì¶ë©ëë€. echo íŽëŒìŽìžíž ì í늬ìŒìŽì ìŽ
ì€í¬ëŠœížìì ìì²í ëë¡ XNUMXìŽì ì뮬ë ìŽì ìê°ì ììëììµëë€.
ìŽì ì뮬ë ìŽì ì§í ìí©ì ë€ììì íìží ì ììµëë€. ìŒì ì ì¡ ì í
ížì¶íë íŽëŒìŽìžíž ì ì¡ ë¶í° ížë€ ìœêž° ììœ ìë² ì í늬ìŒìŽì ì ìœë°±. ë©ëªš
í¬ìžíž-í¬-í¬ìžíž ë§í¬ë¥Œ íµíŽ ì ì¡ëë íší·ì 겜곌 ìê°ì 3.69ì ëë€.
ë°ëŠ¬ìŽ. ììœ ìë²ê° ììœëììì ì늬ë ë©ìì§ë¥Œ êž°ë¡íë ê²ì 볌 ì ììµëë€.
íší·ì ìì í ë€ì ë€ë¥ž ì±ë ì§ì° íì ììœ íŽëŒìŽìžížê° íší·ì ìì íë ê²ì 볌 ì ììµëë€.
ììœ íší· ížë€ ìœêž° ë°©ë².
ìŽ ì뮬ë ìŽì ìë ë¹ì ìŽ ìì§ ëª»íë ë§ì ìŒë€ìŽ ìšìŽ ììµëë€.
볎ë ê²ë. 몚ë íë¡ìžì€ë¥Œ ìŒë©Ž ì 첎 íë¡ìžì€ë¥Œ ë§€ì° ìœê² ìíí ì ììµëë€.
ìì€í ì ë¡ê¹ êµ¬ì± ìì. ì€ì íŽ ë³Žìžì NS_LOG ë€ì곌 ê°ì ë³ì,
$ ëŽë³ŽëŽêž° 'NS_LOG=*=level_all|prefix_func|prefix_time'
ìì ë³íë ë¡ê¹ êµ¬ì± ìì ììŒë칎ëì ëë€. ìŽë ê² íë©Ž 몚ë
ì뮬ë ìŽì ì ì¬ì©ë 몚ë êµ¬ì± ìì륌 ë¡ê·žìží©ëë€. ëë ì¶ë ¥ì ì¬ííì§ ììµëë€
ì¬êž°(ìŽ êžì ì°ë ìì ìì ëšìŒ íší· ììœì ëíŽ 1265ì€ì ì¶ë ¥ìŽ ìì±ëš)
ìŽ ì 볎륌 íìŒë¡ 늬ëë ì íê³ ìŠê²šì°Ÿë
ìíë ê²œì° ížì§ì,
$ ./waf --ì€í¬ëì¹/myfirst ì€í > log.out 2>&1
ì ë ê°ìžì ìŒë¡ ë§€ì° ì¥í©í ë¡ê¹ ë²ì ì ì¬ì©í©ëë€.
묞ì ê° ìê³ ìŽëìì 묞ì ê° ë°ìíëì§ ì í ëªšëŠ ëë€. ì ì§í ìí©ì ë°ëŒê° ì ììµëë€.
ì€ëšì ì ì€ì íì§ ìê³ ëë²ê±°ìì ìœë륌 ëšê³ë³ë¡ ì€ííì§ ìê³ ë ë§€ì° ìœê² ìœë륌 ìì±í ì ììµëë€.
ëŽê° ê°ì¥ ì¢ìíë ížì§êž°ìì ì¶ë ¥ì ížì§íê³ ëŽê° êž°ëíë ê²ì ê²ìí ì ììµëë€.
ê·žëŠ¬ê³ ëŽê° ììíì§ ëª»í ìŒìŽ ìŒìŽëë ê²ì ëŽ ëë€. 묎ììžì§ì ëí ìŒë°ì ìž ìê°ìŽ ìì ë
묞ì ê° ë°ìíë©Ž 묞ì 륌 ìžë°íê² ì¡°ì¬íêž° ìíŽ ëë²ê±°ë¡ ì íí©ëë€.
ìŽë¬í ì¢ ë¥ì ì¶ë ¥ì ì€í¬ëŠœížê° ìŽë€ ìì ì ìì í ìíí ë í¹í ì ì©í ì ììµëë€.
ìêž°ì¹ ìì. ëë²ê±°ë¥Œ ì¬ì©íì¬ ì€í ííë ê²œì° ìêž°ì¹ ìì ížì륌 ëì¹ ì ììµëë€.
ìì í. ìíì êž°ë¡íë©Ž ë¹ ë¥Žê² ë³Œ ì ììµëë€.
ì²šê° ë¡ê¹ ì your ìíž
ë€ìì íµíŽ ë¡ê·ž êµ¬ì± ìì륌 ížì¶íì¬ ì뮬ë ìŽì ì ì ë¡ê¹ ì ì¶ê°í ì ììµëë€.
ì¬ë¬ 맀í¬ë¡. ìì ê·žë ê² í©ìë€ myfirst.cc ì°ëŠ¬ê° ê°ì§ê³ ìë ì€í¬ëŠœíž í íŽë€ ëë í 늬.
íŽë¹ ì€í¬ëŠœížìì ë¡ê¹ êµ¬ì± ìì륌 ì ìíìì êž°ìµíììì€.
NS_LOG_COMPONENT_DEFINE("FirstScriptExample");
ìŽì ë€ìì ì€ì íì¬ ìŽ êµ¬ì± ììì ëí 몚ë ë¡ê¹ ì íì±íí ì ììì ìê³ ììµëë€.
NS_LOG ë€ìí ìì€ì í겜 ë³ì. ê³ìíŽì ë¡ê¹ ì ì¶ê°íŽ ë³Žê² ìµëë€.
ë볞. ì 볎 ìì€ ë¡ê·ž ë©ìì§ë¥Œ ì¶ê°íë ë° ì¬ì©ëë 맀í¬ë¡ë ë€ì곌 ê°ìµëë€. NS_LOG_INFO. ê°êž°
ë žë ìì±ì ììíêž° ì§ì ì ì€í¬ëŠœížë¥Œ ì¶ê°íììì€.
"í íŽë¡ì§ ìì±"ì ëë€. ìŽê²ì ìŽ ìœë ì€ëí«ììì ê°ìŽ ìíë©ëë€.
ìœëë€ ì€í¬ëì¹/myfirst.cc ì¢ìíë ížì§êž°ìì ì€ì ì¶ê°íììì€.
NS_LOG_INFO("í íŽë¡ì§ ìì±");
ì€ ë°ë¡ ì,
NodeContainer ë žë;
ë žë.ë§ë€êž°(2);
ìŽì waf륌 ì¬ì©íì¬ ì€í¬ëŠœížë¥Œ ë¹ëíê³ NS_LOG í ë ížë¥Œ ëë ë³ì
ìŽì ì íì±íí ë¡ê¹ :
$ ./ìí
$ ëŽë³ŽëŽêž° NS_LOG=
ìŽì ì€í¬ëŠœížë¥Œ ì€ííë©Ž
$ ./waf --ì€í¬ëì¹/myfirst ì€í
ë¹ì ê²ì ëë€ ì§ì ì°ê²°ë ë¡ê¹ êµ¬ì± ìì ìŽí ì ë©ìì§ë¥Œ ì°žì¡°íììì€.
(FirstScriptì)ìŽ íì±íëì§ ìììµëë€. ë©ìì§ë¥Œ ë³Žë €ë©Ž ë€ìì ìííŽìŒ í©ëë€.
~ì ê°ë¥íê²íë€ FirstScriptì ìŽìì ìì€ì ê°ì§ ë¡ê¹ êµ¬ì± ìì
NS_LOG_INFO. ìŽ í¹ì ìì€ì ë¡ê¹ ë§ ë³Žê³ ì¶ë€ë©Ž íì±íí ì ììµëë€.
ìŒë¡,
$ export NS_LOG=FirstScriptExample=ì 볎
ìŽì ì€í¬ëŠœížë¥Œ ì€ííë©Ž ìë¡ìŽ "í íŽë¡ì§ ìì± ì€" ë¡ê·ž ë©ìì§ê° íìë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.404ìŽ).
í íŽë¡ì§ ìì±
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
1024ìì 10.1.1.1ë°ìŽíž ìì ëš
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
ì¬ì© ëª ë ¹ ëŒìž ìžì
ì¬ì ì íë§ Attributes
ë°©ë²ì ë³ê²œí ì ìë ë ë€ë¥ž ë°©ë² NS-3 ì€í¬ëŠœížë ížì§ ììŽ ëìíë©° ë¹ëë ë€ìì íµíŽ ìŽë£šìŽì§ëë€.
ëª ë ¹ ì ìžì. ëª ë ¹ì€ ìžì륌 구묞 ë¶ìíê³
íŽë¹ ìžì륌 êž°ë°ìŒë¡ ë¡ì»¬ ë° ì ì ë³ì륌 ìëìŒë¡ ì€ì í©ëë€.
ëª ë ¹ì€ ìžì ìì€í ì ì¬ì©íë 첫 ë²ì§ž ëšê³ë ëª ë ¹ì€ì ì ìžíë ê²ì ëë€.
íì. ìŽë ë€ì ìœëì ê°ìŽ ë§€ì° ê°ëšíê² ìíë©ëë€(Ʞ볞 íë¡ê·žëšìì).
INT
ë©ìž(int argc, char *argv[])
{
...
컀맚ëëŒìž cmd;
cmd.Parse(argc, argv);
...
}
ìŽ ê°ëší ë ì€ ì€ëí«ì ì€ì ë¡ ê·ž ìì²Žë¡ ë§€ì° ì ì©í©ëë€. ê·žê²ì
NS-3 ì ì ë³ì ë° ìì± ìì€í . ê³ìíŽì ë ì€ì ìœë륌
ì ì, ì€í¬ëì¹/myfirst.cc ìì ë¶ë¶ì ì€í¬ëŠœíž 볞êŽ. ê³ìíŽì ì€í¬ëŠœížë¥Œ ìì±íê³ ì€ííììì€.
ê·žë¬ë ë€ì곌 ê°ì ë°©ë²ìŒë¡ ì€í¬ëŠœížì ëìì ìì²íììì€.
$ ./waf --run "scratch/myfirst --PrintHelp"
ìŽê²ì Wafìê² ì€í¬ëì¹/myfirst ì€í¬ëŠœížë¥Œ ìì±íê³ ëª ë ¹ì€ ìžì륌 ì ë¬í©ëë€.
--PrintHelp ì€í¬ëŠœížì. ìŽë€ íë¡ê·žëšìŽ ìŽë€ íë¡ê·žëšì ê°ì žì€ëì§ ë¶ë¥íë €ë©Ž ë°ìŽíê° íìí©ëë€.
ë Œì. ëª ë ¹ì€ íìë ìŽì --PrintHelp ë Œì곌 ìëµ,
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.413ìŽ).
TcpL4íë¡í ìœ:TcpStateMachine()
CommandLine:HandleArgument(): ížë€ ìžì ìŽëŠ=PrintHelp ê°=
--PrintHelp: ìŽ ëìë§ ë©ìì§ë¥Œ ìžìí©ëë€.
--PrintGroups: 귞룹 목ë¡ì ìžìí©ëë€.
--PrintTypeIds: 몚ë TypeId륌 ìžìí©ëë€.
--PrintGroup=[귞룹]: 귞룹ì 몚ë TypeId륌 ìžìí©ëë€.
--PrintAttributes=[typeid]: typeidì 몚ë ìì±ì ìžìí©ëë€.
--PrintGlobals: ì ì 목ë¡ì ìžìí©ëë€.
ì ì§ì€íì --ìžì ìì± ìµì . ì°ëŠ¬ë ìŽë¯ž ë€ì곌 ê°ìŽ ììíìµëë€. NS-3 ìì±
걞ìŒë©Žì ìì€í 첫 ë²ì§ž.cc ì€í¬ëŠœíž. ì°ëŠ¬ë ë€ì곌 ê°ì ì€ì 볎ììµëë€.
ìœë
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("ì§ì°", StringValue("2ms"));
ê·žëŠ¬ê³ ìžêžíë€ ë°ìŽí° ìë ì€ì ë¡ ìì± ì PointToPointNetì¥ì¹. íì
ëª ë ¹ì€ ìžì íì륌 ì¬ì©íì¬ Attributes ì
PointToPointNetDevice. ëìë§ ëª©ë¡ìë ë€ìì ì ê³µíŽìŒ íë€ê³ ëì ììµëë€. ì í ID. ìŽ
íŽë¹ íŽëì€ì íŽëì€ ìŽëŠì íŽë¹í©ëë€. Attributes ì ì늬ì ìë€. ìŽ ê²œì°
ê·žê²ì ë ê²ìŽë€. ns3::PointToPointNetDevice. ê³ìíŽì ì ë ¥íŽ ë³Žê² ìµëë€.
$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
ìì€í ìì 몚ë í목ì ìžìí©ëë€. Attributes ìŽë¬í ì¢ ë¥ì ë· ì¥ì¹. ì€
Attributes ëìŽë ê²ì 볌 ì ììµëë€.
--ns3::PointToPointNetDevice::DataRate=[32768bps]:
í¬ìžíž í¬ í¬ìžíž ë§í¬ì Ʞ볞 ë°ìŽí° ìë
ë€ìì ìíí ë ì¬ì©ëë Ʞ볞ê°ì ëë€. PointToPointNetì¥ì¹ ì ìì±ë©ëë€
첎ê³. ì°ëŠ¬ë ìŽ êž°ë³žê°ì ìì± ì€ì í¬ìžíží¬í¬ìžížëì°ë¯ž
ìì. ì ëì ì¥ì¹ ë° ì±ëì ëí Ʞ볞ê°ì ë€ì곌 ê°ìŽ ì¬ì©íê² ìµëë€.
ìì SetDeviceìì± ì íì SetChannelìì± ìì ì í myfirst.cc
ì°ëŠ¬ë ì€í¬ëì¹ ëë í 늬ì ììµëë€.
ìŽì ì€í¬ëŠœížë ë€ìì ì ìžíŽìŒ í©ëë€. í¬ìžíží¬í¬ìžížëì°ë¯ž ê·žëŠ¬ê³ ì묎ê²ëíì§ ìžíž ìŽì
ë€ì ìììì ê°ìŽ
...
NodeContainer ë žë;
ë žë.ë§ë€êž°(2);
PointToPointHelper pointToPoint;
NetDeviceContainer ì¥ì¹;
ì¥ì¹ = pointToPoint.Install(ë žë);
...
ê³ìíŽì Wafë¡ ì ì€í¬ëŠœížë¥Œ ë¹ëí©ëë€(./ìí) ëìê°ì ìŒë¶ë¥Œ íì±ííê² ìµëë€.
UDP ììœ ìë² ì í늬ìŒìŽì ìì ë¡ê¹ íê³ ìê° ì ëì¬ë¥Œ ìŒëë€.
$ ëŽë³ŽëŽêž° 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'
ì€í¬ëŠœížë¥Œ ì€ííë©Ž ìŽì ë€ì ì¶ë ¥ìŽ íìë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.405ìŽ).
0s UdpEchoServerìì© íë¡ê·žëš:UdpEchoServer()
1ìŽ UdpEchoServerApplication:StartApplication()
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
2.25732s 1024ìì 10.1.1.1ë°ìŽíž ìì
2.25732s ììœ íší·
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
10ìŽ UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
íší·ìŽ ë°ìí ì뮬ë ìŽì ìê°ì ë§ì§ë§ìŒë¡ 볎ìì ë륌 ìêž°íììì€.
ììœ ìë²ìì ìì í ìê°ì 2.00369ìŽììµëë€.
2.00369s UdpEchoServerApplication:HandleRead(): 1024ìì 10.1.1.1ë°ìŽíž ìì ëš
ìŽì 2.25732ìŽì íší·ì ìì í©ëë€. ìŽê²ì ì°ëŠ¬ê° ë°©êž ëšìŽëšë žêž° ë묞ì ëë€.
ì ë°ìŽí° ìë PointToPointNetì¥ì¹ ìŽë¹ Ʞ볞ê°ìž 32768ë¹ížë¡ ë®ì¶¥ëë€.
ìŽë¹ XNUMXë©ê°ë¹íž.
ì°ëŠ¬ê° ìë¡ìŽ ê²ì ì ê³µíë€ë©Ž ë°ìŽí° ìë ëª ë ¹ì€ì ì¬ì©íì¬ ì뮬ë ìŽì ìë륌 ëìŒ ì ììµëë€.
ë€ì ìë¡. ëìë§ì í¬íšë ê³µìì ë°ëŒ ë€ì곌 ê°ì ë°©ììŒë¡ ìŽ ìì ì ìíí©ëë€.
í목 :
$ ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"
ìŽë ê² íë©Ž ë€ìì Ʞ볞ê°ìŽ ì€ì ë©ëë€. ë°ìŽí° ìë ìì± ë¹ XNUMXë©ê°ë¹ížë¡ ë€ì
ëë²ì§ž. 결곌ì ëëìµëê¹? ì볞ì ì»ìŒë €ë©Ž
ì€í¬ëŠœížì ëìì ëëëŠ¬ë €ë©Ž ì±ëì ë¹ì ìë ì§ì°ì ì€ì íŽìŒ í©ëë€.
ëí. ëª ë ¹ì€ ìì€í ì ë€ìì ìžìíëë¡ ìì²í ì ììµëë€. Attributes ì±ëì
ì°ëŠ¬ê° net ì¥ì¹ì ëíŽ íë ê²ì²ëŒ:
$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"
ì°ëŠ¬ë ë°ê²¬ Delay ìì± ì±ëì ì€ì ì ë€ì곌 ê°ìŽ ì€ì ë©ëë€.
--ns3::PointToPointChannel::ì§ì°=[0ns]:
ì±ëì íµí ì ì¡ ì§ì°
ê·žë° ë€ì ëª ë ¹ì€ ìì€í ì íµíŽ ìŽë¬í Ʞ볞ê°ì 몚ë ì€ì í ì ììµëë€.
$ ./waf --ì€í "ì€í¬ëì¹/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::ì§ì°=2ms"
ìŽ ê²œì° ëª ìì ìŒë¡ ì€ì íì ëì íìŽë°ì 복구í©ëë€. ë°ìŽí° ìë and Delay
ì€í¬ëŠœížìì :
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.417ìŽ).
0s UdpEchoServerìì© íë¡ê·žëš:UdpEchoServer()
1ìŽ UdpEchoServerApplication:StartApplication()
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
2.00369s 1024ìì 10.1.1.1ë°ìŽíž ìì
2.00369s ììœ íší·
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
10ìŽ UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
íší·ì 2.00369ìŽì ìë²ìì ë€ì ìì ë©ëë€. ì°ëŠ¬ë í ì
ì€ì ë¡ ì€ì Attributes ìŽë° ììŒë¡ ì€í¬ëŠœížìì ì¬ì©ë©ëë€. í¹í ì°ëŠ¬ë í ì ììµëë€
ì€ì UDPEchoíŽëŒìŽìžíž ìì± ìµë íší· XNUMXìŽ ìë ë€ë¥ž ê°ìŒë¡.
ìŽë»ê² íìê² ìµëê¹? ìë íŽëŽ. ì¥ì륌 죌ì ì²ëŠ¬íŽìŒ íšì êž°ìµíììì€.
ì°ëŠ¬ë Ʞ볞ê°ì ì¬ì ìí©ëë€ ìì± ê·žëŠ¬ê³ ëª ìì ìŒë¡ ì€ì ìµë íší· ì€í¬ëŠœížìì. ê·žëŒ ë
ì€í¬ëŠœížë¥Œ ë€ì ìì±íŽìŒ í©ëë€. ëí ì€ì ë¡ ì€ì íêž° ìí 구묞ì ì°ŸììŒ í©ëë€.
ëª ë ¹ì€ ëìë§ êž°ë¥ì ì¬ì©íì¬ ì Ʞ볞 ìì± ê°. ìŒëš ìŽê²ë§ ììŒë©Ž
ëª ë ¹ìì ë°í¥ëë íší· ì륌 ì ìŽí ì ììŽìŒ íë€ë ê²ì ììëìµëë€.
ì . ì°ëŠ¬ë ì¢ì ì¬ëë€ìŽêž° ë묞ì ëª ë ¹ì€ìŽ
ê°ì ê²,
$ ./waf --ì€í "ì€í¬ëì¹/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::ì§ì°=2ms
--ns3::UdpEchoClient::MaxPackets=2"
íí¹ ëì ìì ë§ìŒí ì:
ëª ë ¹ì€ ìì€í ì ê³ ì í íí¬ë¥Œ ì¶ê°í ìë ììµëë€. ìŽê²ì ë§€ì° ê°ëšíê² ìíë©ëë€.
륌 ì¬ì©íì¬ ê°ì ì¶ê° ëª ë ¹ì€ íìì ëí ë©ìëì ëë€.
ìŽ êž°ë¥ì ì¬ì©íì¬ ìì í ë€ë¥ž í겜ìì ììœí íší· ì륌 ì§ì íŽ ë³Žê² ìµëë€.
ë°©ë². ëŒë ì§ì ë³ì륌 ì¶ê°íŽ ë³Žê² ìµëë€. níší· ë¶í° ë³žêŽ êž°ë¥. ìŽêž°í íê² ìµëë€
ìŽì Ʞ볞 ëì곌 ìŒì¹íëë¡ XNUMXë¡ ë³ê²œí©ëë€. ëª ë ¹ì€ íìê°
ìŽ ê°ì ë³ê²œíë €ë©Ž ê°ì íìì ì°ê²°íŽìŒ í©ëë€. ížì¶ì ì¶ê°íì¬ ìŽë¥Œ ìíí©ëë€.
ì ê°ì ì¶ê°. ê³ìíŽì ë€ìì ë³ê²œíììì€. ì€í¬ëì¹/myfirst.cc ë¡ ììíë ì€í¬ëŠœíž
ë€ì ìœë,
INT
ë©ìž(int argc, char *argv[])
{
uint32_t nPackets = 1;
컀맚ëëŒìž cmd;
cmd.AddValue("nPackets", "ë°í¥í íší· ì", nPackets);
cmd.Parse(argc, argv);
...
ì€í¬ëŠœížìì ì€ì í ì§ì ê¹ì§ ìëë¡ ì€í¬ë¡€í©ëë€. ìµë íší· ìì± ë³ê²œ
ë³ìë¡ ì€ì ëëë¡ níší· ìì ëì 1 ìëì íìë ê²ì²ëŒ.
echoClient.SetAttribute("MaxPackets", UintegerValue(nPackets));
ìŽì ì€í¬ëŠœížë¥Œ ì€ííê³ --PrintHelp ë Œì, ë¹ì ì ë¹ì ì ìë¡ìŽ
ì¬ì©ì ë Œì ëìë§ íìì ëìŽë©ëë€.
ìí,
$ ./waf --run "scratch/myfirst --PrintHelp"
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.403ìŽ).
--PrintHelp: ìŽ ëìë§ ë©ìì§ë¥Œ ìžìí©ëë€.
--PrintGroups: 귞룹 목ë¡ì ìžìí©ëë€.
--PrintTypeIds: 몚ë TypeId륌 ìžìí©ëë€.
--PrintGroup=[귞룹]: 귞룹ì 몚ë TypeId륌 ìžìí©ëë€.
--PrintAttributes=[typeid]: typeidì 몚ë ìì±ì ìžìí©ëë€.
--PrintGlobals: ì ì 목ë¡ì ìžìí©ëë€.
ì¬ì©ì ìžì:
--nPackets: ììœí íší· ì
ììœí íší· ì륌 ì§ì íë €ë©Ž ìŽì
--níší· ëª ë ¹ì€ì ìžì,
$ ./waf --run "scratch/myfirst --nPackets=2"
ëë ì§êžë³ŽììŒíë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.404ìŽ).
0s UdpEchoServerìì© íë¡ê·žëš:UdpEchoServer()
1ìŽ UdpEchoServerApplication:StartApplication()
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
2.25732s 1024ìì 10.1.1.1ë°ìŽíž ìì
2.25732s ììœ íší·
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
1024ë°ìŽížë¥Œ 10.1.1.2ë¡ ë³Žëìµëë€.
3.25732s 1024ìì 10.1.1.1ë°ìŽíž ìì
3.25732s ììœ íší·
1024ìì 10.1.1.2ë°ìŽíž ìì ëš
10ìŽ UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
ìŽì ë ê°ì íší·ì ììœíìµëë€. ꜀ ìœì§ ìëì?
ë¹ì ì ë¹ì ìŽ ìž ê²œì°ì ê·žê²ì 볌 ì ììµëë€ NS-3 ì¬ì©ìë ëª ë ¹ì€ ìžì ìì€í ì ì¬ì©íì¬ ë€ìì ìíí ì ììµëë€.
êžë¡ë² ê°ì¹ë¥Œ ì ìŽíê³ Attributes. ëªšëž ìì±ììž ê²œì° ì í목ì ì¶ê°í ì ììµëë€.
Attributes ëì ~ìê² ì¬ë¬Œ ì¬ì©ìê° ìëìŒë¡ ì€ì í ì ììµëë€.
ëª ë ¹ì€ ìì€í ì íµíŽ ì¬ì©ì. ì€í¬ëŠœíž ìì±ììž ê²œì° ì í목ì ì¶ê°í ì ììµëë€.
ì€í¬ëŠœížì ë³ì륌 ì¶ê°íê³ ì죌 ìœê² ëª ë ¹ì€ ìì€í ì ì°ê²°í©ëë€.
ì¬ì© ì ì, ížë ìŽì±
ì뮬ë ìŽì ì ìì ì ì¶ê° ì°êµ¬ë¥Œ ìí ì¶ë ¥ì ìì±íë ê²ì ëë€. NS-3
ì¶ì ìì€í ì ìŽë¥Œ ìí Ʞ볞 ë©ì»€ëìŠì ëë€. ë¶í° NS-3 C++ íë¡ê·žëš, íì€
C++ íë¡ê·žëšìì ì¶ë ¥ì ìì±íë êž°ë¥ì ì¬ì©í ì ììµëë€.
#í¬íš
...
ì ì ë©ìž()
{
...
std::cout << "xì ê°ì " << x << std::endl;
...
}
ë¡ê¹ 몚ëì ì¬ì©íì¬ ì룚ì ì ìœê°ì 구조륌 ì¶ê°í ìë ììµëë€. ê±°êž°
ê·žë¬í ì ê·Œë²ì ìíŽ ìì±ë ë§ì ì ìë €ì§ ë¬žì ìŽë¯ë¡ ì°ëŠ¬ë ë€ìì ì ê³µíìµëë€.
ì°ëŠ¬ê° ì€ìíë€ê³ ìê°í 묞ì 륌 íŽê²°íêž° ìí ìŒë° ìŽë²€íž ì¶ì íì ìì€í .
ì Ʞ볞 목í NS-3 ì¶ì ìì€í ì ë€ì곌 ê°ìµëë€.
· Ʞ볞 ìì ì ê²œì° ì¶ì ìì€í ìì ì¬ì©ìê° íì€ ì¶ì ì ìì±í ì ììŽìŒ í©ëë€.
ë늬 ì¬ì©ëë ì¶ì ìì€ì ëíŽ ì¶ì ì ìì±íë ê°ì²Žë¥Œ ì¬ì©ì ì§ì í©ëë€.
· ì€êž ì¬ì©ìë ì¶ì ìì€í ì íì¥íì¬ ì¶ë ¥ íìì ìì í ì ììŽìŒ í©ëë€.
ì íµì¬ì ìì íì§ ìê³ ìì±íê±°ë ì ì¶ì ìì€ë¥Œ ìœì í©ëë€.
몚ì ì€í ì¥ì¹;
· ê³ êž ì¬ì©ìë ì뮬ë ìŽí° ìœìŽë¥Œ ìì íì¬ ìë¡ìŽ ì¶ì ìì€ ë° ì±í¬ë¥Œ ì¶ê°í ì ììµëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì¶ì ìì€í ì ë 늜ì ìž ì¶ì ìì€ ë°
ì¶ì ì±í¬, ìì€ë¥Œ ì±í¬ì ì°ê²°íêž° ìí ê· ìŒí ë©ì»€ëìŠ. ì¶ì ìì€ë
ì뮬ë ìŽì ìì ë°ìíë ìŽë²€ížì ì ížë¥Œ 볎ëŽê³ ì¡ìžì€ë¥Œ ì ê³µí ì ìë ìí°í°
í¥ë¯žë¡ìŽ Ʞ볞 ë°ìŽí°. ì륌 ë€ìŽ ì¶ì ìì€ë íší·ìŽ
ë€ížìí¬ ì¥ì¹ìì ìì íê³ êŽì¬ ìë ì¶ì ì ìíŽ íší· ëŽì©ì ëí ì¡ìžì€ë¥Œ ì ê³µí©ëë€.
ì±í¬ë.
ì¶ì ìì€ë ê·ž ì첎ë¡ë ì ì©íì§ ììŒë©° ë€ë¥ž ë¶ë¶ì "ì°ê²°"ëìŽìŒ í©ëë€.
ì±í¬ìì ì ê³µíë ì ë³Žë¡ ì€ì ë¡ ì ì©í ìì ì ìííë ìœëì ëë€. ì¶ì íë€
ì±í¬ë ì¶ì ìì€ìì ì ê³µíë ìŽë²€íž ë° ë°ìŽí°ì ìë¹ìì ëë€. ì륌 ë€ìŽ,
ížë ìŽì€ ì±í¬ë¥Œ ìì±í ì ììµëë€.
ìŽì ì) ìì ë íší·ì í¥ë¯žë¡ìŽ ë¶ë¶ì ìžìí©ëë€.
ìŽë ê² ëª ìì ìŒë¡ 구ë¶íë ìŽì ë ì¬ì©ìê° ìë¡ìŽ ì íì ì±í¬ë¥Œ
íµì¬ì ížì§íê³ ì¬ì»ŽíìŒí íì ììŽ êž°ì¡Ž ì¶ì ìì€
몚ì ì€í ì¥ì¹. ë°ëŒì ìì ììì ì¬ì©ìë ìì ì ì ì¶ì ì±í¬ë¥Œ ì ìí ì ììµëë€.
ì€í¬ëŠœížë¥Œ ìì±íê³ ìŽë¥Œ ì뮬ë ìŽì ìœìŽì ì ìë êž°ì¡Ž ì¶ì ìì€ì 첚ë¶í©ëë€.
ì¬ì©ì ì€í¬ëŠœížë§ ížì§í©ëë€.
ìŽ ììµìììë ì¬ì ì ìë ìŒë¶ ìì€ ë° ì±í¬ë¥Œ ìŽíŽë³Žê³ ë°©ë²ì 볎ì¬ì€ëë€.
ìœê°ì ì¬ì©ì ë žë ¥ìŒë¡ ì¬ì©ì ì ìí ì ììµëë€. ns-3 ì€ëª ì ëë ë°©ë² ì¹ì ì ì°žì¡°íììì€.
ì¶ì íì¥ì í¬íší ê³ êž ì¶ì 구ì±ì ëí ì 볎ë
ë€ìì€íìŽì€ ë° ì ì¶ì ìì€ ë§ë€êž°.
ASCII ížë ìŽì±
NS-3 íì ìì€ ì¶ì ìì€í ì ëííë ëì°ë¯ž êž°ë¥ì ì ê³µíì¬
ìœê² ìŽíŽí ì ìë ìŒë¶ íší· ì¶ì 구ì±ê³Œ êŽë šë ìžë¶ ì ë³Žê° í¬íšë©ëë€. ë§ìœ ëëŒë©Ž
ìŽ êž°ë¥ì íì±ííë©Ž ASCII íìŒ --- ìŽëŠìŒë¡ ì¶ë ¥ìŽ íìë©ëë€. ì ìí
ìµìí ì¬ëë€ NS-2 ì¶ë ¥, ìŽ ì íì ì¶ì ì out.tr ìì±
ë§ì ì€í¬ëŠœížë¡.
ë°ë¡ ë°ìŽë€ìŽ ìŒë¶ ASCII ì¶ì ì¶ë ¥ì ì€í¬ëì¹/myfirst.cc
ì€í¬ëŠœíž. ížì¶ ì§ì ì뮬ë ìŽí°::ì€í (), ë€ì ìœë ì€ì ì¶ê°í©ëë€.
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll(ascii.CreateFileStream("myfirst.tr"));
ë€ë¥ž ë§ì ê²ë€ì²ëŒ NS-3 êŽì©êµ¬, ìŽ ìœëë ëì°ë¯ž ê°ì²Žë¥Œ ì¬ì©íì¬ ASCII ìì±ì ëìµëë€.
íì . ë ë²ì§ž ì€ìë ë ê°ì ì€ì²©ë ë©ìë ížì¶ìŽ í¬íšëìŽ ììµëë€. "ëŽë¶" ë°©ë²,
ìì±íìŒì€ížëŠŒ() ëª ëª ëì§ ìì ê°ì²Ž êŽì©êµ¬ë¥Œ ì¬ì©íì¬
ì€í(ê°ì²Ž ìŽëŠ ìì)ì ížì¶í ë©ìëë¡ ì ë¬í©ëë€. ì°ëŠ¬ë ìŽê²ì ë€ìŽê° ê²ì ëë€
ììŒë¡ë ë ë§ê² ì§ë§ ì§êž ìì ìì ìììŒ í ê²ì
"myfirst.tr"ìŽëŒë íìŒì ëíëŽë ê°ì²Ž NS-3. ë¹ì ì ë§íê³ ìë€
NS-3 ìì±ë ê°ì²Žì ìëª ë¬žì 륌 ì²ëŠ¬íê³ ë¬žì 륌 ì²ëŠ¬íêž° ìíŽ
ë³µì¬ì êŽë šë ì€ížëŠŒ ê°ì²Žì C++ì ëí ì ìë €ì§ì§ ìì(ìëì ìž) ì íìŒë¡ ìžíŽ ë°ìí©ëë€.
ìì±ì.
ìžë¶ ì í, AsciiAll íì±í(), í¬íŒìê² ASCII륌 íì±ííê³ ì¶ë€ê³ ì늜ëë€.
ì뮬ë ìŽì ì 몚ë ì ëì ì¥ì¹ì ëí ì¶ì ê·žëŠ¬ê³ ë¹ì ì (ì ê³µë)
íší· ìŽëì ëí ì 볎륌 ASCII íììŒë¡ êž°ë¡íë ì¶ì ì±í¬.
ìµìí ì¬ëë€ì ìíŽ NS-2, ì¶ì ë ìŽë²€ížë ë늬 ì¬ì©ëë ì¶ì ì§ì 곌 ëìŒí©ëë€.
"+", "-", "d" ë° "r" ìŽë²€ížë¥Œ êž°ë¡í©ëë€.
ìŽì ì€í¬ëŠœížë¥Œ ë¹ëíê³ ëª ë ¹ì€ìì ì€íí ì ììµëë€.
$ ./waf --ì€í¬ëì¹/myfirst ì€í
ìŽì ì ì¬ë¬ ë² ë³ž ê²ì²ëŒ Wafìì ë©ìì§ê° íìëê³
ì€í ì€ìž íë¡ê·žëšìì ìŒë¶ ë©ìì§ì íšê» "'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€."
íë¡ê·žëšìŽ ì€íë ë íë¡ê·žëšì ìŽëŠìŽ ì§ì ë íìŒì ìì±í©ëë€. myfirst.tr. ë°©ë² ë묞ì
Wafê° ìëíë©Ž íìŒìŽ ë¡ì»¬ ëë í 늬ì ìì±ëì§ ìê³ ë€ì ìì¹ì ìì±ë©ëë€.
Ʞ볞ì ìŒë¡ ì ì¥ìì ìµìì ëë í 늬. ì¶ì ìì¹ë¥Œ ì ìŽíë €ë©Ž
ì ì¥íë©Ž ë€ìì ì¬ì©í ì ììµëë€. --cwd ìŽê²ì ì§ì íêž° ìí Wafì ìµì . ì°ëŠ¬ë ê·žë ê² íì§ ìììŒë¯ë¡
ì ì¥ìì ìµìì ëë í ëŠ¬ë¡ ë³ê²œíê³ ASCII륌 ìŽíŽëŽìŒ í©ëë€.
ì¶ì íìŒ myfirst.tr ì¢ìíë ížì§êž°ìì.
íì± ìì€í€ ì¶ì
ê±°êž°ìë ꜀ ì¡°ë°í ííë¡ ë§ì ì ë³Žê° ìì§ë§, ê°ì¥ 뚌ì ììì°šë €ìŒ í ê²ì
ìŽ íìŒìë ë³ê°ì ì€ìŽ ë§ìŽ ìë€ë ê²ì ëë€. 볎Ʞ ìŽë €ìž ì ììµëë€
ë¹ì ìŽ ë¹ì ì ì°œì ìë¹í ëíì§ ìë í ìŽê²ì ë¶ëª í©ëë€.
íìŒì ê° ëŒìžì ëë¬ë€ event. ìŽ ê²œì° ìŽë²€ížë¥Œ ì¶ì íê³ ììµëë€.
ì ì, ë¶ì¹ë€ ë³ë° ì뮬ë ìŽì ì 몚ë ì ëì ë€íž ì¥ì¹ì ì¡Žì¬í©ëë€. ê·žë§íŒ
ì ì¡ ëêž°ìŽì ì§ì ê° ì±ëë¡ í¥íë 몚ë íší·ìŽ íµê³Œíë ëêž°ìŽì ëë€.
íµê³ŒíŽìŒ í©ëë€. ì¶ì íìŒì ê° ëŒìžì ëšìŒ 묞ìë¡ ììí©ëë€(
ê·ž ë€ì 공백). ìŽ ë¬žìë ë€ì곌 ê°ì ì믞륌 ê°ìµëë€.
· +: ì¥ì¹ ëêž°ìŽìì ëêž°ìŽì ë£êž° ìì ìŽ ë°ìíìµëë€.
· -: ì¥ì¹ ëêž°ìŽìì ëêž°ìŽ ì ê±° ìì ìŽ ë°ìíìµëë€.
· d: ìŒë°ì ìŒë¡ ëêž°ìŽìŽ ê°ë ì°šì íší·ìŽ ìì ëììµëë€.
· r: ë€ížìí¬ ì¥ì¹ìì íší·ì ìì íìµëë€.
ì¶ì íìŒì 첫 ë²ì§ž ì€ì ì¢ ë ììží ìŽíŽë³Žê² ìµëë€. ëŽê° ë¶ìŽë²ëŠŽê²
ìŒìªœì ì°žì¡° ë²ížê° ìë ì¹ì ìŒë¡ 구ë¶(ëª íì±ì ìíŽ ë€ì¬ì°êž°):
+
2
/NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/ìží
ns3::Pppí€ë(
ì ëì íë¡í ìœ: IP(0x0021))
ns3::Ipv4í€ë(
tos 0x0 ttl 64 id 0 íë¡í ìœ 17 ì€íì 0 íëê·ž [ìì]
êžžìŽ: 1052 10.1.1.1 > 10.1.1.2)
ns3::UDpí€ë(
êžžìŽ: 1032 49153 > 9)
íìŽë¡ë(í¬êž°=1024)
ìŽ íì¥ë ì¶ì ìŽë²€íž(ì°žì¡° ë²íž 0)ì 첫 ë²ì§ž ì¹ì ì ìì ì ëë€. ì°ëŠ¬
ìŽ + 묞ììŽë¯ë¡ ìŽê²ì ëêž°ìŽì ë£ë€ ì ì¡ ëêž°ìŽì ëí ìì .
ë ë²ì§ž ì¹ì (ì°žì¡° 1)ì ìŽ ëšìë¡ ííë ì뮬ë ìŽì ìê°ì ëë€. ë¹ì ì í ììë€
ì°ëŠ¬ê° UdpEchoClientìì© íë¡ê·žëš XNUMXìŽì íší· ì ì¡ì ììí©ëë€.
ì¬êž°ì ì°ëŠ¬ë ìŽê²ìŽ ì€ì ë¡ ìŒìŽëê³ ìë€ë íìžì ëŽ ëë€.
ìì ížë ìŽì€(ì°žì¡° 2)ì ë€ì ì¹ì ì ìŽë€ ížë ìŽì€ ìì€ê° ìì±ëìëì§ ìë €ì€ëë€.
ìŽ ìŽë²€íž(ì¶ì ë€ìì€íìŽì€ë¡ ííëš). ì¶ì ë€ìì€íìŽì€ë¥Œ ìê°í ì ììµëë€.
íìŒ ìì€í ìŽëŠ ê³µê°ê³Œ ë¹ì·í©ëë€. ë€ìì€íìŽì€ì 룚ížë
ë žë 목ë¡. ìŽê²ì ë€ììì êŽëŠ¬ëë 컚í ìŽëì íŽë¹í©ëë€. NS-3 몚ë í¬íšíë íµì¬ ìœë
ì€í¬ëŠœížìì ìì±ë ë žëì íìŒ ìì€í ì ëë í ëŠ¬ê° ìë ê²ì²ëŒ
ë£šíž ìëì ë žë ë²ížê° ìì ì ììµëë€. ë žë 목ë¡. 묞ììŽ /ë žë늬ì€íž/0
ë°ëŒì XNUMXë²ì§ž ë žë륌 ì°žì¡°í©ëë€. ë žë ëª©ë¡ ìŒë°ì ìŒë¡ "ë žë"ëŒê³ ìê°íë
0". ê° ë žëìë ì€ì¹ë ì¥ì¹ 목ë¡ìŽ ììµëë€. ìŽ ëª©ë¡ìŽ ëíë©ëë€.
ë€ìì€íìŽì€ì ë€ì. ìŽ ì¶ì ìŽë²€ížê° ì¥ì¹ 목ë¡/0 íë ê²ì ëë€
ë žëì ì€ì¹ë XNUMXë²ì§ž ì¥ì¹.
ë€ì 묞ììŽ, $ns3::PointToPointNetDevice ìŽë€ ì¢ ë¥ì ì¥ì¹ê° ìëì§ ìë €ì€ëë€.
ë žë XNUMXì ëí ì¥ì¹ 목ë¡ì XNUMXë²ì§ž ìì¹. ìì ì êž°ìµíììì€. + ìì ë°ê²¬
ì°žì¡° 00ì ëêž°ìŽì ë£êž° ìì ìŽ ì¥ì¹ì ì ì¡ ëêž°ìŽìì ë°ìíìì ì믞í©ëë€.
ìŽë "ì¶ì 겜ë¡"ì ë§ì§ë§ ìžê·žëšŒížì ë°ìë©ëë€. TxQueue/ìží.
ì¶ì ì ëëšžì§ ì¹ì ì ìë¹í ì§êŽì ìŽìŽìŒ í©ëë€. ì°žì¡° 3-4ë ë€ìì ëíë ëë€.
íší·ìŽ ì ëì íë¡í ìœë¡ 캡ìíë©ëë€. ì°žê³ ë¬ží 5-7ì
íší·ìë IP ë²ì 10.1.1.1 í€ëê° ìê³ IP 죌ì XNUMXìì ììëììŒë©°
10.1.1.2ë¡ ìì ëìŽ ììµëë€. ì°žì¡° 8-9ë ìŽ íší·ìŽ UDP í€ë륌 ê°ì§ê³ ììì 볎ì¬ì€ëë€.
ë§ì§ë§ìŒë¡ ì°žì¡° 10ì íìŽë¡ëê° ììëë 1024ë°ìŽížìì 볎ì¬ì€ëë€.
ì¶ì íìŒì ë€ì ì€ì ëìŒí íší·ìŽ ì ì¡ìì ëêž°ìŽìì ì ìžëë ê²ì 볎ì¬ì€ëë€.
ê°ì ë žëìì ëêž°í©ëë€.
ì¶ì íìŒì ìž ë²ì§ž ì€ì ë€ížìí¬ ì¥ì¹ìì ìì ëë íší·ì 볎ì¬ì€ëë€.
ììœ ìë²ê° ìë ë žë. ìëì íŽë¹ ìŽë²€ížë¥Œ ì¬ííìµëë€.
r
2.25732
/NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
ns3::Ipv4í€ë(
tos 0x0 ttl 64 id 0 íë¡í ìœ 17 ì€íì 0 íëê·ž [ìì]
êžžìŽ: 1052 10.1.1.1 > 10.1.1.2)
ns3::UDpí€ë(
êžžìŽ: 1032 49153 > 9)
íìŽë¡ë(í¬êž°=1024)
ì¶ì ìì ìŽ ìŽì r ì뮬ë ìŽì ìê°ìŽ 2.25732ë¡ ìŠê°íìµëë€.
ìŽ. ììµì ëšê³ë¥Œ ììží ë°ëŒìë€ë©Ž ìŽë ë€ìì ì믞í©ëë€.
~륌 ëšê²š ëë€ ë°ìŽí° ìë ë€ížìí¬ ì¥ì¹ ë° ì±ë Delay Ʞ볞ê°ìŒë¡ ì€ì í©ëë€.
ìŽ ìê°ì ìŽì ì¹ì ìì ìŽì ì 볞 ê²ì²ëŒ ì¹ìíŽìŒ í©ëë€.
ì¶ì ìì€ ë€ìì€íìŽì€ í목(ì°žì¡° 02)ìŽ ìŽ ìŽë²€ížê°
ë žë 1(/ë žë늬ì€íž/1) ë° íší· ìì ì¶ì ìì€(/MacRx). ê·žê²
ë€ìì íµíŽ í íŽë¡ì§ë¥Œ íµíŽ íší·ì ì§í ìí©ì ìœê² ë°ëŒê° ì ììŽìŒ í©ëë€.
íìŒì ëëšžì§ ì¶ì ì ìŽíŽëŽ ëë€.
PCAP ížë ìŽì±
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì¥ì¹ í¬íŒë ëí ì¶ì íìŒì ìì±íë ë° ì¬ì©í ì ììµëë€. .pcap 첎ì¬. ê·žë§íŒ
ìœìŽ pcap(ìŒë°ì ìŒë¡ ì묞ìë¡ ìì±ëš)ì íší· 캡ì²ë¥Œ ì믞íë©° ì€ì ë¡ë
ì ì ì륌 í¬íšíë API .pcap íìŒ íì. ê°ì¥ ìžêž°ìë íë¡ê·žëšì
ìŽ íìì ìœê³ íìí ì ìë ê²ì Wireshark(ìŽì ìë EtherealìŽëŒê³ íš)ì ëë€. ê·žë¬ë ê±°êž°ì
ìŽ íší· íìì ì¬ì©íë ë§ì ížëíœ ì¶ì ë¶ìêž°ì ëë€. ì°ëŠ¬ë ì¬ì©ìê°
pcap ì¶ì ì ë¶ìíë ë° ì¬ì©í ì ìë ë§ì ë구륌 íì©íììì€. ìŽ íí 늬ìŒìì ì°ëŠ¬ë
tcpdumpë¡ pcap ì¶ì ì 볎ë ë° ì§ì€íììì€.
pcap ì¶ì ì íì±ííë ë° ì¬ì©ëë ìœëë í ì€ì ëë€.
pointToPoint.EnablePcapAll("myfirst");
ë°©êž ì¶ê°í ASCII ì¶ì ìœë ë€ì ìŽ ìœë ì€ì ìœì íììì€.
ì€í¬ëì¹/myfirst.cc. "myfirst"ëŒë 묞ììŽë§ ì ë¬íê³
"myfirst.pcap" ëë ìŽì ì ì¬í ê². ìŽë 맀ê°ë³ìê° ì ëì¬ê° ìëëŒ ì ëì¬ìŽêž° ë묞ì ëë€.
ìì í íìŒ ìŽëŠ. ëì°ë¯žë ì€ì ë¡ ëªšë ì§ì ê° ì¶ì íìŒì ë§ëëë€.
ì뮬ë ìŽì ì¥ì¹. íìŒ ìŽëŠì ì ëì¬, ë žë ë²íž,
ì¥ì¹ ë²íž ë° ".pcap" ì 믞ì¬.
ìì ì€í¬ëŠœížìì ê²°êµ "myfirst-0-0.pcap"ìŽëŒë íìŒìŽ íìëê³
ë žë 1-ì¥ì¹ 0 ë° ë žë 0-ì¥ì¹ 0ì ëí pcap ì¶ì ìž "myfirst-1-0.pcap",
ê°ê°.
pcap ì¶ì ì íì±ííë ìœë ì€ì ì¶ê°íë©Ž ë€ììì ì€í¬ëŠœížë¥Œ ì€íí ì ììµëë€.
ìŒë°ì ìž ë°©ë²:
$ ./waf --ì€í¬ëì¹/myfirst ì€í
ë°°í¬íì ìµìì ëë í 늬륌 볎멎 ìŽì ìž ê°ì ë¡ê·žê° íìë©ëë€.
íìŒ : myfirst.tr ìŽì ì ì¡°ì¬í ASCII ì¶ì íìŒì ëë€. myfirst-0-0.pcap
and myfirst-1-0.pcap ë°©êž ìì±í ì pcap íìŒì ëë€.
ìœêž° ì¶ë ¥ 곌 TCP ë€í
ìŽ ìì ìì í ì ìë ê°ì¥ ì¬ìŽ ìŒì ë€ìì ì¬ì©íë ê²ì ëë€. TCP ë€í ~ì ë³Žë€ pcap íìŒ.
$ tcpdump -nn -tt -r myfirst-0-0.pcap
íìŒ myfirst-0-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, êžžìŽ 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
íìŒ myfirst-1-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, êžžìŽ 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
ì ë€íìì 볌 ì ììµëë€. myfirst-0-0.pcap (íŽëŒìŽìžíž ì¥ì¹) ììœ íší·ì
ì뮬ë ìŽì ìŒë¡ 2ìŽì ì ì¡ë©ëë€. ë ë²ì§ž ë€í(myfirst-1-0.pcap)
2.257324ìŽì íší·ìŽ ìì ëë ê²ì 볌 ì ììµëë€. ë¹ì ì íší·ìŽ
ë ë²ì§ž ë€íìì 2.257324ìŽì ë€ì ììœëê³ ë§ì§ë§ìŒë¡ íší·ìŽ
2.514648ìŽì 첫 ë²ì§ž ë€íìì íŽëŒìŽìžížìì ë€ì ìì ëììµëë€.
ìœêž° ì¶ë ¥ 곌 ììŽìŽ ì€í¬
Wiresharkì ìµìíì§ ìì ê²œì° ë€ìì ìíí ì ìë ì¹ ì¬ìŽížê° ììµëë€.
íë¡ê·žëš ë° ë¬žì ë€ìŽë¡ë: http://www.wireshark.org/.
Wiresharkë ìŽë¬í ì¶ì ì íìíë ë° ì¬ì©í ì ìë ê·žëíœ ì¬ì©ì ìží°íìŽì€ì ëë€.
íìŒ. Wireshark륌 ì¬ì©í ì ìë ê²œì° ê° ì¶ì íìŒì ìŽê³ íìí ì ììµëë€.
륌 ì¬ì©íì¬ íší·ì 캡ì²í ê²ì²ëŒ ëŽì©ì íší· ìì걎.
걎묌 í íŽë¡ì§
걎묌 a ë²ì€ ë€ížìí¬ í íŽë¡ì§
ìŽ ì¹ì ìì ì°ëŠ¬ë NS-3 ë€ížìí¬ ì¥ì¹ ë° ì±ë
ë²ì€ ë€ížìí¬ì ì륌 ë€ë£¹ëë€. NS-3 ì°ëŠ¬ê° CSMAëŒê³ ë¶ë¥Žë ë€íž ì¥ì¹ì ì±ëì ì ê³µí©ëë€.
(ìºëŠ¬ìŽ ê°ì§ ë€ì€ ì ì).
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 CSMA ì¥ì¹ë ìŽëë· ì ì ìŒë¡ ëšìí ë€ížìí¬ë¥Œ 몚ëžë§í©ëë€. ì§ì í ìŽëë·
CSMA/CD(Carrier Sense Multiple Access with Collision Detection) ë°©ìì ì¬ì©íì¬
ê³µì ì ì¡ ë§€ì²Žë¥Œ ëê³ ê²œìíêž° ìíŽ êž°íêžìì ìŒë¡ ìŠê°íë ë°±ì€í. ê·žë§íŒ NS-3
CSMA ì¥ì¹ ë° ì±ë 몚ëžì ìŽê²ì íì ì§í©ìŒ ë¿ì ëë€.
구ì±í ë ì ëì í íŽë¡ì§ ëì°ë¯ž ê°ì²Žë¥Œ 볞 ê²ì²ëŒ
ì ëì í íŽë¡ì§ì ê²œì° ìŽ ì¹ì ìì ëë±í CSMA í íŽë¡ì§ ëì°ë¯žë¥Œ 볌 ì ììµëë€.
ìŽë¬í ëì°ë¯žì 몚ì곌 ìëì ë§€ì° ì¹ìíŽ ë³ŽìŒ ê²ì ëë€.
examples/tutorial} ëë í°ëŠ¬ì ìì ì€í¬ëŠœížë¥Œ ì ê³µí©ëë€. ìŽ ì€í¬ëŠœížë
ì ì, 첫 ë²ì§ž.cc ì€í¬ëŠœížë¥Œ ìì±íê³ CSMA ë€ížìí¬ë¥Œ ì ëì ì뮬ë ìŽì ì ì¶ê°í©ëë€.
졎겜ë°ë. ê³ìíŽì ìŽêž° ìì /íí 늬ìŒ/second.cc ì¢ìíë ížì§êž°ìì. ë
ìŽë¯ž 충ë¶í 볎ìì ê²ìŽë€ NS-3 ìŽ ìœëìì ì§íëë ëë¶ë¶ì ìì ì ìŽíŽíë ìœë
íì§ë§ ì°ëŠ¬ë ì 첎 ì€í¬ëŠœížë¥Œ ìŽíŽë³Žê³ ìŒë¶ ì¶ë ¥ì ê²ì¬í ê²ì ëë€.
ììì ê°ìŽ 첫 ë²ì§ž.cc ì(ë° ëªšë ns-3 ììì) íìŒì emacsë¡ ììí©ëë€.
몚ë ëŒìžê³Œ ìŒë¶ GPL ìì©êµ¬.
ì€ì ìœëë 몚ë í¬íš íìŒì ë¡ëíë ê²ìŒë¡ ììí©ëë€. 첫 ë²ì§ž.cc
ì.
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/ipv4-global-routing-helper.h"
ëëê²ë ì ì©í ì ìë í ê°ì§ë ë§í륌 볎ì¬ì£Œë ìœê°ì ASCII ìížì ëë€.
ìì ìì 구ì±í ë€ížìí¬ í íŽë¡ì§ì ìì ì ì¬í "귞늌"ì ì°Ÿì ì ììµëë€.
ì°ëŠ¬ì ìì ëë¶ë¶.
ìŽ ê²œì° ì ëì ìì 륌 íì¥í ê²ìì ì ì ììµëë€(ë§í¬
ìëì ë žë n0곌 n1 ì¬ìŽ) ì€ë¥žìªœìì ë²ì€ ë€ížìí¬ë¥Œ ëìµëë€. ììì±ë€
ì€ì ë¡ ë žë ì륌 ë³ê²œí ì ììŒë¯ë¡ ìŽê²ìŽ Ʞ볞 ë€ížìí¬ í íŽë¡ì§ì ëë€.
LANìì ìì±ë©ëë€. nCsma륌 XNUMXë¡ ì€ì íë©Ž nCsmaì ìŽ XNUMXê°ì ë žëê° ìê² ë©ëë€.
LAN(CSMA ì±ë) --- íëì íì ë žëì íëì "ì¶ê°" ë žë. Ʞ볞ì ìŒë¡ ìž ê°ì§
ìëì ê°ìŽ "ì¶ê°" ë žë:
// Ʞ볞 ë€ížìí¬ í íŽë¡ì§
//
// 10.1.1.0
// n0 -------------- n1 n2 n3 n4
// ì ëì | | | |
// ================
// ë 10.1.2.0
ê·žë¬ë©Ž ns-3 ë€ìì€íìŽì€ë ìµìí ë¡ê¹ êµ¬ì± ììê° ì ìë©ëë€. ìŽê²ì 몚ë
ì ììë€ ì²« ë²ì§ž.cc, ìì§ ìë¡ìŽ ê²ìŽ ììµëë€.
ë€ìì€íìŽì€ ns3 ì¬ì©;
NS_LOG_COMPONENT_DEFINE("SecondScriptExample");
ë©ìž íë¡ê·žëšì ìœê° ë€ë¥ž ë°©ììŒë¡ ììë©ëë€. ììží ì 볎 íì íë귞륌 ì¬ì©íì¬
ì¬ë¶ë¥Œ ê²°ì í©ëë€. UdpEchoClientìì© íë¡ê·žëš and UdpEchoServerìì© íë¡ê·žëš ë¡ê¹
êµ¬ì± ììê° íì±íë©ëë€. ìŽ íëê·žì Ʞ볞ê°ì trueì ëë€(ë¡ê¹ êµ¬ì± ììê° íì±íëš).
íì§ë§ ìŽ ìì ì íê· í ì€íž ì€ì ë¡ê¹ ì ë ì ììµëë€.
ì¥ì¹ì ì륌 ë³ê²œí ì ìë ëª ê°ì§ ì¹ìí ìœëê° íìë©ëë€.
ëª ë ¹ì€ ìžì륌 íµí CSMA ë€ížìí¬. ì°ëŠ¬ë
ëª ë ¹ì€ ìžì ì¹ì ìì ë³ê²œíêž° ìíŽ ë³Žëž íší· ì. ë§ì§ë§
ëŒìžì ìµìí íëì "ì¶ê°" ë žëê° ìëì§ íìží©ëë€.
ìœëë ìŽì ì ë€ë£¬ APIì ë³íìŒë¡ 구ì±ëìŽ ììŒë¯ë¡ ìì í
íí 늬ìŒì ìŽ ìì ìì ë€ì ìœëì ìµìí©ëë€.
ë¶ìž ììž ì 볎 = ì°ž;
uint32_t nCsma = 3;
컀맚ëëŒìž cmd;
cmd.AddValue ("nCsma", "\"extra\" CSMA ë žë/ì¥ì¹ ì", nCsma);
cmd.AddValue ("verbose", "ì°žìŒ ê²œì° ë¡ê·žíëë¡ echo ìì© íë¡ê·žëšì ì§ì", verbose);
cmd.Parse(argc, argv);
if(ììž)
{
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
}
nCsma = nCsma == 0 ? 1: nCsma;
ë€ì ëšê³ë ì§ì ê° ë§í¬ë¥Œ íµíŽ ì°ê²°í ë ê°ì ë žë륌 ë§ëë ê²ì ëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ë žë컚í ìŽë ìì ìíí ê²ì²ëŒ ìŽ ìì ì ìííë ë° ì¬ì©ë©ëë€. 첫 ë²ì§ž.cc.
NodeContainer p2pNodes;
p2pNodes.Create(2);
ë€ììŒë¡ ë€ë¥ž ì ìž ë žë컚í ìŽë ë²ì€ì ìŒë¶ê° ë ë žë륌 ì ì§íêž° ìíŽ
(CSMA) ë€ížìí¬. 뚌ì 컚í ìŽë ê°ì²Ž ì첎륌 ìžì€íŽì€íí©ëë€.
NodeContainer csmaNodes;
csmaNodes.Add(p2pNodes.Get(1));
csmaNodes.ë§ë€êž°(nCsma);
ë€ì ìœë ì€ ê°ì žìµëë€. 첫 ë²ì§ž ë žë(ìžë±ì€ê° XNUMXìž ê²œì°)
ì ëì ë žë 컚í ìŽë ë° CSMA륌 ê°ì žì¬ ë žëì 컚í ìŽëì ì¶ê°
ì¥ì¹. 묞ì ì ë žëë ì ëì ì¥ì¹ë¡ ëë ê²ì ëë€. and CSMA
ì¥ì¹. ê·žë° ë€ì ëëšžì§ CSMA륌 구ì±íë ì¬ë¬ "ì¶ê°" ë žë륌 ë§ëëë€.
íë¡ë§. CSMA ë€ížìí¬ì ìŽë¯ž íëì ë žëê° ììŒë¯ë¡
ì ëì ë° CSMA ë€ížìí¬ ì¥ì¹ 몚ëìì "ì¶ê°" ë žëì ìë
CSMA ì¹ì ìì ìíë ë žëìì XNUMXì ëº ê°ì ëë€.
ë€ì ìœëë ìŽì ꜀ ìµìí ê²ì ëë€. ì°ëŠ¬ë í¬ìžíží¬í¬ìžížëì°ë¯ž
êŽë š Ʞ볞ê°ì ì€ì í©ëë€. Attributes ìŽë¹ XNUMXë©ê°ë¹ížë¥Œ ìì±íëë¡
ëì°ë¯žë¥Œ ì¬ì©íì¬ ë§ë ì¥ì¹ì ì¡ì êž° ë° ì±ëì XNUMXë°ëŠ¬ìŽ ì§ì°
ëì°ë¯žì ìíŽ ìì±ë©ëë€.
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("ì§ì°", StringValue("2ms"));
NetDeviceContainer p2pì¥ì¹;
p2pDevices = pointToPoint.Install(p2pNodes);
ê·žë° ë€ì NetDevice컚í ìŽë ì ëì ë€íž ì¥ì¹ë¥Œ ì¶ì íêž° ìíŽ
ê·žëŠ¬ê³ ì°ëŠ¬ ì€ì¹ ì§ì ê° ë žëì ì¥ì¹.
CSMA ì¥ì¹ ë° ì±ëì ëí ëì°ë¯žë¥Œ ë³Žê² ë ê²ìŽëŒê³ ììì ìžêžíìµëë€.
ë€ì ì€ìì ê·žê²ë€ì ìê°í©ëë€. ê·žë§íŒ CsmaHelper ì²ëŒ ìë í¬ìžíží¬í¬ìžížëì°ë¯žíì§ë§,
CSMA ì¥ì¹ ë° ì±ëì ìì±íê³ ì°ê²°í©ëë€. CSMA ì¥ì¹ì 겜ì°
ì±ë ììì ë°ìŽí° ìëë ì±ë ìì± ëì ì
ì¥ì¹ ìì±. ì€ì CSMA ë€ížìí¬ë íŒí©ì íì©íì§ ìêž° ë묞ì ëë€.
ì륌 ë€ìŽ, 죌ìŽì§ ì±ëì 10Base-T ë° 100Base-T ì¥ì¹. 뚌ì ë°ìŽí° ìë륌 ë€ììŒë¡ ì€ì íìµëë€.
ìŽë¹ 100ë©ê°ë¹íž, ì±ëì êŽì ì§ì°ì 6560ìŒë¡ ì€ì
ëë žìŽ(1ë¯ží° ìžê·žëšŒížìì íŒížë¹ 100ëë žìŽë¡ ììë¡ ì íëš).
ë€ìì ì€ì í ì ììµëë€. ìì± êž°ë³ž ë°ìŽí° ì íì ì¬ì©í©ëë€.
CsmaHelper csma;
csma.SetChannelAttribute("DataRate", StringValue("100Mbps"));
csma.SetChannelAttribute("ì§ì°", TimeValue(NanoSeconds(6560)));
NetDeviceContainer csmaDevices;
csmaDevices = csma.Install(csmaNodes);
ì°ëŠ¬ê° ë§ë ê²ì²ëŒ NetDevice컚í ìŽë ì ìíŽ ìì±ë ì¥ì¹ë¥Œ ì ì§íêž° ìíŽ
í¬ìžíží¬í¬ìžížëì°ë¯ž ì°ëŠ¬ë NetDevice컚í ìŽë ì°ëŠ¬ê° ë§ë ì¥ì¹ë¥Œ 볎êŽíêž° ìíŽ
CsmaHelper. ì°ëŠ¬ë ì€ì¹ ë°©ë² CsmaHelper ì ì¥ì¹ë¥Œ ì€ì¹íë €ë©Ž
ì ë žë csmaë žë ë žë컚í ìŽë.
ìŽì ë žë, ì¥ì¹ ë° ì±ëìŽ ìì±ëìì§ë§ íë¡í ìœ ì€íìŽ ììµëë€.
íì¬ì. ììì ê°ìŽ 첫 ë²ì§ž.cc ì€í¬ëŠœíž, ì°ëŠ¬ë ìží°ë·ì€íí¬íŒ ì€ì¹íêž° ìíŽì
ìŽ ì€í.
InternetStackHelper ì€í;
stack.Install(p2pNodes.Get(0));
stack.Install(csmaNodes);
ì°ëŠ¬ê° ë žë ì€ íë륌 p2pë žë 컚í ìŽëì ì¶ê°íìµëë€.
csmaë žë 컚í ìŽë. ë°ëŒì ëëšžì§ ì€íìë§ ì€íì ì€ì¹íë©Ž ë©ëë€. p2pë žë
ë žë ë° ëªšë ë žë csmaë žë 몚ë ë žë륌 í¬íšíë 컚í ìŽë
ì뮬ë ìŽì .
ììì ê°ìŽ 첫 ë²ì§ž.cc ìì ì€í¬ëŠœížìì ì°ëŠ¬ë IPv4AddressHelper ì
ì¥ì¹ ìží°íìŽì€ì IP 죌ì륌 í ë¹í©ëë€. 뚌ì ë€ížìí¬ 10.1.1.0ì ì¬ì©íì¬ ìì±í©ëë€.
ë ê°ì ì§ì ê° ì¥ì¹ì íìí ë ê°ì 죌ì.
Ipv4AddressHelper 죌ì;
address.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer p2pìží°íìŽì€;
p2pInterfaces = address.Assign(p2pDevices);
ìœê² êºŒëŒ ì ìëë¡ ìì±ë ìží°íìŽì€ë¥Œ 컚í ìŽëì ì ì¥í©ëë€.
ëì€ì ìì© íë¡ê·žëšì ì€ì íë ë° ì¬ì©í ì 볎륌 죌ì ì§ì í©ëë€.
ìŽì CSMA ì¥ì¹ ìží°íìŽì€ì IP 죌ì륌 í ë¹íŽìŒ í©ëë€. ìì ìŽ ìëí©ëë€.
point-to-pointì 겜ì°ì ë§ì°¬ê°ì§ë¡ ì§êžì
ê°ë³ ê°ìì CSMA ì¥ì¹ê° ìë 컚í ìŽë ---
ëª ë ¹ì€ ìžìë¡ CSMA ì¥ì¹ë¥Œ ë³ê²œí ì ììµëë€. CSMA ì¥ì¹ê° ì°ê²°ë©ëë€.
ìŽ ê²œì° ìëì ê°ìŽ ë€ížìí¬ ë²íž 10.1.2.0ì IP 죌ì륌 ì¬ì©í©ëë€.
address.SetBase("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces;
csmaInterfaces = 죌ì.í ë¹(csmaDevices);
ìŽì í íŽë¡ì§ê° 구ì¶ëìì§ë§ ì í늬ìŒìŽì ìŽ íìí©ëë€. ìŽ ì¹ì ì
Ʞ볞ì ìŒë¡ ì í늬ìŒìŽì ì¹ì 곌 ì ì¬í©ëë€. 첫 ë²ì§ž.cc íì§ë§ ì°ëŠ¬ë
CSMA ì¥ì¹ì íŽëŒìŽìžížê° ìë ë žë ì€ íëìì ìë²ë¥Œ ìžì€íŽì€íí©ëë€.
ì ëì ì¥ì¹ë§ ìë ë žë.
뚌ì ììœ ìë²ë¥Œ ì€ì í©ëë€. ì°ëŠ¬ë UdpEchoServerëì°ë¯ž ê·žëŠ¬ê³ íì ì ê³µ
ìì± ìë² í¬íž ë²ížìž ìì±ìì ëí ê°ì ëë€. ìŽ í¬ížë¥Œ êž°ìµíììì€.
륌 ì¬ì©íì¬ ëì€ì ë³ê²œí ì ììµëë€. ìì± ì€ì ìíë ê²œì° ë°©ë²ìŽì§ë§
ìì±ììê² ì ê³µë©ëë€.
UdpEchoServerHelper echoServer(9);
ApplicationContainer serverApps = echoServer.Install(csmaNodes.Get(nCsma));
serverApps.Start(ìŽ(1.0));
serverApps.Stop(ìŽ(10.0));
ëŠ¬ìœ csmaë žë ë žë컚í ìŽë ìíŽ ìì±ë ë žë ì€ íë륌 í¬íší©ëë€.
ì ëì ë€ížìí¬ ë° nCsma "ì¶ê°" ë žë. ì°ëŠ¬ê° ì»ê³ ì íë ê²ì ë§ì§ë§
"ì¶ê°" ë žë. XNUMXë²ì§ž í목 csmaë žë 컚í ìŽëë ì§ì ê°
ë§ë. ìŽë¥Œ ìœê² ìê°íë ë°©ë²ì íëì "ì¶ê°" CSMA ë žë륌 ìì±íë©Ž
ë€ì ì€ íëì ìžë±ì€ì ìì ê²ì ëë€. csmaë žë 컚í ìŽë. ì ëì ìíŽ, ì°ëŠ¬ê° ë§ë€ë©Ž nCsma "ì¶ê°ì"
ë§ì§ë§ ë žëë ìžë±ì€ì ìì ë žë nCsma. ì ì ìë ê²ì 볌 ì ììµëë€. ëì ë°ìê°ìžì 첫 ë²ì§žì
ìœë ì€.
íŽëŒìŽìžíž ì í늬ìŒìŽì ì 첫 ë²ì§ž.cc ìì ì€í¬ëŠœíž. ë€ì,
ì°ëŠ¬ë íì륌 ì ê³µí©ëë€ Attributes ë¶í° UdpEchoClientëì°ë¯ž ìì±ììì(ìŽ ê²œì°
ì격 죌ì ë° í¬íž). ì°ëŠ¬ë íŽëŒìŽìžížìê² ìë²ë¡ íší·ì 볎ëŽëŒê³ ì§ìí©ëë€.
ë§ì§ë§ "ì¶ê°" CSMA ë žëì ì€ì¹ë©ëë€. ê°ì¥ ìŒìªœì íŽëŒìŽìžížë¥Œ ì€ì¹í©ëë€.
í íŽë¡ì§ 귞늌ì íìë ì ëì ë žë.
UdpEchoClientHelper echoClient(csmaInterfaces.GetAddress(nCsma), 9);
echoClient.SetAttribute("MaxPackets", UintegerValue (1));
echoClient.SetAttribute("ê°ê²©", TimeValue(ìŽ(1.0)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));
ApplicationContainer clientApps = echoClient.Install(p2pNodes.Get(0));
clientApps.Start(ìŽ(2.0));
clientApps.Stop(ìŽ(10.0));
ì€ì ë¡ ì¬êž°ì ìží°ë€ížìí¬ë¥Œ 구ì¶íêž° ë묞ì ìŽë€ ííì ìží°ë€ížìí¬ê° íìí©ëë€.
ëŒì°í . NS-3 ê·í륌 ëêž° ìíŽ ì°ëŠ¬ê° êžë¡ë² ëŒì°í ìŽëŒê³ ë¶ë¥Žë ê²ì ì ê³µí©ëë€. êžë¡ë² ëŒì°í í ìŽí¬
ì뮬ë ìŽì ìì ì 첎 ìží°ë€ížìí¬ì ì¡ìžì€í ì ìë€ë ì¬ì€ì ìŽì 곌
ì뮬ë ìŽì ì ìíŽ ìì±ë 몚ë ë žë륌 íµíŽ ì€í --- ìŽë €ìŽ ìì ì ìíí©ëë€.
ëŒì°í°ë¥Œ 구ì±íì§ ìê³ ë ëŒì°í ì ì€ì í ì ììµëë€.
Ʞ볞ì ìŒë¡ ë°ìíë ìŒì ê° ë žëê° OSPF ëŒì°í°ìž ê²ì²ëŒ ëìíì¬ ë€ìì ìííë ê²ì ëë€.
묎ë ë€ì ë€ë¥ž 몚ë ëŒì°í°ì ìŠê°ì ìŽê³ ë§ì ì²ëŒ íµì í©ëë€. ê° ë žë
ë§í¬ êŽê³ 륌 ìì±íê³ ìŽë¥Œ êžë¡ë² ê²œë¡ êŽëŠ¬ììê² ì§ì ì ë¬í©ëë€.
ìŽ ì ì ì 볎륌 ì¬ì©íì¬ ê° ë žëì ëí ëŒì°í í ìŽëžì 구ì±í©ëë€. í겜
ìŽ íìì ëŒì°í ì í ì€ì§ëŠ¬ì ëë€.
Ipv4GlobalRoutingHelper::PopulateRoutingTables();
ë€ììŒë¡ pcap ì¶ì ì íì±íí©ëë€. pcap ì¶ì ì íì±ííë 첫 ë²ì§ž ìœë ì€ì
point-to-point ëì°ë¯žë ìŽì ìµìí ê²ì ëë€. ë ë²ì§ž ì€ì pcapì íì±íí©ëë€.
CSMA í¬íŒìì ì¶ì íê³ ìì§ ë§ëì§ ëª»í ì¶ê° 맀ê°ë³ìê° ììµëë€.
pointToPoint.EnablePcapAll("ìŽ");
csma.EnablePcap("ìŽ", csmaDevices.Get(1), true);
CSMA ë€ížìí¬ë ë€ì§ì ê° ë€ížìí¬ì ëë€. ìŽê²ì í ì ììì ì믞í©ëë€.
ìŽ ê²œì°) ê³µì 맀첎ì ì¬ë¬ ëì . ìŽë¬í ê° ëì ìë ë€ížìí¬ê° ììµëë€.
ê·žê²ê³Œ êŽë šë ì¥ì¹. ì¶ì ìì§ì ëí ë ê°ì§ Ʞ볞 ëììŽ ììµëë€.
ê·žë¬í ë€ížìí¬ì ì 볎. í ê°ì§ ë°©ë²ì ê° ë€íž ì¥ì¹ì ëí ì¶ì íìŒì ë§ëë ê²ì ëë€.
íŽë¹ ë€íž ì¥ì¹ìì ëŽë³ŽëŽê±°ë ìë¹íë íší·ë§ ì ì¥í©ëë€. ë ë€ë¥ž ë°©ë²
ì¥ì¹ ì€ íë륌 ì ííì¬ ë¬Žì°šë³ ëªšëë¡ ì€ì íë ê²ì ëë€. ê·žë¬ë©Ž ê·ž ëšìŒ ì¥ì¹
몚ë íší·ì ëíŽ ë€ížìí¬ë¥Œ "ì€ëí"íê³ ëšìŒ pcap íìŒì ì ì¥í©ëë€. ìŽê²ìŽ ë°©ë²ì ëë€
TCP ë€í, ì륌 ë€ìŽ ìëí©ëë€. ìŽ ë§ì§ë§ 맀ê°ë³ìë CSMA í¬íŒìê² ë€ì ì¬ë¶ë¥Œ ìë €ì€ëë€.
ë¬Žì°šë³ ëªšëìì íší·ì 캡ì²íëë¡ ì¡°ì í©ëë€.
ìŽ ìììë CSMA ë€ížìí¬ì ìë ì¥ì¹ ì€ íë륌 ì ííê³ ë¬ŒìŽë³Œ ê²ì ëë€.
ë€ížìí¬ì ëì¡í ì€ëíì ìííì¬ ë¬Žìì ì뮬ë ìŽì í©ëë€. TCP ë€í í ê²ìŽë€.
Linux ìì€í ì ì¬ì© ì€ìŽëŒë©Ž ë€ì곌 ê°ìŽ í ì ììµëë€. TCP ë€í -i eth0 ~ì ì»êž° ìíŽ
ì¶ì íë€. ìŽ ê²œì° ë€ìì ì¬ì©íì¬ ì¥ì¹ë¥Œ ì§ì í©ëë€. csmaDevices.Get(1), ì ííë
컚í ìŽëì 첫 ë²ì§ž ì¥ì¹. ë§ì§ë§ 맀ê°ë³ì륌 trueë¡ ì€ì íë©Ž 묎찚ë³
캡ì².
ìœëì ë§ì§ë§ ì¹ì ì ë€ì곌 ê°ìŽ ì뮬ë ìŽì ì ì€ííê³ ì 늬í©ëë€. 첫 ë²ì§ž.cc
ì.
ì뮬ë ìŽí°::ì€í();
ì뮬ë ìŽí°::íꎎ();
0ê° ëì;
}
ìŽ ìì 륌 ì€ííë €ë©Ž ìŽ.cc ì€í¬ëì¹ ëë í 늬ì ìì ì€í¬ëŠœíž
waf륌 ì¬ì©íì¬ ì²« ë²ì§ž.cc ì. ë¹ì ìŽììë 겜ì°
ë°©êž ì ë ¥í ì ì¥ìì ìµìì ëë í 늬,
$ cp ìì /íí 늬ìŒ/second.cc ì€í¬ëì¹/mysecond.cc
$ ./ìí
ê²œê³ : ì°ëŠ¬ë íìŒì ì¬ì©í©ëë€ ìŽ.cc ìëíëì§ íìžíêž° ìí íê· í ì€íž ì€ íëë¡
íí ëŠ¬ìŒ ê²œíì êžì ì ìŒë¡ ë§ë€êž° ìíŽ ì°ëŠ¬ê° ìê°íë ê²ê³Œ ì íí ìŒì¹í©ëë€.
ìŽê²ì ìŽëŠìŽ ì§ì ë ì€í íìŒì ì믞í©ëë€. ìŽ íë¡ì ížì ìŽë¯ž ì¡Žì¬í©ëë€. íŒíë €ë©Ž
ë¹ì ìŽ ì€ííê³ ìë ê²ì ëíŽ íŒëìŽ ìë€ë©Ž, ë€ììŒë¡ ìŽëŠì ë°êŸžììì€. mysecond.cc ì¶ì²
ì.
ë¹ì ìŽ íí 늬ìŒì ì¢ êµì ìŒë¡ ë°ë¥Žê³ ìë€ë©Ž(ë¹ì ì ê·žë ì§ ììµëê¹) ì¬ì í ë¹ì ì
NS_LOG ë³ìê° ì€ì ëììŒë¯ë¡ íŽë¹ ë³ì륌 ì§ì°ê³ íë¡ê·žëšì ì€ííììì€.
$ ëŽë³ŽëŽêž° NS_LOG=
$ ./waf --ì€í¬ëì¹/mysecond ì€í
UDP ììœ ì í늬ìŒìŽì ì ì€ì í ìŽíë¡ ì²« ë²ì§ž.cc, ê·žëŽê±°ìŒ
ì€í¬ëŠœížë¥Œ ì€íí ë ì ì¬í ì¶ë ¥ìŽ íìë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.415ìŽ).
1024ë°ìŽížë¥Œ 10.1.2.4ë¡ ë³Žëìµëë€.
1024ìì 10.1.1.1ë°ìŽíž ìì ëš
1024ìì 10.1.2.4ë°ìŽíž ìì ëš
첫 ë²ì§ž ë©ìì§ìž "ë³Žëž 1024 ë°ìŽíž ì 10.1.2.4,"ë UDP ììœ íŽëŒìŽìžížì ëë€.
íší·ì ìë²ë¡ 볎ë ëë€. ìŽ ê²œì° ìë²ë ë€ë¥ž ë€ížìí¬ì ììµëë€.
(10.1.2.0). ë ë²ì§ž ë©ìì§, "ìì 1024 ë°ìŽíž ì 10.1.1.1,"ë UDP ììœìì ê°ì žìš ê²ì ëë€.
ììœ íší·ì ìì í ë ìì±ëë ìë². ë§ì§ë§ ë©ìì§ "ìì 1024
ë°ìŽíž ì 10.1.2.4,"ë ììœ íŽëŒìŽìžížìì ììŒë©° ììœë¥Œ ìì íìì ëíë ëë€.
ë€ì ìë²ìì.
ìŽì ìµìì ëë í ëŠ¬ë¡ ìŽëíì¬ ë³Žë©Ž ìž ê°ì ì¶ì íìŒìŽ ììµëë€.
second-0-0.pcap second-1-0.pcap second-2-0.pcap
ì ì ìŽ íìŒì ìŽëŠì ìŽíŽë³Žê² ìµëë€. 몚ë ê°ì íí륌 ê°ì§ê³ ììŒë©°,
- - .pcap. ì륌 ë€ìŽ 목ë¡ì 첫 ë²ì§ž íìŒì
ìŽ-0-0.pcap ìŽë ë žë XNUMX, ì¥ì¹ XNUMXì pcap ì¶ì ì ëë€. ìŽê²ìŽ
ë žë XNUMXì ì ëì ë€íž ì¥ì¹. íìŒ ìŽ-1-0.pcap ì ëí pcap ì¶ì ì ëë€.
ë žë XNUMXì ì¥ì¹ XNUMX, ëí ì ëì ë€íž ì¥ì¹; ê·žëŠ¬ê³ íìŒ ìŽ-2-0.pcap is
ë žë XNUMXì ì¥ì¹ XNUMXì ëí pcap ì¶ì .
ì¹ì ìì ë¶ë¶ì í íŽë¡ì§ 귞늌ì ë€ì ì°žì¡°íë©Ž
íŽë¹ ë žë XNUMXì ì ëì ë§í¬ì ê°ì¥ ìŒìªœ ë žëìŽê³ ë žë XNUMXì ë žëì ëë€.
ì ëì ì¥ì¹ì CSMA ì¥ì¹ë¥Œ 몚ë ê°ì§ê³ ììµëë€. ë žë XNUMXê°
CSMA ë€ížìí¬ì 첫 ë²ì§ž "ì¶ê°" ë žëì íŽë¹ ì¥ì¹ XNUMXìŽ ì¥ì¹ë¡ ì íëììµëë€.
ë¬Žì°šë³ ëªšë ì¶ì ì 캡ì²í©ëë€.
ìŽì ìží°ë€ížìí¬ë¥Œ íµíŽ ììœ íší·ì ë°ëŒê° ëŽ ìë€. 뚌ì ë€ìì tcpdump륌 ìíí©ëë€.
ê°ì¥ ìŒìªœ ì§ì ê° ë žëì ëí ì¶ì íìŒ --- ë žë XNUMX.
$ tcpdump -nn -tt -r ìŽ-0-0.pcap
pcap íìŒì ëŽì©ìŽ íìëìŽìŒ í©ëë€.
íìŒ second-0-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.017607 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
ë€íì 첫 ë²ì§ž ëŒìžì ë§í¬ ì íìŽ PPP(point-to-point)ìì ëíë ëë€.
ììíë€. ê·žë° ë€ì IPì ì°ê²°ë ì¥ì¹ë¥Œ íµíŽ ë žë XNUMXì ë ëë ììœ íší·ì 볌 ì ììµëë€.
죌ì 10.1.1.1ì IP 죌ì 10.1.2.4(ê°ì¥ ì€ë¥žìªœ CSMA ë žë)ë¡ í¥í©ëë€. ìŽ íší·
í¬ìžíž-í¬-í¬ìžíž ë§í¬ë¥Œ íµíŽ ìŽëíê³ í¬ìžíž-í¬-í¬ìžíž ë€íž ì¥ì¹ì ìíŽ ìì ë©ëë€.
ë žë XNUMX. í ë² ë³Žì:
$ tcpdump -nn -tt -r ìŽ-1-0.pcap
ìŽì ì§ì ê° ë§í¬ì ë€ë¥ž 쪜ì pcap ì¶ì ì¶ë ¥ìŽ íìëìŽìŒ í©ëë€.
íìŒ second-1-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.003686 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.013921 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
ì¬êž°ìì ë§í¬ ì íë ììí ëë¡ PPPìì ì ì ììµëë€. IPìì íší·ìŽ 볎ì ëë€.
IP 죌ì 10.1.1.1ë¡ í¥íë 죌ì 2.000000(10.1.2.4ìŽì ì ì¡ëš)
ìŽ ìží°íìŽì€ì ëíë©ëë€. ìŽì ëŽë¶ì ìŒë¡ ìŽ ë žëë¡ íší·ìŽ ì ë¬ë©ëë€.
CSMA ìží°íìŽì€ì ì°ëŠ¬ë ê¶ê·¹ì ìŒë¡ í¥íë íŽë¹ ì¥ì¹ìì íìŽëì€ë ê²ì 볌 ì ììµëë€.
목ì ì§.
ì°ëŠ¬ë CSMA ë€ížìí¬ì ëí ëì¡í ì€ëíŒ ë žëë¡ ë žë 2륌 ì ííìì êž°ìµíììì€.
ê·žë° ë€ì second-2-0.pcapì ìŽíŽë³Žê³ ìëì§ íìží©ëë€.
$ tcpdump -nn -tt -r ìŽ-2-0.pcap
ìŽì ë žë XNUMXì ë¬Žì°šë³ ë€íìž ì¥ì¹ XNUMXìŽ íìëìŽìŒ í©ëë€.
íìŒ second-2-0.pcapìì ìœêž°, ë§í¬ ì í EN10MB(ìŽëë·)
2.007698 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, êžžìŽ 50
2.007710 ARP, ìëµ 10.1.2.4ë 00:00:00:00:00:06, êžžìŽ 50ì ëë€.
2.007803 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.013815 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, êžžìŽ 50
2.013828 ARP, ìëµ 10.1.2.1ë 00:00:00:00:00:03, êžžìŽ 50ì ëë€.
2.013921 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
볎ìë€ìíŒ ë§í¬ ì íì ìŽì "ìŽëë·"ì ëë€. ê·žë°ë° ìë¡ìŽ ê²ìŽ ëíë¬ìµëë€. ê·žë§íŒ
ë²ì€ ë€ížìí¬ íì ARP, 죌ì íìž íë¡í ìœ. ë žë XNUMXì ì ì¡íŽìŒ íšì ìê³ ììµëë€.
íší·ì IP 죌ì 10.1.2.4ë¡ ë³ŽëŽì§ë§ MAC 죌ì륌 ìì§ ëª»í©ëë€.
íŽë¹ ë žë. CSMA ë€ížìí¬(ff:ff:ff:ff:ff:ff)ìì ëžë¡ëìºì€ížíì¬
IP 죌ìê° 10.1.2.4ìž ì¥ì¹. ìŽ ê²œì° ê°ì¥ ì€ë¥žìªœ ë žëë ë€ì곌 ê°ìŽ ìëµí©ëë€.
MAC 죌ì 00:00:00:00:00:06ì ììµëë€. ë žë XNUMXë ìŽ ìì ì ì§ì êŽì¬íì§ ììµëë€.
êµííì§ë§ ë€ížìí¬ë¥Œ ì€ëííê³ íìëë 몚ë ížëíœì ë³Žê³ í©ëë€.
ìŽ êµíì ë€ì ì€ìì 볌 ì ììµëë€.
2.007698 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, êžžìŽ 50
2.007710 ARP, ìëµ 10.1.2.4ë 00:00:00:00:00:06, êžžìŽ 50ì ëë€.
ê·žë° ë€ì ë žë XNUMX, ì¥ì¹ XNUMXìŽ ì§íëìŽ UDP ììœ ìë²ì ììœ íší·ì 볎ë ëë€.
IP 죌ì 10.1.2.4.
2.007803 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
ìë²ë ììœ ìì²ì ìì íê³ íší·ì ëë € 볎ëŽë €ê³ ìëí©ëë€.
ì¶ì². ìë²ë ìŽ ì£Œìê° ë€ìì íµíŽ ëë¬íë ë€ë¥ž ë€ížìí¬ì ììì ìê³ ììµëë€.
IP 죌ì 10.1.2.1. ìŽê²ì ì°ëŠ¬ê° êžë¡ë² ëŒì°í ì ìŽêž°ííê³ ëªšë ê²ì íì íêž° ë묞ì ëë€.
ì°ëŠ¬ë¥Œ ìíŽ ìŽê²ì ë°ìŒë¡. ê·žë¬ë ììœ ìë² ë žëë 첫 ë²ì§ž MAC 죌ì륌 ìì§ ëª»í©ëë€.
CSMA ë žëìŽë¯ë¡ 첫 ë²ì§ž CSMA ë žëê° ìííŽìŒ íë ê²ì²ëŒ ARP륌 ìííŽìŒ í©ëë€.
2.013815 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, êžžìŽ 50
2.013828 ARP, ìëµ 10.1.2.1ë 00:00:00:00:00:03, êžžìŽ 50ì ëë€.
ê·žë° ë€ì ìë²ë ììœë¥Œ ì ë¬ ë žëë¡ ë€ì 볎ë ëë€.
2.013921 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
point-to-point ë§í¬ì ê°ì¥ ì€ë¥žìªœ ë žë륌 ëëì볎멎,
$ tcpdump -nn -tt -r ìŽ-1-0.pcap
ìŽì ììœë íší·ìŽ ë§ì§ë§ìŒë¡ ì ëì ë§í¬ë¡ ëëìì€ë ê²ì 볌 ì ììµëë€.
ì¶ì ë€í ëŒìž.
íìŒ second-1-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.003686 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.013921 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
ë§ì§ë§ìŒë¡ ììœë¥Œ ììí ë žë륌 ë€ì 볌 ì ììµëë€.
$ tcpdump -nn -tt -r ìŽ-0-0.pcap
ììœë íší·ìŽ 2.007602ìŽì ìì€ì ë€ì ëì°©íëì§ íìží©ëë€.
íìŒ second-0-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.017607 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
ë§ì§ë§ìŒë¡ CSMA ì¥ì¹ì ì륌 ì ìŽíë ââêž°ë¥ì ì¶ê°í ê²ì êž°ìµíììì€.
ëª ë ¹ì€ ìžìë¡ ì뮬ë ìŽì í©ëë€. ìŽ ìžìë ë€ì곌 ê°ì ë°©ììŒë¡ ë³ê²œí ì ììµëë€.
ì°ëŠ¬ë ììœë íší·ì ì륌 ë³ê²œíë ê²ì 볎ììµëë€ ì²« ë²ì§ž.cc ì. ì€ííŽ ë³Žìžì
"ì¶ê°" ì¥ì¹ ìê° XNUMXê°ë¡ ì€ì ë íë¡ê·žëš:
$ ./waf --run "scratch/mysecond --nCsma=4"
ìŽì íìžíŽìŒ í©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.405ìŽ).
ìê°ì 2s íŽëŒìŽìžížë 1024 ë°ìŽížë¥Œ 10.1.2.5 í¬íž 9ë¡ ë³Žëìµëë€.
ìê° 2.0118ìŽì ìë²ë 1024 í¬íž 10.1.1.1ìì 49153ë°ìŽížë¥Œ ìì íìµëë€.
2.0118ìŽì ìë²ê° 1024ë°ìŽížë¥Œ 10.1.1.1 í¬íž 49153ìŒë¡ 볎ëìµëë€.
ìê° 2.02461ìŽì íŽëŒìŽìžížê° 1024 í¬íž 10.1.2.5ìì 9ë°ìŽížë¥Œ ìì íìµëë€.
ìŽì ììœ ìë²ê° ë§ì§ë§ CSMA ë žëë¡ ì¬ë°°ì¹ëììµëë€.
10.1.2.5 Ʞ볞 ìŒìŽì€ ëì 10.1.2.4.
ë°©êŽìê° ìì±í ì¶ì íìŒì ë§ì¡±íì§ ìì ì ììµëë€.
CSMA ë€ížìí¬. ëšìŒ ì¥ì¹ìì ì¶ì ì ì»ê³ ì¶ì ìë ìì§ë§ ê·žë ì§ ìì ìë ììµëë€.
ë€ížìí¬ì ë€ë¥ž ížëíœì êŽì¬ì ê°ì žìŒ í©ëë€. ë¹ì ì ìŽê²ì ìë¹í ìœê² í ì ììµëë€.
ìŽíŽ ë³Žê² ìµëë€. ì€í¬ëì¹/mysecond.cc ê·ž ìœë륌 ì¶ê°íë©Ž ì°ëŠ¬ê° ë ë§ì ê²ì í ì ììµëë€.
í¹ì . NS-3 ëì°ë¯žë ë žë ë²ížì ì¥ì¹ ë²ížë¥Œ ë€ì곌 ê°ìŽ ì¬ì©íë ë©ìë륌 ì ê³µí©ëë€.
맀ê°ë³ì. ê³ìíŽì êµì²Žíììì€. Pcap íì±í ìë ì íë¡ ì ííììì€.
pointToPoint.EnablePcap("ìŽ", p2pNodes.Get(0)->GetId(), 0);
csma.EnablePcap("ìŽ", csmaNodes.Get(nCsma)->GetId(), 0, false);
csma.EnablePcap("ìŽ", csmaNodes.Get(nCsma-1)->GetId(), 0, false);
ì°ëŠ¬ë Ʞ볞 ìŽëŠìŽ "second"ìž pcap íìŒì ë§ë€ê³ ì¶ë€ë ê²ì ìê³ ììŒë©° ëí ìê³ ììµëë€.
ë ê²œì° ëªšë êŽì¬ ìë ì¥ì¹ê° XNUMXìŽ ë ê²ìŽë¯ë¡ íŽë¹ 맀ê°ë³ìë
ì ë§ í¥ë¯žë¡ìŽ.
ë žë ë²ížë¥Œ ì»ìŒë €ë©Ž ë ê°ì§ ì íìŽ ììµëë€. 첫짞, ë žëë
ë§ë ììëë¡ XNUMXë¶í° ììíì¬ ëšì¡°ë¡ê² ìŠê°íë íšì
ê·žë€ì. ë žë ë²ížë¥Œ ì»ë í ê°ì§ ë°©ë²ì ìŽ ë²ížë¥Œ "ìëìŒë¡" íì íë ê²ì ëë€.
ë žë ìì± ìì륌 ê³ ë €í©ëë€. ë€ížìí¬ í íŽë¡ì§ë¥Œ ìŽíŽë³Žë©Ž
íìŒì ìì ë¶ë¶ì ìë 귞늌, ì°ëŠ¬ë ë¹ì ì ìíŽ ìŽê²ìíê³ ë¹ì ì 볌 ì ììµëë€
ë§ì§ë§ CSMA ë žëë ë žë ë²ížê° ë©ëë€. nCsma + 1. ìŽ ì ê·Œ ë°©ìì ì§ìŠëê² ë ì ììµëë€.
ë í° ì뮬ë ìŽì ììë ìŽë µìµëë€.
ì¬êž°ì ì°ëŠ¬ê° ì¬ì©íë ë ë€ë¥ž ë°©ë²ì ë žë 컚í ìŽë í¬íšíë
í¬ìží° NS-3 ë žë ì¬ë¬Œ. ê·žë§íŒ ë žë ê°ì²Žìë ë€ì곌 ê°ì ë©ìëê° ììµëë€. ID ê°ì žì€êž° ìŽë ê²
ì°ëŠ¬ê° ì°Ÿë ë žë ë²ížìž íŽë¹ ë žëì ID륌 ë°íí©ëë€. 륌 ë³Žë¬ ê°ì
ë ìì ì ìí ë žë ë ìëì ìë íŽë¹ ë©ìë륌 ì°Ÿìµëë€. NS-3 íµì¬ ìœë
ì°ëŠ¬ê° ì§êžê¹ì§ 볞 ê²ë³Žë€; ê·žë¬ë ëë¡ë ì ì©í ê²ì ë¶ì§ë°í ì°ŸììŒ í©ëë€.
늎늬ì€ì ëí Doxygen 묞ìë¡ ìŽëí©ëë€(Doxygen 묞ììì ì°Ÿì ì ììì êž°ìµíììì€.
íë¡ì íž ì¹ ì¬ìŽíž). ë¹ì ìì ëì°©í ì ììµëë€ ë žë 륌 íµíŽ 묞ìí
"Classes" íìì ì°Ÿì ëê¹ì§ "Class List" ìëë¡ ì€í¬ë¡€ ns3::ë žë. ì í
ns3::ë žë ì ëí 묞ìë¡ ìŽëí©ëë€. ë žë ìì . ë§ìœ ë¹ì ìŽ ì§êž
ìëë¡ ì€í¬ë¡€ ID ê°ì žì€êž° ë°©ë²ì ì ííì¬ ììžíìŽì§ë¡ ìŽëí©ëë€.
ë°©ë²ì ëí 묞ì. ì¬ì©íì¬ ID ê°ì žì€êž° ë°©ë²ì ë žë ë²ížë¥Œ ê²°ì í ì ììµëë€.
ë³µì¡í í íŽë¡ì§ìì íšì¬ ìœìµëë€.
íŒëì íŒíêž° ìíŽ ìµìì ëë í 늬ìì ìŽì ì¶ì íìŒì ì§ì°ììì€.
ë¬Žìš ìŒìŽìŒ,
$ rm *.pcap
$ rm *.tr
ì ì€í¬ëŠœížë¥Œ ë¹ëíê³ ì뮬ë ìŽì ì€ì ì ì€ííë©Ž nCsma 100ì,
$ ./waf --run "scratch/mysecond --nCsma=100"
ë€ì ì¶ë ¥ìŽ íìë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.407ìŽ).
ìê°ì 2s íŽëŒìŽìžížë 1024 ë°ìŽížë¥Œ 10.1.2.101 í¬íž 9ë¡ ë³Žëìµëë€.
ìê° 2.0068ìŽì ìë²ë 1024 í¬íž 10.1.1.1ìì 49153ë°ìŽížë¥Œ ìì íìµëë€.
2.0068ìŽì ìë²ê° 1024ë°ìŽížë¥Œ 10.1.1.1 í¬íž 49153ìŒë¡ 볎ëìµëë€.
ìê° 2.01761ìŽì íŽëŒìŽìžížê° 1024 í¬íž 10.1.2.101ìì 9ë°ìŽížë¥Œ ìì íìµëë€.
ììœ ìë²ë ìŽì 10.1.2.101ê°ì íŽë¹íë 100ì ììµëë€.
ë§ì§ë§ ë žëì ììœ ìë²ê° ìë "ì¶ê°" CSMA ë žë. pcap íìŒì ëìŽíë©Ž
íìëë ìµìì ëë í 늬,
second-0-0.pcap second-100-0.pcap second-101-0.pcap
ì¶ì íìŒ ìŽ-0-0.pcap ììœìž "ê°ì¥ ìŒìªœ" ì§ì ê° ì¥ì¹ì ëë€.
íší· ìì€. íìŒ ìŽ-101-0.pcap ê°ì¥ ì€ë¥žìªœ CSMA ì¥ì¹ì íŽë¹í©ëë€.
ììœ ìë²ê° ì죌íë ê³³ì ëë€. ì ë§ì§ë§ 맀ê°ë³ìê°
ììœ ìë² ë žëìì pcap ì¶ì ì íì±ííêž° ìí ížì¶ìŽ ê±°ì§ìŽììµëë€. ìŽë ì¶ì ì ì믞í©ëë€.
íŽë¹ ë žëì ëªšìž ë žëë ë¬Žì°šë³ ëªšëê° ìëëë€.
ëì¡í ì¶ì 곌 ê·žë ì§ ìì ì¶ì ì ì°šìŽì ì ì€ëª íêž° ìíŽ ì°ëŠ¬ë ëí
ë§ì§ë§ìì ë€ì ë žëì ëí ë¬Žì°šë³ ì¶ì ì ìì²íìµëë€. ê³ìíŽì ìŽíŽë³Žììì€.
ì ì, TCP ë€í for ìŽ-100-0.pcap.
$ tcpdump -nn -tt -r ìŽ-100-0.pcap
ìŽì ë žë 100ìŽ ììœ êµíì ë°©êŽììì ì ì ììµëë€. ì ìŒí
ìì íë íší·ì ì 첎 CSMAì ëžë¡ëìºì€ížëë ARP ìì²ì ëë€.
ë€ížìí¬.
íìŒ second-100-0.pcapìì ìœêž°, ë§í¬ ì í EN10MB(ìŽëë·)
2.006698 ARP, Request who-has 10.1.2.101 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, êžžìŽ 50
2.013815 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.101, êžžìŽ 50
ìŽì TCP ë€í for ìŽ-101-0.pcap.
$ tcpdump -nn -tt -r ìŽ-101-0.pcap
ìŽì ë žë 101ìŽ ì€ì ë¡ ììœ êµíì ì°žê°ììì ì ì ììµëë€.
íìŒ second-101-0.pcapìì ìœêž°, ë§í¬ ì í EN10MB(ìŽëë·)
2.006698 ARP, Request who-has 10.1.2.101 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, êžžìŽ 50
2.006698 ARP, ìëµ 10.1.2.101ë 00:00:00:00:00:67, êžžìŽ 50ì ëë€.
2.006803 IP 10.1.1.1.49153 > 10.1.2.101.9: UDP, êžžìŽ 1024
2.013803 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.101, êžžìŽ 50
2.013828 ARP, ìëµ 10.1.2.1ë 00:00:00:00:00:03, êžžìŽ 50ì ëë€.
2.013828 IP 10.1.2.101.9 > 10.1.1.1.49153: UDP, êžžìŽ 1024
몚í, Attributes and íì€
ìŽê²ì ìì ì¬íì íê³ ì€ìí í¬ìžížë¥Œ ë§ë€êž°ì ížëŠ¬í ì¥ìì ëë€. í ì ììµëë€
ëë ëª ííì§ ìì ì ìì§ë§ ì뮬ë ìŽì ì ì¬ì©í ëë§ë€ ë€ìì ìííë ê²ìŽ ì€ìí©ëë€.
몚ëžë§ëë ê²ê³Œ ê·žë ì§ ìì ê²ì ì íí ìŽíŽí©ëë€. ì륌 ë€ìŽ ë€ì곌 ê°ì ì í¹ìŽ ììµëë€.
ìŽì ì¹ì ìì ì¬ì©ë CSMA ì¥ì¹ ë° ì±ëì ì€ì ìž ê²ì²ëŒ ìê°íììì€.
ìŽëë· ì¥ì¹; ë°ìí ìŒì ì§ì ë°ìíë ì뮬ë ìŽì 결곌륌 êž°ëí©ëë€.
ì€ì ìŽëë·ìì. ê·žë ì§ ìë€.
몚ëžì ì ìì íì€ì ì¶ìíì ëë€. ê²°êµ ì± ììŽë€
ìì "ì íë ë²ì" ë° "ëë©ìž"ì ê²°ì íêž° ìí ì뮬ë ìŽì ì€í¬ëŠœíž ìì±ìì
ì 첎ë¡ìì ì뮬ë ìŽì ì "ì ì© ê°ë¥ì±", ë°ëŒì ê·ž êµ¬ì± ë¶ë¶.
겜ì°ì ë°ëŒ ìšìì€ë§, 묎ììžì§ ê²°ì íë ê²ì ìë¹í ìœìµëë€. ì§ì 몚ëž. ì ìíŽ
ëªšëž ì€ëª ìœêž°(csma.h) 충ë ê°ì§ê° ììì ì ì ììµëë€.
ì뮬ë ìŽì ìì CSMA 몚ëžì ì¬ì©ìŽ ìŒë§ë ì ì© ê°ë¥íì§ ê²°ì í©ëë€.
결곌ì í¬íší ì ìë 죌ì ì¬í. ë€ë¥ž 겜ì°ìë ë§€ì° ì¬ìž ì ììµëë€.
ëê°ì 구맀í ì ìë íì€ê³Œ ìŒì¹íì§ ìì ì ìë íëì 구ì±í©ëë€. ê·žê²
ëª ê°ì§ ê·žë¬í ì¬ë¡ë¥Œ ì¡°ì¬íë ë° ìê°ì í ì í ê°ì¹ê° ììì ìŠëª í ê²ì ëë€.
ì뮬ë ìŽì ìì íì€ì ë²ì륌 ìœê² ë²ìŽë ì ììµëë€.
볎ìë€ìíŒ NS-3 ì ê³µ Attributes ì¬ì©ìê° ìœê² ëªšëž ë³ê²œì ì€ì í ì ìë
íë. ë€ì ë ê°ì§ë¥Œ ê³ ë €íììì€. Attributes ì CsmaNetì¥ì¹: ìí¬ and
캡ìí 몚ë. ê·žë§íŒ ìí¬ ìì±ì ìµë ì ì¡ ëšì륌 ëíë ëë€.
ì¥ì¹. ìŽê²ì ì¥ì¹ê° ì¬ì©í ì ìë ê°ì¥ í° PDU(Protocol Data Unit)ì í¬êž°ì ëë€.
볎ëŽë€.
MTUë Ʞ볞ì ìŒë¡ 1500ë°ìŽížì ëë€. CsmaNetì¥ì¹. ìŽ êž°ë³žê°ì ì«ìì íŽë¹í©ëë€.
RFC 894, "A Standard for the Transmission of IP Datagrams over Ethernet
ë€ížìí¬." ì«ìë ì€ì ë¡ 10Base5ì ìµë íší· í¬êž°ìì íìë©ëë€.
(ì 첎 ì¬ì ìŽëë·) ë€ížìí¬ -- 1518ë°ìŽíž. DIX 캡ìí륌 빌멎
ìŽëë· íší·(18ë°ìŽíž)ì ëí ì€ë²í€ëë ê°ë¥í ìµë ë°ìŽí° í¬êž°ë¡ ëë©ëë€.
(MTU) 1500ë°ìŽíž. íëë ëí ì°Ÿì ì ììµëë€ MTU IEEE 802.3 ë€ížìí¬ì ê²œì° 1492
ë°ìŽíž. ìŽë LLC/SNAP 캡ìíê° XNUMXë°ìŽížì ì¶ê° ì€ë²í€ë륌 ì¶ê°íêž° ë묞ì ëë€.
íší·. ë ê²œì° ëªšë Ʞ볞 íëìšìŽë 1518ë°ìŽížë§ ë³ŽëŒ ì ìì§ë§ ë°ìŽí°ë
í¬êž°ê° ë€ëŠ ëë€.
캡ìí 몚ë륌 ì€ì íêž° ìíŽ, CsmaNetì¥ì¹ ~ì ì ê³µíë€ ìì± ëŒë
캡ìí 몚ë ê°ì¹ë¥Œ ê°ì§ ì ìë ëì€ or LLC. ìŽë€ì ìŽëë·ì íŽë¹í©ëë€.
ë° LLC/SNAP íë ìŽë°.
í ì¬ëìŽ ë ëë©Ž ìí¬ 1500ë°ìŽížìì 캡ìí 몚ë륌 ë€ììŒë¡ ë³ê²œí©ëë€. LLC, 결곌
LLC/SNAP íë ìŽë°ìŒë¡ 1500ë°ìŽíž PDU륌 캡ìííë ë€ížìí¬ê° ë ê²ì ëë€.
1526ë°ìŽížì íší·ì ì ì¡í ì ìêž° ë묞ì ë§ì ë€ížìí¬ìì ë¶ë²ì ëë€.
íší·ë¹ ìµë 1518ë°ìŽíž. ìŽê²ì ìë§ë ë€ì곌 ê°ì ì뮬ë ìŽì ì ìŽëí ê²ì ëë€.
ë¹ì ìŽ êž°ëíë íì€ì 믞ë¬íê² ë°ìíì§ ììµëë€.
귞늌ì ë³µì¡íê² ë§ë€êž° ìíŽ ì 볎 íë ì(1500 < MTU <= 9000 ë°ìŽíž)ìŽ ìê³
IEEEìì ê³µìì ìŒë¡ ìžê°íì§ ììì§ë§
ìŒë¶ ê³ ì(êž°ê°ë¹íž) ë€ížìí¬ ë° NICìì ì¬ì©í ì ììµëë€. íëë ë ë ì
캡ìí 몚ëê° ë€ììŒë¡ ì€ì ëš ëì€, ì€ì ìí¬ ìì± ì CsmaNetì¥ì¹ ~ 64000ë°ìŽíž
-- êŽë šìŽ ìëëŒë Csmaì±ë ë°ìŽí° ìë ìŽë¹ 10ë©ê°ë¹ížë¡ ì€ì ëììµëë€. ìŽê²
Ʞ볞ì ìŒë¡ 1980ë ë ì€íìŒì 10Base5ë¡ ë§ë ìŽëë· ì€ìì¹ë¥Œ 몚ëžë§í©ëë€.
ìíŒ ì 볎 ë°ìŽí°ê·žëšì ì§ìíë ë€ížìí¬. ìŽê²ì íì€í ìì ì ê²ìŽ ìëë€.
ë§ë€ìŽì§ê±°ë ë§ë€ìŽì§ ê°ë¥ì±ìŽ ìì§ë§ 구ì±íêž°ê° ë§€ì° ìœìµëë€.
ìŽì ìììë ëª ë ¹ì€ì ì¬ì©íì¬ 100ê°ì ì뮬ë ìŽì ì ë§ë€ììµëë€.
ìšìì€ë§ ë žë. 500ê°ì ë žëë¡ ì뮬ë ìŽì ì ìœê² ìì±í ì ììµëë€. ë§ìœ ëëŒë©Ž
ì€ì ë¡ ì 첎 ì¬ìì ìµë êžžìŽìž 10Base5 ë±íìŽìŽ í ë€ížìí¬ë¥Œ 몚ëžë§íê³ ìììµëë€.
ìŽëë· ìŒìŽëžì 500믞í°ìŽë©° ìµì í ê°ê²©ì 2.5믞í°ì ëë€. ìŠ ê±°êž°ì
ì€ì ë€ížìí¬ìì 200ë²ë§ íí ì ììµëë€. ë¹ì ì ì죌 ìœê² ë¶ë²ì ë§ë€ ì ììµëë€
ë€ížìí¬ë ë§ì°¬ê°ì§ì ëë€. ìŽë¡ ìžíŽ ì믞 ìë ì뮬ë ìŽì ìŽ ë°ìí ìë ìê³ ê·žë ì§ ìì ìë ììµëë€.
몚ëžë§íë €ë ëìì ë°ëŒ ë€ëŠ ëë€.
ì ì¬í ìí©ìŽ ì¬ë¬ ê³³ìì ë°ìí ì ììµëë€. NS-3 ê·žëŠ¬ê³ ëªšë ì뮬ë ìŽí°ìì. ì륌 ë€ìŽ,
ë žëê° ëìŒí ê³µê°ì ì°šì§íëë¡ ë žë륌 ë°°ì¹í ì ììµëë€.
ëë íì€ì ìë°íë ìŠíêž° ëë ì¡ì ìì€ì 구ì±í ì ììµëë€.
묌늬ì Ʞ볞 ë²ì¹.
NS-3 ìŒë°ì ìŒë¡ ì ì°ì±ì ì ížíë©° ë§ì 몚ëžìì ìì ë¡ê² ì€ì í ì ììµëë€. Attributes
ììì ìŒêŽì±ìŽë í¹ì Ʞ볞 ì¬ìì ì ì©íì§ ìê³ .
ìŽê²ìì ì§ìŒë¡ ê°ì žê° ê²ì NS-3 ìíŒ ì ì°í êž°ë°ì ì ê³µ í ê²ì ëë€
ì€ííŽ ë³Œ ì ììµëë€. ìì€í ì ìì²íë ëŽì©ì ìŽíŽíë ê²ì ì¬ì©ììê² ë¬ë € ììµëë€.
ë¹ì ìŽ ë§ë ì뮬ë ìŽì ìŽ ìŽë€ ì믞ì ìŽë€ ê²ì ê°ì§ê³ ìëì§ íìžíêž° ìíŽ
ë¹ì ìŽ ì ìí íì€ê³Œì ì°ê²°.
걎묌 a Wireless ë€ížìí¬ í íŽë¡ì§
ìŽ ì¹ì ììë ë€ìì ëí ì§ìì ëì± íì¥í ê²ì ëë€. NS-3 ë€ížìí¬ ì¥ì¹ ë°
묎ì ë€ížìí¬ì ì륌 ë€ë£šë ì±ë. NS-3 802.11 ëªšëž ìžíž ì ê³µ
802.11 ì¬ìì ì íí MAC ìì€ êµ¬íì ì ê³µíë €ë ìë
802.11a ì¬ìì "ê·žë ê² ëëŠ¬ì§ ìì" PHY ìì€ ëªšëž.
ì ëì ë° CSMA í íŽë¡ì§ ëì°ë¯ž ê°ì²Žë¥Œ 몚ë 볞 ê²ì²ëŒ
point-to-point í íŽë¡ì§ 구ì±, ì°ëŠ¬ë ëë±í ê²ì ë³Žê² ë ê²ì ëë€. 묎ì ë í íŽë¡ì§ ëì°ë¯ž
ìŽ êµ¬ì. ìŽë¬í ëì°ë¯žì 몚ì곌 ìëì ë§€ì° ì¹ìíê² ë³ŽìŒ ê²ì ëë€.
ë.
ì°ëŠ¬ë ì°ëŠ¬ì ìì ì€í¬ëŠœížë¥Œ ì ê³µí©ëë€ ìì /íí ëŠ¬ìŒ ìë°° ê·ì¹ì. ìŽ ì€í¬ëŠœížë
ì ì, ìŽ.cc ì€í¬ëŠœížë¥Œ ìì±íê³ Wi-Fi ë€ížìí¬ë¥Œ ì¶ê°í©ëë€. ê³ìíŽì ìŽêž°
ìì /íí 늬ìŒ/third.cc ì¢ìíë ížì§êž°ìì. ë¹ì ì ìŽë¯ž 충ë¶í 볎ìì ê²ì ëë€
NS-3 ìŽ ìì ìì ì§íëë ëë¶ë¶ì ìì ì ìŽíŽíêž° ìí ìœëìŽì§ë§ ëª ê°ì§ ìë¡ìŽ
ì 첎 ì€í¬ëŠœížë¥Œ ê²í íê³ ìŒë¶ ì¶ë ¥ì ê²ì¬í©ëë€.
ììì ê°ìŽ ìŽ.cc ì(ê·žëŠ¬ê³ ëªšë NS-3 ì) íìŒì emacsë¡ ììí©ëë€.
몚ë ëŒìžê³Œ ìŒë¶ GPL ìì©êµ¬.
Ʞ볞 ë€ížìí¬ í íŽë¡ì§ë¥Œ 볎ì¬ì£Œë ASCII ìíž(ìëì ì¬íëš)륌 ìŽíŽë³Žììì€.
ìì ìì 구ì±íìµëë€. ìì 륌 ë íì¥í ê²ìì ì ì ììµëë€.
묎ì ë€ížìí¬ë¥Œ ìŒìªœì 걞멎 ë©ëë€. ìŽê²ì Ʞ볞 ë€ížìí¬ì ëë€.
ì ì ë° ë¬Žì ìì ìì±ë ë žë ì륌 ì€ì ë¡ ë³ê²œí ì ììŒë¯ë¡ í íŽë¡ì§
ë€ížìí¬. ììì ê°ìŽ ìŽ.cc ì€í¬ëŠœíž ìŒìŽì€, ë³ê²œíë ê²œì° nCsma, ê·žê²ì ë¹ì ìê² ì€ ê²ì ëë€
"ì¶ê°" CSMA ë žëì ì. ë§ì°¬ê°ì§ë¡ ì€ì í ì ììµëë€. nììŽíìŽ ìŒë§ë ë§ìì§ ì ìŽíêž° ìíŽ STA
(ì€í ìŽì ) ë žëê° ì뮬ë ìŽì ì ìì±ë©ëë€. íì íëìì ê²ì ëë€ AP (ì¡ìžì€ í¬ìžíž)
묎ì ë€ížìí¬ì ë žë. Ʞ볞ì ìŒë¡ XNUMXê°ì "ì¶ê°" CSMA ë žëì XNUMXê°ì "ì¶ê°" CSMA ë žëê° ììµëë€.
묎ì ì í STA ë žë.
ìœëë 몚ë í¬íš íìŒì ë¡ëíë ê²ìŒë¡ ììí©ëë€. ìŽ.cc ì.
Wi-Fi 몚ë ë° ìŽëì±ì íŽë¹íë ëª ê°ì§ ìë¡ìŽ êž°ë¥ìŽ í¬íšëìŽ ììµëë€.
ìëìì ë Œìí 몚ëì ëë€.
#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/wifi-module.h"
#include "ns3/mobility-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
ë€ížìí¬ í íŽë¡ì§ 귞늌ì ë€ì곌 ê°ìµëë€.
// Ʞ볞 ë€ížìí¬ í íŽë¡ì§
//
// ììŽíìŽ 10.1.3.0
// AP
// * * * *
// | | | | 10.1.1.0
// n5 n6 n7 n0 -------------- n1 n2 n3 n4
// ì ëì | | | |
// ================
// ë 10.1.2.0
ìŒìªœì ìë ë žëì ì ë€ížìí¬ ì¥ì¹ë¥Œ ì¶ê°íê³ ììì ì ì ììµëë€.
묎ì ë€ížìí¬ì ì¡ìžì€ í¬ìžížê° ëë ì§ì ê° ë§í¬. ë€ìì
묎ì STA ë žëê° ìì±ëìŽ ìŒìªœê³Œ ê°ìŽ ìë¡ìŽ 10.1.3.0 ë€ížìí¬ë¥Œ ì±ìëë€.
귞늌ì ìž¡ë©Ž.
ìœíê° ëë í, NS-3 ë€ìì€íìŽì€ë ìµìí ë¡ê¹ êµ¬ì± ììê° ì ìë©ëë€.
ì§êžì¯€ìŽë©Ž 몚ë ìµìí ê²ì ëë€.
ë€ìì€íìŽì€ ns3 ì¬ì©;
NS_LOG_COMPONENT_DEFINE("ThirdScriptExample");
ë©ìž íë¡ê·žëšì ë€ì곌 ê°ìŽ ììë©ëë€. ìŽ.cc ëª ê°ì§ ëª ë ¹ì€ ë§€ê°ë³ì륌 ì¶ê°íì¬
ë¡ê¹ êµ¬ì± ìì륌 íì±í ëë ë¹íì±ííê³ ìì±ë ì¥ì¹ ì륌 ë³ê²œí©ëë€.
ë¶ìž ììž ì 볎 = ì°ž;
uint32_t nCsma = 3;
uint32_t nWifi = 3;
컀맚ëëŒìž cmd;
cmd.AddValue ("nCsma", "\"extra\" CSMA ë žë/ì¥ì¹ ì", nCsma);
cmd.AddValue ("nWifi", "wifi STA ì¥ì¹ ì", nWifi);
cmd.AddValue ("verbose", "ì°žìŒ ê²œì° ë¡ê·žíëë¡ echo ìì© íë¡ê·žëšì ì§ì", verbose);
cmd.Parse(argc,argv);
if(ììž)
{
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
}
ìì 몚ë ìììì ë§ì°¬ê°ì§ë¡ ë€ì ëšê³ë ë ê°ì ë žë륌 ë§ëë ê²ì ëë€.
ì ëì ë§í¬ë¥Œ íµíŽ ì°ê²°íììì€.
NodeContainer p2pNodes;
p2pNodes.Create(2);
ë€ììŒë¡ ì€ë ì¹êµ¬ë¥Œ ëŽ ëë€. ì°ëŠ¬ë í¬ìžíží¬í¬ìžížëì°ë¯ž êŽë š ì€ì
ëíŽíž ê° Attributes ì¥ì¹ì ìŽë¹ XNUMXë©ê°ë¹íž ì¡ì Ʞ륌 ìì±í©ëë€.
í¬íŒì í¬íŒì ìíŽ ìì±ë ì±ëì ëí XNUMXë°ëŠ¬ìŽ ì§ì°ì ì¬ì©íì¬ ìì±ë©ëë€.
ì°ëŠ¬ë ê·ž ì 첎ì ìŒë¡ ë žëì ì¥ì¹ì ë žë ì¬ìŽì ì±ë.
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("ì§ì°", StringValue("2ms"));
NetDeviceContainer p2pì¥ì¹;
p2pDevices = pointToPoint.Install(p2pNodes);
ë€ììŒë¡ ë€ë¥ž ì ìž ë žë컚í ìŽë ë²ì€ì ìŒë¶ê° ë ë žë륌 ì ì§íêž° ìíŽ
(CSMA) ë€ížìí¬.
NodeContainer csmaNodes;
csmaNodes.Add(p2pNodes.Get(1));
csmaNodes.ë§ë€êž°(nCsma);
ë€ì ìœë ì€ ê°ì žìµëë€. 첫 ë²ì§ž ë žë(ìžë±ì€ê° XNUMXìž ê²œì°)
ì ëì ë žë 컚í ìŽë ë° CSMA륌 ê°ì žì¬ ë žëì 컚í ìŽëì ì¶ê°
ì¥ì¹. 묞ì ì ë žëë ì ëì ì¥ì¹ì CSMAë¡ ëë©ëë€.
ì¥ì¹. ê·žë° ë€ì ëëšžì§ CSMA륌 구ì±íë ì¬ë¬ "ì¶ê°" ë žë륌 ë§ëëë€.
ë€ížìí¬.
ê·žë° ë€ì CsmaHelper ê·žëŠ¬ê³ ê·žê²ì ì€ì Attributes ìŽì ìì ìì íë ê²ì²ëŒ.
ì°ëŠ¬ë NetDevice컚í ìŽë ìì±ë CSMA ë€íž ì¥ì¹ë¥Œ ì¶ì í ë€ì
ì€ì¹ ì íí ë žëì CSMA ì¥ì¹.
CsmaHelper csma;
csma.SetChannelAttribute("DataRate", StringValue("100Mbps"));
csma.SetChannelAttribute("ì§ì°", TimeValue(NanoSeconds(6560)));
NetDeviceContainer csmaDevices;
csmaDevices = csma.Install(csmaNodes);
ë€ììŒë¡ Wi-Fi ë€ížìí¬ì ìŒë¶ê° ë ë žë륌 ìì±í©ëë€. ì°ëŠ¬ë
ëª ë ¹ì€ ìžìì ì§ì ë ëë¡ ì¬ë¬ "ì€í ìŽì " ë žë륌 ìì±íê³
ì§ì ê° ë§í¬ì "ê°ì¥ ìŒìªœ" ë žë륌 ë žëë¡ ì¬ì©í ê²ì ëë€.
ì¡ìžì€ í¬ìžíž.
NodeContainer wifiStaNodes;
wifiStaNodes.Create(nWifi);
NodeContainer wifiApNode = p2pNodes.Get(0);
ìœëì ë€ì ë¹ížë Wi-Fi ì¥ì¹ì ì¬ìŽì ìíž ì°ê²° ì±ëì 구ì±í©ëë€.
ìŽ ììŽíìŽ ë žë. 뚌ì PHY ë° ì±ë ëì°ë¯žë¥Œ 구ì±í©ëë€.
YansWifiChannelHelper ì±ë = YansWifiChannelHelper::Default ();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
ëšìí륌 ìíŽ ìŽ ìœëë Ʞ볞 PHY ê³ìžµ êµ¬ì± ë° ì±ë 몚ëžì ì¬ì©í©ëë€.
ì ëí API doxygen 묞ìì 묞ìíëìŽ ììµëë€.
YansWifiChannelHelper::êž°ë³žê° and YansWifiPhyHelper::êž°ë³žê° íë ìì. ìŒëš ìŽë¬í ê°ì²Ž
ìì±ëë©Ž ì±ë ê°ì²Žë¥Œ ìì±íê³ ìŽë¥Œ PHY ê³ìžµ ê°ì²Ž êŽëŠ¬ìì ì°ê²°í©ëë€.
ì ìíŽ ìì±ë 몚ë PHY ë ìŽìŽ ê°ì²Žê° YansWifiPhyHelper ê³µì íë€
ëìŒí Ʞ볞 ì±ë, ìŠ ëìŒí 묎ì 맀첎륌 ê³µì íê³
íµì ë° ê°ì:
phy.SetChannel(ì±ë.ë§ë€êž°());
PHY ëì°ë¯žê° 구ì±ëë©Ž MAC ê³ìžµì ì§ì€í ì ììµëë€. ì¬êž°ì ì°ëŠ¬ë ìŒì ì íí©ëë€
non-Qos MACì ì¬ì©íë¯ë¡ NqosWifiMacHelper ê°ì²Žë¥Œ ì¬ì©íì¬ MAC 맀ê°ë³ì륌 ì€ì í©ëë€.
WifiHelper wifi = WifiHelper::Default ();
wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ì격 ì€í ìŽì êŽëŠ¬ì ì€ì ë©ìëë ëì°ë¯žìê² ë¹ìš ì ìŽ ìê³ ëŠ¬ìŠì ì íì ìë €ì€ëë€.
ì¬ì©. ì¬êž°ì ëì°ë¯žìê² AARF ìê³ ëŠ¬ìŠì ì¬ì©íëë¡ ìì²íê³ ììµëë€. --- ìžë¶ ì¬íì ë¬Œë¡ ,
Doxygenìì ì¬ì©í ì ììµëë€.
ë€ììŒë¡ MAC ì í, ìŠ ì°ëŠ¬ê° ìíë ìžíëŒ ë€ížìí¬ì SSID륌 구ì±í©ëë€.
ì€í ìŽì ìŽ íì± íë¡ë¹ì ìííì§ ìëë¡ ì€ì íê³ íìží©ëë€.
Ssid ssid = Ssid ("ns-3-ssid");
mac.SetType("ns3::StaWifiMac",
"Ssid", SsidValue(ssid),
"ActiveProbing", BooleanValue(ê±°ì§));
ìŽ ìœëë 뚌ì ì¬ì©ë 802.11 SSID(Service Set Identifier) ââê°ì²Žë¥Œ ìì±í©ëë€.
"Ssid"ì ê°ì ì€ì íë €ë©Ž ìì± MAC ê³ìžµ 구íì í¹ì
ëì°ë¯žê° ìì±í MAC ê³ìžµì ì¢ ë¥ë ë€ì곌 ê°ìŽ ì§ì ë©ëë€. ìì± ì ì¡Žì¬ë¡
"ns3::StaWifiMac" ì í. ì ì¬ì© NqosWifiMacëì°ë¯ž 볎ì¥í©ëë€
"Qos ì§ìëš" ìì± ìì±ë MAC ê°ì²Žì ëíŽ falseë¡ ì€ì ë©ëë€. ìŽë€ì ì¡°í©
ë ê°ì§ 구ì±ì ë€ìì ìì±ëë MAC ìžì€íŽì€ê° non-QoS non-APê° ëšì ì믞í©ëë€.
ìžíëŒ BSS(ìŠ, APê° ìë BSS)ì ì€í ìŽì (STA). ë§ì§ë§ìŒë¡,
"ì¡í°ëžíë¡ë¹" ìì± ê±°ì§ìŒë¡ ì€ì ë©ëë€. ìŽë íë¡ëž ìì²ìŽ
ìŽ ëì°ë¯žê° ë§ë MACìì 볎ë ëë€.
MAC ë° PHY 몚ëìì 몚ë ì€í ìŽì ë³ ë§€ê°ë³ìê° ìì í 구ì±ëë©Ž
ìŽì ìµìí ë ìŽìŽë¥Œ ížì¶í ì ììµëë€. ì€ì¹ ìŽë€ì Wi-Fi ì¥ì¹ë¥Œ ë§ëë ë°©ë²
ì€í ìŽì :
NetDeviceContainer staDevices;
staDevices = wifi.Install(phy, mac, wifiStaNodes);
몚ë STA ë žëì ëíŽ Wi-Fi륌 구ì±íìŒë©° ìŽì AP륌 구ì±íŽìŒ í©ëë€.
(ì¡ìžì€ í¬ìžíž) ë žë. Ʞ볞ê°ì ë³ê²œíì¬ ìŽ íë¡ìžì€ë¥Œ ììí©ëë€. Attributes ì
NqosWifiMacëì°ë¯ž APì ì구 ì¬íì ë°ìí©ëë€.
mac.SetType("ns3::ApWifiMac",
"Ssid", SsidValue(ssid));
ìŽ ê²œì° NqosWifiMacëì°ë¯ž "ns3::ApWifiMac"ì MAC ê³ìžµì ìì±í ê²ì ëë€.
íìë APë¡ êµ¬ì±ë MAC ìžì€íŽì€ê° ìì±ëìŽìŒ íšì ì§ì íê³
"QosSupported"륌 ì믞íë ëì°ë¯ž ì í ìì± falseë¡ ì€ì íŽìŒ íš - ë¹íì±í
ìì±ë APìì 802.11e/WMM ì€íìŒ QoS ì§ì.
ë€ì ëŒìžì ëìŒí PHY ë 벚 ìžížë¥Œ ê³µì íë ëšìŒ AP륌 ìì±í©ëë€. Attributes (귞늬ê³
ì±ë) ì€í ìŽì ìŒë¡:
NetDeviceContainer apDevices;
apDevices = wifi.Install(phy, mac, wifiApNode);
ìŽì 몚ë¹ëŠ¬í° 몚ëžì ì¶ê°íê² ìµëë€. ì°ëŠ¬ë STA ë žëê° ìì§ìŽê³ ë°©í©íꞰ륌 ìí©ëë€.
ê²œê³ ìì ëŽë¶ë¥Œ ëë¬ë³Žê³ AP ë žë륌 ì ì§ ìíë¡ ë§ë€ê³ ì¶ìµëë€. ì°ëŠ¬ë
ìŽëì± ëì°ë¯ž ì°ëŠ¬ê° ìŽê²ì ìœê² í ì ìëë¡. 뚌ì ìžì€íŽì€í ìŽëì± ëì°ë¯ž ëì
ê·žëŠ¬ê³ ìŒë¶ ì€ì Attributes "ìì¹ í ë¹ì" êž°ë¥ì ì ìŽí©ëë€.
ìŽëì±ëì°ë¯ž ìŽëì±;
mobility.SetPositionAllocator("ns3::GridPositionAllocator",
"MinX", DoubleValue(0.0),
"ìµì", DoubleValue(0.0),
"DeltaX", DoubleValue(5.0),
"DeltaY", DoubleValue(10.0),
"GridWidth", UintegerValue (3),
"ë ìŽìì ì í", StringValue("RowFirst"));
ìŽ ìœëë ìŽë ëì°ë¯žìê² XNUMXì°šì 귞늬ë륌 ì¬ì©íì¬ ì²ìì
STA ë žë. ìì ì ìíŽ Doxygenì ìì ë¡ê² íìíììì€. ns3::GridPositionAllocator 볌 ì
ì íí ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§.
ìŽêž° 귞늬ëì ë žë륌 ë°°ì¹íì§ë§ ìŽì ìŽë ë°©ë²ì ìë €ì€ìŒ í©ëë€.
ì°ëŠ¬ë RandomWalk2dìŽëì±ëªšëž ë žëê° ììì ë°©í¥ìŒë¡ ìŽëí©ëë€.
ê²œê³ ìì ëŽë¶ì ìì ìë.
mobility.SetMobilityModel("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue(ì§ì¬ê°í(-50, 50, -50, 50)));
ì°ëŠ¬ë ìŽì ìŽëì± ëì°ë¯ž STA ë žëì ìŽëì± ëªšëžì ì€ì¹í©ëë€.
ìŽëì±.ì€ì¹(wifiStaNodes);
ì뮬ë ìŽì ì€ì ì¡ìžì€ í¬ìžížê° ê³ ì ë ìì¹ì ì ì§ëꞰ륌 ìí©ëë€. ì°ëŠ¬
ìŽ ë žëì ëí ìŽëì± ëªšëžì
ns3::ConstantPositionMobilityModel:
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
ìŽëì±.ì€ì¹(wifiApNode);
ìŽì ë žë, ì¥ì¹ ë° ì±ëìŽ ìì±ëììŒë©° ìŽëì± ëªšëžìŽ ì íëììµëë€.
Wifi ë žëê° ìì§ë§ íë¡í ìœ ì€íìŽ ììµëë€. ì°ëŠ¬ê° ìŽì ì ë§ì ìŒì í ê²ì²ëŒ
ìê°, ì°ëŠ¬ë ìží°ë·ì€íí¬íŒ ìŽë¬í ì€íì ì€ì¹í©ëë€.
InternetStackHelper ì€í;
stack.Install(csmaNodes);
stack.Install(wifiApNode);
stack.Install(wifiStaNodes);
ììì ê°ìŽ ìŽ.cc ìì ì€í¬ëŠœížìì ì°ëŠ¬ë IPv4AddressHelper ì
ì¥ì¹ ìží°íìŽì€ì IP 죌ì륌 í ë¹í©ëë€. 뚌ì ë€ížìí¬ 10.1.1.0ì ì¬ì©íì¬ ìì±í©ëë€.
ë ê°ì ì§ì ê° ì¥ì¹ì íìí ë ê°ì 죌ì. ê·žë° ë€ì ë€ížìí¬ 10.1.2.0ì ì¬ì©í©ëë€.
CSMA ë€ížìí¬ì 죌ì륌 í ë¹í ë€ì ë€ížìí¬ 10.1.3.0ìì 죌ì륌 í ë¹í©ëë€.
묎ì ë€ížìí¬ì STA ì¥ì¹ì AP 몚ëì.
Ipv4AddressHelper 죌ì;
address.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer p2pìží°íìŽì€;
p2pInterfaces = address.Assign(p2pDevices);
address.SetBase("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces;
csmaInterfaces = 죌ì.í ë¹(csmaDevices);
address.SetBase("10.1.3.0", "255.255.255.0");
address.Assign(staDevices);
address.Assign(apDevices);
귞늌ì ìì ë¶ë¶ì ìë "ê°ì¥ ì€ë¥žìªœ" ë žëì ììœ ìë²ë¥Œ ë°°ì¹í©ëë€.
íìŒ. ì°ëŠ¬ë ì ì ìŽê²ì íìµëë€.
UdpEchoServerHelper echoServer(9);
ApplicationContainer serverApps = echoServer.Install(csmaNodes.Get(nCsma));
serverApps.Start(ìŽ(1.0));
serverApps.Stop(ìŽ(10.0));
ê·žëŠ¬ê³ ììœ íŽëŒìŽìžížë¥Œ ì°ëŠ¬ê° ìì±í ë§ì§ë§ STA ë žëì ëê³ ìë²ë¥Œ ê°ëŠ¬íµëë€.
CSMA ë€ížìí¬. ìŽì ìë ì ì¬í ìì ì 볞 ì ìŽ ììµëë€.
UdpEchoClientHelper echoClient(csmaInterfaces.GetAddress(nCsma), 9);
echoClient.SetAttribute("MaxPackets", UintegerValue (1));
echoClient.SetAttribute("ê°ê²©", TimeValue(ìŽ(1.0)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));
ApplicationContainer íŽëŒìŽìžíž ì± =
echoClient.Install(wifiStaNodes.Get(nWifi - 1));
clientApps.Start(ìŽ(2.0));
clientApps.Stop(ìŽ(10.0));
ì¬êž°ìì ìží°ë€ížìí¬ë¥Œ 구ì¶íìŒë¯ë¡ ë€ì곌 ê°ìŽ ìží°ë€ížìí¬ ëŒì°í ì íì±ííŽìŒ í©ëë€.
ì°ëŠ¬ëììíë€ ìŽ.cc ìì ì€í¬ëŠœíž.
Ipv4GlobalRoutingHelper::PopulateRoutingTables();
ìŒë¶ ì¬ì©ì륌 ëëŒê² í ì ìë í ê°ì§ë ë°©êž ë§ë ì뮬ë ìŽì ìŽ
ì ë "ìì°ì€ëœê²" ë©ì¶ì§ ììµëë€. 묎ì ì¡ìžì€ í¬ìžížì ë€ìì ìì²íêž° ë묞ì ëë€.
ë¹ìœì ìì±í©ëë€. ê·žê²ì ë¹ìœì ììí ìì±í ê²ìŽê³ ìŽê²ì ì뮬ë ìŽí°ë¥Œ ìì±í ê²ì ëë€.
ìŽë²€ížê° 믞ëì 묎ꞰíìŒë¡ ìì ëìŽ ììŒë¯ë¡ ì뮬ë ìŽí°ì ì€ì§íëŒê³ ìë €ìŒ í©ëë€.
ë¹ìœ ìì± ìŽë²€ížê° ìì ëìŽ ìëëŒë. ë€ì ìœë ì€
ë¹ìœì ììí ì뮬ë ìŽížíì§ ìê³
볞ì§ì ìŒë¡ 묎í 룚í.
ì뮬ë ìŽí°::ì ì§(ìŽ(10.0));
ì°ëŠ¬ë ìž ê°ì§ ë€ížìí¬ë¥Œ 몚ë í¬êŽíêž°ì 충ë¶í ì¶ì ì ìì±í©ëë€.
pointToPoint.EnablePcapAll("ìž ë²ì§ž");
phy.EnablePcap("ì 0", apDevices.Get(XNUMX));
csma.EnablePcap("ì 0", csmaDevices.Get(XNUMX), true);
ìŽ ìž ì€ì ìœëë ë ì§ì ê° ë žëìì pcap ì¶ì ì ììí©ëë€.
백볞 ìí ì íë©° Wifi ë€ížìí¬ìì 묎찚ë³(몚ëí°) 몚ë ì¶ì ì ììí©ëë€.
CSMA ë€ížìí¬ìì ëì¡í ì¶ì ì ììí©ëë€. ìŽê²ì ì°ëŠ¬ê° 몚ë ê²ì 볌 ì ììµëë€
ìµì ìì ì¶ì íìŒìŽ ìë ížëíœ.
ë§ì§ë§ìŒë¡ ì€ì ë¡ ì뮬ë ìŽì ì ì€ííê³ ì 늬í ë€ì íë¡ê·žëšì ì¢ ë£í©ëë€.
ì뮬ë ìŽí°::ì€í();
ì뮬ë ìŽí°::íꎎ();
0ê° ëì;
}
ìŽ ìì 륌 ì€ííë €ë©Ž ë€ìì ë³µì¬íŽìŒ í©ëë€. ìž ë²ì§ž.cc ìì ì€í¬ëŠœížë¥Œ
ëë í°ëŠ¬ë¥Œ ì€í¬ëì¹íê³ Waf륌 ì¬ì©íì¬ ìŽ.cc ì. ë§ìœ ëëŒë©Ž
ì ë ¥íë €ë ì ì¥ìì ìµìì ëë í 늬ì ììµëë€.
$ cp ìì /íí 늬ìŒ/third.cc ì€í¬ëì¹/mythird.cc
$ ./ìí
$ ./waf --ì€í¬ëì¹/mythird ì€í
ë€ì ë§íì§ë§, ì°ëŠ¬ë UDP ììœ ì í늬ìŒìŽì ì ì€ì íêž° ë묞ì ìŽ.cc
ì€í¬ëŠœížë¥Œ ì€ííë©Ž ë¹ì·í ì¶ë ¥ìŽ íìë©ëë€.
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' ëë í 늬륌 ë ë©ëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.407ìŽ).
ìê°ì 2s íŽëŒìŽìžížë 1024 ë°ìŽížë¥Œ 10.1.2.4 í¬íž 9ë¡ ë³Žëìµëë€.
ìê° 2.01796ìŽì ìë²ë 1024 í¬íž 10.1.3.3ìì 49153ë°ìŽížë¥Œ ìì íìµëë€.
2.01796ìŽì ìë²ê° 1024ë°ìŽížë¥Œ 10.1.3.3 í¬íž 49153ìŒë¡ 볎ëìµëë€.
ìê° 2.03364ìŽì íŽëŒìŽìžížê° 1024 í¬íž 10.1.2.4ìì 9ë°ìŽížë¥Œ ìì íìµëë€.
첫 ë²ì§ž ë©ìì§ë¥Œ êž°ìµíìžì. ë³Žëž 1024 ë°ìŽíž ì 10.1.2.4,"ë UDP ììœ íŽëŒìŽìžížì ëë€.
íší·ì ìë²ë¡ 볎ë ëë€. ìŽ ê²œì° íŽëŒìŽìžížë 묎ì ë€ížìí¬ì ììµëë€.
(10.1.3.0). ë ë²ì§ž ë©ìì§, "ìì 1024 ë°ìŽíž ì 10.1.3.3,"ë UDP ììœìì ê°ì žìš ê²ì ëë€.
ììœ íší·ì ìì í ë ìì±ëë ìë². ë§ì§ë§ ë©ìì§ "ìì 1024
ë°ìŽíž ì 10.1.2.4,"ë ììœ íŽëŒìŽìžížìì ììŒë©° ììœë¥Œ ìì íìì ëíë ëë€.
ë€ì ìë²ìì.
ìŽì ìµìì ëë í ëŠ¬ë¡ ìŽëíì¬ ë³Žë©Ž ë€ììì XNUMXê°ì ì¶ì íìŒì ì°Ÿì ì ììµëë€.
ìŽ ì뮬ë ìŽì ì ë žë XNUMXìì XNUMXê°, ë žë XNUMXìì XNUMXê°ì ëë€.
third-0-0.pcap third-0-1.pcap third-1-0.pcap third-1-1.pcap
"third-0-0.pcap" íìŒì ë žë XNUMXì ì ëì ì¥ì¹ì íŽë¹í©ëë€.
"백볞"ì ìŒìªœ. "third-1-0.pcap" íìŒì ì ëì ì íŽë¹í©ëë€.
ë žë 0ì ì¥ì¹ -- "백볞"ì ì€ë¥žìªœ. "third-1-XNUMX.pcap" íìŒì
Wi-Fi ë€ížìí¬ì ëì¡í(몚ëí° ëªšë) ì¶ì ë° "third-1-1.pcap" íìŒ
CSMA ë€ížìí¬ì ëì¡í ì¶ì ìŽ ë©ëë€. ê²ì¬ë¥Œ íµíŽ ìŽë¥Œ íìží ì ììµëê¹?
ìœë?
ììœ íŽëŒìŽìžížê° Wi-Fi ë€ížìí¬ì ììŒë¯ë¡ ê±°êž°ì ììíê² ìµëë€. ë€ìì ìŽíŽë³Žê² ìµëë€.
íŽë¹ ë€ížìí¬ìì 캡ì²í ëì¡í(몚ëí° ëªšë) ì¶ì .
$ tcpdump -nn -tt -r ìž ë²ì§ž-0-1.pcap
ìŽì ì ì¬êž°ìì 볞 ì ìŽ ìë Wi-Fiì²ëŒ 볎ìŽë ìœí ìž ê° íìëìŽìŒ í©ëë€.
íìŒ third-0-1.pcapìì ìœêž°, ë§í¬ ì í IEEE802_11(802.11)
0.000025 ë¹ìœ(ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit] IBSS
0.000308 ì°ê²° ìì²(ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit]
0.000324 Acknowledgment RA:00:00:00:00:00:08
0.000402 ì°ê²° ìëµ ëì(0) :: ì±ê³µ
0.000546 Acknowledgment RA:00:00:00:00:00:0a
0.000721 ì°ê²° ìì²(ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit]
0.000737 Acknowledgment RA:00:00:00:00:00:07
0.000824 ì°ê²° ìëµ ëì(0) :: ì±ê³µ
0.000968 Acknowledgment RA:00:00:00:00:00:0a
0.001134 ì°ê²° ìì²(ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit]
0.001150 Acknowledgment RA:00:00:00:00:00:09
0.001273 ì°ê²° ìëµ ëì(0) :: ì±ê³µ
0.001417 Acknowledgment RA:00:00:00:00:00:0a
0.102400 ë¹ìœ(ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit] IBSS
0.204800 ë¹ìœ(ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit] IBSS
0.307200 ë¹ìœ(ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0Mbit] IBSS
ìŽì ë§í¬ ì íìŽ ììí ëë¡ 802.11ìì ì ì ììµëë€. ë¹ì ì ìë§ í ì ììµëë€
ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ ìŽíŽíê³ ì¬êž°ìì IP ììœ ìì² ë° ìëµ íší·ì ì°Ÿìµëë€.
ì¶ì íë€. ì¶ì ë€í륌 ìì í 구묞 ë¶ìíêž° ìí ì°ìµìŒë¡ ëšê²šë¡ëë€.
ìŽì point-to-point ë§í¬ ì°ìž¡ì pcap íìŒì 볎멎,
$ tcpdump -nn -tt -r ìž ë²ì§ž-0-0.pcap
ë€ì ë§íì§ë§, ìµìí ëŽì©ìŽ íìëìŽìŒ í©ëë€.
íìŒ third-0-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.008151 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.026758 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, êžžìŽ 1024
ìŽê²ì ìŒìªœìì ì€ë¥žìªœìŒë¡(Wifiìì CSMAë¡) ê°ë€ê° ë€ì ëìì€ë ììœ íší·ì ëë€.
ì ëì ë§í¬.
ìŽì point-to-point ë§í¬ ì°ìž¡ì pcap íìŒì 볎멎,
$ tcpdump -nn -tt -r ìž ë²ì§ž-1-0.pcap
ë€ì ë§íì§ë§, ìµìí ëŽì©ìŽ íìëìŽìŒ í©ëë€.
íìŒ third-1-0.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
2.011837 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.023072 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, êžžìŽ 1024
ìŽê²ì ëí ìŒìªœìì ì€ë¥žìªœìŒë¡(Wifiìì CSMAë¡) ê°ë€ê° ë€ì ëëìì€ë ììœ íší·ì ëë€.
ììí ì ìë ìœê° ë€ë¥ž íìŽë°ìŒë¡ ì§ì ê° ë§í¬ë¥Œ íµíŽ.
ììœ ìë²ë CSMA ë€ížìí¬ì ììŒë©° ê±°êž°ìì ëì¡í ì¶ì ì ìŽíŽë³Žê² ìµëë€.
$ tcpdump -nn -tt -r ìž ë²ì§ž-1-1.pcap
ë€ì곌 ê°ì ì¹ìí ëŽì©ìŽ íìë©ëë€.
íìŒ third-1-1.pcapìì ìœêž°, ë§í¬ ì í EN10MB(ìŽëë·)
2.017837 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, êžžìŽ 50
2.017861 ARP, ìëµ 10.1.2.4ë 00:00:00:00:00:06, êžžìŽ 50ì ëë€.
2.017861 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, êžžìŽ 1024
2.022966 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, êžžìŽ 50
2.022966 ARP, ìëµ 10.1.2.1ë 00:00:00:00:00:03, êžžìŽ 50ì ëë€.
2.023072 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, êžžìŽ 1024
ìŽê²ì ìœê² ìŽíŽëìŽìŒ í©ëë€. ììë€ë©Ž ëìê°ì í ë¡ ì ìŽíŽë³Žììì€.
in ìŽ.cc. ìŽê²ì ê°ì ììì ëë€.
ìŽì ì°ëŠ¬ë 묎ì ë€ížìí¬ì ëí ìŽëì± ëªšëžì ì€ì íë ë° ë§ì ìê°ì í ì íìµëë€.
STA ë žëê° ì€ì ë¡ ìì§ìŽê³ ìë€ë ê²ì 볎ì¬ì£Œì§ ìê³ ëëŽë ê²ì ë¶ëë¬ìŽ ìŒì ëë€.
ì뮬ë ìŽì ëì 죌ë³. ì ì°ê²°íì¬ ìŽ ìì ì ìííŽ ë³Žê² ìµëë€. ìŽëì± ëªšëž ìœì€
ì¶ì ìì€ë¥Œ ë³ê²œíììì€. ìŽê²ì ììží ì¶ì ì¹ì ì ì¿ë³Œ ë¿ì ëë€.
ë€ê°ì€ê³ ìì§ë§ ìŽê²ì ì륌 ë€ìŽë³Žêž°ì ì죌 ì¢ì ê³³ìž ê² ê°ìµëë€.
"NS-3 ì¡°ì " ì¹ì ìì ìžêží ë°ì ê°ìŽ NS-3 ì¶ì ìì€í ì ì¶ì ìŒë¡ ëë©ëë€.
ìì€ì ížë ìŽì€ ì±í¬, ê·žëŠ¬ê³ ì°ëŠ¬ë ëì ì°ê²°íë êž°ë¥ì ì ê³µí©ëë€. ì°ëŠ¬ë
ìŽëì± ëªšëžì ì¶ì ìŽë²€ížë¥Œ ë°ììí€êž° ìíŽ ì¬ì ì ìë ìœì€ ë³ê²œ ì¶ì ìì€ì ëë€. ì°ëŠ¬
ìì ìì€ë¥Œ íìí ìì€ì ì°ê²°íë €ë©Ž ížë ìŽì€ ì±í¬ë¥Œ ìì±íŽìŒ í©ëë€.
ì°ëŠ¬ë¥Œ ìí ì 볎. ìŽë µë€ë ííìë ë¶êµ¬íê³ ì€ì ë¡ë ë§€ì° ê°ëší©ëë€.
ë©ìž íë¡ê·žëš ì§ì ì ì€í¬ëì¹/mythird.cc ì€í¬ëŠœíž(ìŠ,
NS_LOG_COMPONENT_DEFINE 묞) ë€ì íšì륌 ì¶ê°í©ëë€.
묎íší
CourseChange(std::묞ììŽ ì»ší ì€íž, Ptr 몚ëž)
{
ë²¡í° ìì¹ = 몚ëž->GetPosition();
NS_LOG_UNCOND(컚í ì€íž <
" x = " << ìì¹.x << ", y = " << ìì¹.y);
}
ìŽ ìœëë 몚ë¹ëŠ¬í° 몚ëžìì ìì¹ ì ë³Žë§ ê°ì žì€ê³ 묎조걎
ë žëì x ë° y ìì¹ë¥Œ êž°ë¡í©ëë€. ì°ëŠ¬ë ìŽ êž°ë¥ìŽ
ììœ íŽëŒìŽìžížê° ìë 묎ì ë žëê° ìì¹ë¥Œ ë³ê²œí ëë§ë€ ížì¶ë©ëë€. ì°ëŠ¬ë ìŽê²ì íë€
륌 ì¬ì©íì¬ êµ¬ì±::ì°ê²° êž°ë¥. ì€í¬ëŠœížì ë€ì ìœë ì€ì ì¶ê°íììì€.
ìŽì ì뮬ë ìŽí°::ì€í ì구.
íì€::ostringstream oss;
OSS <
"/NodeList/" << wifiStaNodes.Get(nWifi - 1)->GetId() <
"/$ns3::MobilityModel/CourseChange";
Config::Connect(oss.str(), MakeCallback(&CourseChange));
ì¬êž°ì ì°ëŠ¬ê° íë ìŒì ìŽë²€ížì ì¶ì ë€ìì€íìŽì€ 겜ë¡ë¥Œ í¬íšíë 묞ììŽì ë§ëë ê²ì ëë€.
ì°ëŠ¬ê° ì°ê²°íë €ë. 뚌ì ì¬ì©íë €ë ë žë륌 íì íŽìŒ í©ëë€.
ì ì, ID ê°ì žì€êž° ììì ì€ëª í ë°©ë². CSMA Ʞ볞 ê°ìì 겜ì°ì
묎ì ë žë, ìŽê²ì ë žë XNUMXë¡ íëª ëê³ ì¶ì ë€ìì€íìŽì€ 겜ë¡ë
몚ë¹ëŠ¬í° 몚ëžì ë€ì곌 ê°ìµëë€.
/NodeList/7/$ns3::MobilityModel/CourseChange
ì¶ì ì¹ì ì ë Œì륌 êž°ë°ìŒë¡ ìŽ ì¶ì 겜ë¡ê°
ì ì NodeListì ìŒê³± ë²ì§ž ë žë륌 ì°žì¡°í©ëë€. ëŒê³ íë ê²ì ì§ì í©ëë€.
ì§ê³ë ê°ì²Ž ì í ns3::몚ë¹ëŠ¬í°ëªšëž. ë¬ë¬ êž°íž ì ëìŽë ë€ìì ì믞í©ëë€.
MobilityModelì ë žë XNUMXë¡ ì§ê³ë©ëë€. 겜ë¡ì ë§ì§ë§ êµ¬ì± ììë
íŽë¹ 몚ëžì "CourseChange" ìŽë²€ížì ì°ê²°ë©ëë€.
ë€ìì ížì¶íì¬ ë žë XNUMXì ì¶ì ìì€ì ì¶ì ì±í¬ë¥Œ ì°ê²°í©ëë€.
구ì±::ì°ê²° ìŽ ë€ìì€íìŽì€ 겜ë¡ë¥Œ ì ë¬í©ëë€. ìŽ ìì ìŽ ìë£ëë©Ž 몚ë 곌ì ìŽ ë³ê²œë©ëë€.
ë žë XNUMXì ìŽë²€ížë ížë ìŽì€ ì±í¬ì ì°ê²°ëìŽ ë€ìì ì¶ë ¥í©ëë€.
ìë¡ìŽ ìì¹.
ìŽì ì뮬ë ìŽì ì ì€ííë©Ž ìœì€ ë³ê²œìŽ ë°ìíë ëë¡ íìëë ê²ì 볌 ì ììµëë€.
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(5.989ìŽ).
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10, y = 0
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.3841, y = 0.923277
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.2049, y = 1.90708
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.8136, y = 1.11368
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.8452, y = 2.11318
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.9797, y = 3.10409
ìê°ì 2s íŽëŒìŽìžížë 1024 ë°ìŽížë¥Œ 10.1.2.4 í¬íž 9ë¡ ë³Žëìµëë€.
ìê° 2.01796ìŽì ìë²ë 1024 í¬íž 10.1.3.3ìì 49153ë°ìŽížë¥Œ ìì íìµëë€.
2.01796ìŽì ìë²ê° 1024ë°ìŽížë¥Œ 10.1.3.3 í¬íž 49153ìŒë¡ 볎ëìµëë€.
ìê° 2.03364ìŽì íŽëŒìŽìžížê° 1024 í¬íž 10.1.2.4ìì 9ë°ìŽížë¥Œ ìì íìµëë€.
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.3273, y = 4.04175
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.013, y = 4.76955
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.4317, y = 5.67771
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.4607, y = 5.91681
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.0155, y = 6.74878
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.0076, y = 6.62336
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.6285, y = 5.698
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.32, y = 4.97559
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.1134, y = 3.99715
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.8359, y = 4.68851
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.5953, y = 3.71789
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.7595, y = 4.26688
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.7629, y = 4.34913
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.2292, y = 5.19485
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.2344, y = 5.09394
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.3601, y = 4.60846
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.40025, y = 4.32795
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.14292, y = 4.99761
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.08299, y = 5.99581
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.26068, y = 5.42677
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.35917, y = 6.42191
/NodeList/7/$ns3::MobilityModel/CourseChange x = 7.66805, y = 7.14466
/NodeList/7/$ns3::MobilityModel/CourseChange x = 6.71414, y = 6.84456
/NodeList/7/$ns3::MobilityModel/CourseChange x = 6.42489, y = 7.80181
ížë ìŽì±
배겜
UsingTracingSystemìì ìžêžíë¯ìŽ NS-3 ì뮬ë ìŽì ì
ì°êµ¬ë¥Œ ìí ì¶ë ¥ì ìì±í©ëë€. ì¶ë ¥ì ì»êž° ìí ë ê°ì§ Ʞ볞 ì ëµìŽ ììµëë€. NS-3:
ìŒë°ì ìž ì¬ì ì ìë ëë ì¶ë ¥ ë©ì»€ëìŠì ì¬ì©íê³ ìœí ìž ë¥Œ 구묞 ë¶ìíì¬ ì¶ì¶
í¥ë¯žë¡ìŽ ì 볎; ëë ìŽë»ê²ë ì ííê² ì ë¬íë ì¶ë ¥ ë©ì»€ëìŠì ê°ë°í©ëë€.
(ìë§ë) ìíë ì 볎.
믞늬 ì ìë ëë ì¶ë ¥ ë©ì»€ëìŠì ì¬ì©íë©Ž ë€ìì ë³ê²œí íìê° ìë€ë ìŽì ìŽ ììµëë€.
NS-3, íì§ë§ êŽì¬ ìë ë°ìŽí°ë¥Œ 구묞 ë¶ìíê³ íí°ë§íë €ë©Ž ì€í¬ëŠœížë¥Œ ìì±íŽìŒ í ì ììµëë€. ì죌,
PCAP ëë NS_LOG ì¶ë ¥ ë©ìì§ë ì뮬ë ìŽì ì€í ì€ì ìì§ëê³ ë³ëë¡ ì€íë©ëë€.
ì¬ì©íë ì€í¬ëŠœížë¥Œ íµíŽ GREP, SED or AWK ë©ìì§ë¥Œ 구묞 ë¶ìíê³ ì¶ì ë° ë³í
ë°ìŽí°ë¥Œ êŽëŠ¬ ê°ë¥í ííë¡ ë³íì ìííëë¡ íë¡ê·žëšì ìì±íŽìŒ íë¯ë¡ ìŽ
ê³µì§ë¡ ì€ì§ ììµëë€. NS_LOG ì¶ë ¥ì ë€ìì ìŒë¶ë¡ ê°ì£Œëì§ ììµëë€. NS-3 API ë° ì
ëŠŽëŠ¬ì€ ê°ì ê²œê³ ììŽ ë³ê²œë©ëë€. ê²ë€ê°, NS_LOG ì¶ë ¥ì
ëë²ê·ž ë¹ëìŽë¯ë¡ ìŽì ìì¡Žíë©Ž ì±ë¥ìŽ ì íë©ëë€. ë¬Œë¡ ,
ì¬ì ì ìë ì¶ë ¥ ë©ì»€ëìŠì êŽì¬ ìë ì ë³Žê° ì¡Žì¬íì§ ìë 겜ì°, ìŽ
ì ê·ŒìŽ ì€íší©ëë€.
믞늬 ì ìë ëë ë©ì»€ëìŠì ìœê°ì ì 볎륌 ì¶ê°íŽìŒ íë ê²œì° ë€ìì ìíí ì ììµëë€.
íì€í ìë£; ë€ì ì€ íë륌 ì¬ì©íë ê²œì° NS-3 ë©ì»€ëìŠì ì¬ì©íë©Ž ìœëê° ì¶ê°ë ì ììµëë€.
ê³µíìŒë¡.
NS-3 ê³ ì í 묞ì ì€ ìŒë¶ë¥Œ ë°©ì§íë ì¶ì ìŽëŒë ë ë€ë¥ž ë©ì»€ëìŠì ì ê³µí©ëë€.
ëë ì¶ë ¥ ë©ì»€ëìŠìì. ëª ê°ì§ ì€ìí ìŽì ìŽ ììµëë€. 뚌ì í ì ììµëë€.
êŽì¬ ìë ìŽë²€ížë§ ì¶ì íì¬ êŽëŠ¬íŽìŒ íë ë°ìŽí° ìì ì€ì ëë€.
(ëê·ëªš ì뮬ë ìŽì ì ê²œì° íì²ëŠ¬ë¥Œ ìíŽ ëªšë ê²ì ëì€í¬ì ë€ííë©Ž I/Oê° ìì±ë ì ììµëë€.
ë³ëª© íì). ë짞, ìŽ ë°©ë²ì ì¬ì©íë©Ž ì¶ë ¥ íìì ì ìŽí ì ììµëë€.
ë€ì곌 ê°ì íì²ëŠ¬ ëšê³ë¥Œ íŒí ì ììµëë€. SED, AWK, í or íìŽì¬ ì€í¬ëŠœíž. ë§ìœì
ìíë ê²œì° ì¶ë ¥ì gnuplotìì íì©íë íììŒë¡ ì§ì íìíí ì ììµëë€.
ì(GnuplotHelper ì°žì¡°). ìœìŽì íí¬ë¥Œ ì¶ê°í ì ììµëë€.
ë€ë¥ž ì¬ì©ìê° ì¡ìžì€íì§ë§ ëª ìì ìŒë¡ ìì²íì§ ìë í ì 볎륌 ìì±íì§ ììµëë€.
ê·žë ê² íìžì. ìŽë¬í ìŽì ë¡ ì°ëŠ¬ë NS-3 ì¶ì ìì€í ìŽ ê°ì¥ ì¢ì ë°©ë²ì ëë€.
ì뮬ë ìŽì ìžë¶ì ì 볎ìŽë©° ë°ëŒì ê°ì¥ ì€ìí ë©ì»€ëìŠ ì€ íëì ëë€.
ìŽíŽíë€ NS-3.
묎ë Ʞ구
íë¡ê·žëšìì ì 볎륌 ì»ë ë°©ë²ìë ì¬ë¬ ê°ì§ê° ììµëë€. ê°ì¥ ì§êŽì ìž ë°©ë²ì
ë€ì곌 ê°ìŽ ì 볎륌 íì€ ì¶ë ¥ì ì§ì ìžìí©ëë€.
#í¬íš
...
묎íší
SomeFunction(묎íš)
{
uint32_t x = SOME_INTERESTING_VALUE;
...
std::cout << "xì ê°ì " << x << std::endl;
...
}
ì묎ë ë¹ì ìŽ íµì¬ìŒë¡ ê¹ììŽ ë€ìŽê°ë ê²ì ë§ì§ 못í ê²ì ëë€. NS-3 ìžì ì¶ê°
ì§ì . ìŽê²ì ì ë§ íêž° ìœê³ , ê²°êµ, ë¹ì ì ë¹ì ì
ìì ì NS-3 ëëê°ì§. ìŽê²ì ìë§ë ì¥êž°ì ìŒë¡ ë§€ì° ë§ì¡±ì€ëœì§ ìì ê²ì ëë€.
ê·žëë ì©ìŽ.
íë¡ê·žëšìì ìžì묞ì ìê° ìŠê°íšì ë°ëŒ
ë§ì ìì ì¶ë ¥ìŽ ì ì ë ë³µì¡íŽì§ ê²ì ëë€. ê²°êµ, ë¹ì ì ëë ì ììµëë€
ìŽë€ ë°©ììŒë¡ ìŽë€ ì ë³Žê° ìžìëëì§ ì ìŽíŽìŒ í íìì±
í¹ì ë²ì£Œì ìžì묌ì ëê±°ë ìì ë늬거ë ì€ì ëë€.
ë¹ì ìŽ ìíë ì 볎. ìŽ ê²œë¡ë¥Œ ê³ì ë°ëŒê°ë©Ž ë€ì곌 ê°ì ì¬ì€ì ë°ê²¬í ì ììµëë€.
ë€ì 구í NS_LOG ë©ì»€ëìŠ(UsingLogging ì°žì¡°). ìŽë¥Œ ë°©ì§íêž° ìíŽ ë€ì ì€ íë륌
ê°ì¥ 뚌ì ê³ ë €íŽìŒ í ì¬íì ë€ìì ì¬ì©íë ê²ì ëë€. NS_LOG ì첎.
ììì ì 볎륌 ì»ë í ê°ì§ ë°©ë²ì ëíŽ ìžêžíìµëë€. NS-3 êž°ì¡Ž 구묞 ë¶ì NS_LOG
í¥ë¯žë¡ìŽ ì 볎륌 ì¶ë ¥í©ëë€. ìœê°ì ì 볎륌 ë°ê²¬íë€ë©Ž
íìê° êž°ì¡Ž ë¡ê·ž ì¶ë ¥ì ììŒë©Ž íµì¬ì ížì§í ì ììµëë€. NS-3 ê°ëší ì¶ê°
ì¶ë ¥ ì€ížëŠŒì ëí í¥ë¯žë¡ìŽ ì 볎. ì§êž, ìŽê²ì íì€í
ë€ì곌 ê°ìŽ ìì ì ìžì 묞ì ì¶ê°íììì€. NS-3 ìœë© ê·ì¹ê³Œ
ì ì¬ì ìŒë¡ êž°ì¡Ž ìœìŽì ëí íšì¹ë¡ ë€ë¥ž ì¬ëë€ìê² ì ì©í ì ììµëë€.
ììì ì륌 ì ííŽ ë³Žê² ìµëë€. ë ë§ì ë¡ê¹ ì ì¶ê°íë €ë©Ž NS-3 TCP ììŒ
(tcp-ììŒ-base.cc) 구íìì ì ë©ìì§ë¥Œ ì¶ê°í ì ììµëë€. ììì±ë€
ì íŽë¹ TcpSocketBase::ReceivedAck() ACKê° ìë 겜ì°ì ëí ë¡ê·ž ë©ìì§ê° ììµëë€. ë
ê°ëší íë륌 ì¶ê°íì¬ ìœë륌 ë³ê²œí ì ììµëë€. ì볞ì ë€ì곌 ê°ìµëë€.
/** ìë¡ ë°ì ACK ì²ëŠ¬ */
묎íší
TcpSocketBase::ReceivedAck(Ptr íší·, const TcpHeader& tcpHeader)
{
NS_LOG_FUNCTION(ìŽ << tcpHeader);
// ACK륌 ë°ììµëë€. ACK ë²ížë¥Œ ê°ì¥ ëì unacked seqnoì ë¹êµíììì€.
if (0 == (tcpHeader.GetFlags () & TcpHeader::ACK))
{ // ACK íëê·žê° ììŒë©Ž 묎ì
}
...
ACKê° ìë 겜ì°ë¥Œ êž°ë¡íë €ë©Ž ì NS_LOG_LOGIC FBI ìŠì€ ë²ì£ ë³Žê³ ì if 묞 볞묞:
/** ìë¡ ë°ì ACK ì²ëŠ¬ */
묎íší
TcpSocketBase::ReceivedAck(Ptr íší·, const TcpHeader& tcpHeader)
{
NS_LOG_FUNCTION(ìŽ << tcpHeader);
// ACK륌 ë°ììµëë€. ACK ë²ížë¥Œ ê°ì¥ ëì unacked seqnoì ë¹êµíììì€.
if (0 == (tcpHeader.GetFlags () & TcpHeader::ACK))
{ // ACK íëê·žê° ììŒë©Ž 묎ì
NS_LOG_LOGIC("TcpSocketBase " << ìŽ << " ACK íëê·ž ìì");
}
...
ìŽê²ì ìžë»ë³Žêž°ì ìë¹í ê°ëšíê³ ë§ì¡±ì€ë¬ì ë³ŽìŒ ì ìì§ë§ ê³ ë €íŽìŒ í ì¬íì
ì¶ê°í ìœë륌 ìì±í ê²ì ëë€. NS_LOG ì§ì 곌 ë¹ì ì ëí ìì±íŽìŒí©ëë€
ìœë(ììì ê°ìŽ GREP, SED or AWK ì€í¬ëŠœíž)륌 ë¶ëŠ¬íêž° ìíŽ ë¡ê·ž ì¶ë ¥ì 구묞 ë¶ìí©ëë€.
ì 볎. ìŽë ì¬ì©ìê°
ë¡ê¹ ìì€í ììë ìŒë°ì ìŒë¡ ë¡ê·ž êµ¬ì± ìì ìì€ê¹ì§ë§ ì ìŽí ì ììµëë€.
ì 첎 ìì€ ìœë íìŒ.
êž°ì¡Ž 몚ëì ìœë륌 ì¶ê°íë ê²œì° ì¶ë ¥ê³Œ íšê» ìŽììŒ í©ëë€.
ë€ë¥ž 몚ë ê°ë°ìê° í¥ë¯žë¥Œ ëêŒìµëë€. ë¹ì ì ê·žê²ì ì»êž° ìíŽ ì°Ÿì ì ììµëë€
íìí ì ë³Žê° ì ë€ë©Ž ìì²ë ìì ì 볎륌 í€ì³ ëê°ìŒ í ìë ììµëë€.
êŽì¬ìŽ ìë êŽë š ìë ë©ìì§. ê±°ëí ë¡ê·žë¥Œ ì ì¥íŽìŒ í ìë ììµëë€.
íìŒì ëì€í¬ì ì ì¥íê³ ìíë ìì ì í ëë§ë€ ëª ì€ë¡ ì²ëŠ¬í©ëë€.
ì ëí 볎ì¥ìŽ ìêž° ë묞ì NS-3 ì ìì ì±ì ëíŽ NS_LOG ì¶ë ¥, ë¹ì ì ëí
ìì¡Žíë ë¡ê·ž ì¶ë ¥ ì¡°ê°ìŽ ì¬ëŒì§ê±°ë ë³ê²œëë ê²ì ë°ê²¬íììì€.
늎늬ì€. ì¶ë ¥ 구조ì ìì¡Žíë ê²œì° ë€ë¥ž ë©ìì§ê° íìë ì ììµëë€.
구묞 ë¶ì ìœëì ìí¥ì ë¯žì¹ ì ìë ì¶ê° ëë ìì .
ë§ì§ë§ìŒë¡, NS_LOG ì¶ë ¥ì ëë²ê·ž ë¹ëììë§ ì¬ì©í ì ììŒë©° ë¡ê·ž ì¶ë ¥ì ê°ì žì¬ ì ììµëë€.
ìœ XNUMXë°° ë¹ ë¥Žê² ì€íëë ìµì íë ë¹ë. ìì§íë€ NS_LOG ì±ë¥ì ë¶ê³Œ
íšëí°.
ìŽë¬í ìŽì ë¡ ì°ëŠ¬ë ìžì륌 ë€ì곌 ê°ìŽ ê³ ë €í©ëë€. íì€::ì»· and NS_LOG ë¹ ë¥Žê³
ë ë§ì ì 볎륌 ì»ë ëë¬ìŽ ë°©ë² NS-3, ê·žë¬ë ì§ì§í ìì ìë ì í©íì§ ììµëë€.
ìì ì ìž API륌 ì¬ì©íì¬ ìì ì ìž ìì€ì ê°ì¶ë ê²ìŽ ë°ëì§í©ëë€.
íµì¬ ìì€í ì íìí ì ë³Žë§ ì»ìµëë€. í ì ìë ê²ìŽ ë°ëì§íë€
ìŽê²ì íµì¬ ìì€í ì ë³ê²œíê³ ë€ì 컎íìŒí íì ììŽ ê°ë¥í©ëë€. ë ì¢ì ê²ì
êŽì¬ íëª©ìŽ ë³ê²œëê±°ë í¥ë¯žë¡ìŽ ìŽë²€ížê° ë°ìíë©Ž ì¬ì©ì ìœëì ì늬ë ìì€í
ì¬ì©ìê° ì ê·¹ì ìŒë¡ ìì€í ì íìí íìê° ììµëë€.
ìì§í.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì¶ì ìì€í ì ìŽë¬í ëŒìžì ë°ëŒ ìëíëë¡ ì€ê³ëììŒë©° ë€ì곌 ì íµí©ë©ëë€.
ìì± ë° êµ¬ì± ë¹êµì ê°ëší ì¬ì© ìë늬ì€ë¥Œ íì©íë íì ìì€í .
ìŽíŽë³Žêž°
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì¶ì ìì€í ì ë 늜ì ìž ì¶ì ìì€ ë°
ìì€ë¥Œ ì±í¬ì ì°ê²°íêž° ìí ê· ìŒí ë©ì»€ëìŠê³Œ íšê» ì±í¬ë¥Œ ì¶ì í©ëë€.
ì¶ì ìì€ë ì뮬ë ìŽì ìì ë°ìíë ìŽë²€ížì ì ížë¥Œ 볎ëŽê³ ë€ìì ì ê³µí ì ìë ìí°í°ì ëë€.
í¥ë¯žë¡ìŽ Ʞ볞 ë°ìŽí°ì ì¡ìžì€í ì ììµëë€. ì륌 ë€ìŽ ì¶ì ìì€ë
íší·ì ë€íž ì¥ì¹ì ìíŽ ìì ëê³ íší· ëŽì©ì ëí ì¡ìžì€ë¥Œ ì ê³µí©ëë€.
êŽì¬ ì¶ì ì±í¬. ì¶ì ìì€ë êŽì¬ ìë ìíê° ìžì íìë ìë ììµëë€.
ë³íë 몚ëžìì ìŒìŽëë€. ì륌 ë€ìŽ, TCP 몚ëžì íŒì¡ ì°œì ììì ëë€.
ì¶ì ìì€ í볎. íŒì¡ 구ê°ìŽ ì°ê²°ë ížë ìŽì€ë¥Œ ë³ê²œí ëë§ë€
ì±í¬ë ìŽì ê°ê³Œ ì ê°ìŒë¡ ì늌ì ë°ìµëë€.
ì¶ì ìì€ë ê·ž ì첎ë¡ë ì ì©íì§ ììµëë€. ë€ë¥ž ìœë ì¡°ê°ì ì°ê²°ëìŽìŒ í©ëë€.
ìì€ìì ì ê³µíë ì ë³Žë¡ ì€ì ë¡ ì ì©í ìì ì ìíí©ëë€. ê·žë§íŒ
ì¶ì ì 볎륌 ì¬ì©íë ìí°í°ë¥Œ ì¶ì ì±í¬ëŒê³ í©ëë€. ì¶ì ìì€ë
ë°ìŽí° ë° ížë ìŽì€ ì±í¬ì ìì±ìë ìë¹ìì ëë€. ìŽ ëª ìì ìž ë¶í ì í°
ìì±ì륌 몚ëžë§íë ìì€í 죌ë³ì í©ìŽì ž ìë ì¶ì ìì€ì ì
ì ì©í ì ìë€ê³ 믿ìµëë€. ì¶ì ìì€ë¥Œ ìœì íë©Ž ë§€ì° ìì ì€íìŽ ëì ë©ëë€.
ê°ì ë¹.
ì¶ì ìì€ìì ìì±ë ì¶ì ìŽë²€ížì ìë¹ìë XNUMXëª ìŽììŒ ì ììµëë€. íëë ì
ì¶ì ìì€ë¥Œ ìŒì¢ ì ì ëë€ì ì 볎 ë§í¬ë¡ ìê°íììì€. ê·íì ìœë
ìœìŽ ìœëì í¹ì ë¶ë¶ìì ì¶ì ìŽë²€ížë¥Œ ì°Ÿë ê²ì íë³µíê² ê³µì¡Ží ì ììµëë€.
ëìŒí ì 볎ì ìì í ë€ë¥ž ìì ì ìííë ë€ë¥ž ìœë.
ì¬ì©ìê° ì¶ì ì±í¬ë¥Œ ìŽë¬í ìì€ ì€ íëì ì°ê²°íì§ ììŒë©Ž ì묎 ê²ë ì¶ë ¥ëì§ ììµëë€. ì¬ì©íì¬
ì¶ì ìì€í , ê·íì ëìŒí ì¶ì ìì€ì ì°ê²°ë ë€ë¥ž ì¬ëë€ ëªšë ì ì
ì íí ê·žë€ìŽ ìíë ê²ê³Œ ìì€í ìì ìíë ê²ë§. ë ë€ ìëìŒ
ìì€í ìì ì¶ë ¥ëë ì 볎륌 ë³ê²œíì¬ ë€ë¥ž ì¬ì©ììê² ìí¥ì 믞칚. ë§ìœ ëëŒë©Ž
ížë ìŽì€ ìì€ë¥Œ ì¶ê°íë ê²œì° íë¥í ì€í ìì€ ì믌ìŒë¡ì ê·íì ìì ì ë€ë¥ž ì¬ì©ììê² íì©ë ì ììµëë€.
ì¬ì©ìê° ì ë°ì ìŒë¡ ë§€ì° ì ì©í ì ìë ìë¡ìŽ ì ížëŠ¬í°ë¥Œ ì ê³µí ì ììµëë€.
ë¡ ë³ê²œ NS-3 íµì¬.
ëšì, ê°ëš, ížëŠ¬ ìì
ëª ë¶ ëì ê°ëší ì¶ì ìì 륌 ìŽíŽë³Žê² ìµëë€. ì°ëŠ¬ë íìí ê²ì ëë€
ìì ìì ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ ìŽíŽíêž° ìíŽ ìœë°±ì ëí ìœê°ì 배겜 ì§ììŽ ììŒë¯ë¡
곧ë°ë¡ ìì ì°íë¡ë¥Œ ìŽì©íŽìŒ í©ëë€.
ìœë°±
ìœë°± ìì€í ì 목í NS-3 íëì ìœë ì¡°ê°ìŽ íšì륌 ížì¶íëë¡ íì©íë ê²ì ëë€.
(ëë C++ì ë©ìë) í¹ì 몚ë ê° ì¢ ìì±ìŽ ììµëë€. ìŽê²ì ê¶ê·¹ì ìŒë¡ ì믞í©ëë€
ìŒì¢ ì ê°ì ì°žì¡°ê° íìí©ëë€. ížì¶ë íšìì 죌ì륌
ë³íêž° ì¬ìŽ. ìŽ ë³ì륌 íšìì ëí í¬ìží° ë³ìëŒê³ í©ëë€. êŽê³
íšìì íšìì ëí í¬ìží° ì¬ìŽë ì€ì ë¡ ê°ì²Žì íšìì í¬ìží°ì ë€ë¥Žì§ ììµëë€.
ê°ì²Žì ëí í¬ìží°.
Cìì íšìì ëí í¬ìží°ì íì€ ìë
PFI(íšì ë°í ì ìì ëí í¬ìží°). PFIì ê²œì° INT 맀ê°ë³ì, ìŽ
ë€ì곌 ê°ìŽ ì ìží ì ììµëë€.
int (*pfi)(int arg) = 0;
(íì§ë§ ìœìŽë³Žìžì. C++-FAQ ì¹ì 33 ìŽë° ìœë륌 ìì±íêž° ì ì!) ì¬êž°ì ì»ì ì ìë ê²
ëšìí ìŽëŠìŽ ë¶ì ë³ìì ëë€ íŒíŒ ìŽë ê° 0ìŒë¡ ìŽêž°íë©ëë€.
ìŽ í¬ìží°ë¥Œ ì믞 ìë ê²ìŒë¡ ìŽêž°ííë €ë©Ž
ìŒì¹íë ìëª . ìŽ ê²œì° ë€ì곌 ê°ì êž°ë¥ì ì ê³µí ì ììµëë€.
int MyFunction(int ìžì) {}
ìŽ ëììŽ ìë ê²œì° íšì륌 ê°ëŠ¬í€ëë¡ ë³ì륌 ìŽêž°íí ì ììµëë€.
pfi = ëŽêž°ë¥;
ê·žë° ë€ì ë³Žë€ ììì ìž ížì¶ íìì ì¬ì©íì¬ MyFunctionì ê°ì ì ìŒë¡ ížì¶í ì ììµëë€.
int 결곌 = (*pfi) (1234);
ìŽê²ì íšì í¬ìží°ë¥Œ ìì°žì¡°íë ê²ì²ëŒ 볎ìŽêž° ë묞ì ììì ì ëë€.
í¬ìží°ë¥Œ ì ì°žì¡°íë ê²ì²ëŒ. ê·žë¬ë ìŒë°ì ìŒë¡ ì¬ëë€ì
컎íìŒë¬ê° ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ ìê³ ìê³ ë 짧ì íìì ì¬ì©í ê²ìŽëŒë ì¬ì€:
ì ì 결곌 = pfi(1234);
ë€ì곌 ê°ì íšì륌 ížì¶íë ê² ê°ìµëë€. íŒíŒíì§ë§ 컎íìŒë¬ë 충ë¶í ëëí©ëë€.
ë³ì륌 íµíŽ ížì¶íë ë°©ë²ì ìê³ ììµëë€. íŒíŒ íšìì ê°ì ì ìŒë¡ ë§ìŽíì .
ê°ë ì ìŒë¡ ìŽë ì¶ì ìì€í ìŽ ìëíë ë°©ì곌 ê±°ì ëìŒí©ëë€. Ʞ볞ì ìŒë¡ ì¶ì
ì±í¬ë is ìœë°±. ì¶ì ì±í¬ê° ì¶ì ìŽë²€íž ìì ì êŽì¬ì íìíë©Ž
ì¶ì ìì€ê° ëŽë¶ì ìŒë¡ 볎ì í ìœë°± 목ë¡ì ìì ì ìœë°±ìŒë¡ ì¶ê°í©ëë€.
í¥ë¯žë¡ìŽ ìŽë²€ížê° ë°ìíë©Ž ì¶ì ìì€ê° íŽë¹ ìŽë²€ížë¥Œ ížì¶í©ëë€. ìŽìì(...) ì ê³µ
XNUMXê° ìŽìì ìžì. ê·žë§íŒ ìŽìì(...) ê²°êµ ìì€í ììŒë¡ ë°©í©íê³
ë°©êž ë³ž ê°ì ížì¶ê³Œ ë§€ì° ì ì¬íì¬ XNUMXê° ìŽìì ê°ì ì ê³µí©ëë€.
ì ëí ížì¶ê³Œ ë§ì°¬ê°ì§ë¡ 맀ê°ë³ì íŒíŒ ììì ëì íšìì íëì 맀ê°ë³ì륌 ì ë¬íìµëë€.
ë§ìŽíì .
ì¶ì ìì€í ìŽ ì¶ê°íë ì€ìí ì°šìŽì ì ê° ì¶ì ìì€ì ëíŽ
ìœë°±ì ëŽë¶ 목ë¡ì ëë€. ê°ì ížì¶ì í ë²ë§ íë ëì ì¶ì
ìì€ë ì¬ë¬ ìœë°±ì ížì¶í ì ììµëë€. ížë ìŽì€ ì±í¬ê° ë€ìì ëí êŽì¬ì íííë 겜ì°
ì¶ì ìì€ì ì늌ì Ʞ볞ì ìŒë¡ ì첎 êž°ë¥ì ì¶ê°íëë¡ ë°°ìŽí©ëë€.
ìœë°± 목ë¡.
ìŽê²ìŽ ì€ì ë¡ ìŽë»ê² ë°°ìŽëëì§ì ëí ììží ëŽì©ì êŽì¬ìŽ ìë€ë©Ž NS-3, ëë
ìœë°± ì¹ì ì ìì ë¡ê² ìœìŽë³Žìžì. NS-3 맀ëŽìŒ.
ì°ìµ : ë€ë²ì§ž.cc
ì°ëŠ¬ë ì¶ì ì ê°ì¥ ê°ëší ì륌 구ííêž° ìíŽ ëª ê°ì§ ìœë륌 ì ê³µíìµëë€.
조늜í ì ìë ê²ì ëë€. íí ëŠ¬ìŒ ëë í 늬ìì ìŽ ìœë륌 ë€ì곌 ê°ìŽ ì°Ÿì ì ììµëë€. ë€ë²ì§ž.cc.
ìŽíŽë³Žê² ìµëë€:
/* -*- 몚ë:C++; c-íìŒ ì€íìŒ:"gnu"; ë€ì¬ì°êž° í 몚ë:nil; -*- */
/*
* ìŽ íë¡ê·žëšì ë¬Žë£ ìíížìšìŽì ëë€. ì¬ë°°í¬ ë°/ëë ìì í ì ììµëë€.
* ë€ì곌 ê°ìŽ GNU General Public License ë²ì 2ì 조걎ì ë°ëŠ ëë€.
* ìì ìíížìšìŽ ì¬ëšìì ë°í;
*
* ìŽ íë¡ê·žëšì ì ì©íê² ì¬ì©ëêžž ë°ëŒë ë§ììì ë°°í¬ëë©°,
* ê·žë¬ë ìŽë í 볎ìŠë ì ê³µíì§ ììµëë€. 묵ìì 볎ìŠë ììŽ
* ìíì± ëë í¹ì 목ì ìì ì í©ì±. ì°žì¡°
* ììží ëŽì©ì GNU General Public License륌 ì°žì¡°íììì€.
*
* GNU General Public License ì¬ë³žì ë°ììŽìŒ í©ëë€.
* ìŽ íë¡ê·žëšê³Œ íšê»; ê·žë ì§ ìì ê²œì° ìì ìíížìšìŽì ì°êž°
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ns3/object.h"
#include "ns3/uinteger.h"
#include "ns3/traced-value.h"
#include "ns3/trace-source-accessor.h"
#í¬íš
ë€ìì€íìŽì€ ns3 ì¬ì©;
ìŽ ìœëì ëë¶ë¶ì ì¬ë¬ë¶ìê² ë§€ì° ìµìí ê²ì ëë€. ììì ìžêží ê²ì²ëŒ ì¶ì ìì€í ì
ê°ì²Ž ë° í¹ì± ìì€í ì ë§ìŽ ì¬ì©íë¯ë¡ í¬íšíŽìŒ í©ëë€.
ìì ì²ì ë ê° í¬íšì íŽë¹ ìì€í ì ëí ì ìžì ëª ìì ìŒë¡ ê°ì žìµëë€. ë
íµì¬ 몚ë í€ë륌 ì¬ì©íì¬ ëªšë ê²ì í ë²ì ì»ì ì ìì§ë§ ì°ëŠ¬ë í¬íšì ìíí©ëë€.
ìŽ ëªšë ê²ìŽ ì€ì ë¡ ìŒë§ë ê°ëšíì§ ì€ëª íêž° ìíŽ ì¬êž°ì ëª ìì ìŒë¡ ì€ëª í©ëë€.
íìŒ, ì¶ì ê°.h ë°ìŽí° ì¶ì ì íìí ì ìžì ê°ì žìµëë€.
ê°ì¹ ìë¯žë¡ ì ë°ëŠ ëë€. ìŒë°ì ìŒë¡ ê° ìë¯žë¡ ì ëšì§
ê°ì²Žì 죌ì륌 ì ë¬íë ëì ê°ì²Ž ì첎륌 죌ë³ì ì ë¬í©ëë€. ìŽê² ë€ ëìŒ ì§ì§
ìŽë ì€ì ë¡ TracedValueì ëí 몚ë ë³ê²œ ì¬íì ì¶ì í ì ììì ì믞í©ëë€.
ê°ëší ë°©ë².
ì¶ì ìì€í ìŽ ìì±ê³Œ íµí©ëê³ ìì±ìŽ ê°ì²Žì íšê» ìëíë¯ë¡
ìŽ ììŽìŒí©ëë€ NS-3 목ì ì¶ì ìì€ê° ì¡Žì¬í ì ìëë¡ í©ëë€. ë€ì ìœë ì¡°ê°
ìì í ì ìë ê°ëší ê°ì²Žë¥Œ ì ìžíê³ ì ìí©ëë€.
íŽëì€ MyObject : ê³µì© ê°ì²Ž
{
공공ì:
ì ì TypeId GetTypeId(묎íš)
{
ì ì TypeId tid = TypeId("MyObject")
.SetParent(ê°ì²Ž::GetTypeId())
.AddConstructor ()
.AddTraceSource("MyInteger",
"ì¶ì í ì ì ê°ì ëë€.",
MakeTraceSourceAccessor(&MyObject::m_myInt),
"ns3::ì¶ì ::ê°::Int32Callback")
;
ì ì ë°í;
}
ëŽê°ì²Ž() {}
ì¶ì ë ê° m_myInt;
};
ì¶ì 곌 êŽë šíì¬ ìì ë ê°ì§ ì€ìí ìœë ëŒìžì .AddTraceSource
ê·žëŠ¬ê³ ì¶ì ë ê° ì ì ìž m_myInt.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë .AddTraceSource ì¶ì ìì€ë¥Œ ì°ê²°íë ë° ì¬ì©ëë "íí¬"륌 ì ê³µí©ëë€.
Config ìì€í ì íµíŽ ìžë¶ ìžê³. 첫 ë²ì§ž ìžìë ìŽ ì¶ì ì ìŽëŠì ëë€.
Config ìì€í ì íìëë ìì€ì ëë€. ë ë²ì§ž ìžìë ëìë§ ë¬žììŽì ëë€.
ìŽì ìž ë²ì§ž ìžì륌 ìŽíŽë³Žììì€. ì¬ì€ì ìŽì ì ë§ì¶ììì€. ë Œì ìž ë²ì§ž ì£Œì¥ ì€:
&MyObject::m_myInt. ìŽê²ì íŽëì€ì ì¶ê°ëë TracedValueì ëë€. ê·žê²ì
íì íŽëì€ ë°ìŽí° ë©€ë²ì ëë€. (ë§ì§ë§ ìžìë íì ì ì ìí
TracedValue ì í(묞ììŽ). ì¬ë°ë¥ž 묞ì륌 ìì±íë ë° ì¬ì©ë©ëë€.
í¹í ë³Žë€ ìŒë°ì ìž ì íì 겜ì°ì ì ì©í ìœë°± íšì ìëª ì ëë€.
ìœë°±.)
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ì¶ì ë ê°<> ì ìžì ìœë°±ì 구ëíë ìžíëŒë¥Œ ì ê³µí©ëë€.
íë¡ìžì€. Ʞ볞 ê°ìŽ ë³ê²œë ëë§ë€ TracedValue ë©ì»€ëìŠì ë€ìì ì ê³µí©ëë€.
íŽë¹ ë³ìì ìŽì ê°ê³Œ ì ê° ëªšë, ìŽ ê²œì°ìë ì ì32_t ê°. ì¶ì
ìŽ TracedValueì ëí ì±í¬ íšììë ìëª ìŽ íìí©ëë€.
void (* TracedValueCallback)(const int32_t oldValue, const int32_t newValue);
ìŽ ì¶ì ìì€ë¥Œ ì°ê²°íë 몚ë ì¶ì ì±í¬ìë ìŽ ìëª ìŽ ììŽìŒ í©ëë€. ìëìì ë Œìíê² ìµëë€.
ë€ë¥ž 겜ì°ì íìí ìœë°± ìëª ì ê²°ì íë ë°©ë².
ë¬Œë¡ , ê³ìíŽì ë€ë²ì§ž.cc ì°ëŠ¬ë볎ë€:
묎íší
IntTrace(int32_t oldValue, int32_t newValue)
{
std::cout << "ì¶ì ë " << oldValue << "ìì " << newValue << std::endl;
}
ìŽë ìŒì¹íë ì¶ì ì±í¬ì ì ìì ëë€. ìœë°±ì ì§ì ì ìŒë¡ ëìë©ëë€.
íšì ìëª . ìŒëš ì°ê²°ëë©Ž ìŽ íšìë ë€ììŽ ìì ëë§ë€ ížì¶ë©ëë€.
ì¶ì ë ê° ë³ê²œ.
ìŽì ì¶ì ìì€ì ì¶ì ì±í¬ë¥Œ 볎ììµëë€. ëšì ê²ì ì°ê²°íë ìœëì ëë€.
ë°ìíë ì±í¬ ìì€ ë³žêŽ:
INT
ë©ìž(int argc, char *argv[])
{
í¬ìžíž myObject = CreateObject ();
myObject->TraceConnectWithoutContext ("MyInteger", MakeCallback(&IntTrace));
myObject->m_myInt = 1234;
}
ì¬êž°ìë 뚌ì ì¶ì ìì€ê° ìë MyObject ìžì€íŽì€ë¥Œ ë§ëëë€.
ë€ì ëšê³ë TraceConnectWithoutContext, ì¶ì ê°ì ì°ê²°ì íì±í©ëë€.
ìì€ ë° ì¶ì ì±í¬. 첫 ë²ì§ž ìžìë ì¶ì ìì€ ìŽëŠ "MyInteger"ì ëë€.
ì°ëŠ¬ë ììì 볎ììµëë€. 죌목íìžì MakeCallback í í늿 êž°ë¥. ìŽ êž°ë¥ì ë§ë²ì ìí
Ʞ볞ì ë§ëë ë° íìí©ëë€. NS-3 ìœë°± ê°ì²Žë¥Œ íšìì ì°ê²°
ìžížë ìŽì€. TraceConnect ì ê³µë êž°ë¥ê³Œ
ì€ë²ë¡ë ìŽìì() "MyInteger" ìì±ìŽ ì°žì¡°íë ì¶ì ë³ìì ììµëë€.
ìŽ ì°ê²°ìŽ ìŽë£šìŽì§ í ì¶ì ìì€ë ì ê³µë ìœë°±ì "ì€í"í©ëë€.
êž°ë¥.
ìŽ ëªšë ê²ì ê°ë¥íê² íë ìœëë ë¬Œë¡ ì¬ìíì§ ìì§ë§ íµì¬ì ë€ì곌 ê°ìµëë€.
ë¹ì ì ì²ëŒ 볎ìŽë 묎ìžê°ë¥Œ ì€ë¹íê³ ììµëë€ pfi() ížì¶í ìì ì
ì¶ì ìì€ë¥Œ íµíŽ ì ì ìž ì¶ì ë ê° m_myInt; ê°ì²Žìì
ì첎ì ìŒë¡ ì€ë²ë¡ëë í ë¹ ì°ì°ì륌 ì ê³µíë ë° íìí ë§ë²ì ìíí©ëë€.
ì¬ì© ìŽìì() ìíë 맀ê°ë³ìë¡ ìœë°±ì ì€ì ë¡ ížì¶í©ëë€. ê·žë§íŒ
.AddTraceSource ìœë°±ì êµ¬ì± ìì€í ì ì°ê²°íë ë§ë²ì ìííê³
TraceConnectWithoutContext íšì륌 ì¶ì ì ì°ê²°íë ë§ë²ì ìíí©ëë€.
ìì€ë ìì± ìŽëŠìŒë¡ ì§ì ë©ëë€.
ì§êžì 컚í ì€ížì ëí ë¶ë¶ì 묎ìíê² ìµëë€.
ë§ì§ë§ìŒë¡ ê°ì í ë¹íë ì€ì m_myInt:
myObject->m_myInt = 1234;
~ì ížì¶íë ê²ìŒë¡ íŽìëìŽìŒ íë€. operator = ë©€ë² ë³ìì m_myInt 곌
ì ì 1234 맀ê°ë³ìë¡ ì ë¬ë©ëë€.
ìŽí m_myInt íë ì¶ì ë ê°, ìŽ ì°ì°ìë ìœë°±ì ì€ííëë¡ ì ìë©ëë€.
void륌 ë°ííê³ ë ê°ì ì ì ê°ì 맀ê°ë³ìë¡ ì¬ì©í©ëë€. --- ìŽì ê°ê³Œ ì ê°
묞ì ì ì ìì ëíŽ. ìŽê²ìŽ ë°ë¡ ìœë°±ì íšì ìëª ì ëë€.
ì°ëŠ¬ê° ì ê³µí êž°ë¥ --- ìžížë ìŽì€.
ììœíë©Ž ì¶ì ìì€ë 볞ì§ì ìŒë¡ ìœë°± 목ë¡ì 볎ì íë ë³ìì ëë€. ã
ížë ìŽì€ ì±í¬ë ìœë°±ì ëììŒë¡ ì¬ì©ëë íšìì ëë€. ìì± ë° ê°ì²Ž ì í
ì 볎 ìì€í ì ì¶ì ìì€ë¥Œ ì¶ì ì±í¬ì ì°ê²°íë ë°©ë²ì ì ê³µíë ë° ì¬ì©ë©ëë€.
ì¶ì ìì€ë¥Œ "ì ì€"íë íìë ì¶ì ìì€ìì ì°ì°ì륌 ì€ííë ê²ì ëë€.
ìœë°±ì ì€íí©ëë€. ìŽë¡ ìžíŽ êŽì¬ì ë±ë¡íë ì¶ì ì±í¬ ìœë°±ìŽ ë°ìí©ëë€.
ìì€ìì ì ê³µíë 맀ê°ë³ì륌 ì¬ì©íì¬ ìì€ë¥Œ ížì¶í©ëë€.
ìŽì ìŽ ìì 륌 ë¹ëíê³ ì€ííë©Ž
$ ./waf --ë€ ë²ì§ž ì€í
ì ì¶ë ¥ì 볌 ì ììµëë€. ìžížë ìŽì€ ì¶ì ìì€ê° ìë ìŠì íšì ì€í
ë늬ë€:
ì¶ì ë 0 ~ 1234
ìœë륌 ì€ííì ë, myObject->m_myInt = 1234;, ì¶ì ìì€ê° ì€íëê³
ìŽì ë° ìŽí ê°ì ì¶ì ì±í¬ì ìëìŒë¡ ì ê³µíìµëë€. íšì
ìžížë ìŽì€ ê·žë° ë€ì ìŽê²ì íì€ ì¶ë ¥ìŒë¡ ìžìíìµëë€.
ì°ê²°íêž° 곌 구ì±
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë TraceConnectWithoutContext ìì ê°ëší ìì íìë ížì¶ì ì€ì ë¡ ë§€ì°
ìì€í ììë ê±°ì ì¬ì©ëì§ ììµëë€. ë³Žë€ ìŒë°ì ìŒë¡, êµ¬ì± íì ìì€í ì ì¶ì ì ì ííë ë° ì¬ì©ë©ëë€.
ìì ë§íë ê²ì ì¬ì©íì¬ ìì€í ì ìì€ êµ¬ì± íµë¡. ì°ëŠ¬ë ìŽê²ì ëí ì륌 ë€ììì 볎ììµëë€.
ì€íí ë "CourseChange" ìŽë²€ížë¥Œ ì°ê²°í ìŽì ì¹ì
ìž ë²ì§ž.cc.
Mobilityìì ìœì€ ë³ê²œ ì 볎륌 ìžìíêž° ìíŽ ì¶ì ì±í¬ë¥Œ ì ìíìì êž°ìµíìžì.
ì°ëŠ¬ì ì뮬ë ìŽì 몚ëž. ìŽì ìŽ êž°ë¥ìŽ 묎ììžì§ íšì¬ ë ëª ííê² ì ì ìì ê²ì ëë€.
íêž°:
묎íší
CourseChange(std::묞ììŽ ì»ší ì€íž, Ptr 몚ëž)
{
ë²¡í° ìì¹ = 몚ëž->GetPosition();
NS_LOG_UNCOND(컚í ì€íž <
" x = " << ìì¹.x << ", y = " << ìì¹.y);
}
"CourseChange" ì¶ì ìì€ë¥Œ ìì ì¶ì ì±í¬ì ì°ê²°í ë ë€ìì ì¬ì©íìµëë€.
ì¬ì ì ìë í목 ê°ì ì°ê²°ì ì ë ¬í ë ìì€ë¥Œ ì§ì íë êµ¬ì± ê²œë¡
ì¶ì ìì€ ë° ì ì¶ì ì±í¬:
íì€::ostringstream oss;
oss << "/NodeList/"
<< wifiStaNodes.Get (nWifi - 1)->GetId ()
<< "/$ns3::MobilityModel/CourseChange";
Config::Connect(oss.str(), MakeCallback(&CourseChange));
ëëë¡ ìëì ìŒë¡ ì ë¹í ìœëë¡ ê°ì£Œëë ê²ì ìŽíŽíê³ ìëíŽ ëŽ ìë€.
ì€ëª ì ìíŽ ë€ììì ë°íë ë žë ë²ížë¥Œ ê°ì í©ëë€. ID ê°ì žì€êž°() is
"7". ìŽ ê²œì° ìì 겜ë¡ë ë€ì곌 ê°ìµëë€.
"/NodeList/7/$ns3::MobilityModel/CourseChange"
êµ¬ì± ê²œë¡ì ë§ì§ë§ ìžê·žëšŒížë ë€ì곌 ê°ììŒ í©ëë€. ìì± ì 목ì . ì¬ì€, ë¹ì ìŽ ììë€ë©Ž
ì ëí í¬ìží° 목ì "CourseChange"ê° ìë ê²ì ëë€. ìì± ížëŠ¬íŽì, ìŽë ê² ìšë ëŒì
ìŽì ììì íë ê²ì²ëŒ ë§ìŽì£ . ìŽì ì°ëŠ¬ë ìŒë°ì ìŒë¡
ì°ëŠ¬ë¥Œ ê°ëŠ¬í€ë í¬ìží° ë žë NodeContainerìì. ìì ìž ë²ì§ž.cc ì, êŽì¬ ë žë
ì ì ì¥ë©ëë€ wifiStaNodes NodeContainer. ì¬ì€ êžžì ì 늬íë©Žì
ì°ëŠ¬ë ìŽ ì»ší ìŽë륌 ì¬ì©íì¬ Ptr ì°ëŠ¬ê° ë¶ë¥Žë ê² ID ê°ì žì€êž°(). ì°ëŠ¬ë ê°ì§ ì ììë€
ìŽê²ì ì¬ì© Ptr Connect ë©ìë륌 ì§ì ížì¶íë €ë©Ž ë€ìì ìííììì€.
í¬ìžíž theObject = wifiStaNodes.Get(nWifi - 1);
theObject->TraceConnectWithoutContext("CourseChange", MakeCallback(&CourseChange));
. ìž ë²ì§ž.cc ì륌 ë€ìŽ, ì°ëŠ¬ë ì€ì ë¡ ì¶ê° "컚í ì€íž"ê° íšê» ì ë¬ëꞰ륌 ìíìµëë€.
ìœë°± 맀ê°ë³ì(ìëì ì€ëª ëš)륌 ì¬ì©íì¬ ì€ì ë¡ ì¬ì©í ì ììµëë€.
ë€ì곌 ê°ì ëë±í ìœë:
í¬ìžíž theObject = wifiStaNodes.Get(nWifi - 1);
theObject->TraceConnect("CourseChange", MakeCallback(&CourseChange));
ëŽë¶ ìœëë ë€ì곌 ê°ìµëë€. 구ì±::ConnectWithoutContext and 구ì±::ì°ê²°
ì€ì ë¡ ì°Ÿì볎ìžì í¬ìžíž ê·žëŠ¬ê³ ì ì í ì í TraceConnect ê°ì¥ ë®ì ë°©ë²
ìí.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë êµ¬ì± íšìë 첎ìžì ëíëŽë 겜ë¡ë¥Œ ì·ší©ëë€. 목ì í¬ìží°. ê° ìžê·žëšŒíž
겜ë¡ì ê°ì²Ž í¹ì±ì íŽë¹í©ëë€. ë§ì§ë§ ìžê·žëšŒížë
êŽì¬ ë¶ìŒ ë° ê°ì²Žë¥Œ í¬íšíê±°ë ì°ŸìŒë €ë©Ž ìŽì ìžê·žëšŒížë¥Œ ì ë ¥íŽìŒ í©ëë€. ê·žë§íŒ êµ¬ì± ìíž
겜ë¡ì ë§ì§ë§ ìžê·žëšŒížì ëë¬í ëê¹ì§ ìŽ ê²œë¡ë¥Œ 구묞 ë¶ìíê³ "볎í"í©ëë€. ê·žë
ë§ì§ë§ ìžê·žëšŒížë¥Œ ë€ì곌 ê°ìŽ íŽìí©ëë€. ìì± ê±·ë ëì ë°ê²¬í ë§ì§ë§ ê°ì²Žì ëíŽ
êžž. ê·žë§íŒ êµ¬ì± ê·žë° ë€ì ì ì í íšì륌 ížì¶í©ëë€. TraceConnect or
TraceConnectWithoutContext ìµì¢ ê°ì²Žì ëí ë©ìëì ëë€. ì ì íì ë¬Žìš ìŒìŽ ìŒìŽëëì§ ëŽ ìë€
ì 겜ë¡ë¥Œ ë°ëŒê°ìë©Ž ë ììží ì ì ììµëë€.
겜ë¡ì ì í "/" 묞ìë ìì ë€ìì€íìŽì€ë¥Œ ëíë ëë€. ì€ íë
êµ¬ì± ìì€í ì 믞늬 ì ìë ë€ìì€íìŽì€ë "NodeList"ì ëë€.
ì뮬ë ìŽì ì ë žë. 목ë¡ì í목ì 목ë¡ì ììžìŒë¡ ì°žì¡°ë©ëë€.
"/NodeList/7"ì ì뮬ë ìŽì ì€ì ìì±ë ë žë 목ë¡ì XNUMXë²ì§ž ë žë륌 ëíë ëë€.
(ëŠ¬ìœ ì§ìë ë€ììì ììë©ëë€. 0'). ìŽ ì°žê³ is ì€ì ë¡ a ``í¬ìžíž ` ê·žëŠ¬ê³ ê·žê±Ž ê·žë ê³
ì íì íŽëì€ ns3::ê°ì²Ž.
ì ê°ì²Ž ëªšëž ì¹ì ì ì€ëª ë ëë¡ NS-3 ìë, ì°ëŠ¬ë ë늬 ì¬ì©í©ëë€
ê°ì²Ž ì§ê³. ìŽë¥Œ íµíŽ ìë¡ ë€ë¥ž ê°ì²Ž ê°ì ì°ê²°ì íì±í ì ììµëë€.
ë³µì¡í ìì ížëŠ¬ë¥Œ 구ì¶íê±°ë ìŽë€ ê°ì²Žê° í¬íšë ì§ ë¯žëŠ¬ ê²°ì íì§ ìê³
ë žëì. ì§ê³ì ê° ê°ì²Žë ë€ë¥ž ê°ì²Žìì ì ê·Œí ì ììµëë€.
ìŽ ììì ê±·ê³ ìë ë€ì ê²œë¡ ìžê·žëšŒížë "$" 묞ìë¡ ììí©ëë€. ìŽê²
ìžê·žëšŒížê° ê°ì²Ž ì íì ìŽëŠìì êµ¬ì± ìì€í ì ëíë ëë€.
ê°ì²Ž ê°ì žì€êž° íŽë¹ ì íì ì°Ÿë ížì¶ì ìííŽìŒ í©ëë€. ê·žê²ì ë°íì¡ë€ ìŽëì± ëì°ë¯ž
ì ì¬ì© ìž ë²ì§ž.cc 몚ë¹ëŠ¬í° 몚ëžì ê° ëªšëžì íµí©íê±°ë ì°êŽìí€ëë¡ ì€ë¹í©ëë€.
묎ì ì í ë žë. "$"륌 ì¶ê°íë©Ž
ìë§ë ìŽì ì ì§ê³ëìì ê²ì ëë€. ìŽê²ì í¬ìží°ë¥Œ ì ííë ê²ìŒë¡ ìê°í ì ììµëë€.
ìë Ptr êŽë š ìŽëì± ëªšëžì ëí "/NodeList/7"ì ì§ì ë ëë¡ ---
ì íì ê² ns3::몚ë¹ëŠ¬í°ëªšëž. ë¹ì ìŽ ìµìíë€ë©Ž ê°ì²Ž ê°ì žì€êž°, ì°ëŠ¬ë 묌ììµëë€
ë€ìì ìííë ìì€í :
Ptr mobilityModel = ë žë->GetObject ()
ìŽì 겜ë¡ì ë§ì§ë§ ê°ì²Žì ììŒë¯ë¡ ë€ìì ìì±ì 죌ì륌 ë늜ëë€.
ê·ž ê°ì²Ž. ê·žë§íŒ ìŽëì± ëªšëž íŽëì€ë "CourseChange"ëŒë ìì±ì ì ìí©ëë€. ë¹ì ì í ì ììµëë€
ìì€ ìœë륌 볎멎 ìŽë¥Œ ì ì ììµëë€. src/ìŽëì±/몚ëž/ìŽëì±-model.cc and
ìŠê²š ì¬ì©íë ížì§êž°ìì "CourseChange"륌 ê²ìíìžì. ë¹ì ì ì°ŸììŒíë€
.AddTraceSource("ìœì€ ë³ê²œ",
"ìì¹ ë°/ëë ìë 벡í°ì ê°ìŽ ë³ê²œëììµëë€",
MakeTraceSourceAccessor(&MobilityModel::m_courseChangeTrace),
"ns3::MobilityModel::CourseChangeCallback")
ìŽ ìì ììë ë§€ì° ì¹ìíŽ ë³ŽìŒ ê²ì ëë€.
Ʞ볞 ì¶ì ë³ìì íŽë¹ ì ìžì ì°ŸìŒë©Ž
ìŽëì±-model.h ë¹ì ì ë°ê²¬í ê²ìŽë€
ì¶ì ë ìœë°± > m_courseChangeTrace;
ì í ì ìž ì¶ì ë ìœë°± ìë³íë€ m_courseChangeTrace í¹ë³í 목ë¡ìŒë¡
ììì ì€ëª í Config íšì륌 ì¬ì©íì¬ íí¹í ì ìë ìœë°±ì ëë€. ê·žë§íŒ íì ì ì for
ìœë°± íšì ìëª ë í€ë íìŒì ì ìëìŽ ììµëë€.
typedef void (* CourseChangeCallback)(Ptr * 몚ëž);
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ìŽëì± ëªšëž íŽëì€ë ê³µíµ ìží°íìŽì€ë¥Œ ì ê³µíë Ʞ볞 íŽëì€ë¡ ì€ê³ëììµëë€.
몚ë í¹ì íì íŽëì€. íìŒ ëê¹ì§ ê²ìíë©Ž ë€ììŽ íìë©ëë€.
ì ìë ë©ìë ížì¶ NotifyCourseChange():
묎íší
MobilityModel::NotifyCourseChange (void) const
{
m_courseChangeTrace(ìŽ);
}
íì íŽëì€ë ì§ìì ìíŽ ê³Œì ì ë³ê²œí ëë§ë€ ìŽ ë©ìë륌 ížì¶í©ëë€.
ížë ìŽì±. ìŽ ë©ìëë ë€ìì ížì¶í©ëë€. ìŽìì() êž°ìŽì m_courseChangeTrace, ê·ž
ê·žë¬ë©Ž ë±ë¡ë 몚ë ìœë°±ì ížì¶íì¬ ëªšë ì¶ì ì±í¬ë¥Œ ížì¶í©ëë€.
Config íšì륌 ížì¶íì¬ ì¶ì ìì€ì êŽì¬ì ë±ë¡íìµëë€.
ê·žëì ìž ë²ì§ž.cc ì°ëŠ¬ê° ìŽíŽë³ž ì ì€ íëìì ìœì€ê° ë³ê²œë ëë§ë€
RandomWalk2dìŽëì±ëªšëž ìžì€íŽì€ê° ì€ì¹ëë©Ž NotifyCourseChange() ì í
ìŽë ìŽëì± ëªšëž êž°ë³ž íŽëì€. ììì 볌 ì ìë¯ìŽ ìŽë ížì¶ë©ëë€. ìŽìì()
on m_courseChangeTraceê·žë¬ë©Ž ë±ë¡ë ì¶ì ì±í¬ë¥Œ ížì¶í©ëë€. ììì
êŽì¬ì ë±ë¡íë ì ìŒí ìœëë êµ¬ì± ê²œë¡ë¥Œ ì ê³µíë ìœëììµëë€.
ë°ëŒì ìœì€ë³ê²œ ë žë ë²íž XNUMXìì íí¬ë íšìë
ìœë°±ë§ ížì¶ëììµëë€.
íŒìŠì ë§ì§ë§ ì¡°ê°ì "컚í ì€íž"ì ëë€. ì°ëŠ¬ê° ë³Žê³ ìë ì¶ë ¥ì 볞 ê²ì êž°ìµíììì€.
ë€ì곌 ê°ì ê² ìž ë²ì§ž.cc:
/NodeList/7/$ns3::MobilityModel/CourseChange x = 7.27897, y =
2.22677
ì¶ë ¥ì 첫 ë²ì§ž ë¶ë¶ì 컚í ì€ížì ëë€. ê·žê²ì ëšìí íµê³Œíë êžžìŽë€.
êµ¬ì± ìœëë ì¶ì ìì€ë¥Œ ì°Ÿììµëë€. ì°ëŠ¬ê° ìŽíŽë³ž 겜ì°ìë ë€ììŽ ìì ì ììµëë€.
ê° ìë ë žë ìì íŽë¹íë ìì€í ì ì¶ì ìì€ ì
몚ë¹ëŠ¬í° 몚ëž. ìŽë€ ì¶ì ìì€ê° ì€ì ë¡ ìëì§ ìë³í ì ìë ë°©ë²ìŽ íìí©ëë€.
ìœë°±ì ì€íí ê²ì ëë€. ê°ì¥ ì¬ìŽ ë°©ë²ì ë€ì곌 ì°ê²°íë ê²ì ëë€. 구ì±::ì°ê²°, ëì
of 구ì±::ConnectWithoutContext.
ë°ê²¬ ì§ì°ë©Ž ì¢ìê±°ê°ì . SM
ì¶ì ìì€í ì ìë¡ìŽ ì¬ì©ììê² íì°ì ìŒë¡ ëíëë 첫 ë²ì§ž ì§ë¬žì, "ì¢ìì,
I ìê³ ìë€ ê·ž ê° ì ëë¡ íìí ê² be ëë¬ë€ ìì€ in ì ì, ì뮬ë ìŽì íµì¬, ë¹ì ë©Žì íë¡ê·žëšì íŽë¹íë êµê°ì ì믌ê¶ì ê°ì§ê³ ìì§ë§ ë°©ë² do I ë°ê²¬ ìì ë
ëë¬ë€ ìì€ are ê°ë¥ ì ë?"
ë ë²ì§ž ì§ë¬žì, "ì¢ìì, I ë°ê²¬ a ëë¬ë€ ì¶ì², ë°©ë² do I 귞늌 ìì ì ì, êµ¬ì± íµë¡
ì ì¬ì© ìžì I ìë€ ì ê·žê²?"
ìž ë²ì§ž ì§ë¬žì, "ì¢ìì, I ë°ê²¬ a ëë¬ë€ and ì ì, êµ¬ì± íµë¡, ë°©ë² do I 귞늌
ìì ë ì ì, return ì í and íìì ìž ìžì of my ìœë°± êž°ë¥ íìí ê² ì BE?"
ë€ ë²ì§ž ì§ë¬žì, "ì¢ìì, I ì ë ¥ ê·ž 몚ë in and ììŽ ìŽ ìì²ëê² êž°êŽŽí ì€ë¥
ë©ìì§, ë in ì ì, ìžê³ íì§ it íê· ?"
ì°ëŠ¬ë ìŽë€ ê°ê°ì ì°šë¡ë¡ ë€ë£° ê²ì ëë€.
ì íší ì§ì°ë©Ž ì¢ìê±°ê°ì . SM
êŽì°®ì, I ìê³ ìë€ ê·ž ê° ì ëë¡ íìí ê² be ëë¬ë€ ìì€ in ì ì, ì뮬ë ìŽì íµì¬, ë¹ì ë©Žì íë¡ê·žëšì íŽë¹íë êµê°ì ì믌ê¶ì ê°ì§ê³ ìì§ë§ ë°©ë² do I ë°ê²¬
ìì ë ëë¬ë€ ìì€ are ê°ë¥ ì ë륌?
첫 ë²ì§ž ì§ë¬žì ëí ëµì ë€ììì ì°Ÿì ì ììµëë€. NS-3 API 묞ì. ë¹ì ìŽì ê°ë©Ž
íë¡ì íž ì¹ ì¬ìŽíž, NS-3 íë¡ì íž, íì ë©ëŽìì "묞ì"ì ëí ë§í¬ë¥Œ ì°Ÿì ì ììµëë€.
ì ì§. ìŽ ë§í¬ë¥Œ ì ííë©Ž ì€ëª ì íìŽì§ë¡ ìŽëí©ëë€. ìŽìë€
ìµì ìì ë²ì ì ëí 묞ìë¡ ìŽëíë "ìµì 늎늬ì€" ë§í¬
ë°©ì¶ NS-3. "API 묞ì" ë§í¬ë¥Œ ì ííë©Ž ë€ì íìŽì§ë¡ ìŽëë©ëë€.
NS-3 API ì€ëª ì íìŽì§.
ì¬ìŽëë°ìì ë€ììŒë¡ ììíë ê³ìžµ 구조륌 볌 ì ììµëë€.
· NS-3
· ns-3 묞ì
· 몚ë TraceSource
· 몚ë ìì±
· 몚ë GlobalValues
ì¬êž°ì êŽì¬ ìë 목ë¡ì "몚ë TraceSources"ì ëë€. ê³ìíŽì íŽë¹ ë§í¬ë¥Œ ì ííìžì.
ìë§ë 귞늬 ëëì§ë ìê² ì¬ì© ê°ë¥í 몚ë ì¶ì ìì€ ëª©ë¡ìŽ íìë ê²ì ëë€.
in NS-3.
ì륌 ë€ìŽ ìëë¡ ì€í¬ë¡€íì¬ ns3::몚ë¹ëŠ¬í°ëªšëž. ë€ìì ëí í목ì ì°Ÿì ì ììµëë€.
CourseChange: ìì¹ ë°/ëë ìë 벡í°ì ê°ìŽ ë³ê²œëììµëë€.
ìŽê²ì ì°ëŠ¬ê° ì¬ì©í ì¶ì ìì€ë¡ ìžìíŽìŒ í©ëë€. ìž ë²ì§ž.cc ì. ì ë íë€
ìŽ ëª©ë¡ìŽ ëììŽ ë ê²ì ëë€.
êµ¬ì± ê²œë¡
êŽì°®ì, I ë°ê²¬ a ëë¬ë€ ì¶ì², ë°©ë² do I 귞늌 ìì ì ì, êµ¬ì± íµë¡ ì ì¬ì© ìžì I ìë€ ì
ìŽê²?
êŽì¬ ìë ê°ì²Žë¥Œ ìê³ ìë ê²œì° íŽë¹ ê°ì²Žì ëí "ììží ì€ëª " ì¹ì ì ì°žì¡°íìžì.
íŽëì€ë ì¬ì© ê°ë¥í 몚ë ì¶ì ìì€ë¥Œ ëìŽí©ëë€. ì륌 ë€ìŽ, "All
TraceSources'륌 íŽëŠíìžì. ns3::몚ë¹ëŠ¬í°ëªšëž ë§í¬ë¥Œ íŽëŠíë©Ž
ì ëí 묞ì ìŽëì± ëªšëž ìì . ê±°ì íìŽì§ ìëšì í ì€ìŽ ììµëë€.
ìì ì ëí ê°ëµí ì€ëª ìŽë©° "ë 볎Ʞ..." ë§í¬ë¡ ëë©ëë€. 걎ëë°ë €ë©Ž ìŽ ë§í¬ë¥Œ íŽëŠíìžì.
API ììœì íìžíê³ íŽëì€ì "ììží ì€ëª "ìŒë¡ ìŽëíìžì. ì ëìì
ì€ëª ì (ìµë) ìž ê°ì 목ë¡ì ëë€.
· êµ¬ì± ê²œë¡: ìŽ íŽëì€ì ìŒë°ì ìž êµ¬ì± ê²œë¡ ëª©ë¡ì ëë€.
· Attributes: ìŽ íŽëì€ê° ì ê³µíë 몚ë ìì±ì 목ë¡ì ëë€.
· TraceSource: ìŽ íŽëì€ìì ì¬ì©í ì ìë 몚ë TraceSourceì 목ë¡ì ëë€.
뚌ì êµ¬ì± ê²œë¡ì ëíŽ ë Œìíê² ìµëë€.
"All"ìì "CourseChange" ì¶ì ìì€ë¥Œ ì°Ÿìë€ê³ ê°ì íŽ ë³Žê² ìµëë€.
TraceSources" 목ë¡ì ì°ê²°íë ë°©ë²ì ìê³ ì¶ìµëë€.
(ë€ì ë§íì§ë§, ìž ë²ì§ž.cc ì) í ns3::RandomWalk2dìŽëì±ëªšëž. ê·žëì ìŽë쪜ìŽë
"All TraceSources" 목ë¡ìì íŽëì€ ìŽëŠì íŽëŠíê±°ë
ns3::RandomWalk2dìŽëì±ëªšëž "íŽëì€ ëª©ë¡"ìì. ìŽë 쪜ìŽë ì§êžì ìŽíŽëŽìŒ í©ëë€.
"ns3::RandomWalk2dMobilityModel íŽëì€ ì°žì¡°" íìŽì§ìì.
ìŽì "ììží ì€ëª " ì¹ì ê¹ì§ ìëë¡ ì€í¬ë¡€íë©Ž
íŽëì€ ë©ìë ë° ìì±(ëë íŽëì€ ëì ìë "ììží..." ë§í¬ë¥Œ íŽëŠíìžì.)
íìŽì§ ìëšì ê°ëµí ì€ëª )ì ëí ì 첎 묞ì륌 볌 ì ììµëë€.
ìì . ê³ìíŽì ìëë¡ ì€í¬ë¡€íì¬ "êµ¬ì± ê²œë¡" 목ë¡ì ì°Ÿìµëë€.
êµ¬ì± ê²œë¡
ns3::RandomWalk2dìŽëì±ëªšëž ë€ì 겜ë¡ë¥Œ íµíŽ ì¡ìžì€í ì ììµëë€.
구ì±::ì€ì and 구ì±::ì°ê²°:
· "/NodeList/[i]/$ns3::MobilityModel/$ns3::RandomWalk2dMobilityModel"
묞ììë ë€ì ìì¹ë¡ ìŽëíë ë°©ë²ìŽ ëì ììµëë€. RandomWalk2dìŽëì±ëªšëž 묌첎. ë¹êµíë€
ìì 묞ììŽê³Œ ìì ìœëìì ì€ì ë¡ ì¬ì©í 묞ììŽ:
"/NodeList/7/$ns3::MobilityModel"
ì°šìŽì ì ë ê°ê° ìë€ë ì¬ì€ ë묞ì ëë€. ê°ì²Ž ê°ì žì€êž° ížì¶ì ë°ê²¬ë 묞ììŽì ëŽí¬ëìŽ ììµëë€.
묞ììì. 첫 ë²ì§žë $ns3::ìŽëì±ëªšëž ì ëí ì§ê³ë¥Œ 쿌늬í©ëë€.
Ʞ볞 íŽëì€. ë ë²ì§ž ìì ê°ì²Ž ê°ì žì€êž° ì ì구íë€ $ns3::RandomWalk2dMobilityModel,
Ʞ볞 íŽëì€ë¥Œ 구첎ì ìž êµ¬í íŽëì€ë¡ ìºì€í íë ë° ì¬ì©ë©ëë€. 묞ì
ìŽ ë ê°ì§ ìì ì 몚ë 볎ì¬ì€ëë€. ì€ì ì¶ì ìì€ë ë€ì곌 ê°ìµëë€.
looking for ë Ʞ볞 íŽëì€ìì ì°Ÿì ì ììµëë€.
ì¶ì ìì€ ëª©ë¡ì ëí "ììží ì€ëª " ì¹ì ì ììží ìŽíŽë³Žììì€.
ë¹ì ì ë°ê²¬ í ê²ìŽë€
ìŽ ì íì ëíŽ ì ìë TraceSourceê° ììµëë€.
TraceSource íì ë in ë¶ëªšì ìì ``ns3::ìŽëì±ëªšëž``
· ìœì€ë³ê²œ: ìì¹ ë°/ëë ìë 벡í°ì ê°ìŽ ë³ê²œëììµëë€.
ìœë°± ìëª : ns3::MobilityModel::CourseChangeCallback
ìŽê²ìŽ ë°ë¡ ë¹ì ìŽ ìììŒ í ê²ì ëë€. êŽì¬ ìë ì¶ì ìì€ë ë€ììì ì°Ÿì ì ììµëë€.
ns3::몚ë¹ëŠ¬í°ëªšëž (ìŽì°šíŒ ë¹ì ë ìê³ ììê² ì§ë§). ìŽ APIì í¥ë¯žë¡ìŽ ì ì
묞ìì ë°ë¥Žë©Ž ìì êµ¬ì± ê²œë¡ì ì¶ê° ìºì€ížê° íìíì§ ìë€ê³ ëì ììµëë€.
ì¶ì ìì€ê° ì€ì ë¡ êž°ë³ž íŽëì€ì ììŒë¯ë¡ 구첎ì ìž íŽëì€ë¡ ìŽëí©ëë€.
ê·žë¬ë¯ë¡ ì¶ê°ì ìž ê°ì²Ž ê°ì žì€êž° íìë ìëë©° ë€ì 겜ë¡ë¥Œ ì¬ì©íë©Ž ë©ëë€.
"/NodeList/[i]/$ns3::MobilityModel"
ìŽë ìì 겜ë¡ì ì벜íê² ìŒì¹í©ëë€.
"/NodeList/7/$ns3::MobilityModel"
ì¬ëŽìŒë¡, êµ¬ì± ê²œë¡ë¥Œ ì°Ÿë ë ë€ë¥ž ë°©ë²ì ë€ì곌 ê°ìµëë€. GREP 죌ìì NS-3 ìœëë² ìŽì€
ìŽë¯ž ììëž ëêµ°ê°ë¥Œ ìíŽ. íì ë€ë¥ž ì¬ëì ê²ì ë³µì¬íë €ê³ ë žë ¥íŽìŒ í©ëë€.
ìì ì ìœë륌 ìì±íêž° ì ì ìì ìœë. ë€ì곌 ê°ìŽ ìëíŽ ë³Žìžì.
$ ì°Ÿêž° . -ìŽëŠ '*.cc' | xargs grep 곌ì ë³ê²œ | grep ì°ê²°
ìì ìœëì íšê» ëµì ì°Ÿì ì ììµëë€. ì륌 ë€ìŽ, ìŽ ê²œì°ìë
src/ìŽëì±/ìì /main-random-topology.cc ë¹ì ìŽ ì¬ì©íꞰ륌 êž°ë€ëŠ¬ë 묎ìžê°ê° ììµëë€:
구ì±::ì°ê²°("/NodeList/*/$ns3::MobilityModel/CourseChange",
MakeCallback(&CourseChange));
ì ì íì ìŽ ìì ë¡ ëìê°ëë€.
ìœë°± ìëª
êŽì°®ì, I ë°ê²¬ a ëë¬ë€ and ì ì, êµ¬ì± íµë¡, ë°©ë² do I 귞늌 ìì ë ì ì, return ì í
and íìì ìž ìžì of my ìœë°± êž°ë¥ íìí ê² ì ìë€?
ê°ì¥ ì¬ìŽ ë°©ë²ì ìœë°± ìëª ì ê²ì¬íë ê²ì ëë€. íì ì ì, ìŽë
íŽëì€ì ëí "ììží ì€ëª "ìì ì¶ì ìì€ì "ìœë°± ìëª "ì ë€ì곌 ê°ìµëë€.
ìì íìë.
ìì "CourseChange" ì¶ì ìì€ í목 ë°ë³µ ns3::RandomWalk2dìŽëì±ëªšëž we
ìë€:
· ìœì€ë³ê²œ: ìì¹ ë°/ëë ìë 벡í°ì ê°ìŽ ë³ê²œëììµëë€.
ìœë°± ìëª : ns3::MobilityModel::CourseChangeCallback
ìœë°± ìëª ì êŽë š ë§í¬ë¡ ì ê³µë©ëë€. íì ì ì, ì°ëŠ¬ê° ì°Ÿë ê³³
íì ì ì 묎íší (* CourseChangeCallback)(const íì€::묞ììŽ ë¬žë§¥, í¬ìžíž
몚ë¹ëŠ¬í°ëªšëž> * 몚ëž);
ì¶ì ë ìœë°± ìœì€ ë³ê²œ ì늌ì ëí ìëª ì ëë€.
ìœë°±ìŽ ë€ìì ì¬ì©íì¬ ì°ê²°ë ê²œì° ì»ší ì€íž ììŽ ì°ê²° ìëµ ë¬žë§¥ ì 죌ì¥
ìëª .
íëŒë¯ží°:
[in] context Trace ìì€ìì ì ê³µíë 컚í ì€íž 묞ììŽì ëë€.
[in] model 겜ë¡ë¥Œ ë³ê²œíë MobilityModelì ëë€.
ìì ê°ìŽ ì¬ì©ì€ìž ê²ì ë³Žë €ë©Ž GREP 죌ìì NS-3 ì륌 ë€ìŽ ìœëë² ìŽì€ë¥Œ ì°žì¡°íìžì. ì
ììì, ~ë¡ë¶í° src/ìŽëì±/ìì /main-random-topology.cc, "CourseChange"륌 ì°ê²°í©ëë€.
ìì€ë¥Œ ì¶ì ìœì€ë³ê²œ ëìŒí íìŒì êž°ë¥:
ì ì 공극
CourseChange(std::묞ììŽ ì»ší ì€íž, Ptr 몚ëž)
{
...
}
ìŽ êž°ë¥ì ë€ì곌 ê°ìµëë€.
· ì ì íì ì€ëª í "컚í ì€íž" 묞ììŽ ìžì륌 ì¬ì©í©ëë€. (ìœë°±ì 겜ì°
륌 ì¬ì©íì¬ ì°ê²°ë©ëë€. 컚í ì€íž ììŽ ì°ê²° êž°ë¥ ë¬žë§¥ 죌ì¥ì
ìëµ.)
· ìŽëì± ëªšëž ë§ì§ë§ ìžìë¡ ì ê³µëš(ëë ë€ì곌 ê°ì 겜ì°
컚í ì€íž ììŽ ì°ê²° ì¬ì©).
· ë°í 묎íší.
ì°ì°í ìœë°± ìëª ìŽ ë¬žìíëì§ ììê³ ìŽì ëí ìì ë ìë 겜ì°
ì¬ë°ë¥ž ìœë°± íšì ìëª ì ê²°ì íë ê²ì ìŽë €ìž ì ììµëë€.
ì€ì ë¡ ìì€ ìœëìì íì íììì€.
ìœë ì°ìµì ììíêž° ì ì ì¹ì íê² ê°ëší ë°©ë²ë§ ìë €ëëŠ¬ê² ìµëë€.
ìŽê²ì ììëŽêž° ìíŽ: ìœë°±ì ë°í ê°ì íì 묎íší. ê³µì
맀ê°ë³ì ëª©ë¡ ì¶ì ë ìœë°± í í늿 맀ê°ë³ì 목ë¡ìì ì°Ÿì ì ììµëë€.
ì ìž. íì¬ ìììë ë€ì곌 ê°ìµëë€. ìŽëì±-model.hì°ëŠ¬ê°ìë ê³³
ìŽì ì ë€ìì ë°ê²¬íìµëë€.
ì¶ì ë ìœë°± > m_courseChangeTrace;
í í늿 맀ê°ë³ì ëª©ë¡ ì¬ìŽìë ìŒëìŒ ëììŽ ììµëë€.
ìœë°± íšìì ì ìž ë° íì ìžìì ëë€. ì¬êž°, íë ììŽì
í í늿 맀ê°ë³ìë í¬ìžíž 몚ë¹ëŠ¬í°ëªšëž>. ìŽê²ì ë¹ì ìê²
void륌 ë°ííê³ a륌 ì·šíë íšì í¬ìžíž 몚ë¹ëŠ¬í°ëªšëž>. ì륌 ë€ë©Ž :
묎íší
ìœì€ë³ê²œ(Ptr 몚ëž)
{
...
}
ë€ê° ìíë€ë©Ž ê·žê² ì ë¶ìŒ 구ì±::ConnectWithoutContext. 맥ëœì ìíìë©Ž,
ë¹ì ì íì 구ì±::ì°ê²° 묞ììŽ ì»ší ì€ížë¥Œ ì·šíë ìœë°± íšì륌 ì¬ì©í ë€ì
í í늿 ìžì:
묎íší
CourseChange(const std::string 컚í ì€íž, Ptr 몚ëž)
{
...
}
ë¹ì ìŽ ë¹ì ì CourseChangeìœë°± êž°ë¥ì ê·íì ì±ììë§ ë³Œ ì ììµëë€.
ë¡ì»¬ íìŒì í€ìë륌 ì¶ê°í ì ììµëë€. ì ì ìž ê·žëŠ¬ê³ ìê°íŽ ëŽë€ :
ì ì 공극
CourseChange(const std::string 겜ë¡, Ptr 몚ëž)
{
...
}
ìŽê²ì ì°ëŠ¬ê° ìž ë²ì§ž.cc ì.
ì€ì
ìŽ ì¹ì ì ì ì ìŒë¡ ì í ì¬íì ëë€. í¹í ê·žë° ì¬ëë€ìê²ë ìžíë¶íí ì¬ì ìŽ ë ê²ì ëë€.
í í늿ì ìžë¶ ì¬íì ìµìíì§ ììµëë€. ê·žë¬ë ìŽ ê³Œì ì íµê³Œíë©Ž ë€ì곌 ê°ì 결곌륌 ì»ê² ë©ëë€.
ë§ì ìŒì ì죌 ì ì²ëŠ¬íŽ NS-3 ë®ì ìì€ì êŽì©ìŽ.
ê·žëì ë€ì ìœë°± íšìì ìëª ìŽ íìíì§ ìì ëŽ ìë€.
"CourseChange" ì¶ì ìì€ì ëë€. ê³ íµì€ëœê² ì§ë§ ìŽê²ë§ íë©Ž ëë€
í ë². ìŽ ê³Œì ì ê±°ì¹ê³ ëë©Ž ë€ìì 볌 ì ììµëë€. ì¶ì ë ìœë°± and
ìŽíŽíë€.
ê°ì¥ 뚌ì ìŽíŽëŽìŒ í ê²ì ì¶ì ìì€ì ì ìžì ëë€. ê·žê²ì êž°ìµíŽ
ìŽê²ì ìì ìë€ ìŽëì±-model.h, ìŽì ì ì°Ÿì ëŽì©ì ë€ì곌 ê°ìµëë€.
ì¶ì ë ìœë°± > m_courseChangeTrace;
ìŽ ì ìžì í í늿ì©ì ëë€. í í늿 맀ê°ë³ìë 꺟ì êŽíž ìì ììµëë€.
ê·žëì ì°ëŠ¬ë ê·žê²ìŽ 묎ììžì§ ììëŽë ë° ì ë§ë¡ êŽì¬ìŽ ììµëë€. ì¶ì ëìœë°±<> ìŽë€. ë¹ì ìŽ ê°ì§ê³ ìë€ë©Ž
ìŽê² ìŽëì ë°ê²¬ë ì§ë ì í ëªšë¥Žê² ëë°, GREP ë¹ì ì ì¹êµ¬ì ëë€.
ì°ëŠ¬ë ìë§ë ë€ì곌 ê°ì ì¢ ë¥ì ì ìžì êŽì¬ìŽ ìì ê²ì ëë€. NS-3 ì¶ì², ê·žëì
뚌ì ë¡ ë³ê²œ SRC ìë°° ê·ì¹ì. ê·žë° ë€ì ìŽ ì ìžìŽ
ìŒì¢ ì í€ë íìŒì ììŽìŒ íë¯ë¡ GREP ê·žê²ì ìíŽ:
$ ì°Ÿêž° . -ìŽëŠ '*.h' | xargs grep TracedCallback
303ì€ìŽ ë ìê°ë ê²ì 볌 ì ììµëë€. wc ìŒë§ë ë빎ëì§ ìì볎Ʞ ìíŽ). íì§ë§
ê·žê²ì ë§ì ê²ì²ëŒ ë³ŽìŒ ìë ìì§ë§ ì€ì ë¡ë ë§ì ê²ìŽ ìëëë€. ì¶ë ¥ì íìŽíë¡ ì°ê²°íë©Ž ë©ëë€. ë°°ì°êž° and
ê·žê²ì íµíŽ ì€ìºì ììí©ëë€. 첫 íìŽì§ìì ë§€ì° ìì¬ì€ë¬ìŽ ëª ê°ì§ë¥Œ 볌 ì ììµëë€.
í í늿ì²ëŒ 볎ìŽë ê².
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::TracedCallback ()
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::ConnectWithoutContext (c ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Connect (const CallbackB ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::DisconnectWithoutContext ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Disconnect (const Callba ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (void) const ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1) const ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
ìŽ ëªšë ê²ìŽ í€ë íìŒìì ëìš ê²ìŒë¡ ë°íì¡ìµëë€. ì¶ì ë ìœë°±.h ìŽë€ ìëŠ¬ê° ëëì§
ë§€ì° ì ë§í©ëë€. ê·žë° ë€ì ë€ìì ìŽíŽë³Œ ì ììµëë€. ìŽëì±-model.h ê·žëŠ¬ê³ ì€ìŽ ìë 걞 볎ìžì
ìŽ ì§ê°ì íìží©ëë€.
#include "ns3/traced-callback.h"
ë¬Œë¡ ë€ë¥ž ë°©í¥ìì ìŽ ë¬žì 륌 ìŽíŽë³Žê³ ë€ìì ìŽíŽë³Žë ê²ë¶í° ììí ìë ììµëë€.
ì í¬íšë©ëë€ ìŽëì±-model.h ê·žëŠ¬ê³ ë€ììŽ í¬íšë ê²ì íìžíìµëë€. ì¶ì ë ìœë°±.h and
ìŽ íìŒìŽ ìíë íìŒìŽìŽìŒ íë€ê³ ì¶ë¡ í©ëë€.
ë ê²œì° ëªšë ë€ì ëšê³ë ë€ìì ìŽíŽë³Žë ê²ì ëë€. src/ìœìŽ/몚ëž/traced-callback.h in
ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ íìžíêž° ìíŽ ê°ì¥ ì¢ìíë ížì§ì.
íìŒ ìëšì ìììŽ ë ë§í ì€ëª ìŽ íìë©ëë€.
ns3::TracedCallbackì ìŒë°ì ìž ns3::Callback곌 ê±°ì ëê°ì API륌 ê°ì§ê³ ìì§ë§
ížì¶ì ëšìŒ íšìë¡ ì ë¬íë ëì (ìŒë°ì ìŒë¡ ns3::CallbackìŽ ê·žë ë¯ìŽ),
ížì¶ì ns3::Callback 첎ìžìŒë¡ ì ë¬í©ëë€.
ìŽê²ì ë§€ì° ì¹ìíê² ë€ëŠŽ ê²ìŽë©° ì¬ë°ë¥ž êžžì ê°ê³ ììì ìë €ì€ ê²ì ëë€.
ìŽ ëêž ë°ë¡ ë€ìë ë€ììŽ íìë©ëë€.
죌í
typename T3 = ë¹ìŽ ìì, typename T4 = ë¹ìŽ ìì,
typename T5 = ë¹ìŽ ìì, typename T6 = ë¹ìŽ ìì,
ì í ìŽëŠ T7 = ë¹ìŽ ìì, ì í ìŽëŠ T8 = ë¹ìŽ ìì>
íŽëì€ TracedCallback
{
...
ìŽë TracedCallbackìŽ í í늿 íŽëì€ìì ìë €ì€ëë€. ì¬ë ê°ì§ ê°ë¥í ì íìŽ ììµëë€.
Ʞ볞ê°ìŽ ìë 맀ê°ë³ì. ëìê°ì ìŽê²ì ë¹ì ì ì ìžê³Œ ë¹êµíììì€.
ìŽíŽíë €ê³ :
ì¶ì ë ìœë°± > m_courseChangeTrace;
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ì í ìŽëŠ T1 í í늿 íŽëì€ ì ìžì ë€ìì íŽë¹í©ëë€. í¬ìžíž
몚ë¹ëŠ¬í°ëªšëž> ì ì ìžìì. ë€ë¥ž 몚ë ì í 맀ê°ë³ìë ë€ì곌 ê°ìŽ ì ì§ë©ëë€.
Ʞ볞ê°. ìì±ì륌 볎멎 ì€ì ë¡ ë§ì ê²ì ì ì ììµëë€. í ê³³ì
ìœë°± íšìì ì¶ì ìì€í ê°ì ì°ê²°ìŽ
FBI ìŠì€ ë²ì£ ë³Žê³ ì ì°ê²°íêž° and 컚í ì€íž ììŽ ì°ê²° êž°ë¥. ìëë¡ ì€í¬ë¡€íë©Ž ë€ì곌 ê°ì ëŽì©ìŽ íìë©ëë€.
컚í ì€íž ììŽ ì°ê²° ë°©ë²:
죌í
ì í ìŽëŠ T3, ì í ìŽëŠ T4,
ì í ìŽëŠ T5, ì í ìŽëŠ T6,
typename T7, typename T8>
묎íší
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::ConnectWithoutContext ...
{
Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> cb;
cb.í ë¹(ìœë°±);
m_callbackList.push_back(cb);
}
ë¹ì ì ì§êž ì§ì¹ì ë±ìì ììµëë€. í íëŠ¿ìŽ ìžì€íŽì€íëë©Ž
ìì ì ìžì 컎íìŒë¬ê° ë첎í©ëë€. T1 곌 í¬ìžíž 몚ë¹ëŠ¬í°ëªšëž>.
묎íší
ì¶ì ìœë°± ::ConnectWithoutContext ... cb
{
ìœë°± > CB;
cb.í ë¹(ìœë°±);
m_callbackList.push_back(cb);
}
ìŽì ì°ëŠ¬ê° ìŽìŒêž°í 몚ë 구íì 볌 ì ììµëë€. ìœë
ì¬ë°ë¥ž ì íì ìœë°±ì ìì±íê³ ì¬êž°ì íšì륌 í ë¹í©ëë€. ìŽê²ìŽ
ëë±í íŒíŒ = ë§ìŽíì ìŽ ì¹ì ì ìì ë¶ë¶ìì ë Œìíìµëë€. ìœë
ê·žë° ë€ì ìŽ ìì€ì ëí ìœë°± 목ë¡ì ìœë°±ì ì¶ê°í©ëë€. ëšì 걎
ìœë°±ì ì ì륌 ìŽíŽë³Žê² ìµëë€. ê°ì ê²ì ì¬ì©íì¬ GREP ì°ëŠ¬ê° ì°Ÿë ížëŠ
ì¶ì ë ìœë°±, ë¹ì ì íìŒì ì°Ÿì ì ììµëë€ ./core/callback.h ì°ëŠ¬ê° ê·ž ì¬ëìŽìŒ
ìŽíŽë³Œ íìê° ììµëë€.
íìŒì ììží ìŽíŽë³Žë©Ž ìë§ë ê±°ì ìŽíŽí ì ìë ëŽì©ìŽ ë§ìŽ ë³ŽìŒ ê²ì ëë€.
í í늿 ìœë. ê²°êµ ìœë°±ì ëí ìŒë¶ API ì€ëª ìì ëë¬íê² ë©ëë€.
ê·žë¬ë í í늿 íŽëì€. ë€íí ììŽê° ììµëë€.
ìœë°± í í늿 íŽëì€.
ìŽ íŽëì€ í í늿ì Functor ëììž íšíŽì 구íí©ëë€. ì ìžíë ë° ì¬ì©ë©ëë€.
ì í ìœë°±:
· ì í ì¬íìŽ ìë 첫 ë²ì§ž í í늿 ìžìë ìœë°±ì ë°í ì íì ëíë ëë€.
· ëëšžì§(ì íì ) í í늿 ìžìë íì í í늿ì ì íì ëíë ëë€.
ìœë°±ì ëí ìžì.
· ìµë XNUMXê°ì ìžìê° ì§ìë©ëë€.
ì°ëŠ¬ë 묎ììŽ ë¬Žììžì§ ììëŽë €ê³ ë žë ¥íê³ ììµëë€.
ìœë°± > CB;
ì ìž ìëš. ìŽì ì°ëŠ¬ë 첫 ë²ì§ž(ì í ì¬í ìë)
í í늿 ìžì, 묎íšíë ìœë°±ì ë°í ì íì ëíë ëë€. ëë²ì§ž
(ì íì¬í) í í늿 ìžì, í¬ìžíž 몚ë¹ëŠ¬í°ëªšëž> 첫 ë²ì§ž ì íì ëíë ëë€.
ìœë°±ì ëí ìžìì ëë€.
묞ì ì ìœë°±ì ì¶ì ìŽë²€ížë¥Œ ìì íë êž°ë¥ì ëë€. ìŽê²ìŒë¡ë¶í° ë¹ì ì í ì ììµëë€
ë°ííë íšìê° íìíë€ê³ ì¶ë¡ 묎íší ê·žëŠ¬ê³ ê±žëŠœëë€ í¬ìžíž 몚ë¹ëŠ¬í°ëªšëž>.
ì륌 ë€ìŽ,
묎íší
CourseChangeCallback(Ptr 몚ëž)
{
...
}
ë€ê° ìíë€ë©Ž ê·žê² ì ë¶ìŒ 구ì±::ConnectWithoutContext. 맥ëœì ìíìë©Ž,
ë¹ì ì íì 구ì±::ì°ê²° 묞ììŽ ì»ší ì€ížë¥Œ ì¬ì©íë ìœë°± íšì륌 ì¬ì©í©ëë€. ìŽê²
ìëíë©Ž ì°ê²°íêž° êž°ë¥ìŽ ì¬ì©ììê² ì»ší ì€ížë¥Œ ì ê³µí©ëë€. ëë íìí ê±°ìŒ:
묎íší
CourseChangeCallback(std::묞ììŽ ì»ší ì€íž, Ptr 몚ëž)
{
...
}
ë¹ì ìŽ ë¹ì ì CourseChangeìœë°± ë¡ì»¬ íìŒìë§ íìë©ëë€.
í€ìë륌 ì¶ê°í ì ììµëë€ ì ì ìž ê·žëŠ¬ê³ ìê°íŽ ëŽë€ :
ì ì 공극
CourseChangeCallback(std::묞ììŽ ê²œë¡, Ptr 몚ëž)
{
...
}
ìŽê²ì ì°ëŠ¬ê° ìž ë²ì§ž.cc ì. ìë§ë ë¹ì ì ì§êž ëìê°ì
ìŽì ì¹ì ì ë€ì ìœìŒììì€(Take My Word for It).
ìœë°± 구íì ëí ììží ëŽì©ì êŽì¬ìŽ ììŒìë©Ž ìžì ë ì§ ë¬žìíŽ ì£Œìžì.
륌 ìŽíŽë³Žêž° ìíŽ NS-3 ìë. ê·žë€ì ê°ì¥ ì죌 ì¬ì©ëë 구조 ì€ íëì ëë€.
ë®ì ìì€ì ë¶ë¶ NS-3. ëŽ ìê°ìë ê·žê²ì ꜀ ì°ìí ìŒìŽë€.
ì¶ì ë ê°
ìŽ ì¹ì ì ìë¶ë¶ìì ì°ëŠ¬ë ë€ìì ì¬ì©íë ê°ëší ìœë륌 ì ìíìµëë€.
ì¶ì ë ê° ì¶ì ìœëì Ʞ볞ì 볎ì¬ì€ëë€. ì°ëŠ¬ë ê·žë¥ ìŒë²ë¬Žë žìŽ
TracedValueê° ì€ì ë¡ ë¬ŽììŽë©° ìŽì ëí ë°í ì í ë° ê³µì ìžì륌 ì°Ÿë ë°©ë²
ìœë°±.
ìì ìžêžíë¯ìŽ íìŒì ì¶ì ê°.h ì¶ì ì íìí ì ìžì ê°ì žìµëë€.
ê°ì¹ ìë¯žë¡ ì ë°ë¥Žë ë°ìŽí°. ìŒë°ì ìŒë¡ ê° ìë¯žë¡ ì ë€ìì ì믞í©ëë€.
ê°ì²Žì 죌ì륌 ì ë¬íë ëì ê°ì²Ž ì첎륌 ì ë¬í©ëë€. ì°ëŠ¬ë ì°ì¥íë€
í ë¹ ì€íìŒ ì°ì°ìì ì 첎 ì§í©ì í¬íšíŽìŒ íë ì구 ì¬íì ë€ì곌 ê°ìµëë€.
POD(Plain-Old-Data) ì íì ëíŽ ë¯žëŠ¬ ì ìëš:
ââââââââââââââââââââââââââââââââââ¬ââââââââââââââ
âoperator = (곌ì ) â â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âì°ì°ì*= â ì°ì°ì/= â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âì°ì°ì+= â ì°ì°ì-= â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âì°ì°ì++ (ì ëì¬ ë° â â
âì 믞ì¬) â â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âìŽìì-- (ì ëì¬ ë° â â
âì 믞ì¬) â â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âì°ì°ì<<= â ì°ì°ì>>= â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âì°ì°ì&= â ì°ì°ì|= â
ââââââââââââââââââââââââââââââââââŒââââââââââââââ€
âì°ì°ì%= â ì°ì°ì^= â
ââââââââââââââââââââââââââââââââââŽââââââââââââââ
ìŽê²ìŽ ì€ì ë¡ ì믞íë ë°ë íŽë¹ í목ì ì¬ì©íì¬ ìŽë£šìŽì§ 몚ë ë³ê²œ ì¬íì ì¶ì í ì ìë€ë ê²ì ëë€.
ê° ì믞륌 ê°ë C++ ê°ì²Žì ëí ì°ì°ìì ëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ì¶ì ë ê°<> ììì 볞 ì ìžì
ììì ìžêží ì°ì°ì륌 ì¬ì©íê³ ìœë°± íë¡ìžì€ë¥Œ 구ëí©ëë€. ì°ì°ì륌 ì¬ì©íë 겜ì°
ìì ì¶ì ë ê° íŽë¹ ë³ìì ìŽì ê°ê³Œ ì ê°ì 몚ë ì ê³µí©ëë€.
ìŽ ê²œì° ì ì32_t ê°. ì ê²ì¬ë¡ ì¶ì ë ê° ì ìž, ì°ëŠ¬ë ìê³ ìë€
ì¶ì ì±í¬ íšììë ìžìê° ììµëë€. (ìì ì ì32_t ì€ëë ê°, const륌 ì ì32_t ìë¡ìŽ ê°).
ì ëí ë°í ì í ì¶ì ë ê° ìœë°± íšìë íì 묎íší, ê·žëì ììëë
ìœë°± ìëª ì ë€ì곌 ê°ìµëë€.
void (* TracedValueCallback)(const int32_t oldValue, const int32_t newValue);
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë .AddTraceSource FBI ìŠì€ ë²ì£ ë³Žê³ ì ì í ID ê°ì žì€êž° ë°©ë²ì ì°ê²°ì ì¬ì©ëë "íí¬"륌 ì ê³µí©ëë€.
Config ìì€í ì íµíŽ ìì€ë¥Œ ìžë¶ ìžê³ë¡ ì¶ì í©ëë€. ì°ëŠ¬ë ìŽë¯ž ë Œì
ì²ì ìž ê°ì§ ë구 ì¶ì ìì€ ì¶ê°: êµ¬ì± ìì€í ì ìì± ìŽëŠ, ëìë§
묞ììŽ ë° TracedValue íŽëì€ ë°ìŽí° ë©€ë²ì 죌ìì ëë€.
ìì ì ë§ì§ë§ 묞ììŽ ìžì "ns3::Traced::Value::Int32"ë
íì ì ì ìœë°± íšì ìëª ì©. ìŽë¬í ìëª ì ì ìíŽìŒ í©ëë€.
ì ê·íë ì í ìŽëŠì ì¶ì ìì€ ì¶ê°, API 묞ììì ë€ìì ìíí ì ììµëë€.
ì¶ì ìì€ë¥Œ íšì ìëª ì ì°ê²°í©ëë€. TracedValueì ê²œì° ìëª ì ë€ì곌 ê°ìµëë€.
ëë°ë¡; TracedCallbacksì ê²œì° API 묞ìê° ì€ì ë¡ ëììŽ ëë ê²ì ìŽë¯ž íìžíìµëë€.
ë¶ëì° ìì
TCPì êŽí ê°ì¥ ì ìë €ì§ ì± ì€ íëìì ê°ì žìš ì륌 ë€ìŽ ë³Žê² ìµëë€. "TCP/IP
W. Richard Stevensì Illustrated, Volume 1: The Protocols"ë ê³ ì ì ëë€. ë°©êž ë€ì§ììµëë€.
ì± ìŽ ìŽëŠ¬ê³ íŒì¡ 찜곌 ìíì€ì ë©ì§ í롯ì ê°ë¡ì§ë¬ ì€íëììµëë€.
366íìŽì§ì ì«ì ë ìê°. Stevensë ìŽë¥Œ "귞늌 21.10. cwnd ë° ìê°ì ê°"ìŽëŒê³ ë¶ëŠ ëë€.
ë°ìŽí°ê° ì ì¡ëë ëì ìíì€ ë²ížë¥Œ 볎ëŽìžì." cwnd ë¶ë¶ì ë€ì ë§ë€ìŽ ë³Žê² ìµëë€.
ê·ž ì몚ì NS-3 ì¶ì ìì€í ì ì¬ì©íê³ ê·žëí롯.
ì íší ì§ì°ë©Ž ì¢ìê±°ê°ì . SM
ê°ì¥ 뚌ì ìê°íŽìŒ í ê²ì ë°ìŽí°ë¥Œ ìŽë»ê² ê°ì žì¬ ê²ìžê° íë ê²ì ëë€. ì°ëŠ¬ë 묎ìì ëê¹
ì¶ì íŽìŒí©ëê¹? ë°ëŒì "몚ë ì¶ì ìì€" 목ë¡ì ì°žì¡°íì¬ ìì íŽìŒ í ì¬íì íìžíê² ìµëë€.
ì íšê». ìŽ ëŽì©ì ë€ììì ì°Ÿì ì ììì êž°ìµíìžì. NS-3 API 묞ì. ì€í¬ë¡€ì íŽë³Žë©Ž
목ë¡ìì ê²°êµ ë€ìì ì°Ÿì ì ììµëë€.
ns3::TcpNewReno
· íŒì¡ ì°œ: TCP ì°ê²°ì íŒì¡ ì°œ
· SlowStart ìê³ê°: TCP ë늰 ìì ìê³ê°(ë°ìŽíž)
ê·žê²ì NS-3 TCP 구íì (ëë¶ë¶) íìŒì ì¡Žì¬í©ëë€.
src/ìží°ë·/몚ëž/tcp-socket-base.cc íŒì¡ ì ìŽ ë³íì ë€ì곌 ê°ì íìŒì ììµëë€.
as src/ìží°ë·/몚ëž/tcp-newreno.cc. ìŽê²ì 몚륞ë€ë©Ž a ì¬ì ,
ì¬ê· GREP ì¥ë:
$ ì°Ÿêž° . -ìŽëŠ '*.cc' | xargs grep -i tcp
íŽë¹ íìŒì ê°ëŠ¬í€ë tcp ìžì€íŽì€ì íìŽì§ë¥Œ íëì© ì°Ÿì ì ììµëë€.
ì ëí ìì 묞ì ê°ì žì€êž° TcpNewReno ê·žëŠ¬ê³ ëª©ë¡ìŒë¡ 걎ëë°êž°
ë¹ì ìŽ ì°Ÿì TraceSource
TraceSource
· íŒì¡ ì°œ: TCP ì°ê²°ì íŒì¡ 구ê°
ìœë°± ìëª : ns3::ì¶ì ::ê°::Uint322Callback
ìœë°±ì íŽëŠíë©Ž íì ì ì ë§í¬ë¥Œ íŽëŠíë©Ž ìŽì ììí ì ìë ìëª ìŽ íìë©ëë€.
typedef void(* ns3::Traced::Value::Int32Callback)(const int32_t oldValue, const int32_t newValue)
ìŽì ìŽ ìœë륌 ìì í ìŽíŽíŽìŒ í©ëë€. ë§ìœ ì°ëŠ¬ê° í¬ìží°ë¥Œ ê°ì§ê³ ìë€ë©Ž TcpNewReno,
ì°ëŠ¬ë í ììë€. TraceConnect ì ì í "CongestionWindow" ì¶ì ìì€ë¥Œ ì ê³µíë 겜ì°
ìœë°± ëì. ìŽë ê°ëší ììì 볞 ê²ê³Œ ëìŒí ì¢ ë¥ì ì¶ì ìì€ì ëë€.
ì°ëŠ¬ê° ìŽìŒêž°íê³ ìë ê²ì ì ìžíê³ ìŽ ì¹ì ì ìì ë¶ë¶ì uint32_t ëì
ì ì32_t. ê·žëŠ¬ê³ ì°ëŠ¬ë ê·ž ìëª ê³Œ íšê» ìœë°± íšì륌 ì ê³µíŽìŒ íë€ë ê²ì ìê³ ììµëë€.
ë°ê²¬ ì
ìì í ì ìë ìì ìœë륌 ì°Ÿë ê²ìŽ íì ê°ì¥ ì¢ìµëë€.
ì²ìë¶í° ììíë ê²ë³Žë€. ë°ëŒì ìŽì ë¹ìŠëì€ì 첫 ë²ì§ž ììë ë€ì곌 ê°ì ìœë륌 ì°Ÿë ê²ì ëë€.
ìŽë¯ž "CongestionWindow" ì¶ì ìì€ë¥Œ ì°ê²°íê³ ìì í ì ìëì§ íìží©ëë€. íìì ê°ìŽ
GREP ë¹ì ì ì¹êµ¬ì ëë€:
$ ì°Ÿêž° . -ìŽëŠ '*.cc' | xargs grep CongestionWindow
ìŽë ëª ê°ì§ ì ë§í í볎ì륌 ì§ì í ê²ì ëë€: ì/tcp/tcp-large-transfer.cc
and src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc.
ì°ëŠ¬ë ìì§ í ì€íž ìœë륌 방묞íì§ ìììŒë¯ë¡ ê·žê³³ì ìŽíŽë³Žê² ìµëë€. ë¹ì ì
ìŒë°ì ìŒë¡ í ì€íž ìœëê° ìë¹í ìë€ë ê²ì ì ì ììŒë¯ë¡ ìŽë ìë§ë ë§€ì° ì¢ì ì íìŒ ê²ì ëë€.
ìœëë€ src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc ì¢ìíë ížì§êž°ìì ë€ìì ê²ìíìžì.
"íŒì¡ ì°œ". ë¹ì ì ë°ê²¬ í ê²ìŽë€,
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow",
MakeCallback(&Ns3TcpCwndTestCase1::CwndChange, ìŽ));
ìŽê²ì ë¹ì ìê² ë§€ì° ì¹ìíŽ ë³ŽìŒ ê²ì ëë€. ììì ìžêžíë¯ìŽ
TcpNewReno, ì°ëŠ¬ë í ì ììë€ TraceConnect "CongestionWindow" ì¶ì ìì€ë¡ ìŽëí©ëë€. ë°ë¡ ê·žê±°ìŒ
ì°ëŠ¬ê° ì¬êž°ì ìë ê²; ê·žëì ìŽ ìœë ëŒìžìŽ ì íí ì°ëŠ¬ê° ìíë ê²ì íë€ë ê²ìŽ ë°íì¡ìµëë€.
ê³ìíŽì ìŽ íšììì íìí ìœë륌 ì¶ì¶íŽ ë³Žê² ìµëë€(Ns3TcpCwndTestCase1::ëë°
(묎íšì)). ìŽ íšì륌 볎멎 ë§ì¹ NS-3
ì€í¬ëŠœíž. ê·žê²ìŽ ì íí 묎ììžì§ ë°íì¡ìµëë€. í ì€ížì ìíŽ ì€íëë ì€í¬ëŠœížì ëë€.
íë ììí¬ë¥Œ 꺌ëŽìŽ í¬ì¥íë©Ž ë©ëë€. ë³žêŽ ëì ì ëë°. ꜀
ìŽ ê³Œì ì ëšê³ë³ë¡ ì§ííë ê²ë³Žë€ í¬í ê²°ê³Œë¡ ìì±ë íìŒì ì ê³µíìµëë€.
ìŽ í ì€ížë ë€ìŽí°ëžë¡ ëìê°ëë€. NS-3 ì€í¬ëŠœíž -- ìì /íí 늬ìŒ/fifth.cc.
ëì ëë¬ë€ ì§ì°ë©Ž ì¢ìê±°ê°ì . SM
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ë€ì¯ë²ì§ž.cc ìë ë°ëì ìŽíŽíŽìŒ íë ë§€ì° ì€ìí ê·ì¹ì 볎ì¬ì€ëë€.
몚ë ì¢ ë¥ì ì¶ì ìì€ë¥Œ ì¬ì©íêž° ì ì ë€ì곌 ê°ì ëììŽ ìëì§ íìžíŽìŒ í©ëë€.
구ì±::ì°ê²° ëª ë ¹ì ì¬ì©íêž° ì ì ì¡Žì¬í©ëë€. ìŽê²ì ë§íë ê²ê³Œ ë€ë¥Žì§ ìë€.
ê°ì²Žë¥Œ ížì¶íêž° ì ì ê°ì²Žë¥Œ ìžì€íŽì€ííŽìŒ í©ëë€. ìŽê²ìŽ ëª ë°±íŽ ë³ŽìŒì§ 몚륎ì§ë§
ìŽë° ììŒë¡ ë§íë©Ž ì²ììŒë¡ ìì€í ì ì¬ì©íë €ë ë§ì ì¬ëë€ìŽ ê±žë € ëìŽì§ëë€.
ìê°.
ì ì Ʞ볞ìŒë¡ ëìê°ì. ì ì¡Žì¬íë ìž ê°ì§ Ʞ볞 ì€í ëšê³ê° ììµëë€.
ìŽë€ NS-3 ì€í¬ëŠœíž. 첫 ë²ì§ž ëšê³ë "êµ¬ì± ìê°" ëë "ì€ì "ìŽëŒê³ ë í©ëë€.
ìê°"ìŒë¡ íìëë©° íŽë¹ êž°ê° ëì ì¡Žì¬í©ëë€. ë³žêŽ ì€í¬ëŠœíž êž°ë¥ìŽ ì€í ì€ìŽì§ë§
ì ì ì뮬ë ìŽí°::ì€í ížì¶ë©ëë€. ë ë²ì§ž ëšê³ë "ì뮬ë ìŽì ìê°"ìŽëŒê³ ë í©ëë€.
ê·žëŠ¬ê³ ë€ì곌 ê°ì êž°ê° ëì ì¡Žì¬í©ëë€. ì뮬ë ìŽí°::ì€í ì ê·¹ì ìŒë¡ íì¬ë¥Œ ì§ííê³ ììµëë€.
ì뮬ë ìŽì ì€íìŽ ìë£ë í, ì뮬ë ìŽí°::ì€í ë€ì ì ìŽê¶ì ë°íí©ëë€
ì ì, ë³žêŽ êž°ë¥. ìŽë° ìŒìŽ ë°ìíë©Ž ì€í¬ëŠœížë "Teardown"
íìŽìŠ(Phase)'ë ì€ì 곌ì ìì ìì±ë 구조묌곌 묌첎륌 ë¶íŽíê³ ,
íìŽ ëìë€.
ìë§ë ì¶ì ìì€í ì ì¬ì©íë €ê³ í ë ì ì§ë¥Žë ê°ì¥ ìŒë°ì ìž ì€ìë ë€ì곌 ê°ë€ê³ ê°ì íë ê²ì ëë€.
ëì ìŒë¡ ìì±ë ìí°í° ...ëì ì뮬ë ìŽì ìê° êµ¬ì± ì€ì ì¬ì©í ì ììµëë€.
ìê°. í¹í, NS-3 ììŒ ì죌 ìì±ëë ëì ê°ì²Žì ëë€. ìŽí늬ìŒìŽì ì
ìì¬ ìíµ ë žë. NS-3 ìŽí늬ìŒìŽì íì 'ìì ìê°'곌 'ì€ì§'ê° ììµëë€.
ìê°"곌 êŽë šìŽ ììµëë€. ëë¶ë¶ì 겜ì°, ìŽí늬ìŒìŽì ìëíì§ ìì ê²ì ëë€
ëì ê°ì²Žë¥Œ ìì±íë €ë©Ž ìì© íë¡ê·žëš ìì ë©ìëë ìŒë¶ "ìì"ìì ížì¶ë©ëë€.
ìê°". ìŽë ì±ìŽ ì€íëêž° ì ì ì뮬ë ìŽì ìŽ ìì í 구ì±ëìëì§ íìžíêž° ìí ê²ì ëë€.
(ì¡Žì¬íì§ ìë ë žëì ì°ê²°ì ìëíë©Ž ìŽë»ê² ë ê¹ì?)
ìì§ êµ¬ì±íë ëììžê°ì?). 결곌ì ìŒë¡ êµ¬ì± ëšê³ììë ë€ìì ìíí ì ììµëë€.
ì¶ì ìì€ ì€ íëê° ëì ìŒë¡ ìì±ë ê²œì° ì¶ì ìì€ì ì°ê²°í©ëë€.
ì뮬ë ìŽì .
ìŽ ììê»ëŒì ëí ë ê°ì§ íŽê²°ì± ì ë€ì곌 ê°ìµëë€.
1. ëì ê°ì²Žê° ìì±ë í ì€íëë ì뮬ë ìŽí° ìŽë²€ížë¥Œ ìì±íê³
íŽë¹ ìŽë²€ížê° ì€íëë ìì ì ì¶ì í©ëë€. ëë
2. êµ¬ì± ì ëì ê°ì²Žë¥Œ ìì±íê³ ì°ê²°í ë€ì íŽë¹ ê°ì²Žë¥Œ
ì뮬ë ìŽì ìê° ëì ì¬ì©í ìì€í .
ì°ëŠ¬ë ë ë²ì§ž ì ê·Œ ë°©ìì ì·šíìµëë€. ë€ì¯ë²ì§ž.cc ì. ìŽ ê²°ì ìŒë¡ ìžíŽ ì°ëŠ¬ë
ì ì, ë§ìŽì± ìŽí늬ìŒìŽì , ê·ž ì 첎 목ì ì ììŒ ë§€ê° ë³ìë¡.
ì°ìµ : ë€ì¯ë²ì§ž.cc
ìŽì íŒì¡ë륌 ë¶ìíì¬ êµ¬ì±í ìì íë¡ê·žëšì ìŽíŽë³Žê² ìµëë€.
ì°œ í ì€íž. ìŽë € ìë ìì /íí 늬ìŒ/fifth.cc ì¢ìíë ížì§êž°ìì. ë ëŽìŒ íŽ
ì¹ìíŽ ë³ŽìŽë ìœë:
/* -*- 몚ë:C++; c-íìŒ ì€íìŒ:"gnu"; ë€ì¬ì°êž° í 몚ë:nil; -*- */
/*
* ìŽ íë¡ê·žëšì ë¬Žë£ ìíížìšìŽì ëë€. ì¬ë°°í¬ ë°/ëë ìì í ì ììµëë€.
* ë€ì곌 ê°ìŽ GNU General Public License ë²ì 2ì 조걎ì ë°ëŠ ëë€.
* ìì ìíížìšìŽ ì¬ëšìì ë°í;
*
* ìŽ íë¡ê·žëšì ì ì©íê² ì¬ì©ëêžž ë°ëŒë ë§ììì ë°°í¬ëë©°,
* ê·žë¬ë ìŽë í 볎ìŠë ì ê³µíì§ ììµëë€. 묵ìì 볎ìŠë ììŽ
* ìíì± ëë í¹ì 목ì ìì ì í©ì±. ì°žì¡°
* ììží ëŽì©ì GNU General Public License륌 ì°žì¡°íììì€.
*
* GNU General Public License ì¬ë³žì ë°ììŽìŒ í©ëë€.
* ìŽ íë¡ê·žëšê³Œ íšê»; ê·žë ì§ ìì ê²œì° ìì ìíížìšìŽì ì°êž°
* ì¬ëš, í¬íš., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#í¬íšíë€
#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"
ë€ìì€íìŽì€ ns3 ì¬ì©;
NS_LOG_COMPONENT_DEFINE("ë€ì¯ ë²ì§ž ì€í¬ëŠœíž ìì ");
ìŽ ëŽì©ì 몚ë ë€ë£šììŒë¯ë¡ ë€ì ì€ëª íì§ ìê² ìµëë€. ìì€ì ë€ì ì€ì
ììì ì€ëª í 묞ì 륌 íŽê²°íë ë€ížìí¬ ê·žëŠŒ ë° ì€ëª ììŒ.
// ================================================ ===========================
//
// ë žë 0 ë žë 1
// +----------------+ +----------------+
// | NS-3 TCP | | NS-3 TCP |
// +----------------+ +----------------+
// | 10.1.1.1 | | 10.1.1.2 |
// +----------------+ +----------------+
// | ì§ì ê° | | ì§ì ê° |
// +----------------+ +----------------+
// | |
// +---------+
// 5Mbps, 2ms
//
//
// ns-3 TCP íŒì¡ ì°œì ë³ê²œ ì¬íì ìŽíŽë³Žê³ ì í©ëë€. ì°ëŠ¬ë íìí©ëë€
// íëŠì ììíê³ CongestionWindow ìì±ì ììŒì ì°ê²°í©ëë€.
// ë°ì ì. ìŒë°ì ìŒë¡ ìš-ì€í ì í늬ìŒìŽì ì ì¬ì©íì¬
// íëŠìŽì§ë§ ì¬êž°ìë ëª ê°ì§ 묞ì ê° ììµëë€. 뚌ì ìšì€í ììŒì ëë€.
// ì í늬ìŒìŽì ì ì í늬ìŒìŽì ìì ìê°ê¹ì§ ìì±ëì§ ììŒë¯ë¡ ìì±ëì§ ììµëë€.
// êµ¬ì± ì (ìŽì ) ììŒì ì°ê²°í ì ììµëë€. ë짞, ë¹ë¡ ì°ëŠ¬ê°
// ìì ìê° ìŽíì ížì¶ì ì€ë¹í ì ììµëë€. ììŒì ê³µê°ëì§ ììŒë¯ë¡
// ëë¬í ì ììµëë€.
//
// ë°ëŒì ì°ëŠ¬ë ë€ì ìì ì ìííë ê°ëší ë²ì ì ìš-ì€í ì í늬ìŒìŽì ì ë§ë€ ì ììµëë€.
// ì°ëŠ¬ë ìí©ëë€. íë¬ì€ ìž¡ë©Žìì ìš-ì€íì 몚ë ë³µì¡ì±ìŽ íìíì§ ììµëë€.
// ì í늬ìŒìŽì . ë§ìŽëì€ ìž¡ììë ëì°ë¯žê° ììŽì 구íŽìŒ í©ëë€.
// ìžë¶ ì¬íì ì¢ ë êŽì¬íì§ë§ ìŽë ì¬ìí ìŒì ëë€.
//
// 뚌ì ììŒì ìì±íê³ ê·žì ëí ì°ê²° ì¶ì ì ìíí©ëë€. ê·žëŒ ì°ëŠ¬ë íµê³Œ
// ìŽ ììŒì ê°ëší ìì© íë¡ê·žëšì ìì±ìì ì°ê²°ë©ëë€.
// ìì€ ë žëì ì€ì¹í©ëë€.
// ================================================ ===========================
//
ìŽê²ì ëí ìëª íŽìŒ í©ëë€.
ë€ì ë¶ë¶ì ì ìžë¬žìŽë€. ë§ìŽì± ìŽí늬ìŒìŽì ì°ëŠ¬ê° íšê» í ì ìëë¡
ì ì, ììŒ êµ¬ì± ì ìì±ë©ëë€.
íŽëì€ MyApp : ê³µê° ì í늬ìŒìŽì
{
공공ì:
ë§ìŽì±();
ê°ì ~MyApp();
ë¬Žíš ì€ì (Ptr ììŒ, 죌ì 죌ì, uint32_t packetSize,
uint32_t nPackets, DataRate dataRate);
ë¹ê³µê° :
ê°ì ë¬Žíš StartApplication(묎íš);
ê°ì ë¬Žíš StopApplication(묎íš);
ë¬Žíš ScheduleTx (묎íš);
ë¬Žíš SendPacket (묎íš);
í¬ìžíž m_socket;
죌ì m_peer;
uint32_t m_packetSize;
uint32_t m_níší·;
ë°ìŽí°ë ìŽíž m_dataRate;
ìŽë²€ížID m_sendEvent;
bool m_running;
uint32_t m_packetsSent;
};
ìŽ íŽëì€ê° NS-3 ìŽí늬ìŒìŽì ìì . 볎ìžì
src/ë€ížìí¬/몚ëž/application.h ììë°ì ê²ì êŽì¬ìŽ ìë€ë©Ž. ê·žë§íŒ ë§ìŽì±
íŽëì€ë ìì© íë¡ê·žëš ìì and ì í늬ìŒìŽì ì€ì§ íë ìì. ìŽê²ë€
ë©ìëë ë€ì곌 ê°ì ê²œì° ìëìŒë¡ ížì¶ë©ëë€. ë§ìŽì± ë°ìŽí° ì ì¡ì ììíê³ ì€ì§íë ë° íìí©ëë€.
ì뮬ë ìŽì ì€ì.
ìì/ì€ì§ ìŽí늬ìŒìŽì
ìŽë²€ížê° ì€ì ë¡ ìŽë»ê² ììëëì§ ì€ëª íë ë° ìœê°ì ìê°ì í ì í ê°ì¹ê° ììµëë€.
첎ê³. ìŽê²ì ë ë€ë¥ž ìë¹í ê¹ì ì€ëª ìŽë©°, ê·žë ì§ ìì ê²œì° ë¬Žìí ì ììµëë€.
ìì€í ì ëŽë¶ë¡ 몚íì ë ë ê³íì ëë€. ê·žë¬ë ê·ž ì ììë ì ì©í©ëë€.
í ë¡ ì ë€ì곌 ê°ì ë§€ì° ì€ìí ë¶ë¶ì ëíŽ ë€ë£¹ëë€. NS-3 ìì íê³ ìŒë¶ë¥Œ ë žì¶í©ëë€.
ì€ìí êŽì©ìŽ. ìë¡ìŽ 몚ëžì 구íí ê³íìŽëŒë©Ž ìë§ë ë€ìì ìííê³ ì¶ì ê²ì ëë€.
ìŽ ë¶ë¶ì ìŽíŽíììì€.
íí ìŽë²€ížë¥Œ ììíë ê°ì¥ ìŒë°ì ìž ë°©ë²ì ìŽí늬ìŒìŽì . ìŽë ë€ì곌 ê°ìŽ ìíë©ëë€.
ë€ì곌 ê°ì (ë°ëŒê±Žë) ê°ì¡± ëŒìžì 결곌 NS-3 ì€í¬ëŠœíž:
ApplicationContainer ì± = ...
apps.Start(ìŽ(1.0));
apps.Stop(ìŽ(10.0));
ì í늬ìŒìŽì 컚í ìŽë ìœë(ì°žì¡°: src/ë€ížìí¬/helper/application-container.h ë¹ì ìŽìë 겜ì°
êŽì¬) í¬íšë ìì© íë¡ê·žëš ë° ížì¶ì ë°ë³µí©ëë€.
ì±->SetStartTime(startTime);
ì ê²°ê³Œë¡ ì±.ìì ì ííê³
ì±->SetStopTime(stopTime);
ì ê²°ê³Œë¡ ì±.ì€ì§ ì구.
ìŽë¬í ížì¶ì ê¶ê·¹ì ìž ê²°ê³Œë ì뮬ë ìŽí°ë¥Œ ìëìŒë¡ ê°êž°ë¥Œ ìíë€ë ê²ì ëë€.
ì°ëŠ¬ìê² ì í륌 ê±žìŽ ìŽí늬ìŒìŽì ìžì ììíê³ ë©ì¶ì§ ìë €ì€ëë€. ì 겜ì°
ë§ìŽì±, íŽëì€ìì ìì ìŽí늬ìŒìŽì ê·žëŠ¬ê³ ì¬ì ì ìì© íë¡ê·žëš ììë°
ì í늬ìŒìŽì ì€ì§. ë€ìì ì뮬ë ìŽí°ìì ížì¶í íšìì ëë€.
ì ì í ìê°. ì ê²œì° ë§ìŽì± ë¹ì ì ê·žê²ì ì°Ÿì ê²ì ëë€ MyApp::ìì ìì© íë¡ê·žëš íì§
ìŽêž° ë°ìžëë° ì°ê²°íêž° ììŒìì ë€ìì ížì¶íì¬ ë°ìŽí° íëŠì ììí©ëë€.
MyApp::SendPacket. MyApp::ì€ì§ìì©íë¡ê·žëš ì·šìíì¬ íší· ìì±ì ì€ì§í©ëë€.
ë³Žë¥ ì€ìž 볎ëŽêž° ìŽë²€ížë ììŒì ë«ìµëë€.
ì¢ì ì ì€ íëë NS-3 구íì ìì í 묎ìí ì ìë€ë ê²ì ëë€
ë¹ì ì ë°©ë²ì ëí ìžë¶ ì¬í ìŽí늬ìŒìŽì ì¬ë°ë¥ž ìì¹ìì ì뮬ë ìŽí°ì ìíŽ "ìëìŒë¡" ížì¶ë©ëë€.
ìê°. ê·žë¬ë ì°ëŠ¬ë ìŽë¯ž ê¹ìŽ íê³ ë€ìêž° ë묞ì NS-3 ìŽë¯ž, ê·žê²ì ìíŽ ê°ì.
ë¹ì ìŽ ë³Žë©Ž src/ë€ížìí¬/몚ëž/application.cc ë¹ì ì ìì ìê° ì€ì ë°©ë²
ì ìŽí늬ìŒìŽì ê·žë¥ ë©€ë² ë³ì륌 ì€ì m_startTime ê·žëŠ¬ê³ ì ì§ ìê° ì€ì ë°©ë²
ê·žë¥ ì€ì m_stopTime. ê±°êž°ìì íížê° ììŒë©Ž ìë§ë ížë ìŒìŽ ëë ê²ì ëë€.
ížë ìŒì ë€ì ì ííë ìŽì ë 몚ë ížëì êžë¡ë² 목ë¡ìŽ ìë€ë ê²ì ìë ê²ì ëë€.
ìì€í ì ë žë. ì뮬ë ìŽì ìì ë žë륌 ìì±í ëë§ë€ íŽë¹ ë žëì ëí í¬ìží°
ì ìì ì¶ê°ë©ëë€ ë žë 목ë¡.
ìŽíŽ src/ë€ížìí¬/몚ëž/node-list.cc ë° ê²ì ë žë목ë¡::ì¶ê°. ê³µê°
ì ì 구íì ë€ì곌 ê°ì ê°ìž 구íì ížì¶í©ëë€. NodeListPriv::ì¶ê°. ìŽ
ìì ë¹êµì íí ìŽëŽìŽë€. NS-3. ê·žë¬ë íë² ìŽíŽë³Žìžì NodeListPriv::ì¶ê°. ê±°êž° ë¹ì
ì°Ÿì ê²ìŽë€,
Simulator::ScheduleWithContext(ìžë±ì€, TimeStep(0), &Node::Initialize, ë žë);
ìŽë ì뮬ë ìŽì ìì ë žëê° ìì±ë ëë§ë€ ë¶ìì©ìŒë¡ ížì¶ìŽ ë°ìíšì ìë €ì€ëë€.
íŽë¹ ë žëì ìŽêž°í ìê° XNUMXì ë°ìíë ë°©ë²ìŽ ìì ëìŽ ììµëë€. íì§ ìë€
ìì§ ê·ž ìŽëŠì ëíŽ ë묎 ë§ì ëŽì©ì ìœììµëë€. ìŽë ë žëê° ìì ì ììíë€ë ì믞ë ìëëë€.
묎ììŽë ë žëì ëí ì 볎 ížì¶ë¡ íŽìë ì ììµëë€.
ë žëì ìì ì ììíëŒê³ ì§ìíë ìì ìŽ ìë ì뮬ë ìŽì ìŽ ììëììµëë€.
ê·žëì, ë žë목ë¡::ì¶ê° ê°ì ì ìŒë¡ ížì¶ì ììœí©ëë€. ë žë::ìŽêž°í XNUMXìì ì¡°ìžì íêž° ìíŽ
ì뮬ë ìŽì ìŽ ììë ì ë žëì ëë€. ë€ì¬ë€ë³Žë©Ž src/ë€ížìí¬/몚ëž/node.h ì견ì ë£ê³ ì¶ìµëë€.
ê·žë¬ë ë€ì곌 ê°ì ë©ìë륌 ì°Ÿì§ ëª»í ê²ì ëë€. ë žë::ìŽêž°í. ê·žê²ì
ìŽêž°í ë©ìëë íŽëì€ìì ììë©ëë€. 목ì . ìì€í ì 몚ë ê°ì²Žë
ì뮬ë ìŽì ìŽ ììë ë ì늌ì ë°ê³ Node íŽëì€ì ê°ì²Žë ê·ž ì€ í ì¢ ë¥ìŒ ë¿ì ëë€.
ì¬ë¬Œ.
ìŽíŽ src/ìœìŽ/몚ëž/object.cc ë€ììŒë¡ ê²ìíŽ ë³Žìžì. ê°ì²Ž::ìŽêž°í. ìŽ ìœë
ììíë ê²ë§íŒ ê°ëšíì§ ììµëë€. NS-3 ì¬ë¬Œ SUPPORT
ì§í©. ì ìœë ê°ì²Ž::ìŽêž°í ê·žë° ë€ì íŽë¹ ê°ì²Žë¥Œ 몚ë ë°ë³µí©ëë€.
íšê» ì§ê³ëìŽ ížì¶ë©ëë€. ìŽêž°í륌 íìžì ë°©ë². ìŽê²ì ë ë€ë¥ž êŽì©êµ¬ì ëë€
ê·žê²ì ë§€ì° ìŒë°ì ì ëë€ NS-3, ëë¡ë "í í늿 ëììž íšíŽ"ìŽëŒê³ ë í©ëë€.: ê³µê°
구í ì ë°ì ê±žì³ ìŒì íê² ì ì§ëê³
ìëž íŽëì€ì ìíŽ ììëê³ êµ¬íëë ê°ìž ê°ì 구í ë°©ë².
ìŽëŠì ìŒë°ì ìŒë¡ ë€ì곌 ê°ìµëë€. ë°©ë²ëª ê³µê° APIì ê²œì° ë°©ë² ìŽëŠ for
íëŒìŽë¹ API.
ìŽë ì°ëŠ¬ê° ë€ìì ì°ŸììŒ íšì ìë €ì€ëë€. ë žë::DoInitialize ë°©ë²
src/ë€ížìí¬/몚ëž/node.cc ì°ëŠ¬ì íì ì ê³ìí ë°©ë²ì ìíŽ. ìì¹ë¥Œ ì°ŸìŒë©Ž
ìœë륌 ì¬ì©íë©Ž ë žëì 몚ë ì¥ì¹ë¥Œ ë°ë³µíë ë©ìë륌 ì°Ÿì ë€ì
ë žë ížì¶ì 몚ë ì í늬ìŒìŽì ì¥ì¹->ìŽêž°í and ìì©íë¡ê·žëš->ìŽêž°í
ê°ê°.
ë¹ì ì ìŽë¯ž ê·ž ìì ì ìê³ ìì ê²ì ëë€ ì¥ì¹ and ìŽí늬ìŒìŽì ë ë€ íŽëì€ìì ìì 목ì
ê·žëì ë€ì ëšê³ë ìì© íë¡ê·žëš::ìŽêž°í is
ëŒê³ ë¶ëŠ¬ë. 볎ìžì src/ë€ížìí¬/몚ëž/application.cc ê·žë¬ë©Ž ë€ìì ì°Ÿì ì ììµëë€:
묎íší
ìì© íë¡ê·žëš::DoInitialize(묎íš)
{
m_startEvent = ì뮬ë ìŽí°::Schedule(m_startTime, &Application::StartApplication, this);
if (m_stopTime != TimeStep(0))
{
m_stopEvent = ì뮬ë ìŽí°::Schedule(m_stopTime, &Application::StopApplication, this);
}
ê°ì²Ž::DoInitialize ();
}
ìŽì ëëìŽ êžžìŽ ëëë ì§ì ì ìŽë¥Žë ìµëë€. 몚ë ê²ì ëë°ë¡ ì ì§íë€ë©Ž,
구ííë€ NS-3 ìŽí늬ìŒìŽì , ì ì í늬ìŒìŽì ì íŽëì€ìì ììë©ëë€. ìŽí늬ìŒìŽì . ë¹ì
ì¬ì ì ìì© íë¡ê·žëš ìì and ì í늬ìŒìŽì ì€ì§ ë°©ë²ì ì ê³µíê³ ë©ì»€ëìŠì ì ê³µí©ëë€.
ì ë°ìŽí° íëŠ ìì ë° ì€ì§ ìŽí늬ìŒìŽì . ë žëê° ìì ë
ì뮬ë ìŽì ìì ìì±ëë©Ž ì ìì ì¶ê°ë©ëë€. ë žë 목ë¡. ë žë륌 ì¶ê°íë íì
ìŽ ë žë ëª©ë¡ ì뮬ë ìŽí° ìŽë²€ížë¥Œ ížì¶íë ìê° XNUMXìŒë¡ ììœëëë¡ í©ëë€.
ë žë::ìŽêž°í ì뮬ë ìŽì ìì ì ížì¶ë ìë¡ ì¶ê°ë Nodeì ë©ìëì ëë€.
ë žëë 목ì , ìŽë ë€ìì ížì¶í©ëë€. ê°ì²Ž::ìŽêž°í ë žëì ë©ìë
ìŽë ì°šë¡ë¡ ë€ìì ížì¶í©ëë€. ìŽêž°í륌 íìžì 몚ë ë°©ë²ì ëí ì¬ë¬Œ ì ì§ê³
ë žë(ìŽëì± ëªšëž ìê°). ë žë ìŽí 목ì ì¬ì ìëììµëë€ ìŽêž°í륌 íìžìê·ž
ë©ìëë ì뮬ë ìŽì ìŽ ììë ë ížì¶ë©ëë€. ê·žë§íŒ ë žë::DoInitialize ë©ìëë
ìŽêž°í 몚ë ë°©ë²ì ìŽí늬ìŒìŽì ë žëìì. ë¶í° ìŽí늬ìŒìŽì ë ììµëë€
ì¬ë¬Œ, ìŽë¡ ìžíŽ ìì© íë¡ê·žëš::ìŽêž°í ë¶ëŠŽ. ìžì
ìì© íë¡ê·žëš::ìŽêž°í ížì¶ëë©Ž ë€ìì ëí ìŽë²€ížë¥Œ ììœí©ëë€. ìì© íë¡ê·žëš ìì and
ì í늬ìŒìŽì ì€ì§ ì ì í ìŽí늬ìŒìŽì . ìŽë¬í ížì¶ì ë€ìì ììíê³ ì€ì§íëë¡ ì€ê³ëììµëë€.
ë°ìŽí°ì íëŠ ìŽí늬ìŒìŽì
ìŽê²ì ꜀ ꞎ ì¬ì ìŽìì§ë§ í ë²ë§ ìííë©Ž ë©ëë€.
ë ë€ë¥ž ë§€ì° ê¹ì ë¶ë¶ì ìŽíŽíììì€ NS-3.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ë§ìŽì± ìŽí늬ìŒìŽì
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ë§ìŽì± ìŽí늬ìŒìŽì ë¬Œë¡ ìì±ìì ìë©žìê° íìí©ëë€.
ëŽì±::ëŽì± ()
: m_socket (0),
m_íŒìŽ(),
m_packetSize (0),
m_níší· (0),
m_dataRate (0),
m_sendEvent(),
m_running (ê±°ì§),
m_packetsì ì¡ëš (0)
{
}
ëŽì±::~ëŽì±()
{
m_socket = 0;
}
ë€ì ìœë ë¹ížì ì¡Žì¬ê° ì°ëŠ¬ê° ìŽê²ì ìì±í ì 첎 ìŽì ì ëë€. ìŽí늬ìŒìŽì in
첫 ë²ì§ž ì¥ì.
묎íší
MyApp::ì€ì (Ptr ììŒ, 죌ì 죌ì, uint32_t packetSize,
uint32_t nPackets, DataRate dataRate)
{
m_socket = ììŒ;
m_peer = 죌ì;
m_packetSize = íší· í¬êž°;
m_nPackets = níší·;
m_dataRate = dataRate;
}
ìŽ ìœëë ì€ëª ìŽ ë§€ì° ê°ëšíŽìŒ í©ëë€. ì°ëŠ¬ë ë©€ë² ë³ì륌 ìŽêž°ííê³ ììµëë€.
ì¶ì ì êŽì ìì ì€ìí ê²ì í¬ìžíž ììŒ ì°ëŠ¬ë
êµ¬ì± ìê° ëì ì í늬ìŒìŽì ì ì ê³µíŽìŒ í©ëë€. ì°ëŠ¬ê° ê°ë€ë 걞 êž°ìµíŽ
찜조íêž° ììŒ ë± TcpììŒ (ìŽë ë€ì곌 ê°ìŽ 구íë©ëë€. TcpNewReno) ê·žëŠ¬ê³ íí¬
"CongestionWindow" ì¶ì ìì€ë¥Œ ì ë¬íêž° ì ì ì€ì ë°©ë².
묎íší
MyApp::StartApplication(묎íš)
{
m_running = ì¬ì€;
m_packetsSent = 0;
m_socket->ë°ìžë();
m_socket->ì°ê²°(m_peer);
SendPacket();
}
ìì ìœëë ì¬ì ìë 구íì ëë€. ìì© íë¡ê·žëš::ìì ìì© íë¡ê·žëš ê·žëŽê±°ìŒ.
ì뮬ë ìŽí°ìì ìëìŒë¡ ížì¶íì¬ ìŽí늬ìŒìŽì ì ì í ìì¹ìì ì€í
ìê°. ë¹ì ì ê·žê²ìŽíë ê²ì 볌 ì ììµëë€ ììŒ ë°ìžë ìì . ë¹ì ìŽ ìµìíë€ë©Ž
ë²íŽëŠ¬ ììŒ(Berkeley Sockets) ìŽê²ì ëëŒìŽ ìŒìŽ ìëëë€. ë¡ì»¬ìì íìí ìì ì ìíí©ëë€.
ììëë¡ ì°ê²°ì ìž¡ë©Ž. ë€ì곌 ê°ì ì°ê²°íêž° 묎ìì í ê²ìžê°
TCPìì ì°ê²°ì ì€ì íë ë° íìí©ëë€. 죌ì m_peer. ìŽì ë¶ëª íŽì¡ì ê²ëë€
ì ì°ëŠ¬ë ìŽ ë§ì ë¶ë¶ì ì뮬ë ìŽì ìê°ìŒë¡ ì°êž°íŽìŒ ââí©ëê¹? ì°ê²°íêž° íìí ê²ìŽë€
ì벜íê² ìëíë ë€ížìí¬ë¥Œ ìì±í©ëë€. í ì°ê²°íêž°Walk Through California íë¡ê·žëš, ìŽí늬ìŒìŽì ê·žë° ë€ì ìì
ížì¶íì¬ ì뮬ë ìŽì ìŽë²€íž ìì± SendPacket.
ë€ì ìœë ë¹ížë ìŽí늬ìŒìŽì ì뮬ë ìŽì ìŽë²€íž ìì±ì ì€ì§íë ë°©ë².
묎íší
MyApp::StopApplication(묎íš)
{
m_running = ê±°ì§;
if (m_sendEvent.IsRunning())
{
ì뮬ë ìŽí°::ì·šì(m_sendEvent);
}
if (m_ììŒ)
{
m_socket->ë«êž°();
}
}
ì뮬ë ìŽì ìŽë²€ížê° ìì ë ëë§ë€ ìŽë²€íž ìì±ë©ëë€. ë§ìœ ìŽë²€íž ë³Žë¥ ì€
ì€í ëë ì€í, ê·ž ë°©ë² ì€í ì€ ëìì¬ê±°ìŒ. ì°žë. ìŽ ìœëìì ë§ìœ
ì€íì€() true륌 ë°íí©ëë€. ì°ëŠ¬ë ì·šì ì뮬ë ìŽí° ìŽë²€ížìì ì ê±°íë ìŽë²€íž
ëêž°ì€. ìŽë¥Œ íµíŽ ì°ëŠ¬ë ì¬ê±Žì ì°ì륌 ëìµëë€. ìŽí늬ìŒìŽì ì ì§íë ë° ì¬ì©íê³ ììµëë€
볎ëŽë ì€ íší· ê·žëŠ¬ê³ ìŽí늬ìŒìŽì ì¡°ì©í ê°ë€. ì°ëŠ¬ê° ì¡°ì©í í í ìŽí늬ìŒìŽì we
ë«êž° TCP ì°ê²°ì ëë ììŒ.
ììŒì ì€ì ë¡ ìë©žììì ìì ë©ëë€. m_socket = 0 ì€íë©ëë€. ìŽê²
Ʞ볞 Ptrì ëí ë§ì§ë§ 찞조륌 ì ê±°í©ëë€. ìë©žì륌 ì ë°íë
ížì¶í ê°ì²Žì ëë€.
ëŠ¬ìœ ìì© íë¡ê·žëš ìì ëŒë SendPacket ì€ëª íë ìŒë šì ìŽë²€ížë¥Œ ììí©ëë€.
ì ì, ìŽí늬ìŒìŽì íë.
묎íší
MyApp::SendPacket(묎íš)
{
í¬ìžíž íší· = ìì± (m_packetSize);
m_socket->볎ëŽêž°(íší·);
if (++m_packetsSent < m_nPackets)
{
ScheduleTx();
}
}
ì êž°, ê·žê±° 볎ìŽìì£ SendPacket ê·žë ê² í©ëë€. ê·žê²ì ìì± íší· ê·žë° ë€ì ì ì¡
Berkeley Sockets륌 ìê³ ìë€ë©Ž ìë§ë ììíë ë°ë¡ ê·ž 몚ìµìŒ ê²ì ëë€.
ì ì± ìì ëë€. ìŽí늬ìŒìŽì ìŒë šì ìŽë²€íž ìŒì ì ê³ì ê³ííêž° ìíŽ
ë€ì íì ì í ScheduleTx ë€ë¥ž ì ì¡ ìŽë²€ížë¥Œ ììœíë €ë©Ž(a SendPacket) ê¹ì§
ìŽí늬ìŒìŽì 충ë¶í 볎ëë€ê³ íëší©ëë€.
묎íší
MyApp::ScheduleTx(묎íš)
{
ê²œì° (m_running)
{
ìê° tNext(ìŽ(m_packetSize * 8 / static_cast (m_dataRate.GetBitRate ())));
m_sendEvent = ì뮬ë ìŽí°::Schedule(tNext, &MyApp::SendPacket, this);
}
}
ì êž°, ê·žê±° 볎ìŽìì£ ScheduleTx ë°ë¡ ê·žë° ìŒì í©ëë€. ë§ìœ ìŽí늬ìŒìŽì ì€í ì€ì ëë€(ë§ìœ
ì í늬ìŒìŽì ì€ì§ ížì¶ëì§ ìì) ížì¶ëë ì ìŽë²€ížë¥Œ ììœí©ëë€. SendPacket
ë€ì. ê²œê³ ë¥Œ ìœë ì¬ëì ìë¡ìŽ ì¬ì©ììê²ë 걞늌ëìŽ ëë ê²ì ë°ê²¬í ê²ì ëë€. ë°ìŽí° ìë
ì ìŽí늬ìŒìŽì ë°ë¡ ê·žê²ì ëë€. Ʞ볞 ë°ìŽí° ìëì êŽë šìŽ ììµëë€.
ì±ë. ìŽë ìŽí늬ìŒìŽì ë¹ížë¥Œ ìì°í©ëë€. ê·žê²ì ë°ìë€ìŽì§ ìëë€
ì ì¡íë ë° ì¬ì©íë ë€ìí íë¡í ìœìŽë ì±ëì ëí ì€ë²í€ë륌 ê³ ë €í©ëë€.
ë°ìŽí°. ë°ìŽí° ìë륌 ì€ì íë©Ž ìŽí늬ìŒìŽì Ʞ볞 ë°ìŽí°ì ëìŒí ë°ìŽí° ìëë¡
ì±ë ê²°êµ ë²íŒ ì€ë²íë¡ê° ë°ìí©ëë€.
ëë¬ë€ ì±í¬
ìŽ ì°ìµì ìì ì TCPìì ì¶ì ìœë°±ì ê°ì žì€ë ê²ì ëë€.
íŒì¡ êž°ê°ìŽ ì ë°ìŽížëììµëë€. ë€ì ìœë ì¡°ê°ì íŽë¹
ì¶ì ì±í¬:
ì ì 공극
CwndChange(uint32_t oldCwnd, uint32_t newCwnd)
{
NS_LOG_UNCOND (ì뮬ë ìŽí°::Now ().GetSeconds () << "\t" << newCwnd);
}
ìŽê²ì ìŽì ì¬ë¬ë¶ìê² ë§€ì° ì¹ìí ê²ìŽë¯ë¡ ììží ëŽì©ì ë€ë£šì§ ìê² ìµëë€. ìŽ êž°ë¥
íì¬ ì뮬ë ìŽì ìê°ê³Œ ì 첎 ì°œì ì ê°ì ë§€ìŒ êž°ë¡í©ëë€.
ìê°ìŽ ë³ê²œë©ëë€. 결곌 ì¶ë ¥ì ë¡ëí ì ìë€ê³ ììí ì ììµëë€.
ê·žëíœ íë¡ê·žëš(gnuplot ëë Excel)ì ì ë ¥íê³ ìŠì ë©ì§ ê·žëí륌 볌 ì ììµëë€.
ìê° ê²œê³Œì ë°ë¥ž íŒì¡ ì°œ ëì.
íší·ìŽ ëë¡ëë ìì¹ë¥Œ íìíêž° ìíŽ ìë¡ìŽ ížë ìŽì€ ì±í¬ë¥Œ ì¶ê°íìµëë€. ì€ë¥ë¥Œ ì¶ê°íê² ìµëë€.
ìŽ ìœëìë ì ì©í ì ììŒë¯ë¡ ìŽ ìì ì ìì°íê³ ì¶ììµëë€.
ì ì 공극
RxDrop(Ptr íŒ)
{
NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
}
ìŽ ížë ìŽì€ ì±í¬ë í¬ìžíž í¬ í¬ìžížì "PhyRxDrop" ížë ìŽì€ ìì€ì ì°ê²°ë©ëë€.
NetDevice. ìŽ ì¶ì ìì€ë ë€ížìí¬ì 묌늬ì ê³ìžµìì íší·ìŽ ìì ë ë ì€íë©ëë€.
NetDevice. ìì€ë¥Œ ì¡°êžë§ ì°ííë©Ž
(src/ì ëì /몚ëž/ì ëì -net-device.cc) ìŽ ì¶ì ìŽ
ì¶ì²ë ì°žì¡° PointToPointNetDevice::m_phyRxDropTrace. ê·žëŒ ë€ì¬ë€ë³Žë©Ž
src/ì ëì /몚ëž/ì ëì -net-device.h ìŽ ë©€ë² ë³ìì ëíŽ
ë¡ ì ìžëìŽ ììì ì ì ììµëë€. ì¶ì ìœë°± íší·> >. ìŽê²ì ë¹ì ìê² ë§íŽìŒí©ëë€
ìœë°± ëìì void륌 ë°ííê³ ëšìŒ
íëŒë¯ží°ë í¬ìžíž íší·> (ì°ëŠ¬ê° ì¬ì©íë€ê³ ê°ì 컚í ì€íž ììŽ ì°ê²°) -- ëšì§
ì°ëŠ¬ê° ìì ìë ê².
ë³žêŽ íë¡ê·žëš
ë€ì ìœëë ìŽì ë§€ì° ì¹ìí ê²ì ëë€.
INT
ë©ìž(int argc, char *argv[])
{
NodeContainer ë žë;
ë žë.ë§ë€êž°(2);
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("ì§ì°", StringValue("2ms"));
NetDeviceContainer ì¥ì¹;
ì¥ì¹ = pointToPoint.Install(ë žë);
ìŽë ê² íë©Ž 귞늌곌 ê°ìŽ ë ë žë ì¬ìŽì ì ëì ì±ëìŽ ìë ë ê°ì ë žëê° ìì±ë©ëë€.
íìŒ ìì ë¶ë¶ì 귞늌.
ë€ì ëª ì€ì ìœëë ìë¡ìŽ ê²ì 볎ì¬ì€ëë€. ëìíë ì°ê²°ì ì¶ì íë©Ž
ì벜íê², ì°ëŠ¬ë ëšì¡°ë¡ê² ìŠê°íë íŒì¡ ì°œìŒë¡ ëë ê²ì ëë€. 묎ììŽë ë³Žë €ë©Ž
í¥ë¯žë¡ìŽ íë, ì°ëŠ¬ë ì ë§ë¡ íší·ì ëšìŽëšëŠ¬ë ë§í¬ ì€ë¥ë¥Œ ëì íê³ ì¶ìµëë€.
ì€ë³µ ACK륌 ë°ììí€ê³ íŒì¡ ì°œì ë³Žë€ í¥ë¯žë¡ìŽ ëìì ížëŠ¬ê±°í©ëë€.
NS-3 ì ê³µ ì€ë¥ëªšëž ë¶ìŒ ì ìë 묌걎 ì±ë. ì°ëŠ¬ë
ë¹ìš ì€ë¥ ëªšëž ìŽë ì°ëŠ¬ê° ì€ë¥ë¥Œ ì±ë 죌ìŽì§ ìê°ì ìš.
Ptr em = CreateObject ();
em->SetAttribute ("ErrorRate", DoubleValue (0.00001));
devices.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em));
ìì ìœëë ë¹ìš ì€ë¥ ëªšëž ê°ì²Ž, "ErrorRate"륌 ì€ì í©ëë€. ìì±
ìíë ê°ìŒë¡. ê·žë° ë€ì ìžì€íŽì€íë 결곌륌 ì€ì í©ëë€. ë¹ìš ì€ë¥ ëªšëž ì€ë¥ë¡
point-to-pointìì ì¬ì©íë ëªšëž NetDevice. ìŽê²ì ì°ëŠ¬ìê² ìœê°ì ì¬ì ì¡ì ì ê³µíê³
í롯ì ì¢ ë í¥ë¯žë¡ê² ë§ëëë€.
InternetStackHelper ì€í;
stack.Install(ë žë);
Ipv4AddressHelper 죌ì;
address.SetBase("10.1.1.0", "255.255.255.252");
Ipv4InterfaceContainer ìží°íìŽì€ = address.Assign(ì¥ì¹);
ìì ìœëë ìµìí ê²ì ëë€. ë ë žëì ìží°ë· ì€íì ì€ì¹íê³
ìží°íìŽì€ë¥Œ ìì±íê³ ì§ì ê° ì¥ì¹ì ëí IP 죌ì륌 í ë¹í©ëë€.
TCP륌 ì¬ì©íê³ ììŒë¯ë¡ TCP륌 ìì íë €ë©Ž ëì ë žëì 묎ìžê°ê° íìí©ëë€.
ì°ê²° ë° ë°ìŽí°. ê·žë§íŒ íší·ì±í¬ ìŽí늬ìŒìŽì ìì ìŒë°ì ìŒë¡ ì¬ì©ëë NS-3 ê·žì ëí
목ì .
uint16_t ì±í¬í¬íž = 8080;
죌ì sinkAddress(InetSocketAddress(interfaces.GetAddress(1), sinkPort));
PacketSinkHelper packetSinkHelper("ns3::TcpSocketFactory",
InetSocketAddress(Ipv4Address::GetAny(), ì±í¬í¬íž));
ApplicationContainer sinkApps = packetSinkHelper.Install(nodes.Get(1));
sinkApps.Start(ìŽ(0.));
sinkApps.Stop(ìŽ(20.));
ë€ìì ì ìžíê³ ëªšë ì¹ìíŽìŒ í©ëë€.
PacketSinkHelper packetSinkHelper("ns3::TcpSocketFactory",
InetSocketAddress(Ipv4Address::GetAny(), ì±í¬í¬íž));
ìŽ ìœëë íší· ì±í¬ ëì°ë¯ž íŽëì€ë¥Œ ì¬ì©íì¬ ììŒì ìì±íëë¡ ì§ìí©ëë€.
ns3::TcpSocketFactory. ìŽ íŽëì€ë "ê°ì²Ž í©í 늬"ëŒë ëììž íšíŽì 구íí©ëë€.
ìŽë ê°ì²Žë¥Œ ìì±íë ë° ì¬ì©ëë íŽëì€ë¥Œ ì§ì íêž° ìíŽ ìŒë°ì ìŒë¡ ì¬ì©ëë ë©ì»€ëìŠì ëë€.
ì¶ìì ìž ë°©ë². ì¬êž°ì ê°ì²Ž ì첎륌 ìì±íë ëì ë€ìì ì ê³µí©ëë€.
íší· ì±í¬ ëì°ë¯ž 륌 ì§ì íë 묞ììŽ ì í ID ê°ì²Žë¥Œ ìì±íë ë° ì¬ì©ëë 묞ììŽ
ê·žë° ë€ì í©í 늬ìì ìì±ë ê°ì²Žì ìžì€íŽì€ë¥Œ ìì±íë ë° ì¬ì©í ì ììµëë€.
ëëšžì§ ë§€ê°ë³ìë ìŽí늬ìŒìŽì ìŽë€ 죌ìì í¬ížê° ë°ìžë ì.
ë€ì ë ì€ì ìœëë ììŒì ë§ë€ê³ ì¶ì ìì€ë¥Œ ì°ê²°í©ëë€.
Ptr ns3TcpSocket = ììŒ::CreateSocket(nodes.Get(0),
TcpSocketFactory::GetTypeId ());
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow",
MakeCallback(&CwndChange));
첫 ë²ì§ž 묞ì ì ì ë©€ë² íšì륌 ížì¶í©ëë€. ììŒ::CreateSocket ì ê³µí©ëë€
ë žë ë° ëª ìì ì í ID ììŒì ë§ëë ë° ì¬ì©ëë ê°ì²Ž í©í°ëŠ¬ì ëíŽ. ìŽê²ì
ìœë³Žë€ ìœê° ë®ì ë 벚 íší· ì±í¬ ëì°ë¯ž ìì ížì¶ ë° ëª ìì C++ ì¬ì©
묞ììŽìŽ ì°žì¡°íë ì í ëì ì í. ê·žë ì§ ììŒë©Ž ê°ë ì ìŒë¡ ëìŒí©ëë€.
맡ì ìŒ.
í ë² TcpììŒ ìì±ëìŽ ë žëì ì°ê²°ëë©Ž ì¬ì©í ì ììµëë€.
TraceConnectWithoutContext CongestionWindow ì¶ì ìì€ë¥Œ ì¶ì ì±í¬ì ì°ê²°í©ëë€.
ì°ëŠ¬ê° ìŽí늬ìŒìŽì ê·žëì ì°ëŠ¬ë ê·žê²ì ì·ší ì ììŒ ì°ëŠ¬ë ë°©êž (ëì
êµ¬ì± ìê°) ì뮬ë ìŽì ìê°ì ì¬ì©íììì€. ìŽì ìžì€íŽì€ííŽìŒ í©ëë€.
ìŽí늬ìŒìŽì . ì°ëŠ¬ë ìŽí늬ìŒìŽì so
"ìëìŒë¡" ë§ë€ê³ ì€ì¹íŽìŒ í©ëë€. ìŽê²ì ì€ì ë¡ ë§€ì° ìœìµëë€.
Ptr ì± = CreateObject ();
ì±->ì€ì (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate("1Mbps"));
nodes.Get (0)->AddApplication(ì±);
ì±->ìì(ìŽ(1.));
ì±->ì€ì§(ìŽ(20.));
첫 ë²ì§ž ì€ì 목ì ì íì ë§ìŽì± -- ì°ëŠ¬ì ìŽí늬ìŒìŽì . ë ë²ì§ž ì€ìŽ ìë €ì€ëë€.
ì ì, ìŽí늬ìŒìŽì ë ììŒ ì¬ì©í 죌ì, ì°ê²°í 죌ì, ì ì¡í ë°ìŽí° ì
ê° ì ì¡ ìŽë²€íž, ìì±í ì ì¡ ìŽë²€íž ì ë° ë°ìŽí° ìì± ìë
ê·ž ì¬ê±Žë€ë¡ë¶í°.
ë€ììŒë¡ ìëìŒë¡ ì¶ê°í©ëë€. ë§ìŽì± ìŽí늬ìŒìŽì ìì€ ë žëì ëª ìì ìŒë¡
ì€ííž and ì€ì§ ì ëí ë°©ë² ìŽí늬ìŒìŽì ìì ì ììíê³ ì€ì§í ë륌 ìë €ì€ëë€.
맡ì ìŒ.
ì€ì ë¡ ëŠ¬ìë² ì§ì ê° ì°ê²°ì ìííŽìŒ í©ëë€. NetDevice ëë¡ ìŽë²€íž
ì°ëŠ¬ìê² RxDrop ì§êž ìœë°±íìžì.
devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeCallback (&RxDrop));
ìŽì ì°ëŠ¬ê° ìì ì ëí 찞조륌 ì»ê³ ìë€ë ê²ìŽ ë¶ëª íŽìŒ í©ëë€. ë žë NetDevice
컚í ìŽëìì "PhyRxDrop" ìì±ìŒë¡ ì ìë ì¶ì ìì€ë¥Œ ì°ê²°í©ëë€.
ì¶ì ì±í¬ì íŽë¹ ì¥ì¹ RxDrop.
ë§ì§ë§ìŒë¡ ì뮬ë ìŽí°ì 몚ë ê²ì ì¬ì ìíëë¡ ì§ìí©ëë€. ìŽí늬ìŒìŽì ê·žë¥ ì²ëŠ¬ë¥Œ ì€ì§
ì뮬ë ìŽì ìŒë¡ 20ìŽì ìŽë²€íž.
ì뮬ë ìŽí°::ì€ì§(ìŽ(ìŒ));
ì뮬ë ìŽí°::ì€í();
ì뮬ë ìŽí°::íꎎ();
0ê° ëì;
}
ìŒëš êž°ìµíŽ ì뮬ë ìŽí°::ì€í ížì¶ëê³ êµ¬ì± ìê°ìŽ ì¢ ë£ëê³ ì뮬ë ìŽì
ìê°ìŽ ììë©ëë€. ì°ëŠ¬ê° ë§ë 몚ë ìì ì ìŽí늬ìŒìŽì ê·žëŠ¬ê³ ê·žê²ì ê°ë¥Žì¹ë
ë°ìŽí°ë¥Œ ì°ê²°íê³ ë³ŽëŽë ë°©ë²ì ì€ì ë¡ ìŽ íšì ížì¶ ì€ì ë°ìí©ëë€.
ìë§ì ì뮬ë ìŽí°::ì€í ëìì€ë©Ž ì뮬ë ìŽì ìŽ ìë£ëê³ ë¶íŽì ë€ìŽê°ëë€.
ëšê³. ìŽ ê²œì°, ì뮬ë ìŽí°::íꎎ íŒí¬ì±ìŽì ìžë¶ ì¬íì ì²ëŠ¬íê³ ì°ëŠ¬ë ê·žë¥ ëìê°ëë€
ìë£ í ì±ê³µ ìœë.
ë¬ëŠ¬ë ë€ì¯ë²ì§ž.cc
íìŒì ì ê³µíêž° ë묞ì ë€ì¯ë²ì§ž.cc ë°°í¬íì 구ì¶í 겜ì°(in
ì¬ì©íêž° ë묞ì ëë²ê·ž 몚ë NS_LOG -- ìµì íë ë¹ëê° ìµì íëšì êž°ìµíììì€. NS_LOG) ê·žê²
ë¬ë €ê° ë¹ì ì êž°ë€ëŠ¬ê³ ìì ê²ì ëë€.
$ ./waf --ë€ì¯ ë²ì§ž ì€í
Waf: `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build' ëë í 늬 ì ë ¥ ì€
Waf: `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build' ëë í 늬ìì ëê°êž°
'ë¹ë'ê° ì±ê³µì ìŒë¡ ìë£ëììµëë€(0.684ìŽ).
1 536
1.0093 1072
1.01528 1608
1.02167 2144
...
1.11319 8040
1.12151 8576
1.12983 9112
1.13696ìì RxDrop
...
ížë ìŽì€ìì 몚ë ì¢ ë¥ì ìžì묌ì ì¬ì©íë ê²ì ëšì ì ìŠì ì ì ììµëë€.
í¥ë¯žë¡ìŽ ì 볎 ì 첎ì ìžìë êŽë š ìë WAF ë©ìì§ë¥Œ ì»ìµëë€.
ê·ž RxDrop ë©ìì§ì íšê». ì°ëŠ¬ë 곧 ê·žê²ì ê³ ì¹ ê²ìŽì§ë§ ëë ë¹ì ìŽ ë³Žê³ ì¶ìŽ êž°ë€ëŠŽ ì ìë€ê³ íì
ìŽ ëªšë ìì ì ââ결곌. íŽë¹ ì¶ë ¥ì ë€ì íìŒë¡ 늬ëë ì íê² ìµëë€. cwnd.dat:
$ ./waf -- ë€ì¯ ë²ì§ž ì€í > cwnd.dat 2>&1
ìŽì ì¢ìíë ížì§êž°ìì "cwnd.dat"륌 ížì§íê³ waf ë¹ë ìí륌 ì ê±°íê³ ëë¡í©ëë€.
ì¶ì ë ë°ìŽí°ë§ ëšêž°ê³ ëŒìžì 죌ì ì²ëŠ¬í ìë ììµëë€.
TraceConnectWithoutContext("PhyRxDrop", MakeCallback (&Rxëë¡)); ìì êž° ìíŽ ì€í¬ëŠœížìì
ë°©ìžìŽ ìœê² ìžìë©ëë€.
ìŽì gnuplotì ì€ííê³ (ì€ì¹ë 겜ì°) ìì íìŒì ìì±íëë¡ ì§ìí ì ììµëë€.
ìí:
$ gnuplot
gnuplot> í°ë¯žë png í¬êž° 640,480 ì€ì
gnuplot> ì¶ë ¥ "cwnd.png" ì€ì
gnuplot> ëŒìž í¬ìžížê° ìë 1:2 ì 목 'íŒì¡ ì°œ'ì ì¬ì©íì¬ "cwnd.dat" í롯
gnuplot> ì¢ ë£
ìŽì íŒì¡ ì°œ ë íìŒì ìì ìë ìê°ì ê·žëíê° ììŽìŒ í©ëë€.
"cwnd.png" loading="lazy"ë ë€ì곌 ê°ìµëë€.
[ìŽë¯žì§]
ì¬ì© ì€ê° ìì€ ëì°ë¯ž
ìŽì ì¹ì ìì ì°ëŠ¬ë ì¶ì ìì€ë¥Œ íí¹íê³ í¬ë§ì ìŒë¡ ì»ë ë°©ë²ì 볎ì¬ì£Œììµëë€.
ì뮬ë ìŽì ìì ëìš í¥ë¯žë¡ìŽ ì 볎. ìë§ë ë¹ì ì ì°ëŠ¬ê° ì ííë ê²ì êž°ìµí ê²ì ëë€.
ë€ìì ì¬ì©íì¬ íì€ ì¶ë ¥ì ë¡ê¹ íì€::ì»· ìŽë³Žë€ íšì¬ ìì "묎ëëí ë구"
ì¥. ëí ë¡ê·ž ì¶ë ¥ì ììëë¡ êµ¬ë¬ž ë¶ìíŽìŒ íë 묞ì ì ëíŽìë ìŒìµëë€.
í¥ë¯žë¡ìŽ ì 볎륌 ë¶ëŠ¬í©ëë€. ì°ëŠ¬ê° ë°©êž ë§ì ëì ìŒë€ë ìê°ìŽ ë€ìì ìë ììµëë€.
ì°ëŠ¬ê° íŽê²°íë €ë 몚ë 묞ì 륌 볎ì¬ì£Œë ìì 륌 구ííë ìê°
ì ì, NS-3 ì¶ì ìì€í ! ë¹ì ë§ìŽ ë§ì ê²ì ëë€. íì§ë§ ì°žì죌ìžì. ìì§ ëëì§ ìììµëë€.
ì°ëŠ¬ê° íê³ ì¶ì ê°ì¥ ì€ìí ìŒ ì€ íëë ìœê² í ì ìë ë¥ë ¥ì ê°ë ê²ì ëë€.
ì뮬ë ìŽì ìì ëì€ë ì¶ë ¥ì ìì ì ìŽí©ëë€. ê·žëŠ¬ê³ ì°ëŠ¬ë ëí ê·žê²ë€ì ì ì¥íê³ ì¶ìµëë€
ëì€ì ë€ì ì°žì¡°í ì ìëë¡ ë°ìŽí°ë¥Œ íìŒë¡ ì ì¥í©ëë€. ì€ê° ìì€ì ì¶ì ëì°ë¯žë¥Œ ì¬ì©í ì ììµëë€.
ì ê³µ NS-3 ê·žë¥ ê·žë ê²íê³ ê·žëŠŒì ìì±í©ëë€.
ìì ìì ê°ë°í cwnd change ë° drop ìŽë²€ížë¥Œ ìì±íë ì€í¬ëŠœížë¥Œ ì ê³µí©ëë€.
ë€ì¯ë²ì§ž.cc ë³ëì íìŒë¡ ëì€í¬ì ì ì¥í©ëë€. cwnd ë³ê²œ ì¬íì íìŒë¡ 구ë¶ë ASCII íììŒë¡ ì ì¥ë©ëë€.
íìŒê³Œ ìì ìŽë²€ížë PCAP íìŒì ì ì¥ë©ëë€. ìŽë¥Œ ì€ííêž° ìí ë³ê²œ ì¬íì ë€ì곌 ê°ìµëë€.
꜀ ìì.
ì°ìµ : ì¬ì¯ë²ì§ž.cc
ìì ìŽëíë ë° íìí ë³ê²œ ì¬íì ìŽíŽë³Žê² ìµëë€. ë€ì¯ë²ì§ž.cc ì ì¬ì¯ë²ì§ž.cc. ìŽë€
ìì /íí 늬ìŒ/sixth.cc ì¢ìíë ížì§êž°ìì. ë¹ì ì 첫 ë²ì§ž ë³í륌 볌 ì ììµëë€
CwndChange륌 ê²ìí©ëë€. ì¶ì ì ëí ìëª ìŽ ë³ê²œëììì ì ì ììµëë€.
ì±í¬íê³ ì¶ì ë ì 볎륌
íìŒì ëíëŽë ì€ížëŠŒ.
ì ì 공극
CwndChange(Ptr ì€ížëŠŒ, uint32_t oldCwnd, uint32_t newCwnd)
{
NS_LOG_UNCOND (ì뮬ë ìŽí°::Now ().GetSeconds () << "\t" << newCwnd);
*stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
}
ì ì 공극
RxDrop(Ptr íìŒ, ííì íì€ì íŒ)
{
NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
file->Write(Simulator::Now(), p);
}
"stream" 맀ê°ë³ì륌 ì¶ê°íìµëë€. CwndChange ì¶ì ì±í¬. ìŽê²ì ê°ì²Žì ëë€
C++ ì¶ë ¥ ì€ížëŠŒì 볎ì (ìì íê² ì ì§)í©ëë€. ìŽê²ì ë§€ì° ê°ëšíë€ë ê²ìŽ ë°íì¡ìµëë€.
ê°ì²ŽìŽì§ë§ ì€ížëŠŒì ìëª ë¬žì 륌 êŽëŠ¬íê³ ë¬žì 륌 íŽê²°íë ê°ì²Žì ëë€.
ìë šë C++ ì¬ì©ìê° ì€íí©ëë€. ì ëí ë³µì¬ ìì±ìê° íì€::ostream
ë¹ê³µê°ë¡ íìë©ëë€. ìŽê²ì std::ostream ê° ìë¯žë¡ ì ë°ë¥Žì§ ìê³ í ì ììµëë€.
ì€ížëŠŒì ë³µì¬íŽìŒ íë 몚ë ë©ì»€ëìŠìì ì¬ì©í ì ììµëë€. ì¬êž°ìë NS-3
êž°ìµí ì ìë ìœë°± ìì€í ìë ê° ì믞 첎ê³ë¥Œ ë°ë¥Žë ê°ì²Žê° íìí©ëë€.
ë€ì ì€ì ì¶ê°íìµëë€. CwndChange ížë ìŽì€ ì±í¬
ìŽí:
*stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
êµì²Žíë©Ž ë§€ì° ì¹ìí ìœëê° ë©ëë€. *stream->GetStream () 곌 íì€::ì»·, ê°ìŽ
ìì:
std::cout << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
ìŽê²ì Ptr ì ë§ ê·žë¥ ë€ê³ ë€ëê³
íì€::ì€ížëŠŒ ë¹ì ì ìíŽ ì¬êž°ìì ë€ë¥ž ì¶ë ¥ ì€ížëŠŒì²ëŒ ì¬ì©í ì ììµëë€.
ììë ë¹ì·í ìí©ìŽ ë°ìí©ëë€. RxDrop ì ë¬ëë ê°ì²Žë¥Œ ì ìžíê³ (a
Ptr)ì PCAP íìŒì ëíë ëë€. ì¶ì ì±í¬ì í ì€ì§ëŠ¬ê° ììµëë€.
ëë¡ëë íší·ì íìì€í¬íì ëŽì©ì PCAP íìŒì êž°ë¡í©ëë€.
file->Write(Simulator::Now(), p);
ë¬Œë¡ ë íìŒì ëíëŽë ê°ì²Žê° ììŒë©Ž ìŽëê°ì ë§ë€ìŽìŒ í©ëë€.
ëí ì¶ì ì±í¬ë¡ ì ë¬ëëë¡ í©ëë€. ìì 볎멎 ë³žêŽ êž°ë¥,
ìŽë¥Œ ìííë ì ìœë륌 ì°Ÿì ì ììµëë€.
AsciiTraceHelper asciiTraceHelper;
Ptr stream = asciiTraceHelper.CreateFileStream("sixth.cwnd");
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow", MakeBoundCallback(&CwndChange, ì€ížëŠŒ));
...
PcapHelper pcapHelper;
Ptr file = pcapHelper.CreateFile("sixth.pcap", std::ios::out, PcapHelper::DLT_PPP);
devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeBoundCallback (&RxDrop, íìŒ));
ì ìœë ì€ëí«ì 첫 ë²ì§ž ì¹ì ìì ASCII ì¶ì íìŒì ìì±í©ëë€.
ê·žê²ì êŽëŠ¬íê³ ìœë°±ì ë³íì ì¬ì©íë ê°ì²Ž ìì±
ê°ì²Žê° ì±í¬ë¡ ì ë¬ëëë¡ ì ë ¬íë ìì± êž°ë¥. ASCII ì¶ì
ëì°ë¯žë í ì€íž(ASCII) íìŒì ìœê² ì¬ì©í ì ìëë¡ ë€ìí êž°ë¥ì ì ê³µí©ëë€. ì°ëŠ¬ë
ì¬êž°ìë íìŒ ì€ížëŠŒ ìì± êž°ë¥ì ì¬ì©ì ì€ëª íê² ìµëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë íìŒì€ížëŠŒ ìì± íšìë Ʞ볞ì ìŒë¡ íì€::ì€ížëŠŒ ê°ì²Ž ë°
ì íìŒì ìì±íê±°ë êž°ì¡Ž íìŒì ìëŠ ëë€. ìŽê² íì€::ì€ížëŠŒ ì í¬ì¥ëìŽ ììµëë€
NS-3 ìëª êŽëŠ¬ ë° ë³µì¬ ìì±ì 묞ì íŽê²°ì ìí ê°ì²Žì ëë€.
ê·žë¬ë©Ž ì°ëŠ¬ë ìŽê²ì NS-3 íìŒì ëíëŽë ê°ì²Žë¥Œ ì ë¬í©ëë€. MakeBoundCallback().
ìŽ íšìë ë€ì곌 ê°ìŽ ìœë°±ì ìì±í©ëë€. ë©ìŽí¬ìœë°±()íì§ë§ ì ê°ì ë€ìì "ë°ìžë©"í©ëë€.
ìœë°±. ìŽ ê°ì ìœë°±ìŽ ì€íëêž° ì ì 첫 ë²ì§ž ìžìë¡ ì¶ê°ë©ëë€.
ì ííë€.
Ʞ볞ì ìŒë¡, MakeBoundCallback(&CwndChange, ê°ìž) ì¶ì ìì€ê°
ížì¶íêž° ì ì ê³µì 맀ê°ë³ì ëª©ë¡ ìì ì¶ê° "stream" 맀ê°ë³ì
ìœë°±. ìŽë ê² íë©Ž íìí ìëª ìŽ ë³ê²œë©ëë€. CwndChange íëì ë§ê² ì±í¬ë
ìì íìë "extra" 맀ê°ë³ì í¬íš Ptr íëŠ.
ì ì€ëí« ìœëì ë ë²ì§ž ì¹ì ìì PcapHelper ì í ì
PCAP ì¶ì íìŒì ëíŽ ëìŒí ìì ì ìííìµëë€. AsciiTraceHelper. ì ëŒìž
ìœë
Ptr íìŒ = pcapHelper.CreateFile("sixth.pcap",
"w", PcapHelper::DLT_PPP);
íìŒ ëªšëê° "w"ìž "sixth.pcap"ìŽëŒë PCAP íìŒì ìì±í©ëë€. ìŠ, ì íìŒ
íŽë¹ ìŽëŠì ê°ì§ êž°ì¡Ž íìŒìŽ ë°ê²¬ëë©Ž ì늜ëë€(ëŽì© ìì ). ë§ì§ë§
맀ê°ë³ìë ì PCAP íìŒì "ë°ìŽí° ë§í¬ ì í"ì ëë€. ìŽë€ì PCAPì ëìŒí©ëë€.
ë€ìì ì ìë ëŒìŽëžë¬ëŠ¬ ë°ìŽí° ë§í¬ ì í bpf.h PCAPì ìµìí 겜ì°. ìŽ ê²œì°,
DLT_PPP PCAP íìŒìŽ ê°ëŠ¬í€ë ì ëì¬ê° ë¶ì íší·ì í¬íší ê²ìì ëíë ëë€.
í¬ìžíž í€ë. íší·ìŽ ì§ì ê° ì¥ì¹ìì ì€êž° ë묞ì ìŽê²ì ì¬ì€ì ëë€.
ìŽì ì¬. ë€ë¥ž ìŒë°ì ìž ë°ìŽí° ë§í¬ ì íì csmaì ì í©í DLT_EN10MB(10MB ìŽëë·)ì ëë€.
Wi-Fi ì¥ì¹ì ì í©í ì¥ì¹ ë° DLT_IEEE802_11(IEEE 802.11). ìŽë€ì ì ìë©ëë€
in src/ë€ížìí¬/helper/trace-helper.h ë¹ì ìŽ ëª©ë¡ì 볎ë ë° êŽì¬ìŽ ìë€ë©Ž. ê·žë§íŒ
목ë¡ì í목ì bpf.h ê·žë¬ë PCAP ìì€ë¥Œ íŒíêž° ìíŽ ë³µì í©ëë€.
ìì¡Ž.
A NS-3 PCAP íìŒì ëíëŽë ê°ì²Žë ë€ììì ë°íë©ëë€. CreateFile ë°ìŽëìì ì¬ì©
ìœë°±ì ASCII 겜ì°ì ëìŒí©ëë€.
ì€ìí ì°íë¡: ìŽ ë ê°ì²Žê° 몚ë
ë§€ì° ì ì¬í ë°©ììŒë¡ ì ìžíìµëë€.
Ptr íìŒ ...
Ptr ê°ìž ...
Ʞ볞 ê°ì²Žë ìì í ë€ëŠ ëë€. ì륌 ë€ìŽ, Ptr íë
ì ëí ì€ë§íž í¬ìží° NS-3 ì§ì§íë ìë¹í ë¬Žê±°ìŽ ë¬Œì²Ž
ìì± ë° êµ¬ì± ìì€í ì íµí©ë©ëë€. ê·žë§íŒ Ptr,ì
ë°ë©Žì ë§€ì° ê°ë²ŒìŽ ì°žì¡° 칎ìŽíž ê°ì²Žì ëí ì€ë§íž í¬ìží°ì ëë€.
묌걎. ìŽë€ ê°ì ì íêž° ì ì ì°žì¡°íë ê°ì²Žë¥Œ íìžíŽìŒ í©ëë€.
ê°ì²Žê° ê°ì§ ì ìë "ê¶í"ì ëíŽ.
ì륌 ë€ìŽ src/ë€ížìí¬/utils/pcap-file-wrapper.h ì íµ ë°
ìì ì±ë€,
íŽëì€ PcapFileWrapper : ê³µì© ê°ì²Ž
ê·ž ìì PcapíìŒëíŒ ë Teledyne LeCroy ì€ì€ë¡ì€ìœí ë° LSA-XNUMX ìëŠ¬ìŠ ìë² ëë ì íž ë¶ìêž°ê° NS-3 ìì ëë¶ì ê°ì²Ž. ê·žëŒ ëŽ
src/ë€ížìí¬/몚ëž/output-stream-wrapper.h ê·žëŠ¬ê³ ì£Œëª©,
íŽëì€ OutputStreamWrapper : ê³µê°
SimpleRefCount
ìŽ ê°ì²Žê° NS-3 ê°ì²Žë "ëšìí" C++ ê°ì²Žì ëë€.
칚ì ì°žì¡° 칎ìŽí ì ì§ìí©ëë€.
ì¬êž°ì ìì ì ë¹ì ìŽ ìœêž° ë묞ì Ptr ë°ëì ê·žë° ë»ì ìëë€
ê·ž 묎ìžê° ë Teledyne LeCroy ì€ì€ë¡ì€ìœí ë° LSA-XNUMX ìëŠ¬ìŠ ìë² ëë ì íž ë¶ìêž°ê° NS-3 걞 ì ìë 묌걎 NS-3 ì륌 ë€ìŽ ìì±.
ìŽì ìë¡ ëìê°ê² ìµëë€. ìŽ ìì 륌 ë¹ëíê³ ì€ííë©Ž,
$ ./waf --XNUMXë²ì§ž ì€í
"fifth"륌 ì€ííì ëì ëìŒí ë©ìì§ê° íìëì§ë§ ë ê°ì ì íìŒìŽ
ìµìì ëë í 늬ì ëíë©ëë€. NS-3 ì íµ.
ì¬ì¯ ë²ì§ž.cwnd ì¬ì¯ ë²ì§ž.pcap
"sixth.cwnd"ë ASCII í ì€íž íìŒìŽë¯ë¡ ë€ì곌 ê°ìŽ 볌 ì ììµëë€. ë°©ë² ëë ì¢ìíë íìŒ
ë·°ìŽ.
+ 1 0 536
+ 1.0093 536 1072
+ 1.01528 1072 1608
+ 1.02167 1608 2144
...
+ 9.69256 5149 5204
+ 9.89311 5204 5259
íìì€í¬íê° ìë íìŒë¡ 구ë¶ë íìŒ, ìŽì ì 첎 êž°ê° ë° ì
í롯 íë¡ê·žëšìŒë¡ ì§ì ê°ì žì€êž°ì ì í©í íŒì¡ ì°œ. ìë€
íìŒì êŽë š ìë ìžì, 구묞 ë¶ì ëë ížì§ìŽ íìíì§ ììµëë€.
"sixth.pcap"ì PCAP íìŒìŽë¯ë¡ TCP ë€í.
íìŒ six.pcapìì ìœêž°, ë§í¬ ì í PPP(PPP)
1.136956 IP 10.1.1.1.49153 > 10.1.1.2.8080: íëê·ž [.], ìíì€ 17177:17681, ack 1, win 32768, ìµì [TS val 1133 ecr 1127,eol], êžžìŽ 504
1.403196 IP 10.1.1.1.49153 > 10.1.1.2.8080: íëê·ž [.], ìíì€ 33280:33784, ack 1, win 32768, ìµì [TS val 1399 ecr 1394,eol], êžžìŽ 504
...
7.426220 IP 10.1.1.1.49153 > 10.1.1.2.8080: íëê·ž [.], ìíì€ 785704:786240, ack 1, win 32768, ìµì [TS val 7423 ecr 7421,eol], êžžìŽ 536
9.630693 IP 10.1.1.1.49153 > 10.1.1.2.8080: íëê·ž [.], ìíì€ 882688:883224, ack 1, win 32768, ìµì [TS val 9620 ecr 9618,eol], êžžìŽ 536
ì뮬ë ìŽì ìì ìì ë íší·ìŽ í¬íšë PCAP íìŒìŽ ììµëë€. ìë€
íìŒì ë€ë¥ž íší·ìŽ ì¡Žì¬íë©° ìëª ì ì ì§íêž° ìíŽ ì¡Žì¬íë ë€ë¥ž ê²ì ììµëë€.
ìŽë €ìŽ.
ꞎ ì¬ì ìŽìì§ë§ ìŽì ì°ëŠ¬ë NS-3
ì¶ì ìì€í . TCP 구í ì€ê°ìì ì€ìí ìŽë²€ížë¥Œ ì ê±°íìµëë€.
ê·žëŠ¬ê³ ì¥ì¹ ëëŒìŽë². ì°ëŠ¬ë ìŽë¬í ìŽë²€ížë¥Œ ìŒë°ì ìŒë¡ ìë €ì§ íìŒì ì§ì ì ì¥íìµëë€.
ë구. êŽë šë íµì¬ ìœë륌 ìì íì§ ìê³ ìŽ ìì ì ìííìµëë€.
ëš 18ì€ì ìœë:
ì ì 공극
CwndChange(Ptr ì€ížëŠŒ, uint32_t oldCwnd, uint32_t newCwnd)
{
NS_LOG_UNCOND (ì뮬ë ìŽí°::Now ().GetSeconds () << "\t" << newCwnd);
*stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
}
...
AsciiTraceHelper asciiTraceHelper;
Ptr stream = asciiTraceHelper.CreateFileStream("sixth.cwnd");
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow", MakeBoundCallback(&CwndChange, ì€ížëŠŒ));
...
ì ì 공극
RxDrop(Ptr íìŒ, ííì íì€ì íŒ)
{
NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
file->Write(Simulator::Now(), p);
}
...
PcapHelper pcapHelper;
Ptr íìŒ = pcapHelper.CreateFile("sixth.pcap", "w", PcapHelper::DLT_PPP);
devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeBoundCallback (&RxDrop, íìŒ));
ëë¬ë€ ëì°ë¯ž
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ì¶ì ëì°ë¯žë ë€ìí êµ¬ì± ë° ì íì ìí íë¶í í겜ì ì ê³µí©ëë€.
ìŽë²€ížë¥Œ ì¶ì íê³ íìŒì ìëë€. ìŽì ì¹ì ììë 죌ë¡
BuildingTopologies, ì°ëŠ¬ë ì¬ë¬ ì¢ ë¥ì ì¶ì ëì°ë¯ž ë©ìëê° ì€ê³ë ê²ì 볎ììµëë€.
ë€ë¥ž (ì¥ì¹) ëì°ë¯ž ëŽë¶ìì ì¬ì©íêž° ìíŽ.
ìë§ë ë€ì곌 ê°ì ë³í ì€ ìŒë¶ë¥Œ 볞 ê²ì êž°ìµí ê²ì ëë€.
pointToPoint.EnablePcapAll("ìŽ");
pointToPoint.EnablePcap("ìŽ", p2pNodes.Get(0)->GetId(), 0);
csma.EnablePcap("ì 0", csmaDevices.Get(XNUMX), true);
pointToPoint.EnableAsciiAll(ascii.CreateFileStream("myfirst.tr"));
ê·žë¬ë ë¶ëª íì§ ìì ê²ì 몚ë ë¶ìŒì ìŒêŽë 몚ëžìŽ ìë€ë ê²ì ëë€.
ìì€í ìì ì°Ÿì ì¶ì êŽë š ë©ìëì ëë€. ìŽì ì ì ìê°ì ëŽìŽ ìŽíŽë³Žê² ìµëë€.
"í° ê·žëŠŒ"ìì.
íì¬ ì¶ì ëì°ë¯žì ë ê°ì§ Ʞ볞 ì¬ì© ì¬ë¡ê° ììµëë€. NS-3: ì¥ì¹ ëì°ë¯ž
ë° íë¡í ìœ ëì°ë¯ž. ì¥ì¹ í¬íŒë ì¶ì ì ì§ì íë 묞ì 륌 ìŽíŽëŽ ëë€.
(ë žë, ì¥ì¹) ìì íµíŽ íì±íëìŽìŒ í©ëë€. ì륌 ë€ìŽ ë€ìì ì§ì í ì ììµëë€.
PCAP ì¶ì ì í¹ì ë žëì í¹ì ì¥ì¹ìì íì±íëìŽìŒ í©ëë€. ìŽê²
ìì ë€ì곌 ê°ìµëë€ NS-3 ì¥ì¹ ê°ë ëªšëž ë° ì¥ì¹ì ê°ë 몚ëž
ë€ìí ì¥ì¹ ëì°ë¯ž. ìŽì ë°ëŒ ìì°ì€ëœê² ìì±ëë íìŒì
- - ëª ëª ê·ì¹.
íë¡í ìœ ëì°ë¯žë ë€ìì íµíŽ íì±ííŽìŒ íë ì¶ì ì ì§ì íë 묞ì 륌 ìŽíŽëŽ ëë€.
íë¡í ìœê³Œ ìží°íìŽì€ ì. ìŽë ë€ì곌 ê°ìµëë€. NS-3 íë¡í ìœ ì€í ê°ë
ëªšëž ë° ìží°ë· ì€í í¬íŒì ê°ë ì 몚ëž. ìì°ì€ëœê² ê·ž íì
íìŒì - - ëª ëª ê·ì¹.
ë°ëŒì ì¶ì ëì°ë¯žë ìì°ì€ëœê² XNUMXì°šì ë¶ë¥ 첎ê³ì ìíê² ë©ëë€. ìë€
ë€ ê°ì§ íŽëì€ê° 몚ë ëìŒíê² íëíë ê²ì ë°©íŽíë 믞ë¬í ì ë€ìŽ ìì§ë§ ì°ëŠ¬ë ê·žë ê² íêž° ìíŽ ë žë ¥í©ëë€.
ê°ë¥í í 몚ë ì ì¬íê² ìëíëë¡ íììì€. ê·žëŠ¬ê³ ê°ë¥í ëë§ë€ ë€ì곌 ê°ì ì ì¬ì ìŽ ììµëë€.
몚ë íŽëì€ì 몚ë ë©ìë.
ââââââââââââââââââ¬âââââââ¬ââââââââ
â â PCAP â ASCII â
ââââââââââââââââââŽâââââââŽââââââââ
âì¥ì¹ ëì°ë¯ž â â â
ââââââââââââââââââŒâââââââŒââââââââ€
âíë¡í ìœ ëì°ë¯ž â â â
ââââââââââââââââââŽâââââââŽââââââââ
ëŒë ì ê·Œ ë°©ìì ì¬ì©í©ëë€. ë¯¹ì€ ìž ëì°ë¯ž íŽëì€ì ì¶ì êž°ë¥ì ì¶ê°í©ëë€. ã
ë¯¹ì€ ìž íì íŽëì€ì ìíŽ ììë ë êž°ë¥ì ì ê³µíë íŽëì€ì ëë€.
mixinìì ììíë ê²ì ì 묞íì í ííë¡ ê°ì£Œëì§ ìì§ë§ ì€ì ë¡ë
êž°ë¥ì ìì§í©ëë€.
ìŽ ë€ ê°ì§ ì¬ë¡ 몚ëì ê°ê°ì ì¬ë¡ë¥Œ ê°ëší ìŽíŽë³Žê² ìµëë€. ë¯¹ì€ ìž.
ì¥ì¹ ëì°ë¯ž
PCAP
ìŽë¬í ëì°ë¯žì 목íë ìŒêŽë PCAP ì¶ì êž°ë¥ì
NS-3 ì¥ì¹. ì°ëŠ¬ë ë€ìí ì¢ ë¥ì PCAP ì¶ì ìŽ ëªšë ëìŒíê² ìëíꞰ륌 ìí©ëë€.
몚ë ì¥ì¹ìŽë¯ë¡ ìŽë¬í í¬íŒì ë©ìëë ì¥ì¹ í¬íŒì ìíŽ ììë©ëë€. 구겜íë€
at src/ë€ížìí¬/helper/trace-helper.h 볎멎ì í ë¡ ì ë°ëŒê°ê³ ì¶ë€ë©Ž
ì€ì ìœë.
íŽëì€ PcapHelperForDevice íë ë¯¹ì€ ìž ì¬ì©íêž° ìí ëì ìì€ì êž°ë¥ì ì ê³µí©ëë€.
PCAP ì¶ì NS-3 ì¥ì¹. 몚ë ì¥ì¹ë ëšìŒ ê°ì ë©ìë륌 구ííŽìŒ í©ëë€.
ìŽ íŽëì€ìì ììë©ëë€.
ê°ì ë¬Žíš EnablePcapInternal (std::string ì ëì¬, Ptr nd, ë¶ìž 묎찚ë³, ë¶ìž ëª ìì íìŒ ìŽëŠ) = 0;
ìŽ ë°©ë²ì ìê·žëì²ë íì¬ ìí©ì ëí ì¥ì¹ ì€ì¬ì êŽì ì ë°ìí©ëë€.
ìì€. íŽëì€ìì ììë 몚ë ê³µê° ë©ìë PcapUserHelperForDevice ë¡ ì€ìŽë€
ìŽ ëšìŒ ì¥ì¹ ì¢ ì 구í ë°©ë²ì ížì¶í©ëë€. ì륌 ë€ìŽ, ê°ì¥ ë®ì ìì€
PCAP ë°©ë²,
void EnablePcap(std::string ì ëì¬, Ptr nd, bool promiscuous = false, boolexplicitFilename = false);
ë€ìì ì¥ì¹ 구íì ížì¶í©ëë€. PcapëŽë¶ íì±í 곧ì¥. êž°í 몚ë ê³µì© PCAP
ì¶ì ë°©ë²ì ìŽ êµ¬íì êž°ë°ìŒë¡ 구ì¶ëìŽ ì¶ê° ì¬ì©ì ìì€ì ì ê³µí©ëë€.
êž°ë¥. ìŽê²ìŽ ì¬ì©ììê² ì믞íë ë°ë ìì€í ì 몚ë ì¥ì¹ ëì°ë¯žê°
몚ë PCAP ì¶ì ë°©ë²ì ì¬ì©í ì ììµëë€. ìŽë¬í ë°©ë²ì 몚ë ëìŒí
êž°êž°ê° êµ¬ííë ê²œì° ì¬ë¬ êž°êž°ì ê±žì³ PcapëŽë¶ íì±í ë°ë¥Žê².
íë ìì
void EnablePcap(std::string ì ëì¬, Ptr nd, bool promiscuous = false, boolexplicitFilename = false);
void EnablePcap(std::string ì ëì¬, std::string ndName, bool promiscuous = false, boollicitFilename = false);
ë¬Žíš EnablePcap(std::묞ììŽ ì ëì¬, NetDeviceContainer d, ë¶ìž ë¬Žì°šë³ = ê±°ì§);
ë¬Žíš EnablePcap(std::string ì ëì¬, NodeContainer n, bool promiscuous = false);
ë¬Žíš EnablePcap(std::묞ììŽ ì ëì¬, uint32_t nodeid, uint32_t deviceid, bool promiscuous = false);
void EnablePcapAll (std::string ì ëì¬, bool promiscuous = false);
ìì íìë ê° ë©ìëìë ë€ì곌 ê°ì Ʞ볞 맀ê°ë³ìê° ììµëë€. ëì¡í ê·ž
Ʞ볞ê°ì ê·žëŠë. ìŽ ë§€ê°ë³ìë ì¶ì ìŽ ìì§ëì§ ìììŒ íšì ëíë ëë€.
ë¬Žì°šë³ ëªšë. ì¥ì¹ìì 볞 몚ë ížëíœì ì¶ì ì í¬íšìí€ë €ë 겜ì°
(ê·žëŠ¬ê³ ì¥ì¹ê° ë¬Žì°šë³ ëªšë륌 ì§ìíë 겜ì°) ë€ì ì€ íëì ì€ì 맀ê°ë³ì륌 ì¶ê°íêž°ë§ íë©Ž ë©ëë€.
ìì ì í. ì륌 ë€ìŽ,
Ptr ì°š;
...
helper.EnablePcap("ì ëì¬", nd, true);
ë¬Žì°šë³ ëªšë 캡ì²ë¥Œ íì±íí©ëë€. NetDevice ì ìíŽ ì§ì ë nd.
ì²ì ë ë©ìëìë ë€ì곌 ê°ì Ʞ볞 ë§€ê° ë³ìë í¬íšë©ëë€. ëª ìì íìŒ ìŽëŠ ê·žëŽê±°ìŒ.
ìëìì ë Œìë©ëë€.
íŽëì€ì ëí API 묞ì륌 ì ë íë ê²ìŽ ì¢ìµëë€. PcapHelperForDevice ì°Ÿë ë°©ë²
ìŽë¬í ë°©ë²ì ìžë¶ ì¬í; ê·žë¬ë ììœíìë©Ž ...
· ë€ìì ì ê³µíì¬ í¹ì ë žë/ë€íž-ì¥ì¹ ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
í¬ìžíž ì Pcap íì±í ë°©ë². ê·žë§íŒ Ptr net ì¥ì¹ ìŽíë¡ ììì ì ëë€.
ì íí íëì ë žëì ìíŽìŒ í©ëë€. ì륌 ë€ìŽ,
Ptr ì°š;
...
helper.EnablePcap("ì ëì¬", nd);
· ë€ìì ì ê³µíì¬ í¹ì ë žë/ë€íž-ì¥ì¹ ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
íì€::묞ììŽ ê°ì²Ž ìŽëŠ ìë¹ì€ 묞ììŽì Pcap íì±í ë°©ë². ê·žë§íŒ
í¬ìžíž ìŽëŠ 묞ììŽìì ì¡°íë©ëë€. ë€ì ë§íì§ë§, ìŽíë¡ ììì ìŽë€
ëª ëª ë ë€íž ì¥ì¹ë ì íí íëì ë žëì ìíŽìŒ í©ëë€. ì륌 ë€ìŽ,
ìŽëŠ::ì¶ê°("ìë²" ...);
ìŽëŠ::ì¶ê°("ìë²/eth0" ...);
...
helper.EnablePcap ("ì ëì¬", "ìë²/ath0");
· ë€ìì ì ê³µíì¬ ë žë/ë€íž-ì¥ì¹ ì 몚ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
NetDevice컚í ìŽë. ê°ê° NetDevice 컚í ìŽëìì ì íìŽ íìžë©ëë€. ê°ê°
ì ì í ì íì ì¥ì¹(ì¥ì¹ ëì°ë¯žê° êŽëŠ¬íë ê²ê³Œ ëìŒí ì í), ì¶ì ì
íì±íëììµëë€. ë€ì ë§íì§ë§, ë°ê²¬ë ë· ì¥ì¹ê° ë€ìì ìíŽìŒ íë¯ë¡ ììì ì ëë€.
ì íí íëì ë žë. ì륌 ë€ìŽ,
NetDeviceContainer d = ...;
...
helper.EnablePcap("ì ëì¬", d);
· ë€ìì ì ê³µíì¬ ë žë/ë€íž-ì¥ì¹ ì 몚ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
ë žë컚í ìŽë. ê° ë žëì ëíŽ ë žë컚í ìŽë ë¶ìŽììŽ NetDevices ë°ë³µë©ëë€.
ê°ê° NetDevice 컚í ìŽëì ê° ë žëì ì°ê²°ë ê²œì° íŽë¹ ì¥ì¹ì ì íì ë€ì곌 ê°ìµëë€.
íìž. ì ì í ì íì ê° ì¥ì¹ì ëíŽ(ì¥ì¹ìì êŽëŠ¬íë ê²ê³Œ ëìŒí ì í
ëì°ë¯ž), ì¶ì ìŽ íì±íë©ëë€.
NodeContainern;
...
helper.EnablePcap("ì ëì¬", n);
· ë žë ID ë° ì¥ì¹ ID륌 êž°ë°ìŒë¡ PCAP ì¶ì ì íì±íí ì ììµëë€.
ëª ë°±í Ptr. ìì€í ì ê° ë žëìë ì ì ë žë IDì ì°ê²°ë ê° ì¥ì¹ê° ììµëë€.
ë žëì ì ì ì¥ì¹ IDê° ììµëë€.
helper.EnablePcap("ì ëì¬", 21, 1);
· ë§ì§ë§ìŒë¡ ìì€í ì 몚ë ì¥ì¹ì ëíŽ ëìŒí ì íì PCAP ì¶ì ì íì±íí ì ììµëë€.
ì¥ì¹ ëì°ë¯žìì êŽëŠ¬íë ê²ìŒë¡.
helper.EnablePcapAll("ì ëì¬");
íìŒëª
ìì ë°©ë² ì€ëª ì ëŽí¬ë ê²ì ë€ì곌 ê°ì ë°©ë²ìŒë¡ ìì í íìŒ ìŽëŠì 구ì±íë ê²ì ëë€.
구í ë°©ë². ê·ì¹ì ë°ëŒ PCAP ì¶ì ì NS-3 ìì€í ì ë€ì곌 ê°ì ííì ëë€.
- ììŽë>- ììŽë>.pcap
ììì ìžêžíë¯ìŽ ìì€í ì 몚ë ë žëìë ìì€í í ë¹ ë žë IDê° ììµëë€. 귞늬ê³
몚ë ì¥ì¹ìë ë žëì êŽë šë ìží°íìŽì€ ìžë±ì€(ì¥ì¹ IDëŒê³ ë íš)ê° ììµëë€.
Ʞ볞ì ìŒë¡ 첫 ë²ì§žìì ì¶ì ì íì±íí ê²°ê³Œë¡ ìì±ë PCAP ì¶ì íìŒì
ì ëì¬ "ì ëì¬"륌 ì¬ì©íë ë žë 21ì ì¥ì¹ë ì ëì¬-21-1.pcap.
íì ì¬ì©í ì ììµëë€ NS-3 ìŽê²ì ë ëª ííê² íêž° ìíŽ ê°ì²Ž ìŽëŠ ìë¹ì€. ì륌 ë€ìŽ,
ê°ì²Ž ìŽëŠ ìë¹ì€ë¥Œ ì¬ì©íì¬ ë žë 21ì "ìë²"ëŒë ìŽëŠì í ë¹íë©Ž 결곌 PCAPê° ìì±ë©ëë€.
ì¶ì íìŒ ìŽëŠì ìëìŒë¡ ë€ì곌 ê°ìŽ ë©ëë€. ì ëì¬-ìë²-1.pcap ëí
ì¥ì¹ì "eth0"ìŽëŒë ìŽëŠì ì§ì íë©Ž PCAP íìŒ ìŽëŠìŽ ìëìŒë¡ ì íëìŽ
ëŒë ì ëì¬-ìë²-eth0.pcap.
ë§ì§ë§ìŒë¡ ìì íìë ë ê°ì§ ë°©ë²,
void EnablePcap(std::string ì ëì¬, Ptr nd, bool promiscuous = false, boolexplicitFilename = false);
void EnablePcap(std::string ì ëì¬, std::string ndName, bool promiscuous = false, boollicitFilename = false);
ëŒë Ʞ볞 맀ê°ë³ìê° ììµëë€. ëª ìì íìŒ ìŽëŠ. trueë¡ ì€ì íë©Ž ìŽ ë§€ê°ë³ìë
ìë íìŒ ìŽëŠ ìì± ë©ì»€ëìŠì ë¹íì±ííê³ ëª ìì ìž íìŒ ìŽëŠì ìì±í ì ììµëë€.
íìŒ ìŽëŠ. ìŽ ìµì ì 컎íší°ìì PCAP ì¶ì ì íì±ííë ë°©ë²ììë§ ì¬ì©í ì ììµëë€.
ëšìŒ ì¥ì¹.
ì륌 ë€ìŽ ì¥ì¹ ëì°ë¯žê° íëì ëì¡í PCAP륌 ìì±íëë¡ ì€ë¹íë €ë©Ž
í¹ì ìŽëŠì ìº¡ì² íìŒ ëŽ-pcap-file.pcap 죌ìŽì§ ì¥ì¹ìì ë€ìì ìíí ì ììµëë€.
Ptr ì°š;
...
helper.EnablePcap("my-pcap-file.pcap", nd, true, true);
ì²ììŒë¡ ì°žë 맀ê°ë³ìë ë¬Žì°šë³ ëªšë ì¶ì ì íì±ííê³ ë ë²ì§ž 맀ê°ë³ìë ëì°ë¯žìê² ìë €ì€ëë€.
íŽìíë€ ì ëì¬ ë§€ê°ë³ì륌 ìì í íìŒ ìŽëŠìŒë¡ ì¬ì©í©ëë€.
ASCII
ASCII ì¶ì ëì°ë¯žì ëì ë¯¹ì€ ìž PCAP ë²ì 곌 ì€ì§ì ìŒë¡ ì ì¬í©ëë€.
ìŽíŽ src/ë€ížìí¬/helper/trace-helper.h í ë¡ ì íë¡ì°íê³ ì¶ë€ë©Ž
ì€ì ìœë륌 볎멎ì.
íŽëì€ AsciiTraceHelperForDevice ASCII ì¬ì©ì ìí ëì ìì€ì êž°ë¥ ì¶ê°
ì¥ì¹ ëì°ë¯ž íŽëì€ë¥Œ ì¶ì í©ëë€. PCAPì 겜ì°ì ë§ì°¬ê°ì§ë¡ 몚ë ì¥ì¹ë ë€ìì 구ííŽìŒ í©ëë€.
ASCII ì¶ì ìì ììë ëšìŒ ê°ì ë©ìë ë¯¹ì€ ìž.
ê°ì ë¬Žíš EnableAsciiInternal(Ptr ê°ìž,
std::묞ììŽ ì ëì¬,
Ptr ì°š,
ë¶ìž ëª ìì íìŒ ìŽëŠ) = 0;
ìŽ ë°©ë²ì ìê·žëì²ë íì¬ ìí©ì ëí ì¥ì¹ ì€ì¬ì êŽì ì ë°ìí©ëë€.
ìì€; ëí ëì°ë¯žê° ê³µì ì¶ë ¥ ì€ížëŠŒì ìž ì ìë€ë ì¬ì€ë ììµëë€. 몚ë
íŽëì€ìì ììë ê³µì© ASCII ì¶ì êŽë š ë©ìë AsciiTraceHelperForDevice
ìŽ ëšìŒ ì¥ì¹ ì¢ ì 구í ë°©ë²ì ížì¶íë ê²ìŒë¡ ì€ì ëë€. ì륌 ë€ìŽ,
ìµíì ìì€ì ASCII ì¶ì ë°©ë²,
ë¬Žíš EnableAscii(std::string ì ëì¬, Ptr nd, bool ëª ìì íìŒ ìŽëŠ = false);
ë¬Žíš EnableAscii(Ptr ì€ížëŠŒ, PTR ì°š);
ë€ìì ì¥ì¹ 구íì ížì¶í©ëë€. AsciiëŽë¶ íì±í ì§ì ,
ì íší ì ëì¬ ëë ì€ížëŠŒ. ë€ë¥ž 몚ë ê³µì© ASCII ì¶ì ë°©ë²ì ë€ìì êž°ë°ìŒë¡ í©ëë€.
ì¶ê° ì¬ì©ì ìì€ êž°ë¥ì ì ê³µíë ì ìì€ êž°ë¥. ìŽê²ìŽ ì믞íë ë°
ì¬ì©ìë ìì€í ì 몚ë ì¥ì¹ ëì°ë¯žê° 몚ë ASCII ì¶ì ë°©ë²ì ê°ê² ëë€ë ê²ì ëë€.
ì¬ì© ê°ë¥; ìŽë¬í ë°©ë²ì ì¥ì¹ê° ë€ì곌 ê°ì ê²œì° ëªšë ì¥ì¹ìì ëìŒí ë°©ììŒë¡ ìëí©ëë€.
구í EnablAsciiëŽë¶ ë°ë¥Žê².
íë ìì
ë¬Žíš EnableAscii(std::string ì ëì¬, Ptr nd, bool ëª ìì íìŒ ìŽëŠ = false);
ë¬Žíš EnableAscii(Ptr ì€ížëŠŒ, PTR ì°š);
ë¬Žíš EnableAscii(std::묞ììŽ ì ëì¬, std::묞ììŽ ndName, ë¶ìž ëª ìì íìŒ ìŽëŠ = false);
ë¬Žíš EnableAscii(Ptr ì€ížëŠŒ, std::string ndName);
ë¬Žíš EnableAscii(std::묞ììŽ ì ëì¬, NetDeviceContainer d);
ë¬Žíš EnableAscii(Ptr ì€ížëŠŒ, NetDeviceContainer d);
void EnableAscii(std::string ì ëì¬, NodeContainer n);
ë¬Žíš EnableAscii(Ptr ì€ížëŠŒ, NodeContainer n);
ë¬Žíš EnableAsciiAll(std::묞ììŽ ì ëì¬);
ë¬Žíš EnableAsciiAll(Ptr ê°ìž);
ë¬Žíš EnableAscii(std::string ì ëì¬, uint32_t nodeid, uint32_t deviceid, bool ëª ìì íìŒ ìŽëŠ);
ë¬Žíš EnableAscii(Ptr ì€ížëŠŒ, uint32_t nodeid, uint32_t deviceid);
íŽëì€ì ëí API 묞ì륌 ì ë íë ê²ìŽ ì¢ìµëë€. AsciiTraceHelperForDevice ì
ìŽë¬í ë°©ë²ì ìžë¶ ì¬íì ì°ŸìŒììì€. ê·žë¬ë ììœíìë©Ž ...
· ASCII ì¶ì ì ì¬ì©í ì ìë ë°©ë²ìŽ PCAPë³Žë€ ë ë°° ë ë§ìµëë€.
ížë ìŽì±. ìŽê²ì PCAP ì€íìŒ ëªšëž ìžìë ê°ê°ì ì¶ì ìŽ ìêž° ë묞ì ëë€.
ê³ ì í ë žë/ì¥ì¹ ììŽ ê³ ì í íìŒì êž°ë¡ëë¯ë¡ ì¶ì íë 몚ëžì ì§ìí©ëë€.
ë§ì ë žë/ì¥ì¹ ìì ëí ì ë³Žê° ê³µíµ íìŒì êž°ë¡ë©ëë€. ìŽë
- - íìŒ ìŽëŠ ìì± ë©ì»€ëìŠì ë€ì ë©ì»€ëìŠìŒë¡ ë첎ë©ëë€.
ê³µíµ íìŒì ì°žì¡°íììì€. 몚ë API ë©ìë륌 íì©íêž° ìíŽ API ë©ìë ìê° ë ë°°ë¡ ëìŽë¬ìµëë€.
ì¡°í©.
· PCAP ì¶ì ììì ë§ì°¬ê°ì§ë¡ í¹ì (ë žë, net-device)ìì ASCII ì¶ì ì íì±íí ì ììµëë€.
ì ê³µíì¬ ì í¬ìžíž ì Ascii íì±í ë°©ë². ê·žë§íŒ Ptr ììì ìŽë€
ë€íž ì¥ì¹ë ì íí íëì ë žëì ìíŽìŒ íêž° ë묞ì ëë€. ì륌 ë€ìŽ,
Ptr ì°š;
...
helper.EnableAscii("ì ëì¬", nd);
· ì²ì ë€ ê°ì§ ë°©ë²ìë ë€ì곌 ê°ì Ʞ볞 맀ê°ë³ìë í¬íšë©ëë€. ëª ìì íìŒ ìŽëŠ ê·ž
PCAPì ê²œì° ë±ê° 맀ê°ë³ìì ì ì¬íê² ìëí©ëë€.
ìŽ ê²œì° ASCII ì¶ì íìŒì ì¶ì 컚í ì€ížê° êž°ë¡ëì§ ììµëë€.
ë¶íìí. ìì€í ì ë€ì곌 ëìŒí ê·ì¹ì ì¬ì©íì¬ ìì±í íìŒ ìŽëŠì ì íí©ëë€.
íìŒì ì 믞ì¬ê° ìë€ë ì ì ì ìžíê³ PCAP ì¹ì ì ì€ëª ëìŽ ììµëë€. .tr ëì
.pcap.
· ë ìŽìì ë€íž ì¥ì¹ìì ASCII ì¶ì ì íì±ííê³ ëªšë ì¶ì ì ì ì¡íë €ë 겜ì°
ëšìŒ íìŒì ëíŽ ê°ì²Žë¥Œ ì¬ì©íì¬ ëšìŒ íìŒì ì°žì¡°íë ë°©ììŒë¡ë ê·žë ê² í ì ììµëë€.
ì°ëŠ¬ë ìŽë¯ž ìì "cwnd" ìì ìì ìŽê²ì 볎ììµëë€:
Ptr nd1;
Ptr nd2;
...
Ptr stream = asciiTraceHelper.CreateFileStream("trace-file-name.tr");
...
helper.EnableAscii(ì€ížëŠŒ, nd1);
helper.EnableAscii(ì€ížëŠŒ, nd2);
ìŽ ê²œì° ì¶ì 컚í ì€íž are íìíë¯ë¡ ASCII ì¶ì íìŒì êž°ë¡ëš
ë ì¥ì¹ìì ì¶ì ì ëª ííê² í©ëë€. ì¬ì©ìê° ìì í
íìŒ ìŽëŠì ì§ì íë©Ž 묞ììŽì ë€ììŽ í¬íšëìŽìŒ í©ëë€. ,tr ìŒêŽì±ì ìí ì 믞ì¬.
· ë€ìì ì ê³µíì¬ í¹ì (ë žë, ë·-ì¥ì¹) ììì ASCII ì¶ì ì íì±íí ì ììµëë€.
íì€::묞ììŽ ê°ì²Ž ìŽëŠ ìë¹ì€ 묞ììŽì Pcap íì±í ë°©ë². ê·žë§íŒ
í¬ìžíž ìŽëŠ 묞ììŽìì ì¡°íë©ëë€. ë€ì ë§íì§ë§, ìŽíë¡ ììì ìŽë€
ëª ëª ë ë€íž ì¥ì¹ë ì íí íëì ë žëì ìíŽìŒ í©ëë€. ì륌 ë€ìŽ,
ìŽëŠ::ì¶ê°("íŽëŒìŽìžíž" ...);
ìŽëŠ::ì¶ê°("íŽëŒìŽìžíž/eth0" ...);
ìŽëŠ::ì¶ê°("ìë²" ...);
ìŽëŠ::ì¶ê°("ìë²/eth0" ...);
...
helper.EnableAscii("ì ëì¬", "íŽëŒìŽìžíž/eth0");
helper.EnableAscii("ì ëì¬", "ìë²/eth0");
ìŽë ê² íë©Ž ``prefix-client-eth0.tr``ìŽëŒë ë ê°ì íìŒìŽ ìì±ëê³
``prefix-server-eth0.tr``ì ìë ê° ì¥ì¹ì ëí ì¶ì
ê°ê°ì ì¶ì íìŒ. 몚ë ``EnableAscii`` êž°ë¥ìŽ
ì€ížëŠŒ ëíŒë¥Œ ì¬ì©íëë¡ ì€ë²ë¡ëë ê²œì° íŽë¹ íìì ë€ì곌 ê°ìŽ ì¬ì©í ì ììµëë€.
ì::
ìŽëŠ::ì¶ê°("íŽëŒìŽìžíž" ...);
ìŽëŠ::ì¶ê°("íŽëŒìŽìžíž/eth0" ...);
ìŽëŠ::ì¶ê°("ìë²" ...);
ìŽëŠ::ì¶ê°("ìë²/eth0" ...);
...
Ptr stream = asciiTraceHelper.CreateFileStream("trace-file-name.tr");
...
helper.EnableAscii(ì€ížëŠŒ, "íŽëŒìŽìžíž/eth0");
helper.EnableAscii(ì€ížëŠŒ, "ìë²/eth0");
ìŽë ê² íë©Ž ë€ì곌 ê°ì ëšìŒ ì¶ì íìŒìŽ ìì±ë©ëë€. ì¶ì íìŒ ìŽëŠ.tr 몚ë í¬íšíë
ë ì¥ì¹ì ëí ì¶ì ìŽë²€íž. ìŽë²€ížë ì¶ì 컚í ì€ížì ìíŽ ëª ííŽì§ëë€.
묞ììŽ.
· ë€ìì ì ê³µíì¬ (ë žë, ë·-ì¥ì¹) ì 몚ììì ASCII ì¶ì ì íì±íí ì ììµëë€.
NetDevice컚í ìŽë. ê°ê° NetDevice 컚í ìŽëìì ì íìŽ íìžë©ëë€. ê°ê°
ì ì í ì íì ì¥ì¹(ì¥ì¹ ëì°ë¯žê° êŽëŠ¬íë ê²ê³Œ ëìŒí ì í), ì¶ì ì
íì±íëììµëë€. ë€ì ë§íì§ë§, ë°ê²¬ë ë· ì¥ì¹ê° ë€ìì ìíŽìŒ íë¯ë¡ ììì ì ëë€.
ì íí íëì ë žë. ì륌 ë€ìŽ,
NetDeviceContainer d = ...;
...
helper.EnableAscii("ì ëì¬", d);
ìŽë¡ ìžíŽ ë§ì ASCII ì¶ì íìŒìŽ ìì±ë©ëë€.
ê°ê°ì`` - - .tr``
íìœ.
몚ë ì¶ì ì ëšìŒ íìŒë¡ ê²°í©íë ê²ì ìì ì ì ì¬íê² ìíë©ëë€.
ì :
NetDeviceContainer d = ...;
...
Ptr stream = asciiTraceHelper.CreateFileStream("trace-file-name.tr");
...
helper.EnableAscii(ì€ížëŠŒ, d);
· ë€ìì ì ê³µíì¬ (ë žë, ë·-ì¥ì¹) ì 몚ììì ASCII ì¶ì ì íì±íí ì ììµëë€.
ë žë컚í ìŽë. ê° ë žëì ëíŽ ë žë컚í ìŽë ë¶ìŽììŽ NetDevices ë°ë³µë©ëë€.
ê°ê° NetDevice 컚í ìŽëì ê° ë žëì ì°ê²°ë ê²œì° íŽë¹ ì¥ì¹ì ì íì ë€ì곌 ê°ìµëë€.
íìž. ì ì í ì íì ê° ì¥ì¹ì ëíŽ(ì¥ì¹ìì êŽëŠ¬íë ê²ê³Œ ëìŒí ì í
ëì°ë¯ž), ì¶ì ìŽ íì±íë©ëë€.
NodeContainern;
...
helper.EnableAscii ("ì ëì¬", n);
ìŽë¡ ìžíŽ ì¬ë¬ ASCII ì¶ì íìŒìŽ ìì±ëë©° ê° íìŒì ë€ì곌 ê°ìµëë€.
ì ì, - ììŽë>- ììŽë>.tr íìœ. 몚ë íì ì íëë¡ ê²°í©
ëšìŒ íìŒì ìì ìì ì ì¬íê² ìíë©ëë€.
· ë žë ID ë° ì¥ì¹ ID륌 êž°ë°ìŒë¡ PCAP ì¶ì ì íì±íí ì ììµëë€.
ëª ë°±í Ptr. ìì€í ì ê° ë žëìë ì ì ë žë IDì ì°ê²°ë ê° ì¥ì¹ê° ììµëë€.
ë žëì ì ì ì¥ì¹ IDê° ììµëë€.
helper.EnableAscii("ì ëì¬", 21, 1);
ë¬Œë¡ , ìì ê°ìŽ ì¶ì ì ëšìŒ íìŒë¡ ê²°í©í ì ììµëë€.
· ë§ì§ë§ìŒë¡ ìì€í ì 몚ë ì¥ì¹ì ëíŽ ëìŒí ì íì PCAP ì¶ì ì íì±íí ì ììµëë€.
ì¥ì¹ ëì°ë¯žìì êŽëŠ¬íë ê²ìŒë¡.
helper.EnableAsciiAll("ì ëì¬");
ìŽë¡ ìžíŽ 몚ë ì¥ì¹ì ëíŽ íëì© ë§ì ASCII ì¶ì íìŒìŽ ìì±ë©ëë€.
í¬íŒê° êŽëŠ¬íë ì íì ìì€í ìì. ìŽ ëªšë íìŒì ë€ìì ë°ëŠ ëë€.
- ììŽë>- ììŽë>.tr íìœ. 몚ë íì ì íëë¡ ê²°í©
íìŒì ìì ìì ì ì¬íê² ìíë©ëë€.
íìŒëª
ìì ì ëì¬ ì€íìŒ ë©ìë ì€ëª ì ììë ê²ì ìì í 구ì±ì ëë€.
구í ë°©ë²ì ë°ë¥ž íìŒ ìŽëŠ. ê·ì¹ì ë°ëŒ ASCII ì¶ì ì NS-3 첎ê³
ííì - ììŽë>- ììŽë>.tr
ììì ìžêžíë¯ìŽ ìì€í ì 몚ë ë žëìë ìì€í í ë¹ ë žë IDê° ììµëë€. 귞늬ê³
몚ë ì¥ì¹ìë ë žëì êŽë šë ìží°íìŽì€ ìžë±ì€(ì¥ì¹ IDëŒê³ ë íš)ê° ììµëë€.
Ʞ볞ì ìŒë¡ ASCII ì¶ì íìŒì 첫 ë²ì§ž ì¶ì ì íì±íí ê²°ê³Œë¡ ìì±ë©ëë€.
ì ëì¬ "ì ëì¬"륌 ì¬ì©íë ë žë 21ì ì¥ì¹ë ì ëì¬-21-1.tr.
íì ì¬ì©í ì ììµëë€ NS-3 ìŽê²ì ë ëª ííê² íêž° ìíŽ ê°ì²Ž ìŽëŠ ìë¹ì€. ì륌 ë€ìŽ,
ê°ì²Ž ìŽëŠ ìë¹ì€ë¥Œ ì¬ì©íì¬ ë žë 21ì "server"ëŒë ìŽëŠì í ë¹íë©Ž 결곌
ASCII ì¶ì íìŒ ìŽëŠì ìëìŒë¡ ì ëì¬-ìë²-1.tr ê·žëŠ¬ê³ ë¹ì ìŽ ëí í ë¹íë€ë©Ž
ì¥ì¹ì "eth0"ìŽëŒë ìŽëŠì ì§ì íë©Ž ASCII ì¶ì íìŒ ìŽëŠìŽ ìëìŒë¡ ì íë©ëë€.
ê·žëŠ¬ê³ ë¶ëŠì ë°ë€ ì ëì¬-ìë²-eth0.tr.
ì¬ë¬ ë©ìëìë ëŒë Ʞ볞 맀ê°ë³ìê° ììµëë€. ëª ìì íìŒ ìŽëŠ. ì€ì ì
trueìž ê²œì° ìŽ ë§€ê°ë³ìë ìë íìŒ ìŽëŠ ìì± ë©ì»€ëìŠì ë¹íì±ííê³ ë€ìì íì©í©ëë€.
ëª ìì ìž íìŒ ìŽëŠì ìì±í©ëë€. ìŽ ìµì ì a륌 ì·šíë ë©ìëììë§ ì¬ì©í ì ììµëë€.
ì ëì¬ë¥Œ ì§ì íê³ ëšìŒ ì¥ì¹ìì ì¶ì ì íì±íí©ëë€.
íë¡í ìœ ëì°ë¯ž
PCAP
ìŽë€ì 목í ë¯¹ì€ ìž ìŒêŽë PCAP ì¶ì êž°ë¥ì ìœê² ì¶ê°í ì ììµëë€.
íë¡í ìœ. ì°ëŠ¬ë PCAP ì¶ì ì ë€ìí í¹ì§ìŽ 몚ë ëìŒíê² ìëíꞰ륌 ìí©ëë€.
íë¡í ìœìŽë¯ë¡ ìŽë¬í ëì°ë¯žì ë©ìëë ì€í ëì°ë¯žì ìíŽ ììë©ëë€. 볎ìžì
src/ë€ížìí¬/helper/trace-helper.h 볎멎ì í ë¡ ì ë°ëŒê°ê³ ì¶ë€ë©Ž
ì€ì ìœë.
ìŽ ì¹ì ììë íë¡í ìœì ì ì©ëë ë°©ë²ì ì€ëª í©ëë€. IPv4. ì
ì ì¬í íë¡í ìœë¡ ì¶ì ì ì§ì íë €ë©Ž ì ì í ì íìŒë¡ ë첎íë©Ž ë©ëë€. ì륌 ë€ìŽ,
~ì ì¬ì©íë€ í¬ìžíž ëì ì í¬ìžíž ì í PcapIpv6 íì±í ëì PcapIpv4 íì±í.
íŽëì€ PcapHelperForIpv4 PCAP ì¶ì ì ì¬ì©íêž° ìí ëì ìì€ì êž°ë¥ì ì ê³µí©ëë€.
FBI ìŠì€ ë²ì£ ë³Žê³ ì IPv4 ê·ìœ. ìŽë¬í ë©ìë륌 íì±ííë ê° íë¡í ìœ ëì°ë¯žë ëšìŒ ë©ìë륌 구ííŽìŒ í©ëë€.
ìŽ íŽëì€ìì ììë ê°ì ë©ìëì ëë€. ë³ëì 구íìŽ ìì ìì ì ëë€.
IPv6, ì륌 ë€ìŽ ë©ìë ìŽëŠê³Œ ìëª ìë§ ì°šìŽê° ììµëë€.
íŽëì€ë¥Œ ëª ííê² íë €ë©Ž ë€ë¥ž ë©ìë ìŽëŠìŽ íìí©ëë€. IPv4 ì IPv6 ë ë€
íŽëì€ìì íìëš ëª©ì , ëìŒí ìëª ì ê³µì íë ë©ìë.
ê°ì ë¬Žíš EnablePcapIpv4Internal(std::string ì ëì¬,
Ptr IPv4,
uint32_t ìží°íìŽì€,
ë¶ìž ëª ìì íìŒ ìŽëŠ) = 0;
ìŽ ë©ìëì ìëª ì íë¡í ìœê³Œ ìží°íìŽì€ ì€ì¬ êŽì ì ë°ìí©ëë€.
ìŽ ìì€ì ìí©ì ëë€. íŽëì€ìì ììë 몚ë ê³µê° ë©ìë PcapHelperForIpv4
ìŽ ëšìŒ ì¥ì¹ ì¢ ì 구í ë°©ë²ì ížì¶íë ê²ìŒë¡ ì€ì ëë€. ì륌 ë€ìŽ,
ê°ì¥ ë®ì ìì€ì PCAP ë°©ë²,
ë¬Žíš EnablePcapIpv4 (std::string ì ëì¬, Ptr ipv4, uint4_t ìží°íìŽì€, ë¶ìž ëª ìì íìŒ ìŽëŠ = ê±°ì§);
ë€ìì ì¥ì¹ 구íì ížì¶í©ëë€. PcapIpv4ëŽë¶ íì±í 곧ì¥. êž°í 몚ë ê³µê°
PCAP ì¶ì ë°©ë²ì ìŽ êµ¬íì êž°ë°ìŒë¡ ì¶ê° ì¬ì©ì ìì€ì ì ê³µí©ëë€.
êž°ë¥. ìŽê²ìŽ ì¬ì©ììê² ì믞íë ë°ë ìì€í ì 몚ë íë¡í ìœ í¬íŒê°
몚ë PCAP ì¶ì ë°©ë²ì ì¬ì©í ì ììµëë€. ìŽë¬í ë°©ë²ì 몚ë
í¬íŒê° 구ííë ê²œì° íë¡í ìœ ì 첎ìì ëìŒí ë°©ì PcapIpv4ëŽë¶ íì±í ë°ë¥Žê².
íë ìì
ìŽë¬í ë°©ë²ì ë žëì ìŒëìŒ ëìíëë¡ ì€ê³ëììµëë€.
NetDevice- ì¥ì¹ ë²ì ì ì€ì¬ ë²ì . ë žë ëì NetDevice ì
ì ìœ ì¡°ê±Ž, ì°ëŠ¬ë íë¡í ìœ ë° ìží°íìŽì€ ì ìœ ì¡°ê±Žì ì¬ì©í©ëë€.
ì¥ì¹ ë²ì 곌 ë§ì°¬ê°ì§ë¡ XNUMXê°ì§ ë°©ë²ìŽ ììµëë€.
ë¬Žíš EnablePcapIpv4 (std::string ì ëì¬, Ptr ipv4, uint4_t ìží°íìŽì€, ë¶ìž ëª ìì íìŒ ìŽëŠ = ê±°ì§);
ë¬Žíš EnablePcapIpv4(std::묞ììŽ ì ëì¬, std::묞ììŽ ipv4Name, uint32_t ìží°íìŽì€, ë¶ìž ëª ìì íìŒ ìŽëŠ = ê±°ì§);
void EnablePcapIpv4(std::string ì ëì¬, Ipv4InterfaceContainer c);
void EnablePcapIpv4(std::string ì ëì¬, NodeContainer n);
ë¬Žíš EnablePcapIpv4(std::묞ììŽ ì ëì¬, uint32_t nodeid, uint32_t ìží°íìŽì€, bool ëª ìì íìŒ ìŽëŠ);
void EnablePcapIpv4All (std::string ì ëì¬);
íŽëì€ì ëí API 묞ì륌 ì ë íë ê²ìŽ ì¢ìµëë€. PcapHelperForIpv4 륌 ì°Ÿë ë°©ë²
ìŽë¬í ë°©ë²ì ìžë¶ì¬í; íì§ë§ ììœíìë©Ž ...
· ë€ìì ì ê³µíì¬ í¹ì íë¡í ìœ/ìží°íìŽì€ ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
í¬ìžíž and ìží°íìŽì€ ì Pcap íì±í ë°©ë². ì륌 ë€ìŽ,
í¬ìžíž ipv4 = ë žë->GetObject ();
...
helper.EnablePcapIpv4("ì ëì¬", ipv4, 0);
· ë€ìì ì ê³µíì¬ í¹ì ë žë/ë€íž-ì¥ì¹ ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
íì€::묞ììŽ ê°ì²Ž ìŽëŠ ìë¹ì€ 묞ììŽì Pcap íì±í ë°©ë². ê·žë§íŒ
í¬ìžíž ìŽëŠ 묞ììŽìì ì¡°íë©ëë€. ì륌 ë€ìŽ,
ìŽëŠ::ì¶ê°("serverIPv4" ...);
...
helper.EnablePcapIpv4("ì ëì¬", "serverIpv4", 1);
· ë€ìì ì ê³µíì¬ íë¡í ìœ/ìží°íìŽì€ ì 몚ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
IPv4ìží°íìŽì€ 컚í ìŽë. ê°ê° IPv4 /컚í ìŽë íë¡í ìœì ìží°íìŽì€ ì
ì íìŽ ì²Ží¬ëìŽ ììµëë€. ì ì í ì íì ê° íë¡í ìœì ëíŽ
ì¥ì¹ ëì°ë¯ž), íŽë¹ ìží°íìŽì€ì ëíŽ ì¶ì ìŽ íì±íë©ëë€. ì륌 ë€ìŽ,
NodeContainer ë žë;
...
NetDeviceContainer ì¥ì¹ = deviceHelper.Install(ë žë);
...
Ipv4AddressHelper ipv4;
ipv4.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer ìží°íìŽì€ = ipv4.Assign(ì¥ì¹);
...
helper.EnablePcapIpv4("ì ëì¬", ìží°íìŽì€);
· ë€ìì ì ê³µíì¬ íë¡í ìœ/ìží°íìŽì€ ì 몚ììì PCAP ì¶ì ì íì±íí ì ììµëë€.
ë žë컚í ìŽë. ê° ë žëì ëíŽ ë žë컚í ìŽë ì ì í íë¡í ìœì ì°Ÿììµëë€.
ê° íë¡í ìœì ëíŽ íŽë¹ ìží°íìŽì€ê° ìŽê±°ëê³ ê²°ê³Œìì ì¶ì ìŽ íì±íë©ëë€.
í ì. ì륌 ë€ìŽ,
NodeContainern;
...
helper.EnablePcapIpv4("ì ëì¬", n);
· ë žë ID ë° ìží°íìŽì€ë¥Œ êž°ë°ìŒë¡ PCAP ì¶ì ì íì±íí ìë ììµëë€. ìŽì
ìŽ ê²œì° node-idë ë€ììŒë¡ ë³íë©ëë€. Ptr ì ì í íë¡í ìœìŽ ì¡°íë©ëë€.
ë žëìì. 결곌 íë¡í ìœ ë° ìží°íìŽì€ë 결곌륌 ì§ì íë ë° ì¬ì©ë©ëë€.
ì¶ì ìì€.
helper.EnablePcapIpv4("ì ëì¬", 21, 1);
· ë§ì§ë§ìŒë¡ ìì€í ì 몚ë ìží°íìŽì€ì ëíŽ PCAP ì¶ì ì íì±íí ì ììµëë€.
íë¡í ìœì ì¥ì¹ ëì°ë¯žìì êŽëŠ¬íë ê²ê³Œ ëìŒí ì íì ëë€.
helper.EnablePcapIpv4All("ì ëì¬");
íìŒëª
ìì 몚ë ë©ìë ì€ëª ìë ìì í ë©ìë 구ì±ìŽ ììëìŽ ììµëë€.
구í ë°©ë²ì ë°ë¥ž íìŒ ìŽëŠ. ê·ì¹ì ë°ëŒ PCAP ì¶ì ì
ì ì, NS-3 ìì€í ì " - - .pcap"ì 겜ì°
íë¡í ìœ ì¶ì ììë íë¡í ìœê³Œ íë¡í ìœ ì¬ìŽì ìŒëìŒ ëììŽ ììµëë€. ë žë. ìŽ
íë¡í ìœ ë묞ìŽë€ ì¬ë¬Œ ë¡ ì§ê³ë©ëë€. ë žë ì¬ë¬Œ. êžë¡ë²ìŽ ìêž° ë묞ì
ìì€í ì íë¡í ìœ ID, íìŒ ìŽëŠ ì§ì ì íŽë¹ ë žë ID륌 ì¬ì©í©ëë€. ê·žë¬ë¯ë¡
ìëìŒë¡ ì íë ì¶ì íìŒ ìŽëŠìì íìŒ ìŽëŠ 충ë ê°ë¥ì±ìŽ ììµëë€.
ìŽë¬í ìŽì ë¡ íë¡í ìœ ì¶ì ì ëí íìŒ ìŽëŠ ê·ì¹ìŽ ë³ê²œë©ëë€.
ììì ìžêžíë¯ìŽ ìì€í ì 몚ë ë žëìë ìì€í í ë¹ ë žë IDê° ììµëë€.
íë¡í ìœ ìžì€íŽì€ì Node ìžì€íŽì€ ì¬ìŽìë ìŒëìŒ ëììŽ ìêž° ë묞ì
ë žë ID륌 ì¬ì©í©ëë€. ê° ìží°íìŽì€ìë íŽë¹ íë¡í ìœê³Œ êŽë šë ìží°íìŽì€ IDê° ììµëë€. ì°ëŠ¬ë ì¬ì©
ëí " -N -ë ì¶ì íìŒ ìŽëŠ ì§ì ì ìí .pcap"
íë¡í ìœ ëì°ë¯ž.
ë°ëŒì Ʞ볞ì ìŒë¡ ì¶ì ì íì±íí 결곌 ìì±ë PCAP ì¶ì íìŒì
ì ëì¬ "ì ëì¬"륌 ì¬ì©íë ë žë 1ì Ipv4 íë¡í ìœ ìží°íìŽì€ 21ì ë€ì곌 ê°ìµëë€.
"ì ëì¬-n21-i1.pcap".
íì ì¬ì©í ì ììµëë€ NS-3 ìŽê²ì ë ëª ííê² íêž° ìíŽ ê°ì²Ž ìŽëŠ ìë¹ì€. ì륌 ë€ìŽ,
ê°ì²Ž ìŽëŠ ìë¹ì€ë¥Œ ì¬ì©íì¬ Ptrì "serverIpv4"ëŒë ìŽëŠì í ë¹í©ëë€. ë žëìì
21, 결곌 PCAP ì¶ì íìŒ ìŽëŠì ìëìŒë¡
"prefix-nserverIpv4-i1.pcap".
ì¬ë¬ ë©ìëìë ëŒë Ʞ볞 맀ê°ë³ìê° ììµëë€. ëª ìì íìŒ ìŽëŠ. ì€ì ì
trueìž ê²œì° ìŽ ë§€ê°ë³ìë ìë íìŒ ìŽëŠ ìì± ë©ì»€ëìŠì ë¹íì±ííê³ ë€ìì íì©í©ëë€.
ëª ìì ìž íìŒ ìŽëŠì ìì±í©ëë€. ìŽ ìµì ì a륌 ì·šíë ë©ìëììë§ ì¬ì©í ì ììµëë€.
ì ëì¬ë¥Œ ì§ì íê³ ëšìŒ ì¥ì¹ìì ì¶ì ì íì±íí©ëë€.
ASCII
ASCII ì¶ì ëì°ë¯žì ëìì ì€ì§ì ìŒë¡ PCAP 겜ì°ì ì ì¬í©ëë€. ê°ì žê°
ë³Žê³ src/ë€ížìí¬/helper/trace-helper.h ëì í ë¡ ì ë°ë¥Žê³ ì¶ë€ë©Ž
ì€ì ìœë륌 볎멎
ìŽ ì¹ì ììë íë¡í ìœì ì ì©ëë ë°©ë²ì ì€ëª í©ëë€. IPv4. ì
ì ì¬í íë¡í ìœë¡ ì¶ì ì ì§ì íë €ë©Ž ì ì í ì íìŒë¡ ë첎íë©Ž ë©ëë€. ì륌 ë€ìŽ,
~ì ì¬ì©íë€ í¬ìžíž ëì ì í¬ìžíž ì í AsciiIpv6 íì±í ëì
AsciiIpv4 íì±í.
íŽëì€ AsciiTraceHelperForIpv4 ASCII ì¬ì©ì ìí ëì ìì€ì êž°ë¥ ì¶ê°
íë¡í ìœ ëì°ë¯žë¥Œ ì¶ì í©ëë€. ìŽë¬í ë©ìë륌 íì±ííë ê° íë¡í ìœì ë€ìì 구ííŽìŒ í©ëë€.
ìŽ íŽëì€ìì ììë ëšìŒ ê°ì ë©ìëì ëë€.
ê°ì ë¬Žíš EnableAsciiIpv4Internal(Ptr ê°ìž,
std::묞ììŽ ì ëì¬,
Ptr IPv4,
uint32_t ìží°íìŽì€,
ë¶ìž ëª ìì íìŒ ìŽëŠ) = 0;
ìŽ ë©ìëì ìëª ì íë¡í ìœ ë° ìží°íìŽì€ ì€ì¬ì êŽì ì ë°ìí©ëë€.
ìŽ ìì€ì ìí©; ëí í¬íŒê° ê³µì ë
ì¶ë ¥ ì€ížëŠŒ. íŽëì€ìì ììë 몚ë ê³µê° ë©ìë
PcapAndAsciiTraceHelperForIpv4 ìŽ ëšìŒ ì¥ì¹ ì¢ ì ížì¶ë¡ ì€ì ëë€.
구í ë°©ë². ì륌 ë€ìŽ, ê°ì¥ ë®ì ìì€ì ASCII ì¶ì ë°©ë²,
ë¬Žíš EnableAsciiIpv4 (std::string ì ëì¬, Ptr ipv4, uint4_t ìží°íìŽì€, ë¶ìž ëª ìì íìŒ ìŽëŠ = ê±°ì§);
ë¬Žíš EnableAsciiIpv4(Ptr ì€ížëŠŒ, PTR ipv4, uint4_t ìží°íìŽì€);
ë€ìì ì¥ì¹ 구íì ížì¶í©ëë€. AsciiIpv4ëŽë¶ íì±í ì§ì ì ê³µíê±°ë
ì ëì¬ ëë ì€ížëŠŒ. ë€ë¥ž 몚ë ê³µì© ASCII ì¶ì ë°©ë²ì ë€ìì êž°ë°ìŒë¡ í©ëë€.
ì¶ê° ì¬ì©ì ìì€ êž°ë¥ì ì ê³µíë ì ìì€ êž°ë¥. ìŽê²ìŽ ì믞íë ë°
ì¬ì©ìë ìì€í ì 몚ë ì¥ì¹ ëì°ë¯žê° 몚ë ASCII ì¶ì ë°©ë²ì ê°ê² ëë€ë ê²ì ëë€.
ì¬ì© ê°ë¥; ìŽë¬í ë°©ë²ì ë€ì곌 ê°ì ê²œì° íë¡í ìœ ì 첎ìì 몚ë ëìŒí ë°©ììŒë¡ ìëí©ëë€.
íë¡í ìœ êµ¬í EnablAsciiIpv4ëŽë¶ ë°ë¥Žê².
íë ìì
ë¬Žíš EnableAsciiIpv4 (std::string ì ëì¬, Ptr ipv4, uint4_t ìží°íìŽì€, ë¶ìž ëª ìì íìŒ ìŽëŠ = ê±°ì§);
ë¬Žíš EnableAsciiIpv4(Ptr ì€ížëŠŒ, PTR ipv4, uint4_t ìží°íìŽì€);
ë¬Žíš EnableAsciiIpv4(std::묞ììŽ ì ëìŽ, std::묞ììŽ ipv4Name, uint32_t ìží°íìŽì€, ë¶ìž ëª ìì íìŒ ìŽëŠ = false);
ë¬Žíš EnableAsciiIpv4(Ptr ì€ížëŠŒ, std::string ipv4Name, uint32_t ìží°íìŽì€);
void EnableAsciiIpv4(std::string ì ëì¬, Ipv4InterfaceContainer c);
ë¬Žíš EnableAsciiIpv4(Ptr ì€ížëŠŒ, Ipv4InterfaceContainer c);
void EnableAsciiIpv4(std::string ì ëì¬, NodeContainer n);
ë¬Žíš EnableAsciiIpv4(Ptr ì€ížëŠŒ, NodeContainer n);
void EnableAsciiIpv4All(std::string ì ëì¬);
묎íší EnableAsciiIpv4All(Ptr ê°ìž);
ë¬Žíš EnableAsciiIpv4(std::묞ììŽ ì ëì¬, uint32_t nodeid, uint32_t deviceid, bool ëª ìì íìŒ ìŽëŠ);
ë¬Žíš EnableAsciiIpv4(Ptr ì€ížëŠŒ, uint32_t nodeid, uint32_t ìží°íìŽì€);
íŽëì€ì ëí API 묞ì륌 ì ë íë ê²ìŽ ì¢ìµëë€. PcapAndAsciiHelperForIpv4 ì
ìŽë¬í ë°©ë²ì ìžë¶ ì¬íì ì°ŸìŒììì€. ê·žë¬ë ììœíìë©Ž ...
· ASCII ì¶ì ì ì¬ì©í ì ìë ë°©ë²ìŽ PCAPë³Žë€ ë ë°° ë ë§ìµëë€.
ížë ìŽì±. ìŽê²ì PCAP ì€íìŒ ëªšëž ìžìë ê°ê°ì ì¶ì ìŽ ìêž° ë묞ì ëë€.
ê³ ì í íë¡í ìœ/ìží°íìŽì€ ììŽ ê³ ì í íìŒì êž°ë¡ëë©Ž ë€ì곌 ê°ì 몚ëžì ì§ìí©ëë€.
ë§ì íë¡í ìœ/ìží°íìŽì€ ìì ëí ì¶ì ì ë³Žê° ê³µíµ íìŒì êž°ë¡ë©ëë€. ìŽê²
ë -N - íìŒ ìŽëŠ ìì± ë©ì»€ëìŠì
ê³µíµ íìŒì ì°žì¡°íë ë©ì»€ëìŠìŒë¡ ë첎ëììµëë€. API ë©ìëì ìë
몚ë ì¡°í©ì íì©íë €ë©Ž ë ë°°ì ëë€.
· PCAP ì¶ì ììì ë§ì°¬ê°ì§ë¡ í¹ì íë¡í ìœ/ìží°íìŽì€ìì ASCII ì¶ì ì íì±íí ì ììµëë€.
ì ê³µíì¬ ì í¬ìžíž ë° ìží°íìŽì€ ì Ascii íì±í ë°©ë². ì륌 ë€ìŽ,
Ptr IPv4;
...
helper.EnableAsciiIpv4("ì ëì¬", ipv4, 1);
ìŽ ê²œì° ASCII ì¶ì íìŒì ì¶ì 컚í ì€ížê° êž°ë¡ëì§ ììµëë€.
ë¶íìí. ìì€í ì ë€ì곌 ëìŒí ê·ì¹ì ì¬ì©íì¬ ìì±í íìŒ ìŽëŠì ì íí©ëë€.
íìŒì ì ë¯žì¬ ".tr"ìŽ ëì ë¶ëë€ë ì ì ì ìžíë©Ž PCAP ì¹ì ì ì€ëª ëìŽ ììµëë€.
".pcap"ì.
· ë ìŽìì ìží°íìŽì€ìì ASCII ì¶ì ì íì±ííê³ ëªšë ì¶ì ì ì ì¡íë €ë 겜ì°
ëšìŒ íìŒì ëíŽ ê°ì²Žë¥Œ ì¬ì©íì¬ ëšìŒ íìŒì ì°žì¡°íë ë°©ììŒë¡ë ê·žë ê² í ì ììµëë€.
ì°ëŠ¬ë ìŽë¯ž ìì "cwnd" ìì ìì ìŽì ë¹ì·í ê²ì ê°ì§ê³ ììµëë€:
Ptr íë¡í ìœ4 = node1->GetObject ();
Ptr íë¡í ìœ4 = node2->GetObject ();
...
Ptr stream = asciiTraceHelper.CreateFileStream("trace-file-name.tr");
...
helper.EnableAsciiIpv4(ì€ížëŠŒ, íë¡í ìœ1, 1);
helper.EnableAsciiIpv4(ì€ížëŠŒ, íë¡í ìœ2, 1);
ìŽ ê²œì° ì¶ì 컚í ì€ížë íìíë¯ë¡ ASCII ì¶ì íìŒì êž°ë¡ë©ëë€.
ë ìží°íìŽì€ì ì¶ì ì ëª ííê² í©ëë€. ì¬ì©ìê° ìì í
íìŒ ìŽëŠì ì§ì íë©Ž ìŒêŽì±ì ìíŽ ë¬žììŽì ",tr"ìŽ í¬íšëìŽìŒ í©ëë€.
· ë€ìì ì ê³µíì¬ í¹ì íë¡í ìœìì ASCII ì¶ì ì íì±íí ì ììµëë€. íì€::묞ììŽ
ê°ì²Ž ìŽëŠ ìë¹ì€ 묞ììŽì Pcap íì±í ë°©ë². ê·žë§íŒ í¬ìžíž is
ìŽëŠ 묞ììŽìì ì°Ÿì볎ììµëë€. ê·žë§íŒ 결곌 íìŒ ìŽëŠìë ììì ì ëë€.
íë¡í ìœ ìžì€íŽì€ì ë žë ì¬ìŽì ìŒëìŒ ëììŽ ììµëë€. ì륌 ë€ìŽ,
ìŽëŠ::ì¶ê°("node1Ipv4" ...);
ìŽëŠ::ì¶ê°("node2Ipv4" ...);
...
helper.EnableAsciiIpv4("ì ëì¬", "node1Ipv4", 1);
helper.EnableAsciiIpv4("ì ëì¬", "node2Ipv4", 1);
ê·žë¬ë©Ž "prefix-nnode1Ipv4-i1.tr"ìŽëŒë ë ê°ì íìŒìŽ ìì±ëê³
íŽë¹ ì¶ì íìŒì ê° ìží°íìŽì€ì ëí ì¶ì ìŽ í¬íšë "prefix-nnode2Ipv4-i1.tr"ì ëë€.
몚ë EnableAscii íšìë ì€ížëŠŒ ëíŒë¥Œ ì¬ì©íëë¡ ì€ë²ë¡ëëë¯ë¡ ë€ìì ìíí ì ììµëë€.
íŽë¹ íìë ì¬ì©íììì€.
ìŽëŠ::ì¶ê°("node1Ipv4" ...);
ìŽëŠ::ì¶ê°("node2Ipv4" ...);
...
Ptr stream = asciiTraceHelper.CreateFileStream("trace-file-name.tr");
...
helper.EnableAsciiIpv4(ì€ížëŠŒ, "node1Ipv4", 1);
helper.EnableAsciiIpv4(ì€ížëŠŒ, "node2Ipv4", 1);
ìŽê²ì 몚ë ê²ì í¬íšíë "trace-file-name.tr"ìŽëŒë ëšìŒ ì¶ì íìŒì ìì±í©ëë€.
ë ìží°íìŽì€ì ëí ì¶ì ìŽë²€íž. ìŽë²€ížë ì¶ì ì ìíŽ ëª ííŽì§ëë€.
컚í ì€íž 묞ììŽ.
· ë€ìì ì ê³µíì¬ íë¡í ìœ/ìží°íìŽì€ ì 몚ììì ASCII ì¶ì ì íì±íí ì ììµëë€.
IPv4ìží°íìŽì€ 컚í ìŽë. ì ì í ì íì ê° íë¡í ìœì ëíŽ
ì¥ì¹ í¬íŒì ìíŽ êŽëŠ¬ëš) íŽë¹ ìží°íìŽì€ì ëíŽ ì¶ì ìŽ íì±íë©ëë€.
ë€ì ë§íì§ë§, ê° ì¬ìŽì ìŒëìŒ ëììŽ ìêž° ë묞ì ì묵ì ì ëë€.
íë¡í ìœê³Œ ê·ž ë žë. ì륌 ë€ìŽ,
NodeContainer ë žë;
...
NetDeviceContainer ì¥ì¹ = deviceHelper.Install(ë žë);
...
Ipv4AddressHelper ipv4;
ipv4.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer ìží°íìŽì€ = ipv4.Assign(ì¥ì¹);
...
...
helper.EnableAsciiIpv4("ì ëì¬", ìží°íìŽì€);
ìŽë¡ ìžíŽ ì¬ë¬ ASCII ì¶ì íìŒìŽ ìì±ëë©° ê° íìŒì ë€ì곌 ê°ìµëë€.
ê·žë§íŒ -N -ë .tr ê·ì¹. 몚ë íì ì íëë¡ ê²°í©
ëšìŒ íìŒì ìì ìì ì ì¬íê² ìíë©ëë€.
NodeContainer ë žë;
...
NetDeviceContainer ì¥ì¹ = deviceHelper.Install(ë žë);
...
Ipv4AddressHelper ipv4;
ipv4.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer ìží°íìŽì€ = ipv4.Assign(ì¥ì¹);
...
Ptr stream = asciiTraceHelper.CreateFileStream("trace-file-name.tr");
...
helper.EnableAsciiIpv4(ì€ížëŠŒ, ìží°íìŽì€);
· ë€ìì ì ê³µíì¬ íë¡í ìœ/ìží°íìŽì€ ì 몚ììì ASCII ì¶ì ì íì±íí ì ììµëë€.
ë žë컚í ìŽë. ê° ë žëì ëíŽ ë žë컚í ìŽë ì ì í íë¡í ìœì ì°Ÿììµëë€.
ê° íë¡í ìœì ëíŽ íŽë¹ ìží°íìŽì€ê° ìŽê±°ëê³ ê²°ê³Œìì ì¶ì ìŽ íì±íë©ëë€.
í ì. ì륌 ë€ìŽ,
NodeContainern;
...
helper.EnableAsciiIpv4("ì ëì¬", n);
ìŽë¡ ìžíŽ ì¬ë¬ ASCII ì¶ì íìŒìŽ ìì±ëë©° ê° íìŒì ë€ì곌 ê°ìµëë€.
ê·žë§íŒ - - .tr ê·ì¹. 몚ë íì ì íëë¡ ê²°í©
ëšìŒ íìŒì ìì ìì ì ì¬íê² ìíë©ëë€.
· ë žë ID ë° ì¥ì¹ ID륌 êž°ë°ìŒë¡ PCAP ì¶ì ì íì±íí ìë ììµëë€. ìŽì
ìŽ ê²œì° node-idë ë€ììŒë¡ ë³íë©ëë€. Ptr ì ì í íë¡í ìœìŽ ì¡°íë©ëë€.
ë žëìì. 결곌 íë¡í ìœ ë° ìží°íìŽì€ë 결곌륌 ì§ì íë ë° ì¬ì©ë©ëë€.
ì¶ì ìì€.
helper.EnableAsciiIpv4 ("ì ëì¬", 21, 1);
ë¬Œë¡ , ìì ê°ìŽ ì¶ì ì ëšìŒ íìŒë¡ ê²°í©í ì ììµëë€.
· ë§ì§ë§ìŒë¡ ìì€í ì 몚ë ìží°íìŽì€ì ëíŽ ASCII ì¶ì ì íì±íí ì ììµëë€.
íë¡í ìœì ì¥ì¹ ëì°ë¯žìì êŽëŠ¬íë ê²ê³Œ ëìŒí ì íì ëë€.
helper.EnableAsciiIpv4All("ì ëì¬");
ìŽë¡ ìžíŽ 몚ë ASCII ì¶ì íìŒìŽ ìì±ë©ëë€.
ëì°ë¯žê° êŽëŠ¬íë ì íì íë¡í ìœê³Œ êŽë šë ìì€í ì ìží°íìŽì€. 몚ë
ìŽ íìŒì ë€ìì ë°ëŠ ëë€. -N -ë
ëšìŒ íìŒì ëí 몚ë ì¶ì ì ìì ìì ì ì¬íê² ìíë©ëë€.
íìŒëª
ìì ì ëì¬ ì€íìŒ ë©ìë ì€ëª ì ììë ê²ì ìì í 구ì±ì ëë€.
구í ë°©ë²ì ë°ë¥ž íìŒ ìŽëŠ. ê·ì¹ì ë°ëŒ ASCII ì¶ì ì NS-3 첎ê³
íììŽë€" - - .tr"
ììì ìžêžíë¯ìŽ ìì€í ì 몚ë ë žëìë ìì€í í ë¹ ë žë IDê° ììµëë€.
íë¡í ìœê³Œ ë žë ì¬ìŽì ìŒëìŒ ëììŽ ìêž° ë묞ì node-idì ì¬ì©í©ëë€.
íë¡í ìœ ID륌 ìë³í©ëë€. í¹ì íë¡í ìœì 몚ë ìží°íìŽì€ìë
íŽë¹ íë¡í ìœê³Œ êŽë šë ìží°íìŽì€ ìžë±ì€(ëšìí ìží°íìŽì€ëŒê³ ë íš)ì ëë€. Ʞ볞ì ìŒë¡,
ê·žë° ë€ì 첫 ë²ì§ž ì¥ì¹ìì ì¶ì ì íì±íí 결곌 ASCII ì¶ì íìŒìŽ ìì±ë©ëë€.
ì ëì¬ "prefix"륌 ì¬ì©íë ë žë 21ì "prefix-n21-i1.tr"ì ëë€. ì ëì¬ë¥Œ ì¬ì©íì¬
ë žëë¹ ì¬ë¬ íë¡í ìœì ëª ííê² í©ëë€.
íì ì¬ì©í ì ììµëë€ NS-3 ìŽê²ì ë ëª ííê² íêž° ìíŽ ê°ì²Ž ìŽëŠ ìë¹ì€. ì륌 ë€ìŽ,
ê°ì²Ž ìŽëŠ ìë¹ì€ë¥Œ ì¬ì©íì¬ ë žëì íë¡í ìœì "serverIpv4"ëŒë ìŽëŠì í ë¹í©ëë€.
21, ëí ìží°íìŽì€ XNUMXì ì§ì íë©Ž 결곌 ASCII ì¶ì íìŒ ìŽëŠìŽ ìëìŒë¡
"prefix-nserverIpv4-1.tr"ìŽ ë©ëë€.
ì¬ë¬ ë©ìëìë ëŒë Ʞ볞 맀ê°ë³ìê° ììµëë€. ëª ìì íìŒ ìŽëŠ. ì€ì ì
trueìž ê²œì° ìŽ ë§€ê°ë³ìë ìë íìŒ ìŽëŠ ìì± ë©ì»€ëìŠì ë¹íì±ííê³ ë€ìì íì©í©ëë€.
ëª ìì ìž íìŒ ìŽëŠì ìì±í©ëë€. ìŽ ìµì ì a륌 ì·šíë ë©ìëììë§ ì¬ì©í ì ììµëë€.
ì ëì¬ë¥Œ ì§ì íê³ ëšìŒ ì¥ì¹ìì ì¶ì ì íì±íí©ëë€.
ììœ
NS-3 ì¬ë¬ ìì€ì ì¬ì©ìê° ì¬ì©ì ì ìí ì ìë ë§€ì° íë¶í í겜ì í¬íší©ëë€.
ì뮬ë ìŽì ìì ì¶ì¶í ì ìë ì 볎ì ì¢ ë¥.
ì¬ì©ìê° ëšìí 컬ë ì ì ì ìŽí ì ìë ê³ êž ëì°ë¯ž êž°ë¥ìŽ ììµëë€.
믞ìží ëšìë¡ ë¯žëŠ¬ ì ìë ì¶ë ¥. íì©íë ì€ê° ìì€ì ëì°ë¯ž êž°ë¥ìŽ ììµëë€.
ì ë³Žê° ì¶ì¶ëê³ ì ì¥ëë ë°©ë²ì ì¬ì©ì ì ìíë ë³Žë€ ì êµí ì¬ì©ì ê±°êž°
ì 묞 ì¬ì©ìê° ìì€í ì ë³ê²œíì¬ ìë¡ê³
ì¬ì©ìê° ìŠì ì¡ìžì€í ì ìë ë°©ììŒë¡ ìŽì ì ëŽë³ŽëŽì§ ìì ì 볎
ë ëì ìì€.
ìŽê²ì ë§€ì° í¬êŽì ìž ìì€í ìŽë©° í¹í ìííŽìŒ í ê²ìŽ ë§ë€ë ê²ì ìê³ ììµëë€.
ìë¡ìŽ ì¬ì©ìë C++ ë° êŽì©êµ¬ì ì¹ìíì§ ìì ì¬ì©ì륌 ìí ê²ì ëë€. ì°ëŠ¬ë ê³ ë €
ì¶ì ìì€í ì ë§€ì° ì€ìí ë¶ë¶ì ëë€. NS-3 ë°ëŒì ë€ì곌 ê°ìŽ ìµìíŽì§ë ê²ìŽ ì¢ìµëë€.
ê·žê²ìŒë¡ ê°ë¥í©ëë€. ìë§ë ëëšžì§ ë¶ë¶ì ìŽíŽíë ê²œì° ìŒ ê²ì ëë€. NS-3 첎ê³
ì¶ì ìì€í ì ë§ì€í°íë©Ž ë§€ì° ê°ëší©ëë€.
ë°ìŽí° COLLECTION
ë§ì§ë§ íí ëŠ¬ìŒ ì±í°ììë NS-3 ë²ì ìì
3.18ìŽë©° ìì§ ê°ë° ì€ì ëë€. ìŽ ììµì ì¹ì ì ëí
ì§íì€ìž ìì .
ìê·¹
ì뮬ë ìŽì ì€íì 죌ì í¬ìžíž ì€ íëë ì¶ë ¥ ë°ìŽí°ë¥Œ ìì±íë ê²ì ëë€.
ì°êµ¬ 목ì ëë ëšìí ìì€í ì ëíŽ ë°°ì°êž° ìíŽ. ìŽì ì¥ìì ì°ëŠ¬ë
ì¶ì íì ìì€í 곌 ìì 륌 ìê°íìµëë€. ì¬ì¯ë²ì§ž.cc. PCAP ëë ASCII ì¶ì ìì
íìŒìŽ ìì±ë©ëë€. ìŽë¬í ì¶ì ì ë€ìí ë°©ë²ì ì¬ì©íì¬ ë°ìŽí° ë¶ìì ì ì©í©ëë€.
ìžë¶ ë구 ë° ë§ì ì¬ì©ììê² ìŽë¬í ì¶ë ¥ ë°ìŽí°ë ì ížíë ìì§ ìëšì ëë€.
ë°ìŽí°(ìžë¶ ë구ì ìí ë¶ìì©).
ê·žë¬ë ë€ìì í¬íšíì¬ ì¶ì íìŒ ìì± ìŽìì ì¬ì© ì¬ë¡ë ììµëë€.
ë€ì :
· ë¹íší·ê³Œ ê°ì PCAP ëë ASCII ì¶ì ì ì 맀íëì§ ìë ë°ìŽí° ìì±
ë°ìŽí°(ì: íë¡í ìœ ìí êž°ê³ ì í),
· ì¶ì íìŒì ìì±íêž° ìí ëì€í¬ I/O ì구 ì¬íìŽ ë€ì곌 ê°ì ëê·ëªš ì뮬ë ìŽì
êžì§ëê±°ë ë²ê±°ë¡ê³
· ì ëí íìì± ìšëŒìž ì뮬ë ìŽì 곌ì ìì ë°ìŽí° ê°ì ëë ê³ì°.
ìŽê²ì ì¢ì ìë ì뮬ë ìŽì ì ëí ì¢ ë£ ì¡°ê±Žì ì ìíë ê²ì ëë€.
충ë¶í ì¢ì ì 뢰ë륌 íì±íêž°ì 충ë¶í ë°ìŽí°ë¥Œ ìì íì ë ë©ì¶ ë
ìŒë¶ 맀ê°ë³ìì ì¶ì ì¹ ì£Œë³ì ê°ê²©.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë NS-3 ë°ìŽí° ìì§ íë ììí¬ë ìŽë¬í ì¶ê° êž°ë¥ì ì ê³µíëë¡ ì€ê³ëììµëë€.
ì¶ì êž°ë° ì¶ë ¥ ìŽì. ìŽ ì£Œì ì êŽì¬ìŽ ìë ë ìë ìëŽì ê¶ì¥í©ëë€.
ì ì, NS-3 ìŽ íë ììí¬ë¥Œ ë³Žë€ ììží ë€ë£šêž° ìí 맀ëŽìŒ ì¬êž°ìë ë€ì곌 ê°ìŽ ììœí©ëë€.
ìŒë¶ ê°ë° êž°ë¥ì ìì íë¡ê·žëšì ëë€.
ìì ìíž
íí ëŠ¬ìŒ ìì ìì /íí 늬ìŒ/seventh.cc ì ì¬íë€ ì¬ì¯ë²ì§ž.cc ì ì°ëŠ¬
ëª ê°ì§ ë³ê²œ ì¬íì ì ìžíê³ ìŽì ì ê²í íìµëë€. 첫짞, IPv6ì ëíŽ íì±íëììµëë€.
ëª ë ¹ì€ ìµì ìŒë¡ ì§ì:
컀맚ëëŒìž cmd;
cmd.AddValue ("useIpv6", "Ipv6 ì¬ì©", useV6);
cmd.Parse(argc, argv);
ì¬ì©ìê° ì§ì íë ê²œì° useIpv6, ìµì ì ì ííë©Ž íë¡ê·žëšìŽ IPv6 ëì IPv4ì ì¬ì©íì¬ ì€íë©ëë€.
ìŽ ìŽí늬ìŒìŽì ìë XNUMXµm ë° XNUMXµm íì¥ìì ìµë XNUMXWì íê· ì¶ë ¥ì ì ê³µíë ëì ìµì , 몚ë ì¬ì© ê°ë¥ NS-3 CommandLine ê°ì²Žë¥Œ ë€ì곌 ê°ìŽ ì§ìíë íë¡ê·žëš
ìì íìë ëë¡ ë€ì곌 ê°ìŽ ížì¶í ì ììµëë€(í°ë°ìŽí ì¬ì©ì ì ìíììì€).
./waf --run "ìŒê³±ë²ì§ž --help"
ë€ìì ìì±í©ëë€.
ns3-dev-seventh-debug [íë¡ê·žëš ìžì] [ìŒë° ìžì]
íë¡ê·žëš ìžì:
--useIpv6: IPv6 ì¬ì©[false]
ìŒë°ì ìž ì£Œì¥:
--PrintGlobals: ì ì 목ë¡ì ìžìí©ëë€.
--PrintGroups: 귞룹 목ë¡ì ìžìí©ëë€.
--PrintGroup=[귞룹]: 귞룹ì 몚ë TypeId륌 ìžìí©ëë€.
--PrintTypeIds: 몚ë TypeId륌 ìžìí©ëë€.
--PrintAttributes=[typeid]: typeidì 몚ë ìì±ì ìžìí©ëë€.
--PrintHelp: ìŽ ëìë§ ë©ìì§ë¥Œ ìžìí©ëë€.
ìŽ êž°ë³žê°(useIpv4ìŽ falseìŽë¯ë¡ IPv6 ì¬ì©)ì ë¶ìžì ì ííì¬ ë³ê²œí ì ììµëë€.
ê°ì ë€ì곌 ê°ìµëë€.
./waf --run "ìŒê³± ë²ì§ž --useIpv6=1"
ë€ì곌 ê°ìŽ ìì±ë pcapì ìŽíŽë³Žììì€. TCP ë€í:
tcpdump -r XNUMXë²ì§ž.pcap -nn -tt
ìŽê²ì IPv6 ì§ì ë° ëª ë ¹ì€ì ëí 짧ì ì¬ëŽìŽììµëë€.
ìŽ ììµìì ìë¶ë¶ìì ìê°íìµëë€. ëª ë ¹ì€ ì¬ì©ì ì ì© ìë
ì°žì¡°íììì€ src/core/examples/command-line-example.cc.
ìŽì ë°ìŽí° ìì§ìŒë¡ ëìê°ëë€. ìì ìì /íí 늬ìŒ/ ëë í 늬ìì ë€ìì ì ë ¥íììì€.
ëª ë ¹: diff -u ì¬ì¯ë²ì§ž.cc ìŒê³±ë²ì§ž.cc, ê·žëŠ¬ê³ ìŽ diffì ì ì€ ì€ ìŒë¶ë¥Œ ê²ì¬í©ëë€.
+ std::string íë¡ëž ì í;
+ íì€::묞ììŽ ì¶ì 겜ë¡;
+ ê²œì° (useV6 == ê±°ì§)
+ {
...
+ probeType = "ns3::Ipv4PacketProbe";
+ tracePath = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
+ }
+ ë€ë¥ž
+ {
...
+ probeType = "ns3::Ipv6PacketProbe";
+ tracePath = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
+ }
...
+ // GnuplotHelper륌 ì¬ì©íì¬ ìê° ê²œê³Œì ë°ë¥ž íší· ë°ìŽíž ì륌 íë¡í í©ëë€.
+ GnuplotHelper í롯í¬íŒ;
+
+ // í롯ì 구ì±í©ëë€. 첫 ë²ì§ž ìžìë íìŒ ìŽëŠ ì ëì¬ì ëë€.
+ // ìì±ë ì¶ë ¥ íìŒì©. ë ë²ì§ž, ìž ë²ì§ž, ë€ ë²ì§ž
+ // ìžìë ê°ê° í롯 ì 목, xì¶ ë° yì¶ ë ìŽëžì ëë€.
+ plotHelper.ConfigurePlot("ìŒê³± ë²ì§ž íší· ë°ìŽíž ì",
+ "íší· ë°ìŽíž ì ë ìê°",
+ "ìê°(ìŽ)",
+ "íší· ë°ìŽíž ì");
+
+ // íë¡ëž ì í, ì¶ì ìì€ ê²œë¡(êµ¬ì± ë€ìì€íìŽì€ìì) ë°
+ // íë¡í í ì¶ë ¥ ì¶ì ìì€("OutputBytes")륌 ì¡°ì¬í©ëë€. ë€ ë²ì§ž ìžì
+ // í롯ì ë°ìŽí° ê³ìŽ ë ìŽëž ìŽëŠì ì§ì í©ëë€. ë§ì§ë§
+ // ìžìë í€ë¥Œ ë°°ì¹íŽìŒ íë ìì¹ë¥Œ ì§ì íì¬ í롯ì íìì ì§ì í©ëë€.
+ plotHelper.PlotProbe(íë¡ëž ì í,
+ ì¶ì 겜ë¡,
+ "ì¶ë ¥ë°ìŽíž",
+ "íší· ë°ìŽíž ì",
+ GnuplotAggregator::KEY_BELOW);
+
+ // FileHelper륌 ì¬ì©íì¬ ìê° ê²œê³Œì ë°ë¥ž íší· ë°ìŽíž ì륌 êž°ë¡í©ëë€.
+ FileHelper fileHelper;
+
+ // ìž íìŒê³Œ ì¶ë ¥ ë°ìŽí°ì íìì 구ì±í©ëë€.
+ fileHelper.ConfigureFile("ìŒê³± ë²ì§ž íší· ë°ìŽíž ì",
+ íìŒ ìì§êž°::í¬ë§·ëš);
+
+ // ìŽ íìíë ì¶ë ¥ íìŒì ë ìŽëžì ì€ì í©ëë€.
+ fileHelper.Set2dFormat("ìê°(ìŽ) = %.3e\tíší· ë°ìŽíž ì = %.0f");
+
+ // íë¡ëž ì í, íë¡ëž 겜ë¡(êµ¬ì± ë€ìì€íìŽì€ìì) ë°
+ // ìž íë¡ëž ì¶ë ¥ ì¶ì ìì€("OutputBytes").
+ fileHelper.WriteProbe(íë¡ëž ì í,
+ ì¶ì 겜ë¡,
+ "ì¶ë ¥ë°ìŽíž");
+
ì뮬ë ìŽí°::ì ì§(ìŽ(20));
ì뮬ë ìŽí°::ì€í();
ì뮬ë ìŽí°::íꎎ();
ì ì€í ë ìëŒë©Ž ìì IPv6 ëª ë ¹ì€ ìì±ì í ì€íží ë
ê·ž ìŒê³±ë²ì§ž.cc ì¬ë¬ ê°ì ì ì¶ë ¥ íìŒì ë§ë€ììµëë€.
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-칎ìŽíž-0.txt
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-칎ìŽíž-1.txt
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-count.dat
ìŒê³± ë²ì§ž íší· ë°ìŽíž ì.plt
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-칎ìŽíž.png
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-count.sh
ìŽë€ì ìì ìê°ë ì¶ê° ì§ì ì ìíŽ ìì±ëììµëë€. í¹í,
GnuplotHelper ë° FileHelper. ìŽ ë°ìŽí°ë ë°ìŽí° ìì§ì íí¹íì¬ ìì±ëììµëë€.
ì êµ¬ì± ìì NS-3 ìì€ë¥Œ ì¶ì íê³ ë°ìŽí°ë¥Œ íìíë ê·žëí롯 and
íììŽ ì§ì ë í ì€íž íìŒë¡. ë€ì ì¹ì ììë ìŽë€ ê°ê°ì ê²í í ê²ì ëë€.
Gnuplotëì°ë¯ž
GnuplotHelperë NS-3 ìì°ì 목íë¡ íë ëì°ë¯ž ê°ì²Ž ê·žëí롯 í롯
ìŒë°ì ìž ê²œì°ì ëíŽ ê°ë¥í í ì ì ì§ì . ê·žê²ì íí¬ NS-3 ë°ìŽí°ê° ìë ì¶ì ìì€
ë°ìŽí° ìì§ ìì€í ìì ì§ìíë ì í. ì ë¶ë ìëë€ NS-3 ì¶ì ìì€ ë°ìŽí° ì íì ë€ì곌 ê°ìµëë€.
ì§ìëì§ë§ ìŒë° ì¶ì ìŽ ìë TracedValues륌 í¬íšíì¬ ë§ì ìŒë°ì ìž ì¶ì ì íìŽ ììµëë€.
ë°ìŽí°(POD) ì í.
ìŽ ëì°ë¯žê° ìì±í ì¶ë ¥ì ìŽíŽë³Žê² ìµëë€.
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-count.dat
ìŒê³± ë²ì§ž íší· ë°ìŽíž ì.plt
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-count.sh
첫 ë²ì§žë 공백ìŒë¡ 구ë¶ë ìŒë šì íìì€í¬íì íší·ìŽ í¬íšë gnuplot ë°ìŽí° íìŒì ëë€.
ë°ìŽíž ì. ìŽ í¹ì ë°ìŽí° ì¶ë ¥ìŽ ìëìì ìŽë»ê² 구ì±ëìëì§ ë€ë£šê² ì§ë§
ì¶ë ¥ íìŒì ê³ì ì¬ì©íììì€. íìŒ ìŒê³± ë²ì§ž íší· ë°ìŽíž ì.plt gnuplot í롯ì ëë€.
gnuplot ëŽìì ìŽ ì ìë íìŒì ëë€. gnuplot 구묞ì ìŽíŽíë ë ìë
ìŽê²ìŽ ìŽëŠìŽ ì§ì ë íìíë ì¶ë ¥ PNG íìŒì ìì±íëì§ íìžíììì€.
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-칎ìŽíž.png. ë§ì§ë§ìŒë¡ ìì ì ì€í¬ëŠœíž
ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-count.sh gnuplotì íµíŽ ìŽ í롯 íìŒì ì€ííì¬ ìíë
PNG(ìŽë¯žì§ ížì§êž°ìì 볌 ì ìì) ìŠ, ë€ì ëª ë ¹ì ëë€.
sh ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-칎ìŽíž.sh
ì볎 í ê²ìŽë€ ìŒê³± ë²ì§ž-íší·-ë°ìŽíž-칎ìŽíž.png. ìŽ PNGë ì ì²ìì ì ìëì§ ìììµëê¹?
ì¥ì? ëëµì plt íìŒì ì ê³µíšìŒë¡ìš ì¬ì©ìê° ì§ì 구ì±í ì ìë€ë ê²ì ëë€.
PNG륌 ìì±íêž° ì ì ìíë ê²œì° ê²°ê³Œ.
PNG ìŽë¯žì§ ì 목ìë ìŽ íë¡¯ìŽ "íší· ë°ìŽíž ì ë ìê°"ì í롯ìŽëŒê³ ëì ììµëë€.
ì¶ì ìì€ ê²œë¡ì íŽë¹íë íë¡ëžë ë°ìŽí°ë¥Œ íë¡í íê³ ììµëë€.
/NodeList/*/$ns3::Ipv6L3íë¡í ìœ/Tx
ì¶ì 겜ë¡ì ììŒë칎ëì ì ìíììì€. ììœíë©Ž ìŽ íë¡¯ìŽ ìº¡ì²íë ê²ì í롯ì ëë€.
Ipv6L3Protocol ê°ì²Žì ì ì¡ ì¶ì ìì€ìì êŽì°°ë íší· ë°ìŽíž ì;
ì£Œë¡ í ë°©í¥ìŒë¡ 596ë°ìŽíž TCP ìžê·žëšŒíž, ë€ë¥ž ë°©í¥ìŒë¡ 60ë°ìŽíž TCP ìžê·žëšŒíž(XNUMXê°)
ë žë ì¶ì ìì€ê° ìŽ ì¶ì ìì€ì ìŒì¹íš).
ìŽê²ì ìŽë»ê² 구ì±ëììµëê¹? ëª ê°ì§ ì§ì ì ì ê³µíŽìŒ í©ëë€. 뚌ì GnuplotHelper
ê°ì²Žë¥Œ ì ìžíê³ êµ¬ì±íŽìŒ í©ëë€.
+ // GnuplotHelper륌 ì¬ì©íì¬ ìê° ê²œê³Œì ë°ë¥ž íší· ë°ìŽíž ì륌 íë¡í í©ëë€.
+ GnuplotHelper í롯í¬íŒ;
+
+ // í롯ì 구ì±í©ëë€. 첫 ë²ì§ž ìžìë íìŒ ìŽëŠ ì ëì¬ì ëë€.
+ // ìì±ë ì¶ë ¥ íìŒì©. ë ë²ì§ž, ìž ë²ì§ž, ë€ ë²ì§ž
+ // ìžìë ê°ê° í롯 ì 목, xì¶ ë° yì¶ ë ìŽëžì ëë€.
+ plotHelper.ConfigurePlot("ìŒê³± ë²ì§ž íší· ë°ìŽíž ì",
+ "íší· ë°ìŽíž ì ë ìê°",
+ "ìê°(ìŽ)",
+ "íší· ë°ìŽíž ì");
ì§êžê¹ì§ ë¹ íë¡¯ìŽ êµ¬ì±ëììµëë€. íìŒ ìŽëŠ ì ëì¬ê° 첫 ë²ì§žì ëë€.
ìžì, í롯 ì 목ì ë ë²ì§ž, xì¶ ë ìŽëžì ìž ë²ì§ž, yì¶ ë ìŽëžì
ë€ ë²ì§ž 죌ì¥.
ë€ì ëšê³ë ë°ìŽí°ë¥Œ 구ì±íë ê²ìŽë©° ì¬êž°ìì ì¶ì ìì€ê° ì°ê²°ë©ëë€.
뚌ì íë¡ê·žëšìì ëì€ì ì¬ì©í ì ìëë¡ ëª ê°ì§ ë³ì륌 ì ìžíìµëë€.
+ std::string íë¡ëž ì í;
+ íì€::묞ììŽ ì¶ì 겜ë¡;
+ probeType = "ns3::Ipv6PacketProbe";
+ tracePath = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
ì¬êž°ìì ì¬ì©í©ëë€.
+ // íë¡ëž ì í, ì¶ì ìì€ ê²œë¡(êµ¬ì± ë€ìì€íìŽì€ìì) ë°
+ // íë¡í í ì¶ë ¥ ì¶ì ìì€("OutputBytes")륌 ì¡°ì¬í©ëë€. ë€ ë²ì§ž ìžì
+ // í롯ì ë°ìŽí° ê³ìŽ ë ìŽëž ìŽëŠì ì§ì í©ëë€. ë§ì§ë§
+ // ìžìë í€ë¥Œ ë°°ì¹íŽìŒ íë ìì¹ë¥Œ ì§ì íì¬ í롯ì íìì ì§ì í©ëë€.
+ plotHelper.PlotProbe(íë¡ëž ì í,
+ ì¶ì 겜ë¡,
+ "ì¶ë ¥ë°ìŽíž",
+ "íší· ë°ìŽíž ì",
+ GnuplotAggregator::KEY_BELOW);
ì²ì ë ìžìë íë¡ëž ì íì ìŽëŠê³Œ ì¶ì ìì€ ê²œë¡ì ëë€. ìŽê²ë€
ë ê°ì§ê° ìë§ë ìŽ íë ììí¬ë¥Œ ì¬ì©íì¬ ë€ë¥ž ê²ì í롯íë €ê³ í ë ê²°ì íêž° ê°ì¥ ìŽë €ìž ê²ì ëë€.
íì . ì¬êž°ì íë¡ëž ì¶ì ì Tx íŽëì€ì ì¶ì ìì€ Ipv6L3íë¡í ìœ. ìžì ì°ëŠ¬ê°
ìŽ íŽëì€ êµ¬íì ê²ì¬í©ëë€(src/ìží°ë·/몚ëž/ipv6-l3-protocol.cc) ë€ìì êŽì°°í ì ììµëë€.
.AddTraceSource("Tx", "ëê°ë ìží°íìŽì€ë¡ IPv6 íší·ì 볎ë ëë€.",
MakeTraceSourceAccessor(&Ipv6L3Protocol::m_txTrace))
ìŽ ë§ì Tx ë³ìì ìŽëŠì ëë€ m_txì¶ì , ë€ì곌 ê°ì ì ìžìŽ ììµëë€.
/ **
* \brief TX(ì ì¡) íší·ì ì¶ì íêž° ìí ìœë°±.
*/
ì¶ì ìœë°± , Ptr , uint6_t> m_txTrace;
ìŽ í¹ì ì¶ì ìì€ ìëª ì Probe íŽëì€(묎ì
ì°ëŠ¬ë ì¬êž°ì íìí©ëë€) íŽëì€ Ipv6PacketProbe. íìŒ ë³Žêž°
src/ìží°ë·/몚ëž/ipv6-íší·-íë¡ëž.{h,cc}.
ë°ëŒì ìì PlotProbe 묞ìì ìŽ ë¬žìŽ ì¶ì ì ì°ê²°íê³ ììì ì ì ììµëë€.
ìŒì¹íë ìì€(ê²œë¡ ë¬žììŽë¡ ìë³ëš) NS-3 íë¡ëž ì í IPv6PacketProbe. ë©Ž
ì°ëŠ¬ë ìŽ íë¡ëž ì í(ì¶ì ìì€ ìëª ê³Œ ìŒì¹)ì ì§ìíì§ ìììŒë¯ë¡ ì§ìíì§ ììì ì ììµëë€.
ìŽ ë¬žì¥ì ì¬ì©íìµëë€(ì¢ ë ë³µì¡í íì ìì€ ë¬žì¥ì
ì€ëª ìì ì€ëª ë ëë¡ ì¬ì©).
Ipv6PacketProbeë ìžë¶ìì ë°ìŽí°ë¥Œ ì¶ì¶íë ìŒë¶ ì¶ì ìì€ë¥Œ ì첎ì ìŒë¡ ëŽë³Žë ëë€.
íë¡ëžë íší· ê°ì²Ž:
ì í ID
Ipv6PacketProbe::GetTypeId()
{
static TypeId tid = TypeId ("ns3::Ipv6PacketProbe")
.SetParent ()
.AddConstructor ()
.AddTraceSource("ì¶ë ¥",
"íší·ê³Œ ìŽ íë¡ëžì ì¶ë ¥ ìí ì íë IPv6 ê°ì²Ž ë° ìží°íìŽì€",
MakeTraceSourceAccessor(&Ipv6PacketProbe::m_output))
.AddTraceSource("ì¶ë ¥ë°ìŽíž",
"íší·ì ë°ìŽíž ì",
MakeTraceSourceAccessor(&Ipv6PacketProbe::m_outputBytes))
;
ì ì ë°í;
}
PlotProbe 묞ì ìž ë²ì§ž ìžìë ë€ì í목ì êŽì¬ìŽ ììì ì§ì í©ëë€.
ìŽ íší·ì ë°ìŽíž ì. í¹í "OutputBytes" ì¶ì ìì€ë
Ipv6PacketProbe. ë§ì§ë§ìŒë¡ ì§ì ì ë§ì§ë§ ë ìžìë í롯 ë²ë¡ë¥Œ ì ê³µí©ëë€.
ìŽ ë°ìŽí° ê³ìŽ("íší· ë°ìŽíž ì") ë° ì íì gnuplot íì ì§ì 묞
(GnuplotAggregator::KEY_BELOW) í롯 í€ê° í롯 ìëì ìœì ëꞰ륌 ìí©ëë€.
ë€ë¥ž ìµì ìŒë¡ë NO_KEY, KEY_INSIDE ë° KEY_ABOVEê° ììµëë€.
ì§ì ëë¬ë€ ì í
ë€ì ì¶ì ê°ì ìŽ êžì ì°ë ìì ìì íë¡ëžìì ì§ìë©ëë€.
âââââââââââââââââââ¬âââââââââââââââââ¬âââââââââââââ âââââââââââââââââââââ
âTracedValue ì í â íë¡ëž ì í â íìŒ â
âââââââââââââââââââŒâââââââââââââââââŒââââââââââââââ âââââââââââââââââââââ€
âdouble â DoubleProbe â íµê³/몚ëž/double-probe.h â
âââââââââââââââââââŒâââââââââââââââââŒââââââââââââââ âââââââââââââââââââââ€
âuint8_t â Uinteger8Probe â íµê³/몚ëž/uinteger-8-probe.h â
âââââââââââââââââââŒâââââââââââââââââŒââââââââââââââ âââââââââââââââââââââ€
âuint16_t â Uinteger16Probe â íµê³/몚ëž/uinteger-16-probe.h â
âââââââââââââââââââŒâââââââââââââââââŒââââââââââââââ âââââââââââââââââââââ€
âuint32_t â Uinteger32Probe â íµê³/몚ëž/uinteger-32-probe.h â
âââââââââââââââââââŒâââââââââââââââââŒââââââââââââââ âââââââââââââââââââââ€
âbool â BooleanProbe â íµê³/몚ëž/uinteger-16-probe.h â
âââââââââââââââââââŒâââââââââââââââââŒââââââââââââââ âââââââââââââââââââââ€
âns3::Time â TimeProbe â stats/model/time-probe.h â
âââââââââââââââââââŽâââââââââââââââââŽââââââââââââââ âââââââââââââââââââââ
ë€ì TraceSource ì íì ìŽ ë¬žì ìì± ìì ì Probeìì ì§ìë©ëë€.
ââââââââââââââââââââââ¬âââââââââââââââââââââââ¬âââ âââââââââââââ¬âââââââââââââââââââââââââââââââââââââ âââââââââââ
ââââââââââââââââââââââŒâââââââââââââââââââââââŒâââ âââââââââââââŒâââââââââââââââââââââââââââââââââââââ âââââââââââ€
ââââââââââââââââââââââŒâââââââââââââââââââââââŒâââ âââââââââââââŒâââââââââââââââââââââââââââââââââââââ âââââââââââ€
ââââââââââââââââââââââŒâââââââââââââââââââââââŒâââ âââââââââââââŒâââââââââââââââââââââââââââââââââââââ âââââââââââ€
ââââââââââââââââââââââŒâââââââââââââââââââââââŒâââ âââââââââââââŒâââââââââââââââââââââââââââââââââââââ âââââââââââ€
ââââââââââââââââââââââŒâââââââââââââââââââââââŒâââ âââââââââââââŒâââââââââââââââââââââââââââââââââââââ âââââââââââ€
ââââââââââââââââââââââŽâââââââââââââââââââââââŽâââ âââââââââââââŽâââââââââââââââââââââââââââââââââââââ âââââââââââ
볌 ì ìë¯ìŽ ììì ì¶ì ìì€ë§ ì§ìëë©° 몚ë ë€ìì ì§í¥í©ëë€.
íší· í¬êž°(ë°ìŽíž)륌 ì¶ë ¥í©ëë€. ê·žë¬ë ëë¶ë¶ì Ʞ볞 ë°ìŽí° ì íì
TracedValuesë¡ ì¬ì© ê°ë¥í ìŽë¬í í¬íŒë¥Œ íµíŽ ì§ìí ì ììµëë€.
íìŒí¬íŒ
FileHelper íŽëì€ë ìŽì GnuplotHelper ìì ì ë³íìŒ ë¿ì ëë€. ê·žë§íŒ
ìì íë¡ê·žëšì ë€ì곌 ê°ìŽ ëìŒí íìì€í¬í ë°ìŽí°ì íìíë ì¶ë ¥ì ì ê³µí©ëë€.
ìê°(ìŽ) = 9.312e+00 íší· ë°ìŽíž ì = 596
ìê°(ìŽ) = 9.312e+00 íší· ë°ìŽíž ì = 564
ë ê°ì íìŒìŽ ì ê³µë©ëë€. íëë ë žë "0"ì©ìŽê³ ë€ë¥ž íëë ë žë "1"ì©ì ëë€.
íìŒ ìŽëŠ. ìœë륌 íëì© ìŽíŽë³Žê² ìµëë€.
+ // FileHelper륌 ì¬ì©íì¬ ìê° ê²œê³Œì ë°ë¥ž íší· ë°ìŽíž ì륌 êž°ë¡í©ëë€.
+ FileHelper fileHelper;
+
+ // ìž íìŒê³Œ ì¶ë ¥ ë°ìŽí°ì íìì 구ì±í©ëë€.
+ fileHelper.ConfigureFile("ìŒê³± ë²ì§ž íší· ë°ìŽíž ì",
+ íìŒ ìì§êž°::í¬ë§·ëš);
íìŒ ëì°ë¯ž íìŒ ì ëì¬ê° 첫 ë²ì§ž ìžììŽê³ íì ì§ì ìê° ê·ž ë€ìì ëë€. ìŒë¶
ìì ì§ì ì ìí ë€ë¥ž ìµì ìë SPACE_SEPARATED, COMMA_SEPARATED ë° TAB_SEPARATEDê° ììµëë€.
ì¬ì©ìë íì 묞ììŽì ì¬ì©íì¬ íìì ë³ê²œí ì ììµëë€(FORMATTEDê° ì§ì ë 겜ì°).
ë€ì곌 ê°ìŽ:
+
+ // ìŽ íìíë ì¶ë ¥ íìŒì ë ìŽëžì ì€ì í©ëë€.
+ fileHelper.Set2dFormat("ìê°(ìŽ) = %.3e\tíší· ë°ìŽíž ì = %.0f");
ë§ì§ë§ìŒë¡ êŽì¬ ìë ì¶ì ìì€ë¥Œ ì°ê²°íŽìŒ í©ëë€. ë€ì, probeType ë° tracePath
ìŽ ìì ì ë³ìê° ì¬ì©ëë©° íë¡ëžì ì¶ë ¥ ì¶ì ìì€ "OutputBytes"ë
í¹:
+
+ // íë¡ëž ì í, ì¶ì ìì€ ê²œë¡(êµ¬ì± ë€ìì€íìŽì€ìì) ë°
+ // ìž íë¡ëž ì¶ë ¥ ì¶ì ìì€("OutputBytes").
+ fileHelper.WriteProbe(íë¡ëž ì í,
+ ì¶ì 겜ë¡,
+ "ì¶ë ¥ë°ìŽíž");
+
ìŽ ì¶ì ìì€ ì§ì ìì ììŒë칎ë íëë ë ê°ì ì¶ì ìì€ì ìŒì¹í©ëë€. ë¬ëŠ¬
GnuplotHelper ììì ë ê°ì ë°ìŽí° ê³ìŽìŽ ëìŒí í롯ì ì€ì²©ëììµëë€.
ë³ëì íìŒìŽ ëì€í¬ì êž°ë¡ë©ëë€.
ììœ
ë°ìŽí° ìì§ ì§ìì ns-3.18ì ìë¡ìŽ êž°ë¥ìŽë©° ìê³ìŽ ì ê³µì ìí Ʞ볞 ì§ìì ëë€.
ì¶ë ¥ìŽ ì¶ê°ëììµëë€. ììì ì€ëª í Ʞ볞 íšíŽì
êž°ì¡Ž íë¡ëž ë° ì¶ì ìì€ì ì§ì ë²ì. ë€ìì í¬íší ë ë§ì êž°ë¥
íµê³ ì²ëŠ¬ë í¥í 늎늬ì€ì ì¶ê°ë ìì ì ëë€.
ê²°ë¡
ì 묌
ìŽ ë¬žìë ìŽì ìë 묞ìì ëë€. ì°ëŠ¬ë ê·žê²ìŽ ìê°ìŽ ì§ëšì ë°ëŒ ì±ì¥íꞰ륌 í¬ë§íê³ êž°ëí©ëë€
ì ì ë ë§ì ëížì 볌ížë¥Œ ë®êž° ìíŽ NS-3.
맀ëŽìŒê³Œ íí ëŠ¬ìŒ ì±í°ë¥Œ ìì±íë ê²ì ì°ëŠ¬ 몚ëê° í¥ë¶íë ìŒìŽ ìëëë€.
íë¡ì ížì ë§€ì° ì€ìí©ëë€. ë¹ì ìŽ ìŽ ë¶ìŒì ì 묞ê°ëŒë©Ž, ì ë°
ì êž°ì¬íë ê²ì ê³ ë €íë€ NS-3 ìŽ ì¥ ì€ íë륌 ì ê³µíšìŒë¡ìš; ëë ë€ë¥ž ì¥
ì€ìíë€ê³ ìê°í ì ììµëë€.
ííì¬
NS-3 í¬ê³ ë³µì¡í ìì€í ì ëë€. ë¹ì ìŽ ëªšë ê²ì 컀ë²íë ê²ì ë¶ê°ë¥í©ëë€.
íëì ìì ììµììì ìììŒ í©ëë€. ë ë§ì ê²ì ë°°ì°ê³ ì¶ì ë ìë€ì
ë€ì ì¶ê° 묞ì륌 ìœìŒììì€.
· NS-3 ì¡°ì
· NS-3 ëªšëž ëŒìŽëžë¬ëŠ¬ 묞ì
· NS-3 Doxygen(API 묞ì)
· NS-3 ìí€
- NS-3 ê°ë°í.
onworks.net ìë¹ì€ë¥Œ ì¬ì©íì¬ ns-3-tutorial ìšëŒìž ì¬ì©