1 المقدمة
سعيد هو أداة التي تم إنشاؤها من قبل مختبرات عش لتزامن خفيفة الوزن من بنى الشبكات المحاكاة. برنامج Happy مفيد لتطوير واختبار شبكات المنطقة المنزلية لإنترنت الأشياء.
مع Happy ، يمكنك:
- اختبر بروتوكولات الشبكة وبرامج التنفيذ الموزعة الأخرى على جهاز تطوير Linux واحد دون استخدام أجهزة جهاز إنترنت الأشياء
- قم بإجراء اختبار وظيفي آلي عبر الشبكة
- قم بتشغيل عدة شبكات متوازية ومتزامنة على نفس النظام لتحسين إنتاجية الاختبار
في هذا Codelab، سوف تتعلم كيفية البدء مع سعيد، فضلا عن أساسيات نسج لأجهزة تقنيات عمليات. تنفيذ نسج عليك هو استخدام OpenWeave ، وهو نسخة مفتوحة المصدر الصادرة عن عش.

ماذا ستتعلم
- كيف نبني Happy و OpenWeave
- كيفية إنشاء شبكة محاكاة إنترنت الأشياء يدويًا
- كيفية إدارة طبولوجيا مخصصة
- كيفية توصيل شبكة Happy محاكاة بالإنترنت
- أساسيات النسج
ماذا ستحتاج
- جهاز Linux ، مادي أو افتراضي
- عميل Git أو cli
- بايثون 2.7
- فهم أساسي لمفاهيم الشبكات والتوجيه
2. ابدأ
قم بتثبيت سلسلة الأدوات والتبعيات
لإنشاء Happy and Weave ، تأكد من أن لديك سلسلة أدوات مدعومة وأن جميع التبعيات مثبتة.
$ sudo apt-get update
$ sudo apt-get install -y autotools-dev build-essential git lcov \
libdbus-1-dev libglib2.0-dev libssl-dev \
libudev-dev make python2.7 software-properties-common \
python-setuptools bridge-utils python-lockfile \
python-psutil
$ sudo apt-get install -y --force-yes gcc-arm-none-eabi
$ sudo apt-get update -qq
احصل على الكود المصدري
استنساخ مستودعات Happy و OpenWeave Git من سطر الأوامر:
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
تثبيت Happy
من الدليل الجذر السعيد ، قم بتثبيت Happy:
$ cd ~/happy $ make
تحقق سعيد التثبيت
يجب الآن الوصول إلى الأوامر السعيدة من سطر الأوامر:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
قم بتثبيت OpenWeave
من الدليل الجذر OpenWeave ، قم بتثبيت OpenWeave:
$ cd ~/openweave-core $ make -f Makefile-Standalone
تكوين Happy مع OpenWeave
لاستخدام OpenWeave مع Happy ، تحتاج إلى إعلام Happy بمكان العثور على تثبيت Weave. تحديث التكوين سعيد مع المسار ل /src/test-apps ضمن بناء OpenWeave الخاص بك:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
قم بتأكيد التكوين:
$ happy-configuration
User Happy Configuration
weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
تحقق من تثبيت OpenWeave
يمكن الوصول إلى أوامر النسج المطلوبة في Codelab هذا من سطر الأوامر:
$ weave-fabric-add -h
weave-fabric-add creates a weave fabric.
weave-fabric-add [-h --help] [-q --quiet] [-i --id <FABRIC_ID>]
Example:
$ weave-fabric-add 123456
Creates a Weave Fabric with id 123456
return:
0 success
1 fail
إذا كنت تحصل على خطأ weave-fabric-add: command not found ، تحديث برنامج PATH متغير البيئة مع المسار تستخدم لثنائيات سعيد:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3. طوبولوجيا الخاص بك الأولى
لنقم بإنشاء طبولوجيا ثلاثية العقد التالية باستخدام Happy.

هذا الهيكل هو مثال لشبكة منزلية بسيطة (HAN). في HAN هذا ، يتم توصيل عقدتين معًا في شبكة خيط ، وتتصل إحدى هذه العقد بثالثة عبر Wi-Fi. يمكن أيضًا توصيل هذه العقدة بجهاز توجيه لاسلكي في المنزل لتوفير اتصال بالإنترنت لشبكة HAN بأكملها. المزيد عن هذا لاحقًا.
أولاً ، قم بإنشاء العقد الثلاثة:
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
دعنا نتأكد من وجودها:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
لنقم الآن بإنشاء بعض الشبكات:
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
تحقق من وجود الشبكات:
$ happy-network-list ThreadNetwork WiFiNetwork
تحقق من الحالة السعيدة:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP
WiFiNetwork wifi UP
NODES Name Interface Type IPs
01ThreadNode
02BorderRouter
03WiFiNode
لا يكفي مجرد إحضار شبكة - علينا إضافة عقد إلى الشبكات. باتباع مخطط الهيكل الخاص بنا ، أضف كل عقدة إلى الشبكة (الشبكات) المناسبة:
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
علما بأن 02BorderRouter تم إضافتها إلى كل من ThreadNetwork و WiFiNetwork . هذا لأنه كموجه حدودي داخل HAN الخاص بنا ، فإن هذه العقدة تربط الشبكتين الفرديتين معًا.
تحقق من الحالة السعيدة. واجهات كل عقدة في الأعلى:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP
WiFiNetwork wifi UP
NODES Name Interface Type IPs
01ThreadNode wpan0 thread
02BorderRouter wpan0 thread
wlan0 wifi
03WiFiNode wlan0 wifi
تبدو طوبولوجيا لدينا الآن كما يلي:

الخطوة الأخيرة في إنشاء شبكتنا السعيدة هي تعيين عناوين IP لكل واجهة على كل عقدة. حدد بادئة IP للشبكة ، وسيقوم Happy تلقائيًا بتعيين عناوين IP لك.
نظرًا لأن بروتوكول Thread يستخدم IPv6 ، أضف بادئة IPv6 إلى شبكة مؤشر الترابط:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
تحقق من الحالة السعيدة. تحتوي واجهات مؤشر الترابط في كل عقدة مؤشر ترابط على عناوين IP:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi
03WiFiNode wlan0 wifi
بالنسبة لشبكة WiFi ، أضف بادئات IPv4 و IPv6:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
تحقق من الحالة السعيدة مرة أخرى. جميع الواجهات لديها عناوين IP ، مع اثنين لكل واجهة Wi-Fi:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP 2001:0db8:000a:000b/64
10.0.1/24
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi 10.0.1.2/24
2001:0db8:000a:000b:426c:38ff:fe90:01e6/64
03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
10.0.1.3/24
هنا طوبولوجيا لدينا المحدثة:

4. اختبر الاتصال
والآن بعد أن شبكة سعيدة لدينا وتشغيلها، دعونا اختبار الاتصال به من الأزيز العقد الأخرى من 01ThreadNode :
$ happy-ping 01ThreadNode 02BorderRouter
[Ping] ping from 01ThreadNode to 02BorderRouter on address
10.0.1.2 -> 100% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 100% packet loss
$ happy-ping 01ThreadNode 03WiFiNode
[Ping] ping from 01ThreadNode to 03WiFiNode on address
2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 100% packet loss
[Ping] ping from 01ThreadNode to 03WiFiNode on address
10.0.1.3 -> 100% packet loss
و happy-ping يحاول الأمر بينغ كل عنوان IP لكل واجهة على العقدة الهدف. يمكننا تجاهل عناوين IPv4 لأن Thread يستخدم IPv6 فقط.
علما بأن واحد فقط ب IPv6 بينغ كانت ناجحة: واحد على 02BorderRouter الصورة wpan0 واجهة، والذي هو العنوان الوحيد 01ThreadNode يمكن أن تصل مباشرة:

فشلت عناوين IPv6 أخرى لأنه لم يتم تمكين إعادة توجيه بين wpan0 و wlan0 على 02BorderRouter . وهكذا، 01ThreadNode ليس لديه فكرة 03WiFiNode موجودا، أو كيفية الوصول إليها. قام Happy بإحضار الشبكة التي تمت محاكاتها ، ولكنه لم يمكّن جميع عمليات التوجيه وإعادة التوجيه بين العقد.
أضف المسارات
لتوجيه حركة مرور IPv6 عبر HAN ، أضف المسارات المناسبة لكل عقدة في كل شبكة ، في كلا الاتجاهين (حتى يعرف ping كيفية العودة إلى العقدة المصدر).
لكل عقدة ، ستحتاج إلى معرفة:
- أقرب شبكة بوابة في هذه الحالة،
02BorderRouterعلى حد سواء - الشبكة المستهدفة - أين تذهب بعد البوابة
بالنسبة لشبكة العقد الثلاث الخاصة بنا ، فإن ذلك يعطينا ما يلي:
من شبكة المصدر | إلى الشبكة المستهدفة | عبر البوابة |
| | |
| | |
ويمكن القيام بذلك بشكل فردي لكل عقدة مع happy-node-route ، ولكن من الأسهل أن نفعل ذلك لجميع العقد في كل شبكة مع happy-network-route .
$ happy-network-route -a -i ThreadNetwork -t default -v 02BorderRouter -p 2001:db8:1:2::/64 $ happy-network-route -a -i WiFiNetwork -t default -v 02BorderRouter -p 2001:db8:a:b::/64
للحصول على تفسير من أعلام سطر الأوامر، استخدم happy-network-route -h .
و happy-network-route يتحول الأمر أيضا على IPv4 و IPv6 الشحن لكل عقدة، حسب الحاجة. يسمح هذا لحركة المرور بالتوجيه من واجهة إلى أخرى داخل العقدة.
الآن أعد محاولة اختبار الاتصال:
$ happy-ping 01ThreadNode 02BorderRouter
[Ping] ping from 01ThreadNode to 02BorderRouter on address
10.0.1.2 -> 100% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 0% packet loss
تعمل كلتا أصوات IPv6! مع إعادة توجيه، فإنه يعرف كيفية الوصول إلى wlan0 واجهة. لا يزال اختبار اتصال IPv4 يفشل ، لأننا قمنا فقط بتكوين مسارات IPv6 وإعادة التوجيه (أيضًا لأن Thread لا يعمل عبر IPv4).
نظرًا لأننا أضفنا مسارات الشبكة إلى كلا الجانبين ، فلنعمل ping عبر الشبكات:
$ happy-ping 01ThreadNode 03WiFiNode
[Ping] ping from 01ThreadNode to 03WiFiNode on address
2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 0% packet loss
[Ping] ping from 01ThreadNode to 03WiFiNode on address
10.0.1.3 -> 100% packet loss
يعمل اختبار اتصال IPv6 بالشكل المتوقع. لديك الآن IPv6 HAN كامل الوظائف ومحاكاة.

لتمكين طريقة أكثر أمانًا وموثوقية لربط كل شيء معًا ، دعنا نضيف Weave أعلى HAN.
5. إضافة نسج
Weave عبارة عن طبقة تطبيق للشبكة توفر العمود الفقري للاتصالات الآمنة والموثوقة لمنتجات Nest. يمكننا إضافة وظائف Weave مع OpenWeave ، الإصدار المفتوح المصدر من Weave.
تطبيق نسج يسمى "النسيج". نسيج Weave عبارة عن شبكة تضم جميع عُقد HAN وخدمة Nest وأي أجهزة محمولة مشاركة في HAN. إنه يقع أعلى HAN ويسمح بتوجيه أسهل عبر تقنيات ارتباط الشبكة الأساسية المختلفة (على سبيل المثال ، Thread أو Wi-Fi).
إنشاء النسيج نسج لHAN، وذلك باستخدام fab1 باسم ID النسيج، ثم تكوين كافة العقد لنسج:
$ weave-fabric-add fab1 $ weave-node-configure
الآن بعد أن تم تكوين Weave ، تحقق من الحالة السعيدة:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP 2001:0db8:000a:000b/64
10.0.1/24
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64
02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
10.0.1.2/24
2001:0db8:000a:000b:426c:38ff:fe90:01e6/64
03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
10.0.1.3/24
fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
تمت إضافة كل عقدة في النسيج نسج، ولكل واجهة لديه عنوان IPv6 الجديد بدءا fd00 . للحصول على مزيد من المعلومات على النسيج نسج، استخدم weave-state الأوامر:
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
01ThreadNode 69ca9502eb6911e7 8ZJB5Q
02BorderRouter 686af236eb6911e7 B5YV3P
03WiFiNode 69826e60eb6911e7 L3VT3A
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
إليك الهيكل المحدث لدينا ، مع قيم Weave باللون الأزرق:

نسج القماش
هناك الكثير من المعلومات الجديدة في Weave and Happy States. بداية دعونا مع النسيج من weave-state :
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
استخدامات نسج بادئة ب IPv6 من fd00::/48 لكل عقدة. تسمى العناوين الموجودة في هذه المجموعة بالعناوين المحلية الفريدة وهي مخصصة للاستخدام داخل الشبكات الخاصة مثل HAN. يؤدي دمج ذلك مع معرف النسيج إلى إنشاء بادئة Weave Global الموضحة أعلاه.
نسج العقد
يتم تعيين معرف عقدة فريد لكل عقدة في نسيج Weave ، إلى جانب رمز الاقتران:
NODES Name Weave Node Id Pairing Code
01ThreadNode 69ca9502eb6911e7 8ZJB5Q
02BorderRouter 686af236eb6911e7 B5YV3P
03WiFiNode 69826e60eb6911e7 L3VT3A
يحدد معرف العقدة بشكل عام عقدة في نسيج النسج. يتم استخدام رمز الاقتران كـ "بيانات اعتماد نجار" أثناء عملية الاقتران ، وعادةً ما تتم طباعته جنبًا إلى جنب مع رمز الاستجابة السريعة للمنتج.
على سبيل المثال ، إذا نظرت إلى رمز الاستجابة السريعة الموجود على Nest Protect أو Nest Cam ، فستلاحظ سلسلة مكونة من 6 أحرف ، وغالبًا ما يشار إليها باسم Entry Key. هذا هو رمز الاقتران النسج.

يستخدم Weave مجموعة من البادئة العالمية ومعرف النسيج ومعرف العقدة لإنشاء عناوين IPv6 خاصة بالنسج لكل عقدة وواجهة في النسيج.
نسج العناوين
علما بأن هناك أربعة عناوين IPv6 جديدة في طوبولوجيا سعيد، عن البدء مع شركائنا في نسج العالمية البادئة من fd00:0000:fab1::/48 .
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64
02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
10.0.1.2/24
2001:0db8:000a:000b:426c:38ff:fe90:01e6/64
03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
10.0.1.3/24
fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
تستخدم بروتوكولات Weave هذه العناوين للتواصل عبر نسيج Weave ، بدلاً من عناوين IPv6 القياسية المخصصة لكل عقدة.
نسج بوابة الشبكة
تحتاج عقد النسج على شبكة خيط إلى معرفة مكان الخروج من تلك الشبكة. توفر بوابة Weave network gateway ـ الموجودة عادةً على جهاز توجيه Thread Border ـ هذه الوظيفة.
في نموذج الهيكل الخاص بنا ، لنقم بتعيين عقدة BorderRouter كبوابة شبكة Weave:
$ weave-network-gateway ThreadNetwork 02BorderRouter
يضيف هذا الأمر طريقا من كافة العقد الموضوع إلى الشبكة الفرعية النسيج نسج ( fd:0:fab1::/48 ) عن طريق BorderRouter العقدة واجهة الموضوع ( wpan0 )، التي تمكن كل عقدة الموضوع للوصول إلى أي عقدة نسج خارج شبكة الموضوع. هذا هو مماثل ل happy-network-route القيادة كنا في وقت سابق، ولكن محددة إلى طرق النسيج نسج.
6. صيانة الطوبولوجيا
ما يجعل Happy قويًا هو كيفية إدارته بسهولة لكل عمليات الإعداد والتفكيك لطوبولوجيا محاكاة.
احفظ الهيكل السعيد لاستخدامه لاحقًا:
$ happy-state -s codelab.json
هذه الأماكن ملف JSON مع طوبولوجيا الكامل في الجذر ~/ المجلد. ملف JSON هو نسخة من دولة سعيدة الحالية، التي وجدت في ~/.happy_state.json .
بمجرد الحفظ ، احذف الهيكل الحالي:
$ happy-state-delete
هذا حذف كافة النطاقات الشبكة والتكوينات ذات الصلة وجدت في ~/.happy-state.json الملف. تحقق happy-state و weave-state لتأكيد تكوين فارغة:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code FABRIC Fabric Id Global Prefix
لإعادة تحميل تكوين محفوظ ، استخدم أحد الأمرين:
-
happy-state-load- لا يدعم المساعد نسج -
weave-state-load- دعامات المساعد نسج
حتى إذا تضمن الهيكل الخاص نسج، دائما استخدام weave-state-load الأوامر بحيث يتم تطبيق النسيج نسج والتكوين المرتبطة بها.
إعادة تحميل طبولوجيا Happy المحفوظة:
$ weave-state-load codelab.json
تحقق من جميع الحالات لتأكيد التحميل الناجح:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP 2001:0db8:000a:000b/64
10.0.1/24
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:eef6:a0ff:feca:6697/64
fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64
02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
2001:0db8:0001:0002:5e53:bbff:fe05:484b/64
wlan0 wifi 2001:0db8:000a:000b:2e61:fdff:fed9:4fbc/64
fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
10.0.1.2/24
03WiFiNode wlan0 wifi fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
10.0.1.3/24
2001:0db8:000a:000b:5e8e:c9ff:fed2:bdd1/64
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
01ThreadNode 69ca9502eb6911e7 8ZJB5Q
02BorderRouter 686af236eb6911e7 B5YV3P
03WiFiNode 69826e60eb6911e7 L3VT3A
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
تم توفير عدد من الهياكل المحددة مسبقًا في المستودع السعيد ، بتنسيق shell-script و JSON. العثور عليها في ~/happy/topologies .
يأتي OpenWeave أيضًا مع طبولوجيا Happy محددة مسبقًا لأغراض الاختبار. العثور عليها في ~/openweave-core/src/test-apps/happy/topologies/standalone .
7. كيف يعمل
يستخدم Happy مساحات أسماء شبكات Linux لمحاكاة الطبولوجيا المعقدة. عادةً ما يتم تطبيق تكوين الشبكة عبر نظام التشغيل Linux بالكامل. تسمح لك مساحات أسماء الشبكات بتقسيم تكوينات الشبكة بحيث يكون لكل مساحة اسم مجموعتها الخاصة من الواجهات وجداول التوجيه.
كل عقدة وشبكة في Happy عبارة عن مساحة اسم شبكة ، بينما الروابط بينها عبارة عن واجهات شبكة.
على سبيل المثال ، باستخدام طوبولوجيا لدينا:

دعونا نرى ما هي مساحات الأسماء التي أنشأتها Happy لهذا:
$ ip netns list happy004 happy003 happy002 happy001 happy000
إذا قمت بالتدقيق في netns المقطع من الملف JSON الدولة سعيد، يمكنك ان ترى ما عقد وشبكات كل مساحة اسم يتوافق مع:
$ happy-state -j | grep "netns" -A 5
"netns": {
"01ThreadNode": "000",
"02BorderRouter": "001",
"03WiFiNode": "002",
"ThreadNetwork": "003",
"WiFiNetwork": "004",

سجلات وقت التشغيل
الأوامر الصادرة إلى العقد هي أوامر طرفية أساسية يتم تنفيذها من داخل مساحة اسم كل عقدة. طريقة سهلة لمعرفة ذلك هي تمكين سجلات وقت التشغيل السعيدة.
افتح نافذة طرفية ثانية وقم بتشغيل السجلات ، وستعمل باستمرار في هذه النافذة:
$ happy-state -l
ارجع إلى النافذة الأولى وقم بتشغيل أداة اتصال سعيدة:
$ happy-ping 01ThreadNode 02BorderRouter
تحقق من أحدث إدخالات السجل في نافذة المحطة الثانية. من المفترض أن ترى سطرًا مثل هذا في السجلات:
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
و happy-ping الأمر ليس أكثر من سعيد تشغيل ping6 الأمر في happy000 مساحة ( 01ThreadNode ).
أدخل عقدة
استخدام happy-shell لتشغيل الأوامر غير سعيدة كما لو بتسجيل الدخول إلى واحدة من العقد (النطاقات الشبكة):
$ happy-shell 01ThreadNode root@01ThreadNode:#
يتم تشغيل الأجهزة التي تمت محاكاتها داخل كل مساحة اسم ، ولديهم فقط حق الوصول إلى تكوين الشبكة المحدد من خلال Happy.
تحقق من تكوين الواجهة للعقدة. سيكون هذا مختلفًا عن التكوين على مستوى نظام التشغيل الخاص بك ويجب أن يعكس ما هو مدرج في الحالة السعيدة:
root@01ThreadNode:# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:152 (152.0 B) TX bytes:152 (152.0 B)
wpan0 Link encap:Ethernet HWaddr ec:f6:a0:ca:66:97
inet6 addr: fd00:0:fab1:6:6bca:9502:eb69:11e7/64 Scope:Global
inet6 addr: 2001:db8:1:2:eef6:a0ff:feca:6697/64 Scope:Global
inet6 addr: fe80::eef6:a0ff:feca:6697/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2832 (2.8 KB) TX bytes:2348 (2.3 KB)
استخدام exit لمغادرة مساحة العقدة:
root@01ThreadNode:# exit
8. الاتصال بخدمة
من خلال فهم كيفية استخدام Happy لمساحات شبكة Linux ، قد تدرك الآن أنه من الممكن توصيل شبكة Happy محاكاة بالإنترنت والوصول إلى العناوين العامة من داخل عقد محاكاة. هذا مفيد لتوصيل أجهزتك المحاكاة بخدمة حقيقية (مثل Nest Service over Weave).
الخدمة في Weave عبارة عن بنية تحتية قائمة على السحابة تربط عقد HAN بنموذج بيانات ، وتوفر الوصول عن بُعد ، وتنفذ وحدات تحكم ذكية لإنشاء نظام بيئي شامل.
يمكن تمثيل الخدمة بطريقتين أساسيتين مع Happy:
- كخدمة محاكاة في مساحة اسم الشبكة الخاصة بها (العقدة السعيدة)
- كخدمة سحابية حقيقية على الإنترنت
قدمت طبولوجيا محددة مسبقا في ~/happy/topologies كمثال على كل سيناريو الخدمة.
خدمة محاكاة على عقدة سعيدة
قم بإزالة أي طبولوجيا سعيدة موجودة:
$ happy-state-delete
تؤكد دولة فارغة مع happy-state و weave-state الأوامر.
قم بتحميل طبولوجيا محددة مسبقًا بنقطة الوصول (AP) وعقد الخدمة:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json

تحقق من حالات Happy and Weave لتأكيد الهيكل. في هذا الهيكل، onhub هو AP، بينما cloud هي خدمة محاكاة. ملاحظة كلاهما متصلة Internet شبكة من نوع wan :
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
HomeThread thread UP 2001:0db8:0111:0001/64
HomeWiFi wifi UP 2001:0db8:0222:0002/64
10.0.1/24
Internet wan UP 192.168.100/24
NODES Name Interface Type IPs
BorderRouter wpan0 thread 2001:0db8:0111:0001:f624:13ff:fe4a:6def/64
fd00:0000:fab1:0006:1ab4:3000:0000:0005/64
wlan0 wifi 10.0.1.2/24
fd00:0000:fab1:0001:1ab4:3000:0000:0005/64
2001:0db8:0222:0002:9e31:97ff:fe73:29f0/64
ThreadNode wpan0 thread 2001:0db8:0111:0001:c237:fbff:fecc:b082/64
fd00:0000:fab1:0006:1ab4:3000:0000:0009/64
cloud eth0 wan 192.168.100.3/24
onhub wlan0 wifi 10.0.1.3/24
2001:0db8:0222:0002:3266:20ff:fe98:6ee2/64
eth0 wan 192.168.100.2/24
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
BorderRouter 18B4300000000005 AAA123
ThreadNode 18B4300000000009 AAA123
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
نفق نسج
يربط نفق Weave قماش Weave بخدمة ما. هذا مسار آمن ينقل رسائل IPv6 UDP بين HAN والخدمة. في هذا الهيكل، و BorderRouter العقدة هي بوابة شبكة نسج، الذي يعمل بمثابة نقطة نهاية النفق على HAN.
إنشاء نفق النسج:
$ weave-tunnel-start BorderRouter cloud
أعد فحص الحالة السعيدة. يجب أن تشاهد واجهة نفق جديدة مع عنوان IPv6 على نسج على cloud العقدة:
NODES Name Interface Type IPs
cloud service-tun0 tun fd00:0000:fab1:0005:1ab4:3002:0000:0011/64
eth0 wan 192.168.100.3/24

يمكنك الآن تنفيذ الأمر ping بنجاح بين العقد على Weave fabric والبادئة العامة Weave الخاصة بالخدمة:
$ happy-ping ThreadNode cloud
[Ping] ping from ThreadNode to cloud on address
fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
خدمة سحابية حقيقية على الإنترنت
قم بإزالة أي طبولوجيا سعيدة موجودة:
$ happy-state-delete
تؤكد دولة فارغة مع happy-state و weave-state الأوامر.
قم بتحميل طبولوجيا محددة مسبقًا باستخدام عقدة نقطة وصول (AP):
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json

في هذا الهيكل، onhub هو AP. تحقق من الحالة السعيدة. انها مماثلة لطوبولوجيا السابق، من دون Internet شبكة و cloud العقدة:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
HomeThread thread UP 2001:0db8:0111:0001/64
HomeWiFi wifi UP 2001:0db8:0222:0002/64
10.0.1/24
NODES Name Interface Type IPs
BorderRouter wpan0 thread 2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64
fd00:0000:fab1:0006:1ab4:3000:0000:0006/64
wlan0 wifi 2001:0db8:0222:0002:32e7:dfff:fee2:107a/64
fd00:0000:fab1:0001:1ab4:3000:0000:0006/64
10.0.1.2/24
ThreadNode wpan0 thread 2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64
fd00:0000:fab1:0006:1ab4:3000:0000:000a/64
onhub wlan0 wifi 10.0.1.3/24
2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
BorderRouter 18B4300000000006 AAA123
ThreadNode 18B430000000000A AAA123
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
نظرًا لأن كل عقدة سعيدة عبارة عن مساحة اسم شبكة ، يتم تقسيمها افتراضيًا من الإنترنت العام. اختبر ذلك عن طريق إدخال عقدة سعيدة وأخذ اختبار الاتصال على عنوان إنترنت عام. سنستخدم 8.8.8.8 ، واحدة من google.com في عناوين IPv4.
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
لربط onhub العقدة إلى شبكة الإنترنت، فإنه يجب سدها إلى أن واجهة على مستوى التكوين نظام لينكس.
اخرج من العقدة:
root@onhub:# exit
تحديد واجهة للاتصال الإنترنت الخاص بك مع route الأوامر:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.0 0.0.0.0 UG 0 0 0 em1
العثور على default الطريق. هذا هو اتصال الإنترنت لجهاز Linux الخاص بك. و Iface يشير العمود الذي واجهة يتم استخدامه لهذا الاتصال. في المثال أعلاه، فإنه من em1 .
استخدام happy-internet لانشاء الجسر، وذلك باستخدام واجهة لطريق الافتراضي. ل --isp العلم، استخدم اسم واجهة دون زائدة أرقام. في هذا المثال، انها em . إذا الواجهة الافتراضية الخاصة بك eth1 ، و --isp أن العلم يكون eth .
$ happy-internet --node onhub --interface em1 --isp em --seed 249
لن يكون هناك تغيير ملحوظ في happy-state الانتاج، ولكن onhub يجب أن يكون عقدة الاتصال بشبكة الإنترنت. دعنا نعود إلى العقدة ونتحقق مما يلي:
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.81 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.81 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.814/1.816/1.819/0.042 ms
النجاح!

DNS
العقد السعيدة لا تحتوي على إمكانيات DNS مضمنة. إذا حاولت تنفيذ الأمر ping google.com ، فسوف يفشل:
root@onhub:# ping -c2 google.com ping: unknown host google.com
لحسن الحظ ، يوفر Happy دعمًا لـ DNS. اخرج من العقدة وابحث عن خوادم DNS لجهاز Linux الخاص بك. تأكد من استخدام الواجهة الافتراضية المناسبة:
root@onhub:# exit $ nmcli dev list iface em1 | grep domain_name_servers DHCP4.OPTION[13]: domain_name_servers = 172.16.255.1 172.16.255.153 172.16.255.53
استخدام هذه العناوين DNS مع happy-dns :
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
الآن محاولة الأزيز google.com من داخل onhub العقدة:
$ happy-shell onhub root@onhub:# ping -c2 google.com PING google.com (64.233.191.113) 56(84) bytes of data. 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms
الخروج من onhub عقدة عند الانتهاء من ذلك:
root@onhub:# exit
نفق نسج
مثل الخدمة المحاكاة ، يجب إنشاء نفق نسج بين HAN المحاكى في Happy والخدمة. باستخدام خدمة سحابية حقيقية ، استخدم عنوان IP أو عنوان URL للخدمة في إعداد النفق. على سبيل المثال:
$ weave-tunnel-start BorderRouter mycloud.service.com

9. التنظيف
من المهم دائمًا تنظيف الهياكل السعيدة عند الانتهاء منها ، لتجنب المشكلات المتعلقة بتكوين شبكة Linux.
إذا قمت بتمكين دعم DNS في طوبولوجيا الخاص بك، إزالته من قبل rerunning هذا الأمر مع -d (حذف) العلم لأول مرة. يجب تشغيل هذا قبل إزالة أي عقد سعيدة ، لضمان تحديث تكوين الشبكة بشكل صحيح.
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
بعد ذلك ، احذف الحالة السعيدة:
$ happy-state-delete
من حين لآخر ، قد تبقى بعض ملفات الحالة بعد حذف الحالة. إذا واجهت مشاكل ولا يعمل المتوقع كما سعيد، وحذف الدولة مع happy-state-delete ومن ثم استخدم الأوامر التالية لفرض أي تنظيف المتبقية:
$ ip netns | xargs -I {} sudo ip netns delete {}
$ rm -rf ~/.*state.json
$ rm -rf ~/.*state.json.lock
يجب أن يعود جهازك إلى تكوين الشبكة الطبيعي.
10. مبروك!
أنت تعرف الآن:
- كيفية استخدام تطبيق Happy لمحاكاة شبكات منطقة منزلك الخاصة بإنترنت الأشياء
- كيفية توصيل طبولوجيا Happy بشبكة الإنترنت
- أساسيات Weave via OpenWeave ، نسخة نيست مفتوحة المصدر من Weave
الخطوات التالية
بناء على Codelab هذا ، جرب التمارين التالية:
- قم بإنشاء هيكل أكبر مع عقد متعددة في كل شبكة خيط وشبكة Wi-Fi ، وقم بإنشاء اتصال بين جميع العقد
- إنشاء برنامج نصي باش تحميل طوبولوجيا عبر
happy-state-loadأوweave-state-load - استكشاف الأوامر السعيدة الأخرى، مثل
happy-tracerouteوhappy-process-*
قراءة متعمقة
تحقق openweave.io لمجموعة متنوعة من المراجع، بما في ذلك:
