Understanding ICMP and it's Behavior
Understanding ICMP and it's Behavior (Part-1)
আমরা যারা কম্পিউটার নেটওয়ার্ক নিয়ে কাজ করি তারা সবাই ICMP শব্দটি শুনেছি। ICMP শব্দটি শুনলেই আমাদের মনে ভেসে উঠে যে, এটি এমন একটি টুলস যার মাধ্যমে একটি কম্পিউটার থেকে আরেকটি কম্পিউটারের কানেক্টিভিটি পরীক্ষা করা হয়। যেকোন আই.এস.পি বা আই.টি কোম্পানীতে লিখিত বা মৌখিক পরীক্ষায় ICMP সম্পর্কিত কোন প্রশ্ন আসলে প্রায় ৯৯.৯৯% ব্যক্তিই সহজ এই উত্তরটি দিয়ে থাকেন। কিন্তু, সাধারণ কানেক্টিভিটি পরীক্ষা করা ছাড়াও ICMP এর আরো অনেক গুরুত্বপূর্ণ ব্যবহার রয়েছে।
ICMP এর পূর্ণরূপ হলো Internet Control Message Protocol । এর নাম থেকেই বুঝা যাচ্ছে যে, এটি এমন এক ধরণের প্রটোকল যার মাধ্যমে নেটওয়ার্ক তথা ইন্টারনেট কানেক্টিভিটির নিয়ন্ত্রন এবং কোর ট্রাবলশ্যুটিং করা যায়। নেটওয়ার্কিং সেক্টরে এটি সবচেয়ে বহুল ব্যবহৃত প্রটোকল কিন্তু আমরা যারা নেটওয়ার্কিং নিয়ে কাজ করি তারা এই প্রটোকলটির ব্যাপারেই সবচেয়ে বেশি অজ্ঞ। আরো একটি মজার ব্যাপার হলো, যারা নেটওয়ার্ক সিকিউরিটি নিয়ে কাজ করেন তাদের অনেকেই কোর ডিভাইসসমূহে ICMP প্রটোকলটি ব্লক করে রাখেন এবং অন্যদেরকেও সব সময় তা ব্লক করে রাখার পরামর্শ দেন। তাদের ধারণা হলো যে, কোর ডিভাইসসমূহে ICMP প্রটোকলটি ব্লক করে রাখলে ডিভাইসের নিরাপত্তা তথা নেটওয়ার্কের নিরাপত্তা বৃদ্ধি পায়। এই কথাটি সম্পূর্ণ সত্য নয়। কোর ডিভাইসসমূহে ICMP প্রটোকলটি ব্লক করে রাখলে নেটওয়ার্কের নিরাপত্তা যতটুকু বৃদ্ধি পায়, তার চেয়ে বেশি সমস্যা তৈরী করে। আমরা সম্পূর্ণ টিউটোরিয়ালটিতে ব্যবহারিক প্রয়োগ এবং বিভিন্ন কেস স্টাডির মাধ্যমে ICMP এর মতো একটি জটিল এবং সুক্ষ্ণ প্রটোকলকে সহজভাবে বুঝার চেষ্টা করবো।
ICMP হলো ইন্টারনেট প্রটোকল সুইটের একটি গুরুত্বপূর্ণ অংশ যা RFC 792 (https://tools.ietf.org/html/rfc792) এ ডিফাইন করা হয়েছে। ICMP একটি Layer-3 প্রটোকল। ICMP প্রটোকলের মাধ্যমে নেটওয়ার্কের বিভিন্ন সমস্যা ডায়াগনসিস করা হয় এবং আই.পি অপারেশনে কোন সমস্যা তৈরী হলে একটি ICMP Massage এর মাধ্যমে তা সোর্স হোষ্টকে অবহিত করা হয়। একটি ICMP Message এর বিভিন্ন ধরণের Type ও Code রয়েছে। একজন নেটওয়ার্ক এ্যাডমিন হিসেবে এই Massage Type ও Code সমূহ সম্পর্কে আমাদের পর্যাপ্ত ধারণা থাকতে হবে। ICMP এর বিভিন্ন Massage Type ও Code সমূহ আপনারা নিচের লিংক এ পাবেন।
প্রথমেই সবগুলো Massage Type ও Code সমূহ মুখস্ত করার এমনকি সিরিয়াল অনুযায়ী বুঝারও দরকার নেই। আমরা বিভিন্ন উদাহরণের মাধ্যমে শুধুমাত্র প্রয়োজনীয় Massage Type ও Code সম্পর্কে জানবো। এক্ষেত্রে লিংক এর দেওয়া সিরিয়াল এদিক-ওদিক হতেই পারে।
টপোলজি এবং প্রাথমিক কনফিগারেশনঃ
চিত্রে প্রদত্ত টপোলজি অনুযায়ী, R1 হলো আমাদের সোর্স রাউটার/হোষ্ট, R4 হলো ডেষ্টিনেশন রাউটার/হোষ্ট এবং R2, R3 হলো ট্রানজিট রাউটার। আমরা প্রথমেই রাউটার সমূহের প্রাথমিক আই.পি এ্যাড্রেস কনফিগারেশন সম্পন্ন করবো।
R1#conf t R1(config)#interface fastEthernet 0/0 R1(config-if)#ip address 10.0.0.1 255.255.255.252 R1(config-if)#duplex full R1(config-if)#speed 100 R1(config-if)#exit
R2#conf t R2(config)#interface fastEthernet 0/0 R2(config-if)#ip address 10.0.0.2 255.255.255.252 R2(config-if)#no shutdown R2(config-if)#duplex full R2(config-if)#speed 100 R2(config-if)#exit R2(config)#interface fastEthernet 0/1 R2(config-if)#ip address 20.0.0.1 255.255.255.252 R2(config-if)#no shutdown R2(config-if)#duplex full R2(config-if)#speed 100 R2(config-if)#exit
R3#conf t R3(config)#interface fastEthernet 0/0 R3(config-if)#ip address 20.0.0.2 255.255.255.252 R3(config-if)#no shutdown R3(config-if)#duplex full R3(config-if)#speed 100 R3(config-if)#exit R3(config)#interface fastEthernet 0/1 R3(config-if)#ip address 30.0.0.1 255.255.255.252 R3(config-if)#no shutdown R3(config-if)#duplex full R3(config-if)#speed 100 R3(config-if)#exit
R4#conf t R4(config)#interface fastEthernet 0/0 R4(config-if)#ip address 30.0.0.2 255.255.255.252 R4(config-if)#no shutdown R4(config-if)#duplex full R4(config-if)#speed 100 R4(config-if)#exit
এখানে শুধুমাত্র রাউটারসমূহের আই.পি এ্যাড্রেস কনফিগার করা হয়েছে, কোন রাউটিং কনফিগার করা হয় নি। প্রাথমিক আই.পি কনফিগারেশনের পর, আমরা প্রথমে R1 থেকে R2 কে Ping দিব।
R1#ping 10.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds: ! Success rate is 100 percent (1/1), round-trip min/avg/max = 3/3/3 ms
প্রাপ্ত আউটপুট থেকে বুঝা যাচ্ছে যে, R1 থেকে R2 কে Ping পাওয়া যাচ্ছে। এখানে, কমান্ডের সাথে “repeat 1” অপশন ব্যবহার করে একটি মাত্র ICMP প্যাকেট জেনারেট করা হয়েছে। এই “repeat 1” অপশন ব্যবহার না করলে Cisco রাউটার সাধারণত পাঁচটি প্যাকেট জেনারেট করে।
যখন আমরা R1 থেকে R2 কে Ping দিলাম তখন R1 রাউটার প্রথমে একটি ICMP Echo ম্যাসেজ জেনারেট করলো যার Type হলো 8 এবং Code হলো 0 (type=8, code=0)। ICMP ম্যাসেজের ধরণ অনুযায়ী এগুলোকে বিভিন্ন Type এ বিভক্ত করা হয়েছে। একেকটি Type কে আবার এক বা একাধিব সাব-টাইপ এ বিভক্ত করা হয়েছে। এই সাব-টাইপগুলোকে Code বলে। যখন কোন একটি হোষ্ট থেকে (যেমনঃ R1) আরেকটি হোষ্টকে (যেমনঃ R2) Ping দেওয়া হয়, তখন সোর্স হোষ্ট (R1) এই type=8, code=0 ম্যাসেজ জেনারেট করে।
পরবর্তীতে, R1 এর ICMP Echo ম্যাসেজের জবাবে R2 একটি ICMP Echo Reply ম্যাসেজ জেনারেট করলো, যার Type হলো 0 এবং Code হলো 0 (type=0, code=0)।
আমরা Debug কমান্ডের মাধ্যমে R1 এবং R2 এর মধ্যকার এই ICMP কমিউকেশনকে ভেরিফাই করতে পারি। এজন্য আমরা R1 এবং R2 উভয় রাউটারেই #debug ip packet detail কমান্ডটি দিব। (সতর্কতাঃ Debug কমান্ডসমূহ শুধুমাত্র বিশেষ কিছু ক্ষেত্রে ট্রাবলশ্যুটিং এর কাজে ব্যবহার করা হয়। কোন প্রোডাকশন রাউটারে Debug কমান্ডসমূহ প্রয়োগ করলে তা রাউটারের CPU ও Memory খরচ করে এবং রাউটারের কার্যক্ষমতা হ্রাস করে।)
R1#debug ip packet detail IP packet debugging is on (detailed)
R2#debug ip packet detail IP packet debugging is on (detailed)
R1 এবং R2 উভয় রাউটারে #debug ip packet detail কমান্ডটি দেওয়ার পর আমরা যদি R1 থেকে R2 তে আবার Ping দেই তাহলে R1 এর কনসোলে নিচের Debug Output দেখতে পাবো।
R1#ping 10.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds: ! Success rate is 100 percent (1/1), round-trip min/avg/max = 3/3/3 ms
*Mar 1 00:34:24.191: IP: tableid=0, s=10.0.0.1 (local), d=10.0.0.2 (FastEthernet0/0), routed via FIB *Mar 1 00:34:24.195: IP: s=10.0.0.1 (local), d=10.0.0.2 (FastEthernet0/0), len 100, sending *Mar 1 00:34:24.199: ICMP type=8, code=0 *Mar 1 00:34:24.255: IP: tableid=0, s=10.0.0.2 (FastEthernet0/0), d=10.0.0.1 (FastEthernet0/0), routed via RIB *Mar 1 00:34:24.259: IP: s=10.0.0.2 (FastEthernet0/0), d=10.0.0.1 (FastEthernet0/0), len 100, rcvd 3 *Mar 1 00:34:24.263: ICMP type=0, code=0
R1 এর Debug Output থেকে বুঝা যাচ্ছে যে, R1 নিজের 10.0.0.1 আই.পি কে সোর্স হিসেবে ব্যবহার করে 10.0.0.2 এর বরাবর একটি ICMP Echo ম্যাসেজ পাঠিয়েছে (type=8, code=0)। R1 এই ICMP Echo ম্যাসেজের জবাবে 10.0.0.2 (অর্থাৎ, R2) এর কাছ থেকে একটি ICMP Echo Reply ম্যাসেজ পেয়েছে (type=0, code=0)। আমরা R2 এর Debug Output দেখলে ঠিক একই রকম দেখতে পাবো (কিন্তু বিপরীতমুখী)।
*Mar 1 00:34:12.375: IP: tableid=0, s=10.0.0.1 (FastEthernet0/0), d=10.0.0.2 (FastEthernet0/0), routed via RIB *Mar 1 00:34:12.379: IP: s=10.0.0.1 (FastEthernet0/0), d=10.0.0.2 (FastEthernet0/0), len 100, rcvd 3 *Mar 1 00:34:12.383: ICMP type=8, code=0 *Mar 1 00:34:12.383: IP: tableid=0, s=10.0.0.2 (local), d=10.0.0.1 (FastEthernet0/0), routed via FIB *Mar 1 00:34:12.387: IP: s=10.0.0.2 (local), d=10.0.0.1 (FastEthernet0/0), len 100, sending *Mar 1 00:34:12.391: ICMP type=0, code=0
উপরিউক্ত আলোচনা থেকে আমরা দুইটি ICMP ম্যাসেজ সম্পর্কে জানলাম। এগুলো হলোঃ
Echo (type=8, code=0) এবং
Echo Reply (type=0, code=0)
Echo (type=8, code=0) এবং
Echo Reply (type=0, code=0)
এখন আমরা যদি R1 থেকে R4 কে (30.0.0.2) Ping দেই তাহলে নিচের আউটপুট দেখতে পাবো।
R1#ping 30.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 30.0.0.2, timeout is 2 seconds: . Success rate is 0 percent (0/1)
আউটপুট দেখে বুঝা যাচ্ছে যে, R1 থেকে R4 এর 30.0.0.2 কে Ping পাওয়া যাচ্ছে না। একটি হোষ্ট থেকে আরেকটি হোষ্টকে Ping না পাওয়ার বিভিন্ন কারণ থাকতে পারে। এই ক্ষেত্রে ঠিক কোন কারণে Ping পাওয়া যাচ্ছে না তা বুঝার জন্য আমরা R1 এর Debug আউটপুট চেক করতে পারি।
*Mar 1 00:10:25.391: IP: s=10.0.0.1 (local), d=30.0.0.2, len 100, unroutable
*Mar 1 00:10:25.395: ICMP type=8, code=0
R1 এর Debug আউটপুট থেকে সহজেই বুঝা যাচ্ছে যে, 30.0.0.2 আই.পি এ্যাড্রেসের পৌছানোর জন্য প্রয়োজনীয় রাউট R1 এর রাউটিং টেবিলে নেই। আমরা চাইলে R1 এর রাউটিং টেবিলও চেক করে দেখতে পারি।
R1#show ip route 30.0.0.2 % Network not in table
এই সমস্যাটি বুঝার জন্য সব ব্র্যান্ডের রাউটারেই Debug কমান্ডের ব্যবহার করার দরকার হয় না। উদাহরণস্বরূপ, এই ধরণের ক্ষেত্রে MikroTik রাউটার তার কনসোলে স্বয়ংক্রিয়ভাবে “Destination Net Unreachable” এই ধরণের আউটপুট প্রদান করে। এই সমস্যাটি সমাধানের জন্য আমাদের কে R1 রাউটারে প্রয়োজনীয় রাউট কনফিগার করতে হবে।
R1#conf t R1(config)#ip route 30.0.0.0 255.255.255.252 10.0.0.2 R1(config)#exit
R1 এ প্রয়োজনীয় রাউট কনফিগার করার পর, আমরা যদি আবারও R1 থেকে R4 কে (30.0.0.2) Ping দেই তাহলে নিচের আউটপুট দেখতে পাবো।
R1#ping 30.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 30.0.0.2, timeout is 2 seconds: U Success rate is 0 percent (0/1)
এবারও আউটপুট দেখে বুঝা যাচ্ছে যে, R1 থেকে R4 এর 30.0.0.2 কে Ping পাওয়া যাচ্ছে না। কারণটি বুঝার জন্য আমরা R1 এর Debug আউটপুট চেক করতে পারি।
*Mar 1 00:29:48.035: IP: tableid=0, s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), routed via FIB *Mar 1 00:29:48.039: IP: s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), len 100, sending *Mar 1 00:29:48.039: ICMP type=8, code=0 *Mar 1 00:29:48.079: IP: tableid=0, s=10.0.0.2 (FastEthernet0/0), d=10.0.0.1 (FastEthernet0/0), routed via RIB *Mar 1 00:29:48.083: IP: s=10.0.0.2 (FastEthernet0/0), d=10.0.0.1 (FastEthernet0/0), len 56, rcvd 3 *Mar 1 00:29:48.087: ICMP type=3, code=1
R1 এর Debug আউটপুটের প্রথম অংশে দেখা যাচ্ছে যে, R1 নিজের 10.0.0.1 আই.পি কে সোর্স ধরে R4 এর 30.0.0.2 এর কাছে একটি ICMP Echo ম্যাসেজ পাঠিয়েছে যার Type হলো 8 এবং Code হলো 0 (type=8, code=0)। R1 রাউটার ICMP Echo ম্যাসেজের জবাবে R2 এর কাছ থেকে একটি ম্যাসেজ পেয়েছে যার Type হলো 3 এবং Code হলো 1 (type=3, code=1)।
কোন রাউটার (R2) আরেকটি রাউটারকে (R1) তখনই ICMP type=3 (Destination Unreachable) ম্যাসেজ পাঠায় যখন ঐ রাউটার (R2) কোন কারণে ডেষ্টিনেশন আই.পি এর কাছে ICMP প্যাকেট পাঠাতে না পারে। এবং উক্ত রাউটার (R2) ঠিক কি কারণে ডেষ্টিনেশন আই.পি এর কাছে ICMP প্যাকেট পাঠাতে পারছে না সে সম্পর্কে ধারণা দেওয়ার জন্য সোর্স (R1) এর কাছে একটি Code ও পাঠিয়ে থাকে (এটি শুধুমাত্র ধারণা, কোন প্রমান নয়)।
এখানে, R2 এর কাছ থেকে প্রাপ্ত type=3, code=1 ম্যাসেজ দ্বারা বুঝা যাচ্ছে যে, R2 নিজেই 30.0.0.2 ডেষ্টিনেশনের কাছে পৌছাতে পারছে না। ICMP এর বিভিন্ন Massage Type ও Code সমূহ আপনারা নিচের লিংক এ পাবেন।
আমরা যদি R2 থেকে R4 (30.0.0.2) কে Ping দেই তাহলে R2 এ নিচের Debug আউটপুট পাবো।
R2#ping 30.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 30.0.0.2, timeout is 2 seconds: . Success rate is 0 percent (0/1)
R2 এর Debug আউটপুট থেকে সহজেই বুঝা যাচ্ছে যে, 30.0.0.2 আই.পি এ্যাড্রেসের কাছে পৌছানোর জন্য প্রয়োজনীয় রাউট R2 এর রাউটিং টেবিলে নেই।
*Mar 1 01:18:44.519: IP: s=10.0.0.2 (local), d=30.0.0.2, len 100, unroutable
*Mar 1 01:18:44.523: ICMP type=8, code=0
আমরা চাইলে R2 এর রাউটিং টেবিলও চেক করে দেখতে পারি।
R2#show ip route 30.0.0.2 % Network not in table
একটি প্রোডাকশন নেটওয়ার্কে এই ধরণের পরিস্থিতিতে যদি আমাদের R2 তে এ্যাকসেস না থাকে তাহলে Traceroute রিপোর্টের উপর ভিত্তি করে আমরা R2 এর নেটওয়ার্ক এ্যাডমিনকে সমস্যা সমাধানের জন্য নোটিশ দিতে পারি।
এই সমস্যাটি সমাধানের জন্য আমাদের কে R2 রাউটারে প্রয়োজনীয় রাউট কনফিগার করতে হবে।
R2#conf t R2(config)#ip route 30.0.0.0 255.255.255.252 20.0.0.2 R2(config)#exit
R2 এ প্রয়োজনীয় রাউট কনফিগার করার পর, আমরা যদি আবারও R1 থেকে R4 কে (30.0.0.2) Ping দেই তাহলে নিচের আউটপুট দেখতে পাবো।
R1#ping 30.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 30.0.0.2, timeout is 2 seconds: . Success rate is 0 percent (0/1)
এবারও আউটপুট দেখে বুঝা যাচ্ছে যে, R1 থেকে R4 এর 30.0.0.2 কে Ping পাওয়া যাচ্ছে না। কারণটি বুঝার জন্য আমরা R1 এর Debug আউটপুট চেক করতে পারি।
*Mar 1 01:36:06.731: IP: tableid=0, s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), routed via FIB *Mar 1 01:36:06.731: IP: s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), len 100, sending *Mar 1 01:36:06.735: ICMP type=8, code=0
R1 এর Debug আউটপুটে দেখা যাচ্ছে যে, R1 নিজের 10.0.0.1 আই.পি কে সোর্স ধরে R4 এর 30.0.0.2 এর কাছে একটি ICMP Echo ম্যাসেজ পাঠিয়েছে যার Type হলো 8 এবং Code হলো 0 (type=8, code=0)। R1 রাউটার ICMP Echo ম্যাসেজের জবাবে কোন রিপ্লাই ম্যাসেজ পাচ্ছে না। যদি এরকম হয় তাহলে বুঝতে হবে, ICMP Echo ম্যাসেজটি সম্ভবত ডেষ্টিনেশনে পৌছেছে কিন্তু রিভার্স রাউটিং পাথে কোন সমস্যা আছে, অর্থাৎ রিপ্লাই ম্যাসেজটি আসতে পারছে না।
সমস্যাটি ভালভাবে বুঝার জন্য আমরা R4 এর Debug আউটপুট চেক করতে পারি।
*Mar 1 01:35:37.887: IP: tableid=0, s=10.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), routed via RIB *Mar 1 01:35:37.891: IP: s=10.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), len 100, rcvd 3 *Mar 1 01:35:37.895: ICMP type=8, code=0 *Mar 1 01:35:37.895: IP: s=30.0.0.2 (local), d=10.0.0.1, len 100, unroutable *Mar 1 01:35:37.899: ICMP type=0, code=0
R4 এর Debug আউটপুট থেকে সহজেই বুঝা যাচ্ছে যে, R1 এর কাছ থেকে R4 ICMP Echo ম্যাসেজ ঠিকই পাচ্ছে কিন্তু R1 এর 10.0.0.1 আই.পি এ্যাড্রেসের কাছে রিপ্লাই দেওয়ার জন্য প্রয়োজনীয় রাউট R4 এর রাউটিং টেবিলে নেই। আমরা চাইলে R4 এর রাউটিং টেবিলও চেক করে দেখতে পারি।
R4#show ip route 10.0.0.1 % Network not in table
এই সমস্যাটি সমাধানের জন্য আমাদেরকে R4 রাউটারে প্রয়োজনীয় রিভার্স রাউট কনফিগার করতে হবে।
R4#conf t R4(config)#ip route 10.0.0.0 255.255.255.252 30.0.0.1 R4(config)#exit
R4 এ প্রয়োজনীয় রিভার্স রাউট কনফিগার করার পর, আমরা যদি আবারও R1 থেকে R4 কে (30.0.0.2) Ping দেই তাহলে নিচের আউটপুট দেখতে পাবো।
R1#ping 30.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 30.0.0.2, timeout is 2 seconds: . Success rate is 0 percent (0/1)
*Mar 1 01:51:28.771: IP: tableid=0, s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), routed via FIB *Mar 1 01:51:28.775: IP: s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), len 100, sending *Mar 1 01:51:28.775: ICMP type=8, code=0
এবারও R1 এর Debug আউটপুটে দেখা যাচ্ছে যে, R1 নিজের 10.0.0.1 আই.পি কে সোর্স ধরে R4 এর 30.0.0.2 এর কাছে একটি ICMP Echo ম্যাসেজ পাঠিয়েছে যার Type হলো 8 এবং Code হলো 0 (type=8, code=0)। কিন্তু এখনও R1 রাউটার ICMP Echo ম্যাসেজের জবাবে কোন রিপ্লাই ম্যাসেজ পাচ্ছে না। সমস্যাটি আরো ভালভাবে বুঝার জন্য আমরা আবারও R4 এর Debug আউটপুট চেক করতে পারি।
*Mar 1 01:50:59.915: IP: tableid=0, s=10.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), routed via RIB *Mar 1 01:50:59.915: IP: s=10.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), len 100, rcvd 3 *Mar 1 01:50:59.919: ICMP type=8, code=0 *Mar 1 01:50:59.923: IP: tableid=0, s=30.0.0.2 (local), d=10.0.0.1 (FastEthernet0/0), routed via FIB *Mar 1 01:50:59.927: IP: s=30.0.0.2 (local), d=10.0.0.1 (FastEthernet0/0), len 100, sending *Mar 1 01:50:59.927: ICMP type=0, code=0 *Mar 1 01:50:59.975: IP: tableid=0, s=30.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), routed via RIB *Mar 1 01:50:59.979: IP: s=30.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), len 56, rcvd 3 *Mar 1 01:50:59.983: ICMP type=3, code=1
R4 এর Debug আউটপুটে দেখা যাচ্ছে যে, R1 এর কাছ থেকে R4 ICMP Echo ম্যাসেজ পাচ্ছে এবং তার জবাবে R1 এর কাছে ICMP Echo Reply ম্যাসেজ পাঠাচ্ছে। এবং এর পাশাপাশি R4 R3 এর কাছ থেকে একটি type=3, code=1 ম্যাসেজ পাচ্ছে। তান মানে কি? তার মানে হলো, R4 R1 এর কাছে ICMP Echo Reply ম্যাসেজ ঠিকই পাঠাচ্ছে কিন্তু ট্রানজিট রাউটার R3 তা R1 এর কাছে ফরোয়ার্ড করতে পারছে না, এই ব্যর্থতার কারণ হিসেবে সে R3 R4 এর কাছে একটি Destination Unreachable (type=3, code=1) ম্যাসেজ পাঠাচ্ছে। এখন যদি আমরা R3 এর Debug আউটপুট দেখি তাহলে প্রকৃত কারণটি জানতে পারবো।
*Mar 1 01:50:43.191: IP: s=30.0.0.2 (FastEthernet0/1), d=10.0.0.1, len 100, unroutable *Mar 1 01:50:43.195: ICMP type=0, code=0 *Mar 1 01:50:43.195: IP: tableid=0, s=30.0.0.1 (local), d=30.0.0.2 (FastEthernet0/1), routed via FIB *Mar 1 01:50:43.199: IP: s=30.0.0.1 (local), d=30.0.0.2 (FastEthernet0/1), len 56, sending *Mar 1 01:50:43.203: ICMP type=3, code=1
R3 এর Debug আউটপুট থেকে সহজেই বুঝা যাচ্ছে যে, R1 (10.0.0.1) এর কাছে R4 এর পাঠানো ICMP Echo Reply ম্যাসেজটি সে ফরোয়ার্ড করতে পারছে না, কারণ 10.0.0.1 আই.পি এ্যাড্রেসের কাছে পৌছানোর জন্য প্রয়োজনীয় রাউট R3 এর রাউটিং টেবিলে নেই। আমরা চাইলে R3 এর রাউটিং টেবিলও চেক করে দেখতে পারি।
R3#conf t R3(config)#ip route 10.0.0.0 255.255.255.252 20.0.0.1 R3(config)#exit
এসমস্যা সমাধানের জন্য আমাদেরকে R3 রাউটারে প্রয়োজনীয় রাউট কনফিগার করতে হবে।
R1#ping 30.0.0.2 repeat 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 30.0.0.2, timeout is 2 seconds: ! Success rate is 100 percent (1/1), round-trip min/avg/max = 80/80/80 ms
সঠিকভাবে রাউট কনফিগার করার পর, আমরা যদি R1 থেকে R4 কে আবারও Ping দেই তাহলে Ping রেসপন্স পাওয়া যাবে। এক্ষেত্রে আমরা আমাদের বুঝার সুবিধার্থে R1 এবং R4 এর Debug আউটপুট এ্যানালাইসিস করে দেখতে পারি।
#R1# *Mar 1 00:03:56.387: IP: tableid=0, s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), routed via FIB *Mar 1 00:03:56.391: IP: s=10.0.0.1 (local), d=30.0.0.2 (FastEthernet0/0), len 100, sending *Mar 1 00:03:56.391: ICMP type=8, code=0 *Mar 1 00:03:56.459: IP: tableid=0, s=30.0.0.2 (FastEthernet0/0), d=10.0.0.1 (FastEthernet0/0), routed via RIB *Mar 1 00:03:56.463: IP: s=30.0.0.2 (FastEthernet0/0), d=10.0.0.1 (FastEthernet0/0), len 100, rcvd 3 *Mar 1 00:03:56.467: ICMP type=0, code=0
#R4# *Mar 1 00:07:03.823: IP: tableid=0, s=10.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), routed via RIB *Mar 1 00:07:03.827: IP: s=10.0.0.1 (FastEthernet0/0), d=30.0.0.2 (FastEthernet0/0), len 100, rcvd 3 *Mar 1 00:07:03.831: ICMP type=8, code=0 *Mar 1 00:07:03.831: IP: tableid=0, s=30.0.0.2 (local), d=10.0.0.1 (FastEthernet0/0), routed via FIB *Mar 1 00:07:03.835: IP: s=30.0.0.2 (local), d=10.0.0.1 (FastEthernet0/0), len 100, sending *Mar 1 00:07:03.839: ICMP type=0, code=0
উপরিউক্ত আলোচনা থেকে আমরা মোট তিনটি ICMP ম্যাসেজ সম্পর্কে জানলাম। এগুলো হলোঃ
Echo (type=8, code=0)
Echo Reply (type=0, code=0) এবং
Destination Host Unreachable (type=3, code=1
Echo (type=8, code=0)
Echo Reply (type=0, code=0) এবং
Destination Host Unreachable (type=3, code=1
No comments