
5 ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
5.1 ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»
5.1.1 ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅
5.1.2 Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅
5.1.3 ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π² ΠΊΠΎΠ΄Π° Π²ΠΈ
5.2 ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄
5.2.1 ΠΠ²ΡΡΡΠ°ΠΉΠ΄Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅
5.2.2 Π£Π»Π°Π²ΡΠ½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ Π²ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
5.3 ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
5.3.1 ASCII ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
ΠΠ°ΡΡΠΈΠ½Π³ Π½Π° ASCII ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
5.3.2 ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° PCAP
ΠΠ»Π°Π²Π° 5
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
5.1 ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»
ΠΠ΅ΡΠ΅ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ Π»ΠΎΠ³ΠΈΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ» Π½Π° nsβ3, ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΡΠΊΡΠΈΠΏΡΠ°. Π ΡΠ°Π·ΠΈ Π³Π»Π°Π²Π° ΡΠ΅ ΡΠ΅ Π²Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΡΠ±Π»ΠΈΠ·ΠΎ Π² Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅. first.ccΠΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈ nsβ3 Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π² 'ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°' (ΠΊΠΎΡΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ stderr Π² Unix-Π±Π°Π·ΠΈΡΠ°Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ) ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ. Π Π΄ΡΡΠ³ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π°ΡΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΡΡΠ΅Π΄ΡΡΠ²Π°ΡΠ° Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π±ΡΡΠ·ΠΎ Π΄Π° 'ΡΠ°Π·ΠΌΠΈΡΡ' ΠΈΠ·Ρ ΠΎΠ΄Π°.
5.1.1 ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅
ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² nsβ3, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π½ΠΈΠ²Π° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡ ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ, ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π΅Π½, ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΎ, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π·Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΌΠ°ΡΠ°Π±. ΠΠ° ΡΠΎΠ²Π° ΡΠ»ΡΠΆΠ°Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΈΡΠ΅ Π½ΠΈΠ²Π° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡ. ΠΠΎΠ΄ΡΠ»ΡΡ Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π½Π° nsβ3 ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΡ Π½Π°ΡΠΈΠ½ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ° Π²ΠΈ.
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ β ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ β Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π²ΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ ΠΏΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅ (Π·Π° ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π²ΠΈΠΆΡΠ΅ ΡΠ°ΡΡ 5.3). ΠΠΎΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ, ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ Π·Π° Π±ΡΡΠ·ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎ Π²ΡΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ΅Π΄Π΅ΠΌ Π½ΠΈΠ²Π° (ΡΠΈΠΏΠΎΠ²Π΅) ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ ΠΏΠΎ Π²ΡΠ·Ρ ΠΎΠ΄ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡ.
LOG_ERROR β ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ (ΡΠ²ΡΡΠ·Π°Π½ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_ERROR);
- LOG_ERROR β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ (ΡΠ²ΡΡΠ·Π°Π½ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_ERROR);
- LOG_WARN β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ (ΡΠ²ΡΡΠ·Π°Π½ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_WARN);
- LOG_DEBUG β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅Π΄ΠΊΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ (ΡΠ²ΡΡΠ·Π°Π½ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_DEBUG);
- LOG_INFO β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π½Π°ΠΏΡΠ΅Π΄ΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° (ΡΠ²ΡΡΠ·Π°Π½ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_INFO);
- LOG_FUNCTION β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΎΠΏΠΈΡΠ²Π°ΡΠΈ Π²ΡΡΠΊΠ° ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ (Π΄Π²Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°: 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 β Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (Π±Π΅Π· ΡΠ²ΡΡΠ·Π°Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅).
ΠΠ°ΠΆΠ΄ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΠΌΡΠ»Π°ΡΠΈΠ²Π½ΠΎ. ΠΠΎΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° sh-ΡΡΠ΅Π΄Π° NS_LOG ΠΈΠ»ΠΈ ΡΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ ΠΈΠΌΠ° Doxygen-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅Π³Π° Π΅ ΡΠΎΡΠ½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Ρ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΡΠ΅, Π°ΠΊΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠ΅.
Π‘Π΅Π³Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΠ΅ ΠΏΡΠΎΡΠ΅Π»ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ Π·Π½Π°Π½ΠΈΡ, Π·Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΈΡ ΡΠΊΡΠΈΠΏΡ scratch/myfirst.cc, ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π»ΠΈ.
5.1.2 Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅
ΠΠ΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NS_LOG, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅, Π½ΠΎ ΠΏΡΡΠ²ΠΎ, ΠΏΡΠΎΡΡΠΎ Π·Π° ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½Π΅, ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠ°ΠΊΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ,
$ .\/waf --run scratch/myfirstΠ’ΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π²Π΅ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ Π½Π° ΠΏΡΡΠ²Π°ΡΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ns-3
$ Waf: ΠΠ»ΠΈΠ·Π°ΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\nWaf: ΠΠ·Π»ΠΈΠ·Π°ΠΌ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build' 'build'\nΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠ΅Π½ΠΎ (0.413s)\nΠΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° Π΄ΠΎ 10.1.1.2\nΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.1\nΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.2ΠΠΊΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ Β«ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈΡΠ΅Β» ΠΈ Β«ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΠ΅Β» ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ UdpEchoClientApplication ΠΈ UdpEchoServerApplication. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠΌΠΎΠ»ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΠΌ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ΡΡΠ΅Π· ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NS_LOG.
ΠΡ ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠ°ΡΡΠΊ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ°, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ shell, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° sh, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Β«VARIABLE = valueΒ». ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ shell, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° csh, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠ΅ ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Β«setenv VARIABLE valueΒ», ΠΈΠ·ΠΈΡΠΊΡΠ²Π°Π½ ΠΎΡ ΡΠ΅Π·ΠΈ shell.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ UDP echo-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠ΅Π΄ ΠΊΠΎΠ΄ Π² scratch/myfirst.cc,
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);Π’ΠΎΠ²Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅ LOG_LEVEL_INFO. ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ»Π°Π³Π° Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅, Π²ΡΡΡΠ½ΠΎΡΡ Π²ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ ΡΠΎΠ²Π° Π½ΠΈΠ²ΠΎ ΠΈ Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠΈ Π½ΠΈΠ²Π°. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΠΌΠ΅ NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN ΠΈ NS_LOG_ERROR. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ²ΠΈΡΠΈΠΌ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π±Π΅Π· Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΈ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NS_LOG ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
$ export NS_LOG=UdpEchoClientApplication=level_allΠ’Π°ΠΊΠ° Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° NS_LOG Π½Π° sh-shell-Π°,
UdpEchoClientApplication=level_allΠΡΠ²Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅, Π° Π΄ΡΡΠ½Π°ΡΠ° ΡΠ°ΡΡ Π΅ ΡΠ»Π°Π³ΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ Π·Π° Π½Π΅Π³ΠΎ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½ΠΈΠ²Π° Π½Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Ρ Π·Π°Π΄Π°Π΄Π΅Π½Π° ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ NS_LOG, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ns-3 ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄:
Waf: ΠΠ»ΠΈΠ·Π°ΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\nWaf: ΠΠ·Π»ΠΈΠ·Π°ΠΌ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\n'build' ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠ΅Π½ΠΎ (0.404s)\nUdpEchoClientApplication:UdpEchoClient()\nUdpEchoClientApplication:SetDataSize(1024)\nUdpEchoClientApplication:StartApplication()\nUdpEchoClientApplication:ScheduleTransmit()\nUdpEchoClientApplication:Send()\nΠΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° Π΄ΠΎ 10.1.1.2\nΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.1\nUdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)\nΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.2\nUdpEchoClientApplication:StopApplication()\nUdpEchoClientApplication:DoDispose()\nUdpEchoClientApplication:~UdpEchoClient()ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π²Π΅ΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ NS_LOG_FUNCTION. Π’Ρ ΠΏΠΎΠΊΠ°Π·Π²Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Π² ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° (ΠΏΠΎΠ½Π΅)NS_LOG_FUNCTION (this). ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ NS_LOG_FUNCTION_NOARGS ()
ΡΠ°ΠΌΠΎ Π² ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° nsβ3 Π½ΡΠΌΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΠΊΠ°ΠΊΠ²Π°ΡΠΎ ΠΈ Π΄Π° Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ° ΠΎΡΡΠ°Π²Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π° ΠΌΠΎΠ΄Π΅Π»Π°. Π ΡΠ»ΡΡΠ°ΠΈΡΠ΅ Π½Π° Π΅Ρ
ΠΎ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅.
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ, ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π΄Π° UdpEchoClientApplication ΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π°, Π½Π° ΠΌΡΡΡΠΎΡΠΎ, ΠΊΡΠ΄Π΅ΡΠΎ Π±ΠΈΡ ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°Π»ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π·Π° ΠΎΠ±Ρ Π²Π°Ρ Π½Π° C++ (: :). Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ.
ΠΠ°ΠΈΡΡΠΈΠ½Π°, ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°, Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ° ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ°ΠΉΠ» ΠΈ ΠΊΠ»Π°ΡΠ°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°, Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°, ΠΈ ΡΠ°ΠΌ ΠΈΠΌΠ° Π΅Π΄Π½ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ Π½Π°ΡΠΈΠ½ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΈΠ½ Π½Π°ΡΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»Π½ΠΎ Π΄Π° ΠΎΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π² Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΠΈΡΡΠΈΠ½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅. ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ Π²ΡΠΏΡΠΎΡΠ° ΠΎΡΠΊΡΠ΄Π΅ ΠΈΠ΄Π²Π° ΡΠ΅Π΄ΠΈΡΠ° "Received 1024 bytes from 10.1.1.2". ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π½ΠΈΠ²ΠΎΡΠΎ prefix_func Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NS_LOG. ΠΠΏΠΈΡΠ°ΠΉΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ,
$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΊΠ°Π²ΠΈΡΠΊΠΈΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»Π½Π°ΡΠ° ΡΠ΅ΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΠΠ, ΡΡΡΠΎ Π΅ ΡΠ²ΡΡΠ·Π²Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π² Unix. Π‘Π΅Π³Π°, Π°ΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°, ΡΠ΅ Π²ΡΡΠΊΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π΄Π°Π΄Π΅Π½ΠΈΡ Π΄Π½Π΅Π²Π½ΠΈΠΊ ΠΈΠΌΠ° ΠΏΡΠ΅ΡΠΈΠΊΡ Ρ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: ΠΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²ΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
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()
UdpEchoClientApplication:~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'
'build' Π·Π°Π²ΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
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()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°, Π² ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΠΎ ΠΠΠ Π±ΠΈΡ prefix_time:
$ 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`
`build` ΠΏΡΠΈΠΊΠ»ΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.418s)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
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
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡΡ Π·Π° UdpEchoServer Π΅ Π±ΠΈΠ» ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ° 0 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π’ΠΎΠ²Π° Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΏΡΠ΅Π΄ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°, Π½ΠΎ ΡΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΡΠΎ Π½ΡΠ»Π° ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π‘ΡΡΠΎΡΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° UdpEchoClient.
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
Waf: ΠΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
`build` ΠΏΡΠΈΠΊΠ»ΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.418s)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
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
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()ΠΠ΅ΠΊΠ° ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡΡ scratch/first.cc ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π΅Ρ ΠΎ-ΡΡΡΠ²ΡΡ Π΅Π΄Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΏΡΠ΅Π΄ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΡΡ StartApplication Π½Π° ΡΡΡΠ²ΡΡΠ° Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π² ΠΏΡΡΠ²Π°ΡΠ° ΡΠ΅ΠΊΡΠ½Π΄Π°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅, ΡΠ΅ Π΅Ρ ΠΎ-ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠ² Π²ΡΠΎΡΠ°ΡΠ° ΡΠ΅ΠΊΡΠ½Π΄Π° Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΏΠΎΠΈΡΠΊΠ°Ρ ΠΌΠ΅ Π² ΡΠΊΡΠΈΠΏΡΠ°.
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ»Π΅Π΄ΠΈΡΠ΅ Ρ ΠΎΠ΄Π° Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ScheduleTransmit Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ HandleRead Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π΅Ρ ΠΎ-ΡΡΡΠ²ΡΡ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΈΠ·ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠ΅Π· Π΄Π²ΡΡΠΎΡΠΊΠΎΠ²Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ° Π΅ 3,69 ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ Π΅Ρ ΠΎ-ΡΡΡΠ²ΡΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΠ» Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°, ΡΠ»Π΅Π΄ Π·Π°Π±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠ°Π½Π°Π»Π°, Π²ΠΈΠ΅ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ Π΅Ρ ΠΎ-ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΅Ρ ΠΎ-ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ HandleRead.
Π ΡΠ°Π·ΠΈ ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ° ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ Π½Π΅Π·Π°Π±Π΅Π»ΡΠ·Π°Π½ΠΎ Π·Π° Π²Π°Ρ. ΠΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠ°ΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° NS_LOG,
$ export 'NS_LOG=*=level_all|prefix_func|prefix_time'ΠΠ²Π΅Π·Π΄ΠΈΡΠΊΠ°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π΅ ΡΠΈΠΌΠ²ΠΎΠ» Π½Π° ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π·Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅. Π’ΠΎΠ²Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°. ΠΡΠΌΠ° Π΄Π° Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°ΠΌ ΠΈΠ·Ρ ΠΎΠ΄Π° ΡΡΠΊ (Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΈΡΠ°Π½Π΅ ΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° 1265 ΡΠ΅Π΄Π° ΠΈΠ·Ρ ΠΎΠ΄ Π·Π° Π΅Π΄ΠΈΠ½ Π΅Ρ ΠΎ-ΠΏΠ°ΠΊΠ΅Ρ), Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠ°ΠΉΠ» ΠΈ Π΄Π° Ρ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΡΠ΅ Π² Π»ΡΠ±ΠΈΠΌΠΈΡ ΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ.
$ .\/waf --run scratch\/myfirst > log.out 2>&1ΠΠΈΡΠ½ΠΎ Π°Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠ°Π·ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ Π½ΡΠΌΠ°ΠΌ ΠΈΠ΄Π΅Ρ ΠΊΡΠ΄Π΅ Π½Π΅ΡΠ°ΡΠ° ΡΠ° ΡΡΡΠ³Π½Π°Π»ΠΈ Π½Π°ΠΎΠΏΠ°ΠΊΠΈ. ΠΠΎΠ³Π° Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ»Π΅Π΄Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°, Π±Π΅Π· Π΄Π° Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌ ΡΠΎΡΠΊΠΈ Π½Π° ΡΠΏΠΈΡΠ°Π½Π΅ ΠΈ Π΄Π° ΡΡΡΠΏΠ²Π°ΠΌ ΠΏΡΠ΅Π· ΠΊΠΎΠ΄Π° Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°. ΠΠΎΠ³Π° ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΌ ΠΈΠ·Ρ ΠΎΠ΄Π° Π² Π»ΡΠ±ΠΈΠΌΠΈΡ ΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈ Π΄Π° ΡΡΡΡΡ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠ°ΠΊΠ²Π°ΠΌ, ΠΈ Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌ ΠΊΠ°ΠΊ ΡΡΠ°Π²Π° Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΡΡΠΌ ΠΎΡΠ°ΠΊΠ²Π°Π». ΠΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌ ΠΎΠ±ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄, ΠΎΡΠΈΠ²Π°ΠΌ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π·Π° ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π’ΠΎΠ·ΠΈ Π²ΠΈΠ΄ ΠΈΠ·Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΊΡΠΈΠΏΡΡΡ Π²ΠΈ ΠΏΡΠ°Π²ΠΈ Π½Π΅ΡΠΎ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ. ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΠΏΡΠΎΠΏΡΡΠ½Π΅ΡΠ΅ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ ΠΎΠ±ΡΠ°Ρ. ΠΠΎΠ³Π²Π°Π½Π΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠ±ΡΠ°ΡΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΈ.
5.1.3 ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π² ΠΊΠΎΠ΄Π° Π²ΠΈ
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π½ΠΎΠ²ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠΈΠΌΡΠ»Π°ΡΠΈΠΈΡΠ΅ ΡΠΈ, ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° log ΠΎΡ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ°. ΠΠ΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π° Π² ΡΡΠ΅Π½Π°ΡΠΈΡ myfirst.cc, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² βΡΠΈΡΡΠ°ΡΠ°β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ ΡΠΌΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π»ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅:
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");ΠΠ½Π°Π΅ΡΠ΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π»ΠΎΠ³Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NS_LOG Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²Π°. ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΡΠΊΠΎΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ°ΠΊΡΠΎΡΡΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π½ΠΈΠ²ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, Π΅ NS_LOG_INFO. ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π²ΡΠ·Π»ΠΈ), ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΡΠ²Π°, ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡΡ Π΅ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ ("Creating Topology"). Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π² ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠ΄ΠΎΠ² ΡΡΠ°Π³ΠΌΠ΅Π½Ρ,
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ scratch/myfirst.cc Π² Π»ΡΠ±ΠΈΠΌΠΈΡ Π²ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ΅Π΄Π°,
NS_LOG_INFO ("Creating Topology");
ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅,
NodeContainer nodes;
nodes.Create (2);Π‘Π΅Π³Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ waf, ΠΈ ΠΈΠ·ΡΠΈΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° NS_LOG, Π·Π° Π΄Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ:
$ .\/waf
$ export NS_LOG=
Π‘Π΅Π³Π°, Π°ΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°,
$ .\/waf --run scratch\/myfirstΠ½ΡΠΌΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΡ Ρ Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ (FirstScriptExample) Π½Π΅ Π΅ Π±ΠΈΠ» Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½. ΠΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ FirstScriptExample Π½Π° Π½ΠΈΠ²ΠΎ Π½Π΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠΎ ΠΎΡ NS_LOG_INFO. ΠΠΊΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π½ΠΈΠ²ΠΎ Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΊΠ°,
$ export NS_LOG=FirstScriptExample=infoΠΠΊΠΎ Π²ΠΈΠ΅ ΡΠ΅Π³Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΒ»
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
Waf: ΠΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
`build` ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠΈ (0.404s)
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ
ΠΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° Π΄ΠΎ 10.1.1.2
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.1
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.25.2 ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄
5.2.1 ΠΠ²ΡΡΡΠ°ΠΉΠ΄Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅
ΠΡΡΠ³ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° nsβ3 ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π±Π΅Π· ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. ΠΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΏΠ°ΡΡΠ΅Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅.
ΠΡΡΠ²Π°ΡΠ° ΡΡΡΠΏΠΊΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ Π΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΠ²ΠΈ ΠΏΠ°ΡΡΠ΅Ρ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡΠΎ (Π² ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°), ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π΅Π΄Π²Π°:
int
main (int argc, char *argv[])
{
...
CommandLine cmd;
cmd.Parse (argc, argv);
...
}Π’ΠΎΠ·ΠΈ ΠΏΡΠΎΡΡ Π΄Π²ΡΡΠ΅Π΄ΠΎΠ² ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΈ. Π’ΠΎΠΉ ΠΎΡΠ²Π°ΡΡ Π²ΡΠ°ΡΠ°ΡΠ° ΠΊΡΠΌ Π³Π»ΠΎΠ±Π°Π»Π½Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° nsβ3 ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π°ΡΡΠΈΠ±ΡΡΠΈ. ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π²Π΅ ΡΠ΅Π΄Π° ΠΊΠΎΠ΄ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° scratch/myfirst.cc. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΈ Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅, ΠΊΠ°ΡΠΎ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΏΡΠ°Π²ΠΈΠΌ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΏΠΎΠΌΠΎΡ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½,
$ ./waf --run "scratch/myfirst --PrintHelp"Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΠΏΠΎΠΌΠΎΠ»ΠΈ Waf Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° ΡΠΊΡΠΈΠΏΡΠ° scratch/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`
`build` ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠΈ (0.413s)
TcpL4Protocol:TcpStateMachine()
CommandLine:HandleArgument(): ΠΠ±ΡΠ°Π±ΠΎΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅=PrintHelp ΡΡΠΎΠΉΠ½ΠΎΡΡ=
--PrintHelp: ΠΠ΅ΡΠ°ΡΠ° ΡΠΎΠ²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ.
--PrintGroups: ΠΠ΅ΡΠ°ΡΠ° ΡΠΏΠΈΡΡΠΊΠ° Ρ Π³ΡΡΠΏΠΈ.
--PrintTypeIds: ΠΠ΅ΡΠ°ΡΠ° Π²ΡΠΈΡΠΊΠΈ TypeIds.
--PrintGroup=[group]: ΠΠ΅ΡΠ°ΡΠ° Π²ΡΠΈΡΠΊΠΈ TypeIds Π½Π° Π³ΡΡΠΏΠ°ΡΠ°.
--PrintAttributes=[typeid]: ΠΠ΅ΡΠ°ΡΠ° Π²ΡΠΈΡΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° typeid.
--PrintGlobals: ΠΠ΅ΡΠ°ΡΠ° ΡΠΏΠΈΡΡΠΊΠ° Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ.Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠΏΡΠΈΡΡΠ° --PrintAttributes. ΠΠ΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° nsβ3, ΠΏΡΠΈ ΠΈΠ·ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° first.cc. ΠΠΈΠ΄ΡΡ ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄,
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));ΠΈ ΠΊΠ°Π·Π°Ρ ΠΌΠ΅, ΡΠ΅ DataRate Π²ΡΡΡΠ½ΠΎΡΡ Π΅ Π°ΡΡΠΈΠ±ΡΡ. PointToPointNetDeviceΠΠ΅ΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΏΠ°ΡΡΠ΅ΡΠ° Π·Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π·Π° Π΄Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅. PointToPointNetDeviceΠ‘ΠΏΠΈΡΡΠΊΡΡ Ρ ΠΏΠΎΠΌΠΎΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ TypeId. Π’ΠΎΠ²Π° Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°, ΠΊΡΠΌ ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠΈΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΈ. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π±ΡΠ΄Π΅ ns3::PointToPointNetDevice. ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Π½Π°ΠΏΡΠ΅Π΄, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅,
$ . /waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΠΎΡΠΏΠ΅ΡΠ°ΡΠ° Π²ΡΠΈΡΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΡΠΎΠ·ΠΈ ΡΠΈΠΏ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ. Π©Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ° Ρ Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΈΠΌΠ°,
--ns3::PointToPointNetDevice::DataRate=[32768bps]:
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° ΡΠΊΠΎΡΠΎΡΡ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π·Π° ΡΠΎΡΠΊΠΎΠ²ΠΈ Π²ΡΡΠ·ΠΊΠΈΠ’ΠΎΠ²Π° Π΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ. PointToPointNetDevice. ΠΠΈΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠ°Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° ΠΡΡΠΈΠ±ΡΡ Π² PointToPointHelper ΠΏΠΎ-Π³ΠΎΡΠ΅. ΠΠ΅ΠΊΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΡΠΎΡΠΊΠΎΠ²ΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ. ΠΠ° ΡΠ΅Π»ΡΠ° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΠΌ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° SetDeviceAttribute ΠΈ SetChannelAttribute ΠΎΡ myfirst.cc, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΡΠΈΡΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ.
ΠΠ°ΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΡΡΡΠ±Π²Π° ΡΠ΅Π³Π° ΠΏΡΠΎΡΡΠΎ Π΄Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ° PointToPointHelper ΠΈ Π΄Π° Π½Π΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ,
...
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
...ΠΡΠΎΠ΄ΡΠ»ΠΆΠ΅ΡΠ΅ ΠΈ ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ² ΡΠΊΡΠΈΠΏΡ Ρ Waf (. /waf) ΠΈ Π½Π΅ΠΊΠ° Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ Π½Π°Π·Π°Π΄ ΠΈ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π·Π°ΠΏΠΈΡ ΠΎΡ UDP echo ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈΡ ΠΏΡΠ΅ΡΠΈΠΊΡ.
$ export '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'
'build' ΠΏΡΠΈΠΊΠ»ΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.405s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
ΠΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° Π΄ΠΎ 10.1.1.2
2.25732s ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.1
2.25732s Echoing packet
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()Π‘ΠΏΠΎΠΌΠ½Π΅ΡΠ΅ ΡΠΈ, ΡΠ΅ ΠΌΠΈΠ½Π°Π»ΠΈΡ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ, ΠΌΠΎΠΌΠ΅Π½ΡΡΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΎΡ echo ΡΡΡΠ²ΡΡΠ° Π±Π΅ΡΠ΅ Π½Π° 2.00369 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
2.00369s UdpEchoServerApplication:HandleRead(): ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.1Π‘Π΅Π³Π° ΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² 2.25732 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π’ΠΎΠ²Π° Π΅, Π·Π°ΡΠΎΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΌΠ°Π»ΠΈΡ ΠΌΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° PointToPointNetDevice ΠΎΡ ΠΏΠ΅Ρ ΠΌΠ΅Π³Π°Π±ΠΈΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Π΄ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΡΡΠΎ Π΅ 32768 Π±ΠΈΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΠΊΠΎ Π±ΡΡ ΠΌΠ΅ Π·Π°Π΄Π°Π²Π°Π»ΠΈ Π½ΠΎΠ²Π° DataRate Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π±ΠΈΡ ΠΌΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° ΡΡΠΊΠΎΡΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅. Π©Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½, ΡΡΠ³Π»Π°ΡΠ½ΠΎ ΡΠΎΡΠΌΡΠ»Π°ΡΠ°, ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½Π° ΠΎΡ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° Π·Π° ΠΏΠΎΠΌΠΎΡ:
$ . /waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° DataRate ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ Π½Π° ΠΏΠ΅Ρ ΠΌΠ΅Π³Π°Π±ΠΈΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. Π£ΡΡΠ΄Π΅Π½ΠΈ Π»ΠΈ ΡΡΠ΅ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°? ΠΠΊΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ Π·Π° Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ΅Π½Π°ΡΠΈΡ, ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΈ Π·Π°Π±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠ°Π½Π°Π»Π°, ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠΎ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ²Π΅ΡΠ»ΠΈΠ½Π°ΡΠ°. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠΌΠΎΠ»ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Π΄Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ Π½Π° ΠΊΠ°Π½Π°Π»Π°, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ:
$ .\/waf --run "scratch\/myfirst --PrintAttributes=ns3::PointToPointChannel"Π©Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ, ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡΡ Π·Π° Π·Π°Π±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠ°Π½Π°Π»Π° Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
--ns3::PointToPointChannel::Delay=[0ns]:
ΠΠ°Π±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ ΠΏΡΠ΅Π· ΠΊΠ°Π½Π°Π»Π°Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΡΠ΅Π·ΠΈ Π΄Π²Π΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅,
$ .\/waf --run "scratch\/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms"Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ°Ρ ΠΌΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π»ΠΈ DataRate ΠΈ Delay Π² ΡΡΠ΅Π½Π°ΡΠΈΡ:
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: ΠΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²ΡΡΡΠ΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.417s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
ΠΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° Π΄ΠΎ 10.1.1.2
2.00369s ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.1
2.00369s ΠΡΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈ 1024 Π±Π°ΠΉΡΠ° ΠΎΡ 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΡ ΡΡΡΠ²ΡΡΠ° ΡΠ»Π΅Π΄ 2,00369 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΡΡΡΠ½ΠΎΡΡ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΡΠ΅Π½Π°ΡΠΈΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ MaxPackets, ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°. UdpEchoClient.
ΠΠ°ΠΊ Π±ΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ ΡΠΎΠ²Π°? ΠΠΏΠΈΡΠ°ΠΉΡΠ΅. ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΠΌΡΡΡΠΎΡΠΎ, ΠΊΡΠ΄Π΅ΡΠΎ Π½ΠΈΠ΅ ΠΏΡΠ΅Π½Π°Π²ΠΈΠ²Π°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ MaxPackets Π² ΡΡΠ΅Π½Π°ΡΠΈΡ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ ΡΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠΎΠΌΠΎΡ Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠΎΠ²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ Π±ΡΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, ΠΎΡΠΏΠ΅ΡΠ°ΡΠ²Π°Π½ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΌΠ΅ ΡΡΠ°ΡΠ°ΡΠ΅Π»Π½ΠΈ, Π½Π°ΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°:
$ .\/waf --run "scratch\/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms
--ns3::UdpEchoClient::MaxPackets=2"ΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈΡΡ Π²ΡΠΏΡΠΎΡ, ΠΊΠΎΠΉΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΡΡΠΊ, Π΅ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΠΈΠΌ Π·Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ. ΠΡΠ½ΠΎΠ²ΠΎ, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ ΠΈΠΌΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΏΠΎΠΌΠΎΡ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ. ΠΠΊΠΎ ΠΏΠΎΠΈΡΠΊΠ°ΠΌΠ΅ ΠΏΠΎΠΌΠΎΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ:
$ ./waf --run "scratch/myfirst --PrintHelp"
myfirst [Program Arguments] [General Arguments]
General Arguments:
--PrintGlobals: Print the list of globals.
--PrintGroups: Print the list of groups.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintTypeIds: Print all TypeIds.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintHelp: Print this help message.ΠΠΊΠΎ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° βPrintGroupsβ, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ Π³ΡΡΠΏΠΈ. TypeId. ΠΠΌΠ΅Π½Π°ΡΠ° Π½Π° Π³ΡΡΠΏΠΈΡΠ΅ ΡΡΠ²ΠΏΠ°Π΄Π°Ρ Ρ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π² ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ (Π½ΠΎ Ρ Π³Π»Π°Π²Π½Π° Π±ΡΠΊΠ²Π°). ΠΠ΅ΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ»Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π°Π²Π΅Π΄Π½ΡΠΆ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ΄Π΅ ΠΎΠ±Π΅ΠΌΠ½ΠΎ, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠΈΠ»ΡΡΡ Π·Π° ΠΏΠ΅ΡΠ°Ρ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ Π³ΡΡΠΏΠΈ. Π’Π°ΠΊΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΉΠΊΠΈ ΡΠ΅ Π²ΡΡΡ Ρ ΠΌΠΎΠ΄ΡΠ»Π° βΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°β:
./waf --run "scratch/myfirst --PrintGroup=PointToPoint"
TypeIds in group PointToPoint:
ns3::PointToPointChannel
ns3::PointToPointNetDevice
ns3::PointToPointRemoteChannel
ns3::PppHeaderΠ’ΡΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π½Π° TypeId Π·Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²
--PrintAttributes = ns3::PointToPointChannel, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅.
ΠΡΠ΅ Π΅Π΄ΠΈΠ½ Π½Π°ΡΠΈΠ½ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ Π·Π° Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ Π΅ ΡΡΠ΅Π· Doxygen ns-3. Π’Π°ΠΌ ΠΈΠΌΠ° ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠ·Π±ΡΠΎΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π² ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΠ°.
5.2.2 Π£Π»Π°Π²ΡΠ½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ Π²ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Ρ
ΡΠΊΠΎΠ²Π΅ ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π° ΠΏΠ°ΡΡΠΈΠ½Π³ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. AddValue.
ΠΠ΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ, Π·Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ Π±ΡΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, ΠΏΠΎ ΡΡΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½. ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠΊΠ°Π»Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Ρ ΠΈΠΌΠ΅ΡΠΎ nPackets Π² ΡΡΠ½ΠΊΡΠΈΡ main. Π©Π΅ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π½Π° Π΅Π΄Π½Π°, Π·Π° Π΄Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎΡΠΎ Π½ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΠ° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ Π½Π° ΠΏΠ°ΡΡΠ΅ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ°Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΡΡΡΠ±Π²Π° Π΄Π° Ρ Π·Π°Ρ
Π²Π°Π½Π΅ΠΌ Π² ΠΏΠ°ΡΡΠ΅ΡΠ°. ΠΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° AddValue. ΠΡΠΈΠ΄Π΅ΡΠ΅ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° scratch/myfirst.cc ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠ΄,
int
main (int argc, char *argv[])
{
uint32_t nPackets = 1;
CommandLine cmd;
cmd.AddValue("nPackets", "Number of packets to echo", nPackets);
cmd.Parse (argc, argv);
...Π‘ΠΊΡΠΎΠ»ΠΈΡΠ°ΠΉΡΠ΅ Π½Π°Π΄ΠΎΠ»Ρ Π΄ΠΎ ΡΠΎΡΠΊΠ°ΡΠ° Π² ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° MaxPackets ΠΈ Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° nPackets Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΡΠ° 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'
'build' Π·Π°Π²Π΅ΡΡΠ΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.403s)
--PrintHelp: ΠΠ΅ΡΠ°ΡΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΌΠΎΡΠΈ.
--PrintGroups: ΠΠ΅ΡΠ°ΡΡ ΡΠΏΠΈΡΠΊΠ° Π³ΡΡΠΏΠΏ.
--PrintTypeIds: ΠΠ΅ΡΠ°ΡΡ Π²ΡΠ΅Ρ
TypeIds.
--PrintGroup=[group]: ΠΠ΅ΡΠ°ΡΡ Π²ΡΠ΅Ρ
TypeIds Π³ΡΡΠΏΠΏΡ.
--PrintAttributes=[typeid]: ΠΠ΅ΡΠ°ΡΡ Π²ΡΠ΅Ρ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ² typeid.
--PrintGlobals: ΠΠ΅ΡΠ°ΡΡ ΡΠΏΠΈΡΠΊΠ° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ:
--nPackets: ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΡ
Π°ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ -β-nPackets Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄,
$ .\/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'
'build' Π·Π°Π²Π΅ΡΡΠ΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ (0.404s)
0s UdpEchoServerApplication:UdpEchoServer()
1s 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
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()ΠΠΈΠ΅ ΡΠ΅Π³Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΡ
ΡΠ΅ Π΄Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠΎΡΡΠ° ΠΏΡΠΎΡΡΠΎ, Π½Π°Π»ΠΈ?
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π° nsβ3 ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅. ΠΠΊΠΎ ΡΡΠ΅ Π°Π²ΡΠΎΡ Π½Π° ΠΌΠΎΠ΄Π΅Π», ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π½ΠΎΠ²ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΊΡΠΌ Π²Π°ΡΠΈΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΈ ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΡ Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅. ΠΠΊΠΎ ΡΡΠ΅ Π°Π²ΡΠΎΡ Π½Π° ΡΠΊΡΠΈΠΏΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Π²Π°ΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΈ Π±Π΅Π·ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ Π΄Π° Π³ΠΈ ΡΠ²ΡΡΠ·Π²Π°ΡΠ΅ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
5.3 ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ΅Π» Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ²Π°Π½Π΅, Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° nsβ3 Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΠΎΠ²Π°. Π’ΡΠΉ ΠΊΠ°ΡΠΎ nsβ3 Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π° C++, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° C++:
#include <iostream>
...
int main ()
{
...
std::cout << "The value of x is " << x << std::endl;
...
}ΠΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π° Π·Π° Π»ΠΎΠ³ΡΠ°Π½Π΅, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠ° ΡΡΡΡΠΊΡΡΡΠ° ΠΊΡΠΌ Π²Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ·Π²Π΅ΡΡΠ½ΠΎ Π΅, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡΠΎΠΈΠ·ΡΠΈΡΠ°Ρ ΠΎΡ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈ Π·Π°ΡΠΎΠ²Π° Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΠΎΠ±ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΡ, Π·Π° Π΄Π° ΡΠ΅ΡΠΈΠΌ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΡΠ΅Π»ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ nsβ3:
ΠΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π·Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ.
ΠΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π·ΡΠΈΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π·Π°ΠΏΠΈΡ, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΠΎΡΠΌΠ°Ρ ΠΈΠ»ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡ Π½ΠΎΠ²ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π·Π° Π·Π°ΠΏΠΈΡ, Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΠ°;
ΠΠΏΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Ρ ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΠ°, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡ Π½ΠΎΠ²ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡ. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π·Π°ΠΏΠΈΡ ns-3 Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅.
Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π·Π°ΠΏΠΈΡ ns-3 Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡ, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Ρ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈΡΠ΅. ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Π·Π°ΠΏΠΈΡ ΡΠ° ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π·Π° ΡΡΠ±ΠΈΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ Π² ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²Π°ΠΆΠ½ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΊΠ°Π·Π²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Π·Π°ΠΏΠΈΡ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΈ ΡΠ° Π±Π΅Π·ΠΏΠΎΠ»Π΅Π·Π½ΠΈ, Π°ΠΊΠΎ Π½Π΅ ΡΠ° 'ΡΠ²ΡΡΠ·Π°Π½ΠΈ' Ρ Π΄ΡΡΠ³ΠΈ ΡΠ°ΡΡΠΈ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ°Π²ΡΡ Π½Π΅ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° ΠΎΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. ΠΠ°ΠΏΠΈΡΠ²Π°ΡΠΈΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ±ΠΈΡΠΈΡ ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Π·Π°ΠΏΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π½Π° Π·Π°ΠΏΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ»Π΅Π΄ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° Π·Π°ΠΏΠΈΡ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠΈΡΠ΅ ΡΠ°ΡΡΠΈ ΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ.
Π Π°Π·ΡΠΌΠ½Π°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° ΡΠ°ΠΊΠΎΠ²Π° ΡΠ²Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΡΠ²ΡΡΠ·Π²Π°Ρ Π½ΠΎΠ²ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ ΠΊΡΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΠ°. Π’Π°ΠΊΠ°, Π² Π΄Π°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π½ΠΎΠ² Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² ΡΠ²ΠΎΡ ΡΠΊΡΠΈΠΏΡ ΠΈ Π΄Π° Π³ΠΎ ΡΠ²ΡΡΠΆΠ΅ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π·Π°ΠΏΠΈΡ, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°, ΡΠ°ΠΌΠΎ ΡΡΠ΅Π· ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΡΠΊΡΠΈΠΏΡ.
Π ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ ΠΈ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠΈΠΆΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ ns-3 ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅.
5.3.1 ASCII ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
ns-3 ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎΠΌΠΎΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, Π·Π° Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Ρ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΊΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ASCII ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΎΡ ns-2, ΡΠΎΠ·ΠΈ ΡΠΈΠΏ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ out.tr, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅.
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ΅ Π·Π°Ρ
Π²Π°Π½Π΅ΠΌ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΡΠΊΠΎΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ASCII ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π² Π½Π°ΡΠΈΡ ΡΠΊΡΠΈΠΏΡ scratch/myfirst.cc. Π’ΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° Simulator::Run(), Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄:
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll(ascii.CreateFileStream("myfirst.tr"));ΠΠ°ΠΊΡΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΠΈ Π½Π° ns-3, ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠΌΠΎΡΠ΅Π½ ΠΎΠ±Π΅ΠΊΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ASCII ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½ΠΈΡ. ΠΡΠΎΡΠΈΡΡ ΡΠ΅Π΄ ΡΡΠ΄ΡΡΠΆΠ° Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΅ΡΠΎΠ΄ΡΡ βΠ²ΡΡΡΠ΅β CreateFileStream() ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ΄ΠΈΠΎΠΌΠ° Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ΅Π½ ΠΎΠ±Π΅ΠΊΡ, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΎΠ±Π΅ΠΊΡ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎΡΠΎΠΊ Π² ΡΡΠ΅ΠΊΠ° (Π±Π΅Π· ΠΈΠΌΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ) ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π΄Π°Π΄Π΅ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄. Π Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΡΠ΅ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠΈΠΌ Π² ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ, Π½ΠΎ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ, Π΅, ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΎΠ±Π΅ΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ myfirst.tr ΠΈ Π³ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅ Π½Π° ns-3. ΠΠΈΠ΅ ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π½Π° ns-3 Π³ΡΠΈΠΆΠ°ΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ ΠΎΠ±Π΅ΠΊΡ ΠΏΡΠ΅Π· ΡΡΠ»ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ° ΠΌΡ, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΈ ΠΎΡ ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΡΠΎ (ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ) ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΊΠΎΠΏΠΈΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ Π½Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ C++.
ΠΡΠ½ΡΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ EnableAsciiAll() ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ° ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°, ΡΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ASCII ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΡΠ·ΠΊΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ° ΠΈ ΡΠ΅ ΠΈΡΠΊΠ°ΡΠ΅, Π·Π° Π΄Π° (ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅) ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΡΠΈ Π½Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π² ASCII ΡΠΎΡΠΌΠ°Ρ.
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ ns-2, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½ΠΈΡΠ΅ ΡΡΠ±ΠΈΡΠΈΡ ΡΠ° Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΈ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, ΠΊΠΎΠΈΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΡΡΠ±ΠΈΡΠΈΡ β+β, β-β, βdβ ΠΈ βrβ.
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΈ Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄:
$ .\/waf --run scratch/myfirstΠΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π°, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ Waf, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ β'build' finished successfullyβ (ΡΠ±ΠΎΡΠΊΠ°ΡΠ° Π·Π°Π²ΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ) Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠ°Π±ΠΎΡΠ΅ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°.
ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ myfirst.tr. ΠΠΎΡΠ°Π΄ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Waf, ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ°ΠΉΠ»ΡΡ Π½Π΅ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π² Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΡΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°Ρ ΡΡΠ°ΡΠ΅ΡΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π° Waf --cwd. ΠΠΈΠ΅ Π½Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΡ
ΠΌΠ΅ ΡΠΎΠ²Π°, ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π° Π΄Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°ΠΉΠ»Π° ASCII ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° myfirst.tr Π² Π»ΡΠ±ΠΈΠΌΠΈΡ Π²ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠΈΠ΄Π΅ΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π½Π°ΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
ΠΠ°ΡΡΠΈΠ½Π³ Π½Π° ASCII ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π΄ΠΎΡΡΠ° ΠΏΠ»ΡΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ, Π½ΠΎ ΠΏΡΡΠ²ΠΎΡΠΎ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΅, ΡΠ΅ ΡΠ°ΠΉΠ»ΡΡ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅. Π’ΠΎΠ²Π° ΡΠ΅ ΡΡΠ°Π½Π΅ ΡΡΠ½ΠΎ, Π°ΠΊΠΎ ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°.
ΠΡΠ΅ΠΊΠΈ ΡΠ΅Π΄ Π² ΡΠ°ΠΉΠ»Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ°ΡΠΈΡΠΎΠ²Π°ΠΌΠ΅ ΡΡΠ±ΠΈΡΠΈΡ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅, ΠΏΡΠΈΡΡΡΡΠ²Π°ΡΠ° Π²ΡΠ² Π²ΡΡΠΊΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ° Π² ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ°. ΠΠΏΠ°ΡΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π΅ ΠΎΠΏΠ°ΡΠΊΠ°, ΠΏΡΠ΅Π· ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ Π²ΡΠ΅ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ Π·Π° ΠΊΠ°Π½Π°Π»Π° ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅Π΄ Π² ΡΠ°ΠΉΠ»Π° Ρ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΏΠΎΡΠ²Π° Ρ Π΅Π΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» (ΠΈ ΠΈΠΌΠ° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΠ»Π΅Π΄ Π½Π΅Π³ΠΎ). Π’ΠΎΠ·ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ΅ ΠΈΠΌΠ° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
+: Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠ΅ Π΅ ΡΠ»ΡΡΠΈΠ»Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π² ΠΎΠΏΠ°ΡΠΊΠ°;
-: Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠ΅ Π΅ ΡΠ»ΡΡΠΈΠ»Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ;
d: ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΅ Π±ΠΈΠ» ΠΎΡΡ
Π²ΡΡΠ»Π΅Π½, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π·Π°ΡΠΎΡΠΎ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π΅ ΠΏΡΠ»Π½Π°;
r: ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΅ Π±ΠΈΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΡΡΠ²ΠΈΡ ΡΠ΅Π΄ Π² ΡΠ°ΠΉΠ»Π° Ρ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°. Π©Π΅ Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Ρ Π½Π° ΡΠ°ΡΡΠΈ (Ρ ΠΎΡΡΡΡΠΏΠΈ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π½ΠΎΡΡ) ΠΈ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΡΠ΅Π΄Π° ΠΎΡΠ»ΡΠ²ΠΎ:
0 +
1 2
2 \/NodeList\/0\/DeviceList\/0\/$ns3::PointToPointNetDevice\/TxQueue\/Enqueue
3 ns3::PppHeader (\n4 Point-to-Point Protocol: IP (0x0021))\n6 ns3::Ipv4Header (\n7 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]\n8 length: 1052 10.1.1.1 > 10.1.1.2)\n9 ns3::UdpHeader (\n10 length: 1032 49153 > 9)\n11 Payload (size=1024)ΠΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠΎΠ²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° (ΡΠ΅Π΄ 0) Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΠΌΠ° ΡΠΈΠΌΠ²ΠΎΠ» +, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π² ΠΎΠΏΠ°ΡΠΊΠ° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅. ΠΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ (ΡΠ΅Π΄ 1) Π΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ, ΠΈΠ·ΡΠ°Π·Π΅Π½ΠΎ Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠΈ ΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ°Ρ ΠΌΠ΅ UdpEchoClientApplication ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ»Π΅Π΄ Π΄Π²Π΅ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π’ΡΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠ΅ ΡΠΎΠ²Π° Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π°.
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° (ΠΎΡ ΡΠ΅Π΄ 2) ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠΎΠΉ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π» ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅ (ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ Π·Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°). ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΎΡΠ΅Π½ΡΡ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π΅ NodeList. Π’ΠΎΠ²Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΎΡ ΠΊΠΎΠ΄Π° Π½Π° ns-3. Π Π½Π΅Π³ΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π² ΡΠΊΡΠΈΠΏΡΠ°. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² ΠΊΠΎΡΠ΅Π½Π°, Π² NodeList ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·Π»ΠΈ. Π’Π°ΠΊΠ° ΡΠ΅Π΄ΡΡ /NodeList/0 ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ Π½ΡΠ»Π΅Π²ΠΈΡ Π²ΡΠ·Π΅Π» Π² NodeList, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΡΠΎ βΠ²ΡΠ·Π΅Π» 0β. ΠΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π» ΠΈΠΌΠ° ΡΠΏΠΈΡΡΠΊ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ. Π’ΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΠΏΡΠΎΠΈΠ·ΡΠΈΡΠ° ΠΎΡ DeviceList/0, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½ΡΠ»Π΅Π²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΎ Π½Π° Π²ΡΠ·Π΅Π»Π°.
Π‘Π»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΠΏΠΎΠ΄ΠΈΠ·ΡΠ°Π·ΡΠ²Π°Π½Π΅, $ns3::PointToPointNetDevice, ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π½Π° Π½ΡΠ»Π΅Π²Π°ΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡ: ΡΠΏΠΈΡΡΠΊΠ° Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π° Π½ΡΠ»Π΅Π²ΠΈΡ Π²ΡΠ·Π΅Π». ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° +, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² ΡΠ΅Π΄ 0, ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ. Π’ΠΎΠ²Π° Π΅ ΠΎΡΡΠ°Π·Π΅Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ Π½Π° βΠΏΡΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ°β: TxQueue/Enqueue.
ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈ Π² ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΈ. Π Π΅Π΄ΠΎΠ²Π΅ΡΠ΅ 3-4 ΡΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ°Π½ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°. Π Π΅Π΄ΠΎΠ²Π΅ΡΠ΅ 5-7 ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡΡ ΠΈΠΌΠ° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° Π²Π΅ΡΡΠΈΡ IP4 ΠΈ Π΅ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π» Π½Π° IP Π°Π΄ΡΠ΅Ρ 10.1.1.1 ΠΈ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° 10.1.1.2. Π Π΅Π΄ΠΎΠ²Π΅ΡΠ΅ 8-9 ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠΌΠ° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ UDP ΠΈ Π½Π°ΠΊΡΠ°Ρ ΡΠ΅Π΄ 10 ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡΡ ΡΠΎΠ²Π°Ρ β ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡΠ΅ 1024 Π±Π°ΠΉΡΠ°.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΡΠ΅Π΄ Π² ΡΠ°ΠΉΠ»Π° Ρ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΡΡΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ ΠΎΡ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΡΠΈΡ Π²ΡΠ·Π΅Π».
Π’ΡΠ΅ΡΠΈΡΡ ΡΠ΅Π΄ Π² ΡΠ°ΠΉΠ»Π° Ρ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΅ ΠΏΡΠΈΠ΅Ρ ΠΎΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π° Π²ΡΠ·Π΅Π»Π° Ρ Π΅Ρ ΠΎ ΡΡΡΠ²ΡΡΠ°. ΠΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅Π» ΡΡΠΌ ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
0 r
1 2.25732
2 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
3 ns3::Ipv4Header (
4 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
5 length: 1052 10.1.1.1 > 10.1.1.2)
6 ns3::UdpHeader (
7 length: 1032 49153 > 9)
8 Payload (size=1024)ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π²Π΅ΡΠ΅ Π΅ r, Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ Π΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎ Π΄ΠΎ 2,25732 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠΊΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ ΡΡΠ΅ ΡΠ»Π΅Π΄Π²Π°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π±Π½ΠΈΠΊΠ°, ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ DataRate Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ°Π½Π°Π»Π° Π½Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. Π’ΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈ Π±ΡΠ΄Π΅ ΠΏΠΎΠ·Π½Π°ΡΠΎ, ΠΊΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ Π³ΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΠ°ΡΡ.
ΠΠ°ΠΏΠΈΡΡΡ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° (ΡΠ΅Π΄ 2) Π±Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½, Π·Π° Π΄Π° ΠΎΡΡΠ°Π·ΠΈ, ΡΠ΅ ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π»ΠΈΠ·Π° ΠΎΡ Π²ΡΠ·Π΅Π» 1 (/NodeList/1) ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈΠ½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (/MacRx). Π’ΡΡΠ±Π²Π° Π΄Π° Π²ΠΈ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠ΅Π· ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°, ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ.
5.3.2 ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° PCAP
ΠΠΎΠΌΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΡΠ° ns-3 ΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° Π² ΡΠΎΡΠΌΠ°Ρ .pcap. ΠΠΊΡΠΎΠ½ΠΈΠΌΡΡ pcap (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΠΈΡΠ΅ Ρ ΠΌΠ°Π»ΠΊΠΈ Π±ΡΠΊΠ²ΠΈ) ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΠ»ΠΎΠ² Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π΅ API, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»Π° .pcap. ΠΠ°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ΡΠ΅ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΡΠΎΠ·ΠΈ ΡΠΎΡΠΌΠ°Ρ, Π΅ Wireshark (ΠΏΡΠ΅Π΄ΠΈ Π½Π°ΡΠΈΡΠ°Π½Π° Ethereal). ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ Π½Π° ΡΡΠ°ΡΠΈΠΊ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΎΠ·ΠΈ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, Π½Π°Π»ΠΈΡΠ½ΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° pcap ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ. Π ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌ Π²ΡΡΡ Ρ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° pcap ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° tcpdump.
ΠΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° pcap ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Ρ Π΅Π΄Π½Π° ΡΠ΅Π΄ ΠΊΠΎΠ΄.
pointToPoint.EnablePcapAll ("myfirst");ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ΅Π΄ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ ΠΊΠΎΠ΄Π° Π½Π° ASCII ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠΎΠΊΡ-ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ Π² scratch/myfirst.cc. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π° βmyfirstβ, Π° Π½Π΅ βmyfirst.pcapβ ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ. Π’ΠΎΠ²Π° Π΅, Π·Π°ΡΠΎΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡ, Π° Π½Π΅ ΠΏΡΠ»Π½ΠΎ ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ». ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΡΠ° ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΡΡ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΡΠ°ΠΉΠ» Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° Π·Π° Π²ΡΡΠΊΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ point-to-point. ΠΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠ°, Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π²ΡΠ·Π΅Π»Π°, Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΠΈ ΡΡΡΠΈΠΊΡΠ° β.pcapΒ».
ΠΠ° Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΈΠΌΠ΅Π½Π°ΡΠ° βmyfirst-0-0.pcapΒ» ΠΈ Β«myfirst-1-0.pcapβ, ΠΊΠΎΠΈΡΠΎ ΡΠ° pcap ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ Π·Π° Π²ΡΠ·Π΅Π» 0-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ 0 ΠΈ Π²ΡΠ·Π΅Π» 1-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ 0 ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ΅Π΄Π° ΠΊΠΎΠ΄ Π·Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° pcap ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
$ .\/waf --run scratch/myfirstΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΈ ΡΠ°ΠΉΠ»Π°: ΡΠ°ΠΉΠ» Π·Π° ASCII ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° myfirst.tr, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ myfirst-0-0.pcap ΠΈ myfirst-1-0.pcap β Π½ΠΎΠ²ΠΈ pcap ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠΎΠΊΡ-ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΠΌΠ΅.
Π§Π΅ΡΠ΅Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° Ρ tcpdump
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π°ΠΉ-Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° tcpdump Π·Π° ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° 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
ΠΠΊΠΎ Π½Π΅ ΡΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ Wireshark, ΠΈΠΌΠ° ΡΠ΅Π±ΡΠ°ΠΉΡ, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: . Wireshark β ΡΠΎΠ²Π° Π΅ Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π·Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Wireshark, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ Π΄Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ, ΠΊΠ°ΠΊΡΠΎ Π°ΠΊΠΎ ΡΡΠ΅ Π·Π°Ρ Π²Π°Π½Π°Π»ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
