ns-3 ๋„คํŠธ์›Œํฌ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ํŠœํ† ๋ฆฌ์–ผ. ์ œ5์žฅ

ns-3 ๋„คํŠธ์›Œํฌ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ํŠœํ† ๋ฆฌ์–ผ. ์ œ5์žฅ
1,2 ์žฅ
3ํ™”
4ํ™”

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 ๋กœ๊น… ๋ชจ๋“ˆ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ.cc. ์ด ์žฅ์—์„œ๋Š” ๋กœ๊น… ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

5.1.1 ๋กœ๊น… ๊ฐœ์š”

๋งŽ์€ ๋Œ€ํ˜• ์‹œ์Šคํ…œ์€ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฉ”์‹œ์ง€ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฉฐ, ns-3๋„ ์˜ˆ์™ธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋งŒ "์šด์˜์ž ์ฝ˜์†”"(์ผ๋ฐ˜์ ์œผ๋กœ Unix ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ๋Š” stderr)์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋” ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋กœ๊น… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ฒ„๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ์ถœ๋ ฅ์ด ๋น ๋ฅด๊ฒŒ ํ๋ฆฟํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ns-3์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ˆ˜์ค€์˜ ์ •๋ณด ์ฝ˜ํ…์ธ ๊ฐ€ ์œ ์šฉํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ๋กœ๊น…์— ๋Œ€ํ•œ ์„ ํƒ์ ์ด๊ณ  ๋‹ค๋‹จ๊ณ„์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊น…์€ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜, ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜, ์ „์—ญ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ ์ •๋ณด ์ˆ˜์ค€์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ns-3 ๋กœ๊น… ๋ชจ๋“ˆ์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ”์šฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜(์ถ”์ )์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ธ๋ง ์ถœ๋ ฅ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(์ถ”์  ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠœํ† ๋ฆฌ์–ผ ์„น์…˜ 5.3 ์ฐธ์กฐ). ๋กœ๊น…์€ ๋””๋ฒ„๊น… ์ •๋ณด, ๊ฒฝ๊ณ , ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์–ป๊ฑฐ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋ชจ๋ธ์—์„œ ์–ธ์ œ๋“ ์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์„ ํ˜ธ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‹œ์Šคํ…œ์€ ์ •๋ณด ๋‚ด์šฉ์ด ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ 7๊ฐ€์ง€ ์ˆ˜์ค€(์œ ํ˜•)์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • 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 - ์—ฐ๊ด€๋œ ๋ฉ”์‹œ์ง€์˜ ๋ฌด์กฐ๊ฑด ๋กœ๊น…(์—ฐ๊ด€๋œ ๋กœ๊น… ์ˆ˜์ค€ ์—†์ด).

๊ฐ ๋ ˆ๋ฒจ์€ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋˜๋Š” ๋ˆ„์ ์ ์œผ๋กœ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊น…์€ NS_LOG sh ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋กœ๊น…ํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ๋กœ๊น… ์‹œ์Šคํ…œ์—๋Š” Doxygen ๋ฌธ์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์•„์ง ๊ฒ€ํ† ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ง€๊ธˆ์ด ๊ฒ€ํ† ํ•˜๊ธฐ์— ์ข‹์€ ์‹œ๊ธฐ์ž…๋‹ˆ๋‹ค.

์ด์ œ ์„ค๋ช…์„œ๋ฅผ ์ž์„ธํžˆ ์ฝ์—ˆ์œผ๋‹ˆ, ์ด ์ง€์‹์„ ํ™œ์šฉํ•ด ์ƒ˜ํ”Œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํฅ๋ฏธ๋กœ์šด ์ •๋ณด๋ฅผ ์–ป์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ž˜์น˜/myfirst.cc, ๋‹น์‹ ์ด ์ด๋ฏธ ์ˆ˜์ง‘ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

5.1.2 ๋กœ๊น… ํ™œ์„ฑํ™”

NS_LOG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋งŽ์€ ๋กœ๊ทธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋จผ์ € ๋ฐฉํ–ฅ์„ ์žก๊ธฐ ์œ„ํ•ด ์•ž์„œ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋งˆ์ง€๋ง‰ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ ./waf --run scratch/myfirst

์ฒซ ๋ฒˆ์งธ nsโ€‘3 ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ต์ˆ™ํ•œ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์œ„์—์„œ ๋ณด๋Š” "๋ณด๋‚ธ" ๋ฉ”์‹œ์ง€์™€ "๋ฐ›์€" ๋ฉ”์‹œ์ง€๋Š” ์‹ค์ œ๋กœ๋Š” ๋‹ค์Œ์—์„œ ๊ธฐ๋ก๋œ ๋ฉ”์‹œ์ง€์ธ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. UdpEchoClient์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ะธ UdpEchoServer์‘์šฉ ํ”„๋กœ๊ทธ๋žจ. ์˜ˆ๋ฅผ ๋“ค์–ด, NS_LOG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋กœ๊น… ์ˆ˜์ค€์„ ์„ค์ •ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ธ์‡„ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ๋ถ€ํ„ฐ "VARIABLE=value" ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” sh์™€ ์œ ์‚ฌํ•œ ์…ธ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. csh์™€ ์œ ์‚ฌํ•œ ์…ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ œ ์˜ˆ์ œ๋ฅผ ํ•ด๋‹น ์…ธ์—์„œ ์š”๊ตฌํ•˜๋Š” "setenv ๋ณ€์ˆ˜ ๊ฐ’" ๊ตฌ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ UDP ์—์ฝ” ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ ์ฝ”๋“œ ์ค„์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ž˜์น˜/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

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” sh ์‰˜์˜ NS_LOG ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

UdpEchoClientApplication=level_all

ํ• ๋‹น์˜ ์™ผ์ชฝ์€ ๊ตฌ์„ฑํ•˜๋ ค๋Š” ๋กœ๊ทธ์ธ๋œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ด๋ฆ„์ด๊ณ , ์˜ค๋ฅธ์ชฝ์€ ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ์— ์ ์šฉํ•˜๋ ค๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ชจ๋“  ๋””๋ฒ„๊ทธ ์ˆ˜์ค€์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. NS_LOG๋ฅผ ์ด๋Ÿฐ ์‹์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ns-3 ๋กœ๊น… ์‹œ์Šคํ…œ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๋””๋ฒ„๊น… ์ •๋ณด๋Š” ์ด์ œ NS_LOG_FUNCTION ์ˆ˜์ค€์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ค‘ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜ ๋ฉ”์„œ๋“œ์—์„œ๋Š” (์ ์–ด๋„) ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.NS_LOG_FUNCTION (this)... ์‚ฌ์šฉ NS_LOG_FUNCTION_NOARGS ()
์ •์  ํ•จ์ˆ˜์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ns-3 ์‹œ์Šคํ…œ์ด ๋กœ๊น… ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ ๊ฐ ๋ชจ๋ธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์—์ฝ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ๋กœ๊น…์„ ์œ„ํ•ด ๋งŽ์€ ์–‘์˜ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ˆ˜ํ–‰๋œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ๋ณด๋ฉด ์ค„ ์‚ฌ์ด์— ์ฝœ๋ก ์ด ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UdpEchoClient์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ทธ๋ฆฌ๊ณ  C++ ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž(::)๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์œ„์น˜์— ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜๋„์ ์œผ๋กœ ํ–‰ํ•ด์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ด๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ๋กœ๊น… ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ํŒŒ์ผ๊ณผ ํด๋ž˜์Šค ์‚ฌ์ด์— ๋Œ€์‘๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ด ์•„๋‹ˆ๋ฉฐ ์ฝœ๋ก ์ด ๋‘ ๊ฐœ ์•„๋‹Œ ๋‹จ์ผ ์ฝœ๋ก ์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋กœ๊น… ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„๊ณผ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋น„๊ต์  ๋ฏธ๋ฌ˜ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋…์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ํ…์ŠคํŠธ๋ฅผ ๋ณด๋ฉด "Received 1024 bytes from 10.1.1.2". ์ด ๋ฌธ์ œ๋Š” ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ_ํŽ‘ํฌ NS_LOG ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—. ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” OR ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์„ธ๋กœ ๋ง‰๋Œ€๊ฐ€ Unix ํŒŒ์ดํ”„๋ผ์ธ ์ปค๋„ฅํ„ฐ์ด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋กœ๊น… ์‹œ์Šคํ…œ์ด ์ง€์ •๋œ ๋กœ๊ทธ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€์— ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์ด ์ ‘๋‘์‚ฌ๋กœ ๋ถ™๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 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: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
UdpEchoServerApplication:HandleRead(): Echoing packet
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoServerApplication:StopApplication()
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()

๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ๋•Œ๋กœ๋Š” ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. OR ๋น„ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ_์‹œ๊ฐ„:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time: UdpEchoServerApplication=level_all|prefix_func|prefix_time'

๋‹ค์‹œ ๋งํ•ด์„œ, ์œ„์˜ ์ค„๋ฐ”๊ฟˆ โ€‹โ€‹๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s)
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(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()

์ƒ์„ฑ์ž๋Š” ๋‹ค์Œ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. UdpEchoServer ์‹œ๋ฎฌ๋ ˆ์ด์…˜ 0์ดˆ ๋™์•ˆ ํ˜ธ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์‹œ๊ฐ„์€ XNUMX์ดˆ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ๋ฉ”์‹œ์ง€์—๋„ ๋™์ผํ•œ ๊ฒƒ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. UDPEchoํด๋ผ์ด์–ธํŠธ.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s)
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(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()

์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ์–ตํ•ด ๋ณด์ž ์Šคํฌ๋ž˜์น˜/first.cc ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์‹œ์ž‘๋˜๊ธฐ 1์ดˆ ์ „์— ์—์ฝ” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹น์‹ ์€ ๋ฐฉ๋ฒ•์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹ค์ œ๋กœ ์„œ๋ฒ„๋Š” ์ฒซ ๋ฒˆ์งธ ์ดˆ์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ์š”์ฒญํ•œ ๋Œ€๋กœ ์—์ฝ” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ๋‘ ๋ฒˆ์งธ ์ดˆ์— ์‹œ์ž‘๋œ๋‹ค๋Š” ์ ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ํ†ตํ™” ์ค‘์— ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ •์ „์†ก ์—์ฝ” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ HandleRead ์ฝœ๋ฐฑ์— ๋Œ€ํ•ด Send๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ. ์ง€์  ๊ฐ„ ๋งํฌ๋ฅผ ํ†ตํ•ด ํŒจํ‚ท์„ ์ „์†กํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ 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 ์ฝ”๋“œ์— ๋กœ๊น… ์ถ”๊ฐ€

์—ฌ๋Ÿฌ ๋งคํฌ๋กœ์—์„œ ๋กœ๊ทธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์— ์ƒˆ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. myfirst.cc"clean" ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋กœ๊น… ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ •์˜ํ–ˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

๋‹ค์–‘ํ•œ ์ˆ˜์ค€์—์„œ NS_LOG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ด ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์‹ญ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์— ๋ช‡ ๊ฐ€์ง€ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์— ์ •๋ณด ์ˆ˜์ค€ ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋งคํฌ๋กœ๋Š” NS_LOG_INFO์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ "ํ† ํด๋กœ์ง€ ์ƒ์„ฑ" ๋‹จ๊ณ„์— ์žˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋…ธ๋“œ ์ƒ์„ฑ ์ง์ „์— ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ ์กฐ๊ฐ์—์„œ ์ด ์ž‘์—…์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
์—ด์–ด ๋ผ. ์Šคํฌ๋ž˜์น˜/myfirst.cc ์ข‹์•„ํ•˜๋Š” ํŽธ์ง‘๊ธฐ์—์„œ ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
NS_LOG_INFO ("Creating Topology");
์„  ๋ฐ”๋กœ ์•ž์—,

NodeContainer nodes;
nodes.Create (2);

์ด์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜์„ธ์š”. waf๊ทธ๋ฆฌ๊ณ  NS_LOG ๋ณ€์ˆ˜๋ฅผ ์ง€์›Œ์„œ ์ด์ „์— ํ™œ์„ฑํ™”ํ•œ ๋กœ๊น… ์ŠคํŠธ๋ฆผ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

$ ./waf
$ export NS_LOG=
ะขะตะฟะตั€ัŒ, ะตัะปะธ ะฒั‹ ะทะฐะฟัƒัั‚ะธั‚ะต ัะบั€ะธะฟั‚,
$ ./waf --run scratch/myfirst

๋กœ๊น… ๊ตฌ์„ฑ ์š”์†Œ(FirstScriptExample)๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ ค๋ฉด ๋กœ๊น… ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. FirstScript์˜ˆ NS_LOG_INFO๋ณด๋‹ค ๋‚ฎ์ง€ ์•Š์€ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์ด ํŠน์ • ๋กœ๊น… ์ˆ˜์ค€๋งŒ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผœ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ export NS_LOG=FirstScriptExample=info

์ง€๊ธˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด "ํ† ํด๋กœ์ง€ ์ƒ์„ฑ ์ค‘"์ด๋ผ๋Š” ์ƒˆ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

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

5.2 ๋ช…๋ น์ค„ ์ธ์ˆ˜ ์‚ฌ์šฉ

5.2.1 ๊ธฐ๋ณธ ์†์„ฑ ๊ฐ’ ์žฌ์ •์˜

ํŽธ์ง‘ ๋ฐ ๋นŒ๋“œ ์—†์ด ns-3 ์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋กœ์ปฌ ๋ฐ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์ค„ ์ธ์ˆ˜ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๋ช…๋ น์ค„ ํŒŒ์„œ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ์™€ ๊ฐ™์ด (์ฃผ ํ”„๋กœ๊ทธ๋žจ์—์„œ) ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

int
main (int argc, char *argv[])
{
...
CommandLine cmd;
cmd.Parse (argc, argv);
...
}

์ด ๊ฐ„๋‹จํ•œ ๋‘ ์ค„์งœ๋ฆฌ ์Šค๋‹ˆํŽซ์€ ์‹ค์ œ๋กœ ๊ทธ ์ž์ฒด๋กœ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ns-3 ์ „์—ญ ๋ณ€์ˆ˜ ๋ฐ ์†์„ฑ ์‹œ์Šคํ…œ์˜ ๋ฌธ์„ ์—ด์–ด์ค๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฉ”์ธ ํ•จ์ˆ˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋‘ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ž˜์น˜/myfirst.cc. ์ด์–ด์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„์›€๋ง ์š”์ฒญ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

$ ./waf --run "scratch/myfirst --PrintHelp"

์ด ํŒ€์€ ์งˆ๋ฌธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ์™€ํ”„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์Šคํฌ๋ž˜์น˜/myfirst ๊ทธ๋ฆฌ๊ณ  ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. โ€”์ธ์‡„๋„์›€๋ง. ๋”ฐ์˜ดํ‘œ๋Š” ํ•ด๋‹น ์ฃผ์žฅ์ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ค„ ํŒŒ์„œ๋Š” ์ธ์ˆ˜๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. โ€”์ธ์‡„๋„์›€๋ง ๊ทธ๋ฆฌ๊ณ  ๋‹ต๋ณ€์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.413s)
TcpL4Protocol:TcpStateMachine()
CommandLine:HandleArgument(): Handle arg name=PrintHelp value=
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.

์ด์ œ ์˜ต์…˜์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. โ€”์ธ์‡„ ์†์„ฑ. first.cc ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ดํŽด๋ณผ ๋•Œ ns-3 ์†์„ฑ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ์ฝ”๋“œ ์ค„์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ๊ทธ๋ ‡๊ฒŒ ๋งํ–ˆ์–ด์š” ๋ฐ์ดํ„ฐ ์†๋„ ์‹ค์ œ๋กœ๋Š” ์†์„ฑ์ด๋‹ค PointToPointNet์žฅ์น˜. ๋ช…๋ น์ค„ ์ธ์ˆ˜ ํŒŒ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†์„ฑ์„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. PointToPointNet์žฅ์น˜. ์ง€์› ๋ชฉ๋ก์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํ˜• ID. ์ด๋Š” ๊ด€์‹ฌ ์žˆ๋Š” ์†์„ฑ์ด ์†ํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ns3::PointToPointNetDevice. ๊ณ„์†ํ•ด์„œ ์ „์ง„ํ•˜์ž, ๋“ค์–ด๊ฐ€์ž,

$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"

์‹œ์Šคํ…œ์€ ์ด ๋„คํŠธ์›Œํฌ ์žฅ์น˜ ์œ ํ˜•์˜ ๋ชจ๋“  ์†์„ฑ์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์— ์žˆ๋Š” ์†์„ฑ ์ค‘์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

--ns3::PointToPointNetDevice::DataRate=[32768bps]:
The default data rate for point to point links

์ด๋Š” ์‹œ์Šคํ…œ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. PointToPointNet์žฅ์น˜. ์šฐ๋ฆฌ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ธฐ๋ณธ๊ฐ’์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ ะฒ ํฌ์ธํŠธํˆฌํฌ์ธํŠธ๋„์šฐ๋ฏธ ๋” ๋†’์€. ์ง€์  ๊ฐ„ ์žฅ์น˜์™€ ์ฑ„๋„์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค SetDevice์†์„ฑ ะธ SetChannel์†์„ฑ ์œผ๋กœ myfirst.cc, ๊นจ๋—ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ„๋‹จํžˆ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํŠธํˆฌํฌ์ธํŠธ๋„์šฐ๋ฏธ ์•„๋ž˜ ์˜ˆ์—์„œ ํ‘œ์‹œ๋œ ๋Œ€๋กœ ์„ค์น˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

...
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
...

๊ณ„์†ํ•ด์„œ ์ƒˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. ์™€ํ”„ (./์™€ํ”„) ๊ทธ๋ฆฌ๊ณ  ๋Œ์•„๊ฐ€์„œ ์„œ๋ฒ„์˜ UDP ์—์ฝ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋…น์Œํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์‹œ๊ฐ„ ์ ‘๋‘์‚ฌ๋„ ํฌํ•จ์‹œ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.405s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ๊ฐ„์„ ์‚ดํŽด๋ดค์„ ๋•Œ, ์—์ฝ” ์„œ๋ฒ„๊ฐ€ ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•œ ์ˆœ๊ฐ„์ด 2,00369์ดˆ์˜€๋˜ ๊ฑธ ๊ธฐ์–ตํ•ด ๋ณด์„ธ์š”.

2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1

์ด์ œ ๊ทธ๋Š” 2.25732์ดˆ์— ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” PointToPointNetDevice ๋ฐ์ดํ„ฐ ์ „์†ก๋ฅ ์„ ์ดˆ๋‹น 32768๋ฉ”๊ฐ€๋น„ํŠธ์—์„œ ๊ธฐ๋ณธ๊ฐ’์ธ ์ดˆ๋‹น XNUMX๋น„ํŠธ๋กœ ์žฌ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด DataRate๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์†๋„๋ฅผ ๋‹ค์‹œ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” help ์š”์†Œ์— ๋‚ดํฌ๋œ ๊ณต์‹์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด DataRate ์†์„ฑ ๊ฐ’์ด ์ดˆ๋‹น 5๋ฉ”๊ฐ€๋น„ํŠธ๋กœ ๊ธฐ๋ณธ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์— ๋†€๋ž๋‚˜์š”? ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›๋ž˜ ๋™์ž‘์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด ์ฑ„๋„ ์ง€์—ฐ์„ ๋น›์˜ ์†๋„์— ๋งž๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์žฅ์น˜์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ช…๋ น์ค„ ์‹œ์Šคํ…œ์— ์ฑ„๋„ ์†์„ฑ์„ ์ธ์‡„ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"

์ฑ„๋„ ์ง€์—ฐ ์†์„ฑ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--ns3::PointToPointChannel::Delay=[0ns]:
Transmission delay through the channel

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช…๋ น์ค„ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋‘ ๊ฐ’์„ ๋ชจ๋‘ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms"

์ด ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ์—์„œ DataRate์™€ Delay๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ์˜ ์‹œ๊ฐ„์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.00369s Received 1024 bytes from 10.1.1.1
2.00369s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()

ํŒจํ‚ท์€ 2,00369์ดˆ ํ›„์— ๋‹ค์‹œ ์„œ๋ฒ„์— ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๋œ ๋ชจ๋“  ์†์„ฑ์„ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, MaxPackets ์†์„ฑ ๊ฐ’์„ XNUMX์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UDPEchoํด๋ผ์ด์–ธํŠธ.

์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜์‹œ๊ฒ ์–ด์š”? ์‹œ๋„ํ•ด ๋ณด์„ธ์š”. ๊ธฐ๋ณธ ์†์„ฑ ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์œ„์น˜๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ์ตœ๋Œ€ ํŒจํ‚ท ๋Œ€๋ณธ์—์„œ. ๊ทธ๋Ÿฌ๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ธฐ๋ณธ ์†์„ฑ ๊ฐ’์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ ๋„์›€๋ง์„ ์–ป์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์ดํ•ดํ•˜๋ฉด ๋ช…๋ น์ค„์— ํ‘œ์‹œ๋˜๋Š” ํŒจํ‚ค์ง€ ์ˆ˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทผ๋ฉดํ•œ ์‚ฌ๋žŒ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์ค„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ ./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" ์ธ์ˆ˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋“ฑ๋ก๋œ ๋ชจ๋“  ๊ทธ๋ฃน ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์œ ํ˜• ID. ๊ทธ๋ฃน ์ด๋ฆ„์€ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“ˆ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค(๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘). ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์ธ์‡„ํ•˜๋ฉด ๋„ˆ๋ฌด ๋ฐฉ๋Œ€ํ•ด์ง€๋ฏ€๋กœ, ๊ทธ๋ฃน๋ณ„๋กœ ์ •๋ณด๋ฅผ ์ธ์‡„ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์‹œ ์ง€์  ๊ฐ„ ๋ชจ๋“ˆ์— ์ดˆ์ ์„ ๋งž์ถฐ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

./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 ์ž์‹ ์˜ ํŒ€ ์บก์ฒ˜

๋ช…๋ น์ค„ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ณ ์œ ์˜ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ช…๋ น์ค„ ํŒŒ์„œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ ์ถ”๊ฐ€.
์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œํ•  ํŒจํ‚ท ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ผ๋Š” ์ด๋ฆ„์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. nํŒจํ‚ท ํ•จ์ˆ˜๋กœ ๋ณธ๊ด€. ์ด์ „ ๊ธฐ๋ณธ ๋™์ž‘๊ณผ ์ผ์น˜ํ•˜๋„๋ก 1๋กœ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ค„ ํŒŒ์„œ๊ฐ€ ์ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด ์ด ๊ฐ’์„ ํŒŒ์„œ์— ์บก์ฒ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋„์ „์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ ์ถ”๊ฐ€. ๊ฐ€์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŽธ์ง‘ํ•˜์„ธ์š” ์Šคํฌ๋ž˜์น˜/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 ์†์„ฑ์„ ์„ค์ •ํ•œ ์ง€์ ๊นŒ์ง€ ์Šคํฌ๋กคํ•˜์—ฌ ์•„๋ž˜์— ํ‘œ์‹œ๋œ ๋Œ€๋กœ ์ƒ์ˆ˜ 1 ๋Œ€์‹  nPackets ๋ณ€์ˆ˜๋กœ ์„ค์ •๋˜๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));

์ด์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  --PrintHelp ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉด ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ธ์ˆ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋„์›€๋ง ๋””์Šคํ”Œ๋ ˆ์ด์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•˜๋‹ค,

$ ./waf --run "scratch/myfirst --PrintHelp"
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.403s)
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.
User Arguments:
--nPackets: Number of packets to echo

์ „์†ก๋˜๋Š” ํŒจํ‚ท ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„์—์„œ -nPackets ์ธ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ ./waf --run "scratch/myfirst --nPackets=2"

์ด์ œ ๋‹น์‹ ์€ ์ง€๊ธˆ ๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
Sent 1024 bytes to 10.1.1.2
3.25732s Received 1024 bytes from 10.1.1.1
3.25732s Echoing packet
Received 1024 bytes from 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, ์—ฌ๋Ÿฌ ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ scratch/myfirst.cc ์Šคํฌ๋ฆฝํŠธ์— ASCII ์ถ”์  ๊ฒฐ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „ํ™”ํ•˜๊ธฐ ์ง์ „ Simulator :: Run ()๋‹ค์Œ ์ฝ”๋“œ ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
AsciiTraceHelper ascii;

pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));

๋‹ค๋ฅธ ๋งŽ์€ ns-3 ๊ด€์šฉ๊ตฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์ฝ”๋“œ๋Š” ๋„์šฐ๋ฏธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ASCII ์ถ”์ ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ๋‘ ๊ฐœ์˜ ์ค‘์ฒฉ๋œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. "๋‚ด๋ถ€" ๋ฐฉ๋ฒ• CreateFileStream() ์ต๋ช… ๊ฐ์ฒด ๊ด€์šฉ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ์— ํŒŒ์ผ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ (๊ฐ์ฒด ์ด๋ฆ„ ์—†์ด) ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ, ์ง€๊ธˆ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ ํŒŒ์ผ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. myfirst.tr nsโ€‘3์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ns-3๊ฐ€ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๊ทธ ๊ฐ์ฒด์˜ ์ „์ฒด ์ˆ˜๋ช… ๋™์•ˆ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜์—ฌ C++ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด์˜ ๋ณต์‚ฌ ์ƒ์„ฑ์ž์™€ ๊ด€๋ จ๋œ ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€(์˜๋„์ ์ธ) ์ œํ•œ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ํ˜ธ์ถœ AsciiAll ํ™œ์„ฑํ™”() ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๋ชจ๋“  ์ง€์  ๊ฐ„ ์žฅ์น˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ASCII ์ถ”์ ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ , (์ง€์ •๋œ) ์ถ”์  ์ˆ˜์‹ ๊ธฐ๊ฐ€ ํŒจํ‚ท ์ด๋™ ์ •๋ณด๋ฅผ ASCII ํ˜•์‹์œผ๋กœ ๊ธฐ๋กํ•˜๋„๋ก ํ•˜๋ ค๋Š” ๊ฒƒ์„ ๋ณด์กฐ์ž์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

ns-2์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ถ”์ ๋˜๋Š” ์ด๋ฒคํŠธ๋Š” "+", "-", "d", "r" ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์ž˜ ์•Œ๋ ค์ง„ ์ถ”์  ์ง€์ ๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ช…๋ น์ค„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ./waf --run scratch/myfirst

์ด์ „์— ์—ฌ๋Ÿฌ ๋ฒˆ ๊ทธ๋žฌ๋“ฏ์ด, Waf์—์„œ ๋ช‡ ๊ฐœ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜จ ๋‹ค์Œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ "'๋นŒ๋“œ'๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ์ด๋ฆ„์ด ์ง€์ •๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. myfirst.tr. ์—…๋ฌด์˜ ํŠน์„ฑ์ƒ ์™€ํ”„๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ์€ ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ €์žฅ์†Œ์˜ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ถ”์ ์ด ์ €์žฅ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด Waf ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --cwd. ์•„์ง ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ, ์ข‹์•„ํ•˜๋Š” ํŽธ์ง‘๊ธฐ์—์„œ myfirst.tr ASCII ์ถ”์  ํŒŒ์ผ์„ ๋ณด๋ ค๋ฉด ์ €์žฅ์†Œ์˜ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ASCII ์ถ”์  ๊ตฌ๋ฌธ ๋ถ„์„

์—ฌ๊ธฐ์—๋Š” ๊ฝค ๋นฝ๋นฝํ•œ ํ˜•ํƒœ๋กœ ๋งŽ์€ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ๋จผ์ € ๋ˆˆ์— ๋„๋Š” ์ ์€ ์ด ํŒŒ์ผ์ด ๊ฐœ๋ณ„ ์ค„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณด๊ธฐ ์ฐฝ์„ ๋” ๋„“๊ฒŒ ํ™•์žฅํ•˜๋ฉด ๋” ๋ˆˆ์— ๋„๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ์˜ ๊ฐ ์ค„์€ ์ถ”์  ์ด๋ฒคํŠธ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๊ฐ ์ง€์  ๊ฐ„ ๋„คํŠธ์›Œํฌ ์žฅ์น˜์— ์žˆ๋Š” ์ „์†ก ๋Œ€๊ธฐ์—ด์˜ ์ด๋ฒคํŠธ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก ๋Œ€๊ธฐ์—ด์€ ๊ฐ ํŒจํ‚ท์ด ์ง€์  ๊ฐ„ ๋งํฌ๋ฅผ ์œ„ํ•ด ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ธฐ์—ด์ž…๋‹ˆ๋‹ค. ์ถ”์  ํŒŒ์ผ์˜ ๊ฐ ์ค„์€ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ฌธ์ž ๋’ค์— ๊ณต๋ฐฑ์ด ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ์ด ๊ธฐํ˜ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

+: ์žฅ์น˜ ๋Œ€๊ธฐ์—ด์—์„œ ๋Œ€๊ธฐ์—ด ์ž‘์—…์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
-: ์žฅ์น˜ ๋Œ€๊ธฐ์—ด์—์„œ ํ•ญ๋ชฉ ์ถ”์ถœ ์ž‘์—…์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
d: ํŒจํ‚ท์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ๊ฐ€ ๊ฐ€๋“ ์ฐผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
r: ํŒจํ‚ท์ด ๋„คํŠธ์›Œํฌ ์žฅ์น˜์— ์˜ํ•ด ์ˆ˜์‹ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถ”์  ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ•˜์—ฌ ์„น์…˜์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ์™ผ์ชฝ์— ์ค„ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

0 +
1 2
2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
3 ns3::PppHeader (
4   Point-to-Point Protocol: IP (0x0021))
6   ns3::Ipv4Header (
7     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
8     length: 1052 10.1.1.1 > 10.1.1.2)
9     ns3::UdpHeader (
10      length: 1032 49153 > 9)
11      Payload (size=1024)

์ด ํ™•์žฅ๋œ ์ถ”์  ์ด๋ฒคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์„น์…˜(๋ผ์ธ 0)์€ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ „์†ก์„ ์œ„ํ•œ ๋Œ€๊ธฐ ๋™์ž‘์— ํ•ด๋‹นํ•˜๋Š” + ๊ธฐํ˜ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์„น์…˜(1๋ฒˆ์งธ ์ค„)์€ ์ดˆ ๋‹จ์œ„๋กœ ํ‘œํ˜„๋œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฌผ์—ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. UdpEchoClient์‘์šฉ ํ”„๋กœ๊ทธ๋žจ 2์ดˆ ์•ˆ์— ํŒจํ‚ท ์ „์†ก์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์  ์˜ˆ์ œ์˜ ๋‹ค์Œ ์„น์…˜(2๋ฒˆ์งธ ์ค„)์€ ์–ด๋–ค ์ถ”์  ์†Œ์Šค๊ฐ€ ์ด ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”์ง€(๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถ”์  ์ง€์ •) ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ถ”์  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฃจํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ๋ชฉ๋ก. ์ด๋Š” ns-3 ์ฝ”์–ด ์ฝ”๋“œ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋ฃจํŠธ์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋…ธ๋“œ ๋ชฉ๋ก ๋…ธ๋“œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด /NodeList/0์€ NodeList์˜ 0๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฅผ "๋…ธ๋“œ XNUMX"์ด๋ผ๊ณ  ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ์—๋Š” ์„ค์น˜๋œ ์žฅ์น˜ ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชฉ๋ก์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋‹ค์Œ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ถ”์  ์ด๋ฒคํŠธ๊ฐ€ ๋‹ค์Œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜ ๋ชฉ๋ก/0์ด๋Š” ๋…ธ๋“œ์— ์„ค์น˜๋œ ์ œ๋กœ ๋””๋ฐ”์ด์Šค์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•˜์œ„ ๋ฌธ์ž์—ด, $ ns3 :: PointToPointNetDevice, 0 ๋…ธ๋“œ ์žฅ์น˜ ๋ชฉ๋ก์˜ XNUMX ์œ„์น˜์— ์žˆ๋Š” ์žฅ์น˜๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. XNUMX๋ฒˆ์งธ ์ค„์˜ + ์—ฐ์‚ฐ์€ ์žฅ์น˜์˜ ์ „์†ก ๋Œ€๊ธฐ์—ด์— ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” "๊ฒฝ๋กœ"์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. TxQueue/์ธํ.

์ถ”์ ์˜ ๋‚˜๋จธ์ง€ ์„น์…˜์€ ๋งค์šฐ ์ง๊ด€์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 3~4๋ฒˆ์งธ ์ค„์€ ํŒจํ‚ท์ด ์ง€์  ๊ฐ„ ํ”„๋กœํ† ์ฝœ๋กœ ์บก์Аํ™”๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. 5-7๋ฒˆ์งธ ์ค„์€ ํŒจํ‚ท์˜ IP ๋ฒ„์ „ ํ—ค๋”๊ฐ€ 4์ด๊ณ  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์ดˆ๋กœ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์˜ ์ง€์นจ์„ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋”ฐ๋ž๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ ์žฅ์น˜์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„์™€ ๋งํฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋†”๋‘” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ด์ „ ์„น์…˜์—์„œ ๋ณด์•˜๋“ฏ์ด ์ต์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถ”์  ์†Œ์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํ•ญ๋ชฉ(๋ผ์ธ 2)์€ ์ด ์ด๋ฒคํŠธ๊ฐ€ ๋…ธ๋“œ 1(/)์—์„œ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๋…ธ๋“œ ๋ชฉ๋ก/1) ๋ฐ ํŒจํ‚ท์€ ์ถ”์  ์†Œ์Šค(/)์— ์˜ํ•ด ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค.๋งฅ์•Œ์—‘์Šค). ํŒŒ์ผ์—์„œ ๋‚จ์€ ์ถ”์  ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๋ฉด ํ† ํด๋กœ์ง€์—์„œ ํŒจํ‚ท์˜ ์ด๋™์„ ๋น„๊ต์  ์‰ฝ๊ฒŒ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

5.3.2 PCAP ์ถ”์ 

ns-3 ์žฅ์น˜ ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ .pcap ํ˜•์‹์˜ ์ถ”์  ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘๋ฌธ์ž์–ด pcap (๋ณดํ†ต ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑ)์€ ํŒจํ‚ท ์บก์ฒ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์‹ค์ œ๋กœ๋Š” .pcap ํŒŒ์ผ ํ˜•์‹์˜ ์ •์˜๋ฅผ ํฌํ•จํ•˜๋Š” API์ž…๋‹ˆ๋‹ค. ์ด ํ˜•์‹์„ ์ฝ๊ณ  ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™€์ด์–ด ์ƒคํฌ (์ด์ „์—๋Š” ๋ฏธ๋ฌ˜ํ•œ). ํ•˜์ง€๋งŒ ์ด ํŒจํ‚ท ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ์ถ”์  ๋ถ„์„๊ธฐ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋Š” pcap ์ถ”์ ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ pcap ์ถ”์ ์„ ๋ณด๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. TCP ๋คํ”„.

pcap ์ถ”์ ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ž‘์—…์€ ํ•œ ์ค„์˜ ์ฝ”๋“œ๋กœ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

pointToPoint.EnablePcapAll ("myfirst");

๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ ASCII ์ถ”์  ์ฝ”๋“œ ๋’ค์— ์ด ์ฝ”๋“œ ์ค„์„ ์‚ฝ์ž…ํ•˜์„ธ์š”. ์Šคํฌ๋ž˜์น˜/myfirst.cc. "myfirst" ๋ฌธ์ž์—ด๋งŒ ์ „๋‹ฌํ•˜๊ณ  "myfirst.pcap"์ด๋‚˜ ์ด์™€ ๋น„์Šทํ•œ ๋ฌธ์ž์—ด์€ ์ „๋‹ฌํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ์ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ „์ฒด ํŒŒ์ผ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ์ ‘๋‘์‚ฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ค‘์— ๋ณด์กฐ์ž๋Š” ์‹ค์ œ๋กœ ๊ฐ ์ง€์  ๊ฐ„ ์žฅ์น˜์— ๋Œ€ํ•œ ์ถ”์  ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์€ ์ ‘๋‘์‚ฌ, ๋…ธ๋“œ ๋ฒˆํ˜ธ, ์žฅ์น˜ ๋ฒˆํ˜ธ, ์ ‘๋ฏธ์‚ฌ "๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.pcap".

์šฐ๋ฆฌ์˜ ์˜ˆ์‹œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” "๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.myfirst-0-0.pcap"๊ทธ๋ฆฌ๊ณ "myfirst-1-0.pcap"๋Š” ๊ฐ๊ฐ ๋…ธ๋“œ 0-์žฅ์น˜ 0๊ณผ ๋…ธ๋“œ 1-์žฅ์น˜ 0์— ๋Œ€ํ•œ pcap ์ถ”์ ์ž…๋‹ˆ๋‹ค. pcap ์ถ”์ ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ฝ”๋“œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ‰์†Œ์ฒ˜๋Ÿผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ./waf --run scratch/myfirst

๋ฐฐํฌํŒ์˜ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ASCII ์ถ”์  ํŒŒ์ผ, myfirst.tr์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ ํŒŒ์ผ myfirst-0-0.pcap ะธ myfirst-1-0.pcap โ€” ๋ฐฉ๊ธˆ ์ƒ์„ฑํ•œ ์ƒˆ๋กœ์šด pcap ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

tcpdump๋กœ ์ถœ๋ ฅ ์ฝ๊ธฐ

ํ˜„์žฌ pcap ํŒŒ์ผ์„ ๋ณด๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ tcpdump๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024

๋งค๋ฆฝ์ง€์—์„œ myfirst-0-0.pcap (ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜) ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  2์ดˆ ํ›„์— ์—์ฝ” ํŒจํ‚ท์ด ์ „์†ก๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋คํ”„๋ฅผ ๋ณด๋ฉด (myfirst-1-0.pcap), ํŒจํ‚ท์ด 2,257324์ดˆ์— ์ˆ˜์‹ ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋คํ”„์—์„œ๋Š” ํŒจํ‚ท์ด 2.257324์ดˆ์— ๋ฐ˜ํ™˜๋˜์—ˆ๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋คํ”„์—์„œ๋Š” ํŒจํ‚ท์ด 2.514648์ดˆ์— ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ๋‹ค์‹œ ์ˆ˜์‹ ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Wireshark๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ ์ฝ๊ธฐ

์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์™€์ด์–ด ์ƒคํฌํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฌธ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. http://www.wireshark.org/. ์™€์ด์–ด ์ƒคํฌ โ€” ์ด๋Ÿฌํ•œ ์ถ”์  ํŒŒ์ผ์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. Wireshark๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ์ถ”์  ํŒŒ์ผ์„ ์—ด์–ด ํŒจํ‚ท ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ท์„ ์บก์ฒ˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster