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 பதிவுத் தொகுதியை நாங்கள் ஏற்கனவே சுருக்கமாகப் பார்த்தோம் முதல்.சிசி. இந்த அத்தியாயத்தில், லாக்கிங் துணை அமைப்பிற்கான சாத்தியமான பயன்பாடுகளை நாம் கூர்ந்து கவனிப்போம்.

5.1.1 பதிவு மேலோட்டம்

பல பெரிய அமைப்புகள் சில வகையான செய்தி பதிவு வசதியை ஆதரிக்கின்றன, மேலும் ns-3 விதிவிலக்கல்ல. சில சந்தர்ப்பங்களில், "ஆபரேட்டர் கன்சோலில்" பிழை செய்திகள் மட்டுமே எழுதப்படுகின்றன (இது பொதுவாக Unix-அடிப்படையிலான கணினிகளில் stderr ஆகும்). மற்ற கணினிகளில், எச்சரிக்கை செய்திகள் மற்றும் விரிவான தகவல்கள் காட்டப்படலாம். சில சந்தர்ப்பங்களில், வெளியீட்டை விரைவாக மங்கலாக்கும் பிழைத்திருத்த செய்திகளை வெளியிடுவதற்கு பதிவு செய்யும் கருவிகள் பயன்படுத்தப்படுகின்றன.

ns-3 இல் பயன்படுத்தப்படும் subHRD ஆனது, இந்த தகவல் உள்ளடக்கத்தின் அனைத்து நிலைகளும் பயனுள்ளதாக இருக்கும் என்று கருதுகிறது, மேலும் செய்தி பதிவு செய்வதற்கு தேர்ந்தெடுக்கப்பட்ட, அடுக்கு அணுகுமுறையை நாங்கள் வழங்குகிறோம். பதிவு செய்வதை முழுவதுமாக முடக்கலாம், ஒரு கூறு அடிப்படையில் அல்லது உலகளவில் இயக்கலாம். இந்த நோக்கத்திற்காக, சரிசெய்யக்கூடிய அளவிலான தகவல் உள்ளடக்கம் பயன்படுத்தப்படுகிறது. ns-3 பதிவு தொகுதி உங்கள் உருவகப்படுத்துதலிலிருந்து பயனுள்ள தகவலைப் பெற ஒப்பீட்டளவில் எளிமையான வழியை வழங்குகிறது.

உங்கள் மாதிரிகளில் இருந்து தரவைப் பிரித்தெடுப்பதற்கான பொதுவான நோக்கத்திற்கான பொறிமுறையை நாங்கள் வழங்குகிறோம் என்பதை நீங்கள் புரிந்து கொள்ள வேண்டும், இது உருவகப்படுத்துதலுக்கான விருப்பமான வெளியீடாக இருக்க வேண்டும் (எங்கள் டிரேசிங் சிஸ்டம் பற்றிய கூடுதல் தகவலுக்கு, டுடோரியல் பிரிவு 5.3 ஐப் பார்க்கவும்). பிழைத்திருத்தத் தகவல், எச்சரிக்கைகள், பிழைச் செய்திகள் அல்லது உங்கள் ஸ்கிரிப்டுகள் அல்லது மாடல்களில் இருந்து எந்த நேரத்திலும் செய்திகளை விரைவாக வெளியிடுவதற்கும் பதிவுசெய்தல் விருப்பமான முறையாக இருக்க வேண்டும்.

தற்போது, ​​தகவல் உள்ளடக்கத்தின் வரிசையை அதிகரிப்பதில் பதிவு செய்திகளின் ஏழு நிலைகளை (வகைகள்) கணினி வரையறுக்கிறது.

  • 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_INFO கள் வழங்கிய மேக்ரோக்கள் LOGUB ஐச் செயல்படுத்தும் போது LOG_INFO ஐச் செயல்படுத்தும். NS_LOG_WARN மற்றும் NS_LOG_ERROR.

லாக்கிங் நிலை அல்லது தேர்வு கூறு எதுவாக இருந்தாலும், நிபந்தனையற்ற லாக்கிங் மேக்ரோவையும் நாங்கள் வழங்குகிறோம்.

  • NS_LOG_UNCOND - தொடர்புடைய செய்தியின் நிபந்தனையற்ற பதிவு (தொடர்புடைய பதிவு நிலை இல்லை).

ஒவ்வொரு நிலையையும் தனித்தனியாக அல்லது ஒட்டுமொத்தமாக வினவலாம். sh சூழல் மாறி NS_LOG ஐப் பயன்படுத்தி அல்லது கணினி செயல்பாட்டு அழைப்பை பதிவு செய்வதன் மூலம் உள்நுழைவை உள்ளமைக்க முடியும். முன்பு காட்டப்பட்டபடி, பதிவு செய்யும் அமைப்பில் டாக்சிஜன் ஆவணங்கள் உள்ளன, நீங்கள் ஏற்கனவே அதை மதிப்பாய்வு செய்யவில்லை என்றால் இப்போது அதை மதிப்பாய்வு செய்ய நல்ல நேரம்.

இப்போது நீங்கள் ஆவணங்களை மிக விரிவாகப் படித்துவிட்டீர்கள், உதாரண ஸ்கிரிப்டில் இருந்து சில சுவாரஸ்யமான தகவல்களைப் பெற அந்த அறிவைப் பயன்படுத்துவோம். கீறல்/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

நீங்கள் மேலே பார்க்கும் "அனுப்பப்பட்ட" மற்றும் "பெறப்பட்ட" செய்திகள் உண்மையில் உள்நுழைந்த செய்திகள் என்று மாறிவிடும் UdpEchoClientApplication и UdpEchoServerApplication. எடுத்துக்காட்டாக, 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 அமைப்பு தேவையில்லை என்பதை நினைவில் கொள்ளவும். எவ்வளவு தகவல்கள் பதிவு செய்யப்படுகின்றன என்பது குறித்த முடிவு தனிப்பட்ட மாதிரி உருவாக்குநரிடம் விடப்படுகிறது. எதிரொலி பயன்பாடுகளின் விஷயத்தில், அதிக அளவு பதிவு வெளியீடு கிடைக்கிறது.

பயன்பாட்டினால் செய்யப்பட்ட செயல்பாட்டு அழைப்புகளின் பதிவை நீங்கள் இப்போது பார்க்கலாம். நீங்கள் நெருக்கமாகப் பார்த்தால், கோட்டிற்கு இடையில் ஒரு பெருங்குடல் இருப்பதைக் காணலாம் UdpEchoClientApplication மற்றும் முறையின் பெயர், நீங்கள் 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 வினாடிகளின் போது அழைக்கப்பட்டது. இது உண்மையில் உருவகப்படுத்துதல் தொடங்கும் முன் நடக்கும், ஆனால் நேரம் பூஜ்ஜிய வினாடிகளாகக் காட்டப்படும். கன்ஸ்ட்ரக்டர் செய்திக்கும் இதுவே உண்மை UdpEchoClient.

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 உருவகப்படுத்துதல் தொடங்குவதற்கு ஒரு வினாடிக்கு முன்பு எதிரொலி சேவையக பயன்பாட்டைத் தொடங்கியது. அந்த முறையை இப்போது பார்க்கலாம் விண்ணப்பத்தைத் தொடங்கவும் சேவையகம் உண்மையில் முதல் வினாடியில் அழைக்கப்படுகிறது. ஸ்கிரிப்ட்டில் நாங்கள் கேட்டது போல, உருவகப்படுத்துதலின் இரண்டாவது வினாடியில் எதிரொலி கிளையன்ட் தொடங்குவதையும் நீங்கள் கவனிக்கலாம்.

அழைப்பின் போது உருவகப்படுத்துதல் முன்னேற்றத்தை நீங்கள் இப்போது பின்பற்றலாம் அட்டவணை டிரான்ஸ்மிட் ஹேண்டில்ரீட் கால்பேக்கை அழைக்கும் கிளையண்டில் எக்கோ சர்வர் பயன்பாட்டில் அனுப்பவும். பாயிண்ட்-டு-பாயிண்ட் இணைப்பில் ஒரு பாக்கெட்டை அனுப்பும் நேரம் 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, இது "சுத்தமான" கோப்பகத்தில் உள்ளது. இந்த சூழ்நிலையில் ஒரு பதிவு கூறுகளை நாங்கள் வரையறுத்துள்ளோம் என்பதை நினைவில் கொள்க:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

NS_LOG சூழல் மாறியை வெவ்வேறு நிலைகளில் அமைப்பதன் மூலம் இந்தக் கூறுகளிலிருந்து அனைத்து செய்திகளையும் பதிவு செய்வதை இயக்கலாம் என்பதை நீங்கள் அறிவீர்கள். ஸ்கிரிப்ட்டில் சில உள்ளீடுகளைச் சேர்ப்போம். பதிவில் தகவல் நிலை செய்திகளைச் சேர்க்கப் பயன்படுத்தப்படும் மேக்ரோ NS_LOG_INFO ஆகும். ஸ்கிரிப்ட் "உருவாக்கும் இடவியல்" கட்டத்தில் உள்ளது என்று உங்களுக்குச் சொல்லும் ஒரு செய்தியை (நாட்களை உருவாக்கத் தொடங்கும் முன்) சேர்ப்போம். இது பின்வரும் குறியீடு துணுக்கில் செய்யப்படுகிறது,
திற கீறல்/myfirst.cc உங்களுக்கு பிடித்த எடிட்டரில் வரியைச் சேர்க்கவும்,
NS_LOG_INFO ("Creating Topology");
வரிகளுக்கு முன்,

NodeContainer nodes;
nodes.Create (2);

இப்போது பயன்படுத்தி ஸ்கிரிப்டை தொகுக்கவும் வடை, மற்றும் நாங்கள் முன்பு இயக்கிய லாக்கிங் ஸ்ட்ரீமை முடக்க NS_LOG மாறியை அழிக்கவும்:

$ ./waf
$ export NS_LOG=
Теперь, если вы запустите скрипт,
$ ./waf --run scratch/myfirst

தொடர்புடைய பதிவு கூறு (FirstScriptExample) இயக்கப்படாததால், நீங்கள் புதிய செய்தியைப் பார்க்க மாட்டீர்கள். உங்கள் செய்தியைப் பார்க்க, நீங்கள் பதிவு கூறுகளை இயக்க வேண்டும் முதல்ஸ்கிரிப்ட் உதாரணம் 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"

இந்தக் கட்டளை கேட்கும் Waf ஸ்கிரிப்டை இயக்கவும் கீறல்/எனது முதல் மற்றும் அதை ஒரு கட்டளை வரி வாதத்தை அனுப்பவும் -PrintHelp. வாதம் எந்த நிரலுக்காக உள்ளது என்பதைக் குறிக்க மேற்கோள் குறிகள் தேவை. கட்டளை வரி பாகுபடுத்தி வாதத்தை கண்டறியும் -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.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.

இப்போது விருப்பத்தைப் பார்ப்போம் —PrintAtributes. first.cc ஸ்கிரிப்டைப் படிக்கும் போது ns-3 பண்புக்கூறு அமைப்பை ஏற்கனவே குறிப்பிட்டுள்ளோம். பின்வரும் குறியீடு வரிகளைப் பார்த்தோம்,

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

என்று கூறினார்கள் தரவு விகிதம் உண்மையில் ஒரு பண்பு PointToPointNetDevice. பண்புக்கூறுகளைப் பார்க்க கட்டளை வரி வாதம் பாகுபடுத்தியைப் பயன்படுத்துவோம் PointToPointNetDevice. நாம் என்ன வழங்க வேண்டும் என்பதை உதவிப் பட்டியல் கூறுகிறது TypeId. ஆர்வத்தின் பண்புக்கூறுகள் சேர்ந்த வகுப்பின் பெயர் இது. எங்கள் விஷயத்தில் அது இருக்கும் ns3::PointToPointNetDevice. முன்னோக்கி நகர்வோம், உள்ளிடவும்,

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

இந்த நெட்வொர்க் சாதன வகையின் அனைத்து பண்புக்கூறுகளையும் கணினி அச்சிடும். பட்டியலில் உள்ள பண்புக்கூறுகளில்,

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

பொருளை உருவாக்கும் போது கணினியால் பயன்படுத்தப்படும் இயல்புநிலை மதிப்பு இதுவாகும் PointToPointNetDevice. அளவுருவைப் பயன்படுத்தி இந்த இயல்புநிலை மதிப்பை மீறுவோம் கற்பிதம் в PointToPointHelper அதிக. பாயிண்ட்-டு-பாயிண்ட் சாதனங்கள் மற்றும் சேனல்களுக்கான இயல்புநிலை மதிப்புகளைப் பயன்படுத்துவோம். இதைச் செய்ய, அழைப்புகளை நீக்குவோம் SetDeviceAtribute и சேனல் பண்புக்கூறு அமைக்கவும் из myfirst.cc, இது சுத்தமான கோப்பகத்தில் உள்ளது.

உங்கள் ஸ்கிரிப்ட் இப்போது வெறுமனே அறிவிக்க வேண்டும் PointToPointHelper கீழே உள்ள எடுத்துக்காட்டில் காட்டப்பட்டுள்ளபடி எந்த நிறுவல் செயல்பாடுகளையும் செய்ய வேண்டாம்,

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

புதிய ஸ்கிரிப்டை உருவாக்கவும் Waf (./wf) மற்றும் 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 பிட்கள். கட்டளை வரியைப் பயன்படுத்தி ஒரு புதிய DataRate ஐ மாற்றினால், நாம் மீண்டும் உருவகப்படுத்துதலை வேகப்படுத்தலாம். உதவி உறுப்பு சுட்டிக்காட்டிய சூத்திரத்தின்படி, இதைப் பின்வருமாறு செய்வோம்:

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

இது DataRate பண்புக்கூறை அதன் இயல்புநிலை மதிப்பான வினாடிக்கு ஐந்து மெகாபிட்களுக்கு வழங்கும். முடிவைப் பார்த்து நீங்கள் ஆச்சரியப்படுகிறீர்களா? ஸ்கிரிப்ட்டின் அசல் நடத்தையை வழங்க, ஒளியின் வேகத்துடன் பொருந்துமாறு சேனல் தாமதத்தையும் அமைக்க வேண்டும். நெட்வொர்க் சாதனத்தைப் போலவே, சேனல் பண்புக்கூறுகளை அச்சிட கட்டளை வரி அமைப்பைக் கேட்கலாம்:

$ ./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"

இந்தச் சந்தர்ப்பத்தில், ஸ்கிரிப்டில் டேட்டாரேட் மற்றும் தாமதத்தை வெளிப்படையாக அமைக்கும் போது இருந்த நேரத்தை மீட்டெடுக்கிறோம்:

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 பண்புகளை ஒன்று அல்லாத மதிப்புகளுக்கு அமைக்கலாம் 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 உங்கள் சொந்த கட்டளைகளை கைப்பற்றுதல்

கட்டளை வரி அமைப்பு வழியாக உங்கள் சொந்த கொக்கிகளையும் சேர்க்கலாம். கட்டளை வரி பாகுபடுத்தி முறையைப் பயன்படுத்தி இது மிகவும் எளிமையாக செய்யப்படுகிறது மதிப்பு சேர்க்க.
முற்றிலும் மாறுபட்ட முறையில் காட்டப்பட வேண்டிய தொகுப்புகளின் எண்ணிக்கையைக் குறிப்பிட இந்த அம்சத்தைப் பயன்படுத்துவோம். எனப்படும் ஒரு லோக்கல் மாறியைச் சேர்ப்போம் nபாக்கெட்டுகள் ஒரு செயல்பாட்டில் முக்கிய. எங்களின் முந்தைய இயல்புநிலை நடத்தைக்கு பொருந்துமாறு ஒன்றை அமைப்போம். கட்டளை வரி பாகுபடுத்தி இந்த மதிப்பை மாற்ற அனுமதிக்க, இந்த மதிப்பை பாகுபடுத்தியில் பிடிக்க வேண்டும். அழைப்பைச் சேர்ப்பதன் மூலம் இதைச் செய்கிறோம் மதிப்பு சேர்க்க. போய் ஸ்கிரிப்டை மாற்றவும் கீறல்/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;
...
}

உங்கள் தீர்வுக்கு ஒரு சிறிய கட்டமைப்பைச் சேர்க்க நீங்கள் ஒரு பதிவுத் தொகுதியைப் பயன்படுத்தலாம். இந்த அணுகுமுறையால் அறியப்பட்ட பல சிக்கல்கள் உள்ளன, எனவே இந்தச் சிக்கல்களைத் தீர்க்க ஒரு பொதுவான நிகழ்வுத் தடமறிதல் துணை அமைப்பை வழங்கியுள்ளோம்.

என்எஸ்-3 டிரேசிங் சிஸ்டத்தின் முக்கிய குறிக்கோள்கள்:

  • அடிப்படைப் பணிகளுக்கு, டிரேசிங் சிஸ்டம், பிரபலமான ஆதாரங்களுக்கான நிலையான ட்ரேஸை உருவாக்கவும், தடத்தை உருவாக்கும் பொருட்களைத் தேர்ந்தெடுக்கவும் பயனரை அனுமதிக்க வேண்டும்;

  • இடைநிலை பயனர்கள் சிமுலேட்டர் மையத்தை மாற்றாமல், உருவாக்கப்பட்ட வெளியீட்டு வடிவமைப்பை மாற்ற அல்லது புதிய சுவடு ஆதாரங்களைச் செருகுவதற்கு டிரேசிங் சிஸ்டத்தை நீட்டிக்க முடியும்;

  • மேம்பட்ட பயனர்கள் புதிய ட்ரேஸ் சோர்ஸ் மற்றும் சின்க்களைச் சேர்க்க சிமுலேட்டர் மையத்தை மாற்றலாம். ns-3 டிரேசிங் சிஸ்டம் சுயாதீன கண்காணிப்பு ஆதாரங்கள் மற்றும் பெறுநர்களின் கொள்கைகளின் அடிப்படையில் கட்டமைக்கப்பட்டுள்ளது, அத்துடன் ஆதாரங்களை நுகர்வோருடன் இணைப்பதற்கான ஒரு ஒருங்கிணைந்த வழிமுறையாகும்.

ns-3 ட்ரேசிங் சிஸ்டம் சுதந்திரமான டிரேசிங் மூலங்கள் மற்றும் பெறுநர்களின் கொள்கைகளின் அடிப்படையில் கட்டமைக்கப்பட்டுள்ளது, அத்துடன் ஆதாரங்களை பெறுநர்களுடன் இணைப்பதற்கான ஒரு ஒருங்கிணைந்த பொறிமுறையும் உள்ளது. ட்ரேஸ் சோர்ஸ் என்பது உருவகப்படுத்துதலில் நிகழும் நிகழ்வுகளைக் குறிக்கும் மற்றும் ஆர்வத்தின் அடிப்படைத் தரவுகளுக்கான அணுகலை வழங்கக்கூடிய பொருள்கள். எடுத்துக்காட்டாக, ஒரு நெட்வொர்க் சாதனம் எப்போது ஒரு பாக்கெட்டைப் பெற்றது என்பதைக் குறிக்கும் மற்றும் ஆர்வமுள்ள டிரேஸ் ரிசீவர்களுக்கு பாக்கெட்டின் உள்ளடக்கங்களை கிடைக்கச் செய்யலாம்.

குறியீட்டின் பிற பகுதிகளுடன் "இணைந்து" இருக்கும் வரை ட்ரேஸ் ஆதாரங்கள் பயனற்றவை, அவை உண்மையில் சின்க் வழங்கிய தகவலுடன் பயனுள்ளதாக இருக்கும். ட்ரேசர்கள் நிகழ்வுகள் மற்றும் சுவடு ஆதாரங்களால் வழங்கப்பட்ட தரவுகளின் நுகர்வோர்கள். எடுத்துக்காட்டாக, நீங்கள் ஒரு ட்ரேஸ் சிங்கை உருவாக்கலாம், அது (முந்தைய உதாரணத்தின் ட்ரேஸ் சோர்ஸுடன் இணைக்கப்பட்டிருக்கும் போது) பெறப்பட்ட பாக்கெட்டில் உள்ள ஆர்வத்தின் பகுதிகளை அச்சிடுகிறது.

இந்த வெளிப்படையான பிரிப்பிற்கான காரணம், சிமுலேட்டர் மையத்தை எடிட் செய்து மீண்டும் தொகுக்காமல், புதிய சிங்க் வகைகளை ஏற்கனவே உள்ள ட்ரேஸ் மூலங்களுடன் இணைக்க பயனர்களை அனுமதிப்பதாகும். எனவே மேலே உள்ள எடுத்துக்காட்டில், பயனர் தங்கள் ஸ்கிரிப்டில் ஒரு புதிய ட்ரேசரை வரையறுத்து, பயனர் ஸ்கிரிப்டைத் திருத்துவதன் மூலம் மட்டுமே சிமுலேஷன் மையத்தில் வரையறுக்கப்பட்ட ஏற்கனவே உள்ள ட்ரேஸ் மூலத்துடன் இணைக்க முடியும்.

இந்த டுடோரியலில், சில முன் வரையறுக்கப்பட்ட ஆதாரங்கள் மற்றும் சிங்க்களைப் பார்த்து, பயனரின் குறைந்த முயற்சியில் அவற்றை எவ்வாறு கட்டமைக்க முடியும் என்பதைக் காண்பிப்போம். சுவடு பெயர்வெளியை விரிவுபடுத்துதல் மற்றும் புதிய சுவடு ஆதாரங்களை உருவாக்குதல் உள்ளிட்ட மேம்பட்ட ட்ரேஸ் உள்ளமைவு பற்றிய தகவலுக்கு ns-3 கையேடு அல்லது எப்படி-செய்யும் பிரிவுகளைப் பார்க்கவும்.

5.3.1 ASCII டிரேசிங்

எளிய பாக்கெட் ட்ரேஸ்களை அமைக்கும் போது விவரங்களுடன் உங்களுக்கு உதவ குறைந்த-நிலை டிரேசிங் சிஸ்டத்தை வழங்கும் ஹெல்பர் செயல்பாட்டை ns-3 வழங்குகிறது. இந்த அம்சத்தை நீங்கள் இயக்கினால், ASCII கோப்புகளில் வெளியீட்டைக் காண்பீர்கள். ns-2 வெளியீட்டை நன்கு அறிந்தவர்களுக்கு, இந்த வகை சுவடு போன்றது வெளியே.tr, இது பல ஸ்கிரிப்ட்களால் உருவாக்கப்படுகிறது.

வணிகத்தில் இறங்கி, சில ASCII ட்ரேசிங் முடிவுகளை எங்கள் கீறல்/myfirst.cc ஸ்கிரிப்ட்டில் சேர்ப்போம். அழைப்பிற்கு முன்பே Simulator :: Run (), பின்வரும் குறியீடு வரிகளைச் சேர்க்கவும்:
AsciiTraceHelper ascii;

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

பல ns-3 ஐடியோம்களைப் போலவே, இந்தக் குறியீடும் ASCII தடயங்களை உருவாக்க ஒரு உதவி பொருளைப் பயன்படுத்துகிறது. இரண்டாவது வரியில் இரண்டு உள்ளமை முறை அழைப்புகள் உள்ளன. "உள்ளே" முறை FileStream உருவாக்கு() ஸ்டாக்கில் கோப்பு ஸ்ட்ரீம் பொருளை உருவாக்க அநாமதேய பொருள் ஐடியமைப் பயன்படுத்துகிறது (ஒரு பொருளின் பெயர் இல்லாமல்) மற்றும் அதை அழைக்கப்படும் முறைக்கு அனுப்புகிறது. எதிர்காலத்தில் இதை இன்னும் ஆழமாகப் பார்ப்போம், ஆனால் இந்த கட்டத்தில் நீங்கள் தெரிந்து கொள்ள வேண்டியது என்னவென்றால், நீங்கள் ஒரு கோப்பைப் பிரதிபலிக்கும் ஒரு பொருளை உருவாக்குகிறீர்கள் myfirst.tr மற்றும் அதை ns-3க்கு மாற்றவும். உருவாக்கப்பட்ட பொருளை அதன் வாழ்நாள் முழுவதும் பராமரிக்க நாங்கள் ns-3 ஐ நம்புகிறோம், இதன் போது இது C++ ஸ்ட்ரீம் ஆப்ஜெக்ட் நகல் கட்டமைப்பாளர்களுடன் தொடர்புடைய சிறிய அறியப்பட்ட (வேண்டுமென்றே) வரம்பினால் ஏற்படும் சிக்கல்களைத் தீர்க்கிறது.

வெளிப்புற அழைப்பு EnableAsciiAll() அனைத்து பாயிண்ட்-டு-பாயிண்ட் சாதன இணைப்புகளுக்கான உங்கள் உருவகப்படுத்துதலில் ASCII ட்ரேசிங்கைச் சேர்க்க விரும்புகிறீர்கள் என்றும், ASCII வடிவத்தில் பாக்கெட் இயக்கத் தகவலைப் பதிவுசெய்ய (குறிப்பிடப்பட்ட) ட்ரேஸ் ரிசீவர்களை நீங்கள் விரும்புகிறீர்கள் என்றும் உதவியாளரிடம் கூறுகிறது.

ns-2 தெரிந்தவர்களுக்கு, கண்காணிக்கப்படும் நிகழ்வுகள் "+", "-", "d" மற்றும் "r" நிகழ்வுகளை பதிவு செய்யும் அறியப்பட்ட ட்ரேஸ்பாயிண்ட்களுக்கு சமமானதாகும்.
இப்போது நீங்கள் ஸ்கிரிப்டை உருவாக்கலாம் மற்றும் கட்டளை வரியிலிருந்து இயக்கலாம்:

$ ./waf --run scratch/myfirst

பல முறை முன்பு போலவே, Waf இலிருந்து பல செய்திகளைப் பார்ப்பீர்கள், பின்னர் இயங்கும் நிரலில் இருந்து சில செய்திகளுடன் "'பில்ட்' வெற்றிகரமாக முடிந்தது.

இயங்கும் போது, ​​நிரல் என்ற பெயரில் ஒரு கோப்பை உருவாக்கும் myfirst.tr. வேலையின் தன்மை காரணமாக Waf, முன்னிருப்பாக கோப்பு உள்ளூர் கோப்பகத்தில் அல்ல, ஆனால் களஞ்சியத்தின் மேல்-நிலை கோப்பகத்தில் உருவாக்கப்படுகிறது. தடயங்கள் சேமிக்கப்படும் பாதையை நீங்கள் மாற்ற விரும்பினால், அதைக் குறிப்பிட Waf அளவுருவைப் பயன்படுத்தலாம். --cwd. நாங்கள் இதைச் செய்யவில்லை, எனவே உங்களுக்குப் பிடித்த எடிட்டரில் myfirst.tr என்ற ASCII ட்ரேஸ் கோப்பைப் பார்க்க, எங்கள் களஞ்சியத்தின் உயர்மட்ட கோப்பகத்திற்குச் செல்ல வேண்டும்.

ASCII தடயங்களைப் பாகுபடுத்துதல்

மிகவும் அடர்த்தியான வடிவத்தில் நிறைய தகவல்கள் உள்ளன, ஆனால் நீங்கள் கவனிக்க வேண்டிய முதல் விஷயம் என்னவென்றால், கோப்பு தனிப்பட்ட வரிகளைக் கொண்டுள்ளது. நீங்கள் பார்க்கும் சாளரத்தை விரிவுபடுத்தினால் இது தெளிவாகத் தெரியும்.

கோப்பில் உள்ள ஒவ்வொரு வரியும் ஒரு தடய நிகழ்வுக்கு ஒத்திருக்கிறது. இந்த வழக்கில், உருவகப்படுத்துதலில் உள்ள ஒவ்வொரு பாயிண்ட்-டு-பாயிண்ட் நெட்வொர்க் சாதனத்திலும் இருக்கும் டிரான்ஸ்மிஷன் வரிசையில் நிகழ்வுகளை நாங்கள் கண்டுபிடிப்போம். டிரான்ஸ்மிஷன் வரிசை என்பது ஒவ்வொரு பாக்கெட்டும் ஒரு புள்ளி-க்கு-புள்ளி இணைப்புக்கு அனுப்ப வேண்டிய வரிசையாகும். ட்ரேஸ் கோப்பில் உள்ள ஒவ்வொரு வரியும் ஒரு எழுத்தில் தொடங்குகிறது (அதற்குப் பிறகு ஒரு இடைவெளி உள்ளது). இந்த சின்னம் பின்வரும் பொருளைக் கொண்டிருக்கும்:

+: சாதன வரிசையில் ஒரு வரிசை செயல்பாடு ஏற்பட்டது;
-: சாதன வரிசையில் ஒரு உறுப்பு மீட்டெடுப்பு செயல்பாடு ஏற்பட்டது;
d: பொதுவாக வரிசை நிரம்பியதால், பாக்கெட் கைவிடப்பட்டது;
ஆர்: பிணைய சாதனம் மூலம் பாக்கெட் பெறப்பட்டது.

ட்ரேஸ் கோப்பில் உள்ள முதல் வரியை இன்னும் விரிவாகப் பார்ப்போம். நான் அதை பகுதிகளாகவும் (தெளிவுக்கான உள்தள்ளல்களுடன்) இடதுபுறத்தில் உள்ள வரி எண்ணாகவும் பிரிக்கிறேன்:

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) என்பது வினாடிகளில் வெளிப்படுத்தப்படும் உருவகப்படுத்துதல் நேரமாகும். நாங்கள் கேட்டது உங்களுக்கு நினைவிருக்கலாம் UdpEchoClientApplication இரண்டு வினாடிகளில் பாக்கெட்டுகளை அனுப்பத் தொடங்குங்கள். இது உண்மையில் நடக்கிறது என்பதை உறுதிப்படுத்துவதை இங்கே காண்கிறோம்.

ட்ரேஸ் எடுத்துக்காட்டின் அடுத்த பகுதி (வரி 2 இலிருந்து) இந்த நிகழ்வை எந்த ட்ரேஸ் மூலம் உருவாக்கியது என்பதைக் காட்டுகிறது (பெயர்வெளி தடயத்தைக் குறிக்கிறது). நீங்கள் ஒரு கோப்பு முறைமை பெயர்வெளியைப் போலவே சுவடு பெயர்வெளியைப் பற்றி சிந்திக்கலாம். பெயர்வெளியின் வேர் நோட்லிஸ்ட். இது முக்கிய ns-3 குறியீட்டில் நிர்வகிக்கப்படும் கொள்கலனுடன் ஒத்துள்ளது. இது ஸ்கிரிப்டில் உருவாக்கப்பட்ட அனைத்து முனைகளையும் கொண்டுள்ளது. ஒரு கோப்பு முறைமை அதன் மூலத்தில் கோப்பகங்களைக் கொண்டிருப்பது போல, நோட்லிஸ்ட் நாம் பல முனைகளைக் கொண்டிருக்கலாம். எனவே /NodeList/0 என்ற வரியானது நோட்லிஸ்டில் உள்ள பூஜ்ய முனையைக் குறிக்கிறது, இதை நாம் பொதுவாக "நோட் 0" என்று நினைக்கிறோம். ஒவ்வொரு முனையிலும் நிறுவப்பட்ட சாதனங்களின் பட்டியல் உள்ளது. இந்தப் பட்டியல் பெயர்வெளியில் அடுத்து அமைந்துள்ளது. இந்தச் சுவடு நிகழ்வு இருந்து வந்ததைக் காணலாம் சாதனப் பட்டியல்/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 வினாடிகளாக அதிகரிக்கப்பட்டுள்ளது என்பதை நினைவில் கொள்ளவும். நீங்கள் டுடோரியலைக் கவனமாகப் பின்பற்றினால், நெட்வொர்க் சாதனங்களின் டேட்டாரேட் மற்றும் இணைப்புத் தாமதத்தை அவற்றின் இயல்புநிலை மதிப்புகளில் விட்டுவிட்டீர்கள் என்று அர்த்தம். முந்தைய பகுதியில் நீங்கள் பார்த்தது போல், இந்த காலம் நன்கு தெரிந்திருக்க வேண்டும்.

இந்த நிகழ்வு முனை 2 (/நோட்லிஸ்ட்/1) மற்றும் பாக்கெட் ட்ரேஸ் மூலம் பெறப்படுகிறது (/MacRx) கோப்பில் மீதமுள்ள தடயங்களைப் பார்த்து, இடவியல் மூலம் பாக்கெட்டின் இயக்கத்தைப் பின்பற்றுவது உங்களுக்கு மிகவும் எளிதாக இருக்க வேண்டும்.

5.3.2 PCAP ட்ரேஸ்

ns-3 சாதன உதவியாளர்களும் .pcap வடிவத்தில் ட்ரேஸ் கோப்புகளை உருவாக்க பயன்படுத்தலாம். சுருக்கம் pcap (பொதுவாக சிற்றெழுத்தில் எழுதப்பட்டது) என்பது பாக்கெட் கேப்சரைக் குறிக்கிறது மற்றும் உண்மையில் .pcap கோப்பு வடிவத்தை வரையறுப்பதை உள்ளடக்கிய API ஆகும். இந்த வடிவமைப்பைப் படித்து காண்பிக்கக்கூடிய மிகவும் பிரபலமான நிரல் வயர்ஷார்க் (முன்னர் அழைக்கப்பட்டது ஐம்புலன்களையும்) இருப்பினும், இந்த பாக்கெட் வடிவமைப்பைப் பயன்படுத்தும் பல டிராஃபிக் டிரேஸ் அனலைசர்கள் உள்ளன. pcap தடயங்களை பகுப்பாய்வு செய்ய கிடைக்கக்கூடிய பல கருவிகளைப் பயன்படுத்த பயனர்களை ஊக்குவிக்கிறோம். இந்த டுடோரியலில் நாம் pcap ட்ரேஸ்களைப் பார்ப்பதில் கவனம் செலுத்துவோம் tcpdump.

pcap ட்ரேசிங்கை இயக்குவது ஒரு வரி குறியீட்டைக் கொண்டு செய்யப்படுகிறது.

pointToPoint.EnablePcapAll ("myfirst");

நாங்கள் இப்போது சேர்த்த ASCII ட்ரேஸ் குறியீட்டிற்குப் பிறகு இந்தக் குறியீட்டு வரியை ஒட்டவும் கீறல்/myfirst.cc. நாங்கள் "myfirst" என்ற சரத்தை மட்டுமே கடந்துவிட்டோம், "myfirst.pcap" அல்லது அதுபோன்ற எதையும் அல்ல. ஏனென்றால், அளவுரு ஒரு முன்னொட்டு, முழு கோப்பு பெயர் அல்ல. உருவகப்படுத்துதலின் போது, ​​உதவியாளர் உண்மையில் ஒவ்வொரு புள்ளி-க்கு-புள்ளி சாதனத்திற்கும் ஒரு சுவடு கோப்பை உருவாக்கும். கோப்பு பெயர்கள் முன்னொட்டு, முனை எண், சாதன எண் மற்றும் பின்னொட்டு "ஐப் பயன்படுத்தி உருவாக்கப்படும்.pcap".

எங்களின் உதாரண ஸ்கிரிப்ட்டிற்கு, "" என்று பெயரிடப்பட்ட கோப்புகளைப் பார்க்கலாம்.myfirst-0-0.pcap"மேலும்"myfirst-1-0.pcap", இவை முறையே node 0-device 0 மற்றும் node 1-device 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 வினாடிகளில் முதல் டம்ப்பில் பாக்கெட் வாடிக்கையாளரால் திரும்பப் பெறப்பட்டதையும் நீங்கள் இரண்டாவது டம்ப்பில் பார்ப்பீர்கள்.

வயர்ஷார்க் மூலம் வெளியீட்டைப் படித்தல்

உங்களுக்கு அறிமுகம் இல்லை என்றால் வயர்ஷார்க், நீங்கள் நிரல்களையும் ஆவணங்களையும் பதிவிறக்கம் செய்யக்கூடிய இணையதளம் உள்ளது: http://www.wireshark.org/. வயர்ஷார்க் இந்த ட்ரேஸ் கோப்புகளைக் காட்டப் பயன்படும் GUI ஆகும். உங்களிடம் வயர்ஷார்க் இருந்தால், ட்ரேஸ் பைல்களில் ஏதேனும் ஒன்றைத் திறந்து, பாக்கெட் ஸ்னிஃபரைப் பயன்படுத்தி பாக்கெட்டுகளைப் படம் பிடித்தது போல் உள்ளடக்கத்தைக் காட்டலாம்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்