در اینجا فرض بر این است که مطابق شکل ۴-۱۹ گرههای شمارهی ۱۶ و ۹ تونلکرم هستند.
شکل۴-۱۹: نمایش گرههای تونلکرم در میان سایر گرهها.
اگر گره ۲۶ را به عنوان مبدا و گره ۱۳ را مقصد در نظر بگیریم، میبینیم که بسته از مبدا تا مقصد از طریق گرههای میانی مختلف مسیریابی شده و گره مقصد بعد از دریافت بسته، پیام RREP را از طریق مسیر معکوس به سمت مبدا ارسال میکند. عملیات مسیریابی از مبدا تا مقصد از مسیرهای مختلف و از طریق گرههای مختلف صورت میپذیرد، اما نکتهی حائز اهمیت این است که هیچ بستهای به گرههای متخاصم ارسال نمیشود. شکل زیر چند مسیر از مسیرهای موجود را نشان میدهد.
شکل۴-۲۰: عملیات مسیریابی در شبکه.
پروتکل WARP بعد از محاسبهی مقدار آنومالی به این نتیجه رسیده که این مقدار برای دو گره شماره ۱۶ و شماره ۹ بیشتر از سایر گرههاست و در عملیات مسیریابی مانع از عبور بستهها از این دو گره میشود. مطابق شکل زیر بسته پس از عبور از گره ۴۱ به گره ۲ رفته یعنی به گره متخاصم شماره ۹ نمیرسد.
شکل۴-۲۱: عدم شرکت گره متخاصم شمارهی ۹ در مسیریابی.
بعد از این که گره ۲۶ به عنوان مبدا شروع به انتشار بسته در شبکه کرده،بسته را به گره شماره ۱۷ میفرستد ، گره ۱۷ مانع از رسیدن بسته به گره متخاصم ۱۶ شده و آن را به گره صفر میفرستد و بنابراین گره ۱۶ از مسریابی کنار گذاشته شده است.
شکل ۴-۲۲: عدم شرکت گره متخاصم شمارهی ۱۶ در مسیریابی.
در ادامه به شبیهسازی پروتکل OLSR برای مقابله با حملهی تونلکرم میپردازیم.
۴-۱۰ شبیهسازی پروتکل OLSR :
اساس این پروتکل استفاده از MPR بوده که برای شبکههای متراکم و بزرگ مناسب میباشد. پروتکل OLSR را باید به NS2 اضافه کنیم. برای این منظور یک سری تغییرات در برخی فایل های NS به شرح زیر اعمال میکنیم.
-
- Ns-allinone-2.34/ns-2.34/makefile line 269
Olsr/olsr.o
-
- Ns-allinone-2.34/ns-2.34/queue/priqueue.cc line 93
// olsr patch
Case PT_olsr:
-
- Ns-allinone-2.34/ns-2.34/common/packet.h
//olsr packet
static const packet-t PT_olsr=62;
// insert new packet type here
Static packet-t PT_NTYPE=63: // This MUST be the LAST one
Type == PT_AODV ││
Type == PT_olsr
And
// olsr patch line 390
Name_[PT_olsr] = “olsr” ;
-
- Ns-allinone-2.34/ns-2.34/trace/cmu-trace.h line 163
Void format_olsr(packet *p, int offset);
-
- Ns-allinone-2.34/ns-2.34/trace/cmu-trace.cc line 1071
// olsr patch
Void
CMUTrace ::format _olsr(packet *p, int offset)
{
Struct hdr_olsr *oh=HDR_olsr(p);
Struct hdr_olsr_beacon *ob = HDR_olsr_BEACON (p);
Struct hdr_olsr_error *oe =HDR_olsr_ERROR(p);
Switch(oh->pkt_type){
Case olsr_BEACON: