GithubHelp home page GithubHelp logo

mptcp-1's Introduction

نحوه اجرای پروژه

ابتدا نرم‌افزارهای vagrant و virtualbox را دانلود و نصب کنید. سپس با دستور زیر پروژه‌ی sigcomm20_mptp_tutorial را clone کنید.

git clone https://github.com/qdeconinck/sigcomm20_mptp_tutorial.git

حال در ترمینال به پوشه sigcomm20_mptp_tutorial رفته و در آنجا دستور زیر را اجرا می کنیم.

vagrant up

اگر این دستور کار نکرد می توانیم فایل اجرایی vagrant را در همان پوشه sigcomm20_mptp_tutorial قرار دهیم.

اگر سیستم عامل ویندوز را دارید قبل از دستور قبل باید دستور زیر را وارد کنید.

chcp 1252

در حالت ایده آل دستور vagrant up باید ابتدا سیستم عامل مجازی لینوکس با کرنل مجهز به MPTCP را ایجاد کرده و سپس Mininet، Minitopo، openflow و ... را ایجاد کرده و آماده به کار شود. اما در تجربه شخصی خود مشاهده کردیم که به ایراداتی بر می خورد لذا زمانی که مانند شکل زیر سیستم عامل مجازی در virtualBox ایجاد شد و دستور vagrant up تمام شد دیگر با vagrant کار نمی کنیم و از virtualBox سیستم عامل مجازی خود را کنترل می کنیم

برای آنکه اتصال به اینترنت ماشین مجازی فعال شود باید ماشین مجازی خود را خاموش کرده و به قسمت تنظیمات آن رفته و در بخش network، آداپتور NAT را به Bridged Adaptor تغییر دهید.

سپس سیستم عامل مجازی خود را روشن می کنیم. نام کاربری و گذرواژه vagrant می باشد. سپس باید دستور زیر را بنویسیم.

curl https://www.multipath-tcp.org

اگر جواب yes را دریافت کردیم به این معنی است که ارتباط به صورت mptcp برقرار شده است و مشکلی در کرنل لینوکس مجهز به mptcp وجود نداشته است.

اما اگر به جواب no برخوردیم باید یا پروسه را از اول شروع کرده یا از روش های دیگر کرنل لینوکس مجهز به mptcp را نصب کنیم. این روش ها در سایت multipath-tcp.org آمده است.

می توانیم دستورات زیر را درون سیستم عامل مجازی اجرا کرده و کرنل لینوکس مجهز به mptcp را نصب کنیم.

wget https://github.com/multipath-tcp/mptcp/releases/download/v0.94.7/linux-headers-4.14.146.mptcp_20190924124242_amd64.deb

wget https://github.com/multipath-tcp/mptcp/releases/download/v0.94.7/linux-image-4.14.146.mptcp_20190924124242_amd64.deb

wget https://github.com/multipath-tcp/mptcp/releases/download/v0.94.7/linux-libc-dev_20190924124242_amd64.deb

wget https://github.com/multipath-tcp/mptcp/releases/download/v0.94.7/linux-mptcp-4.14_v0.94.7_20190924124242_all.deb

sudo dpkg -i linux-*.deb

# The following runs the MPTCP kernel version 4.14.146 as the default one

sudo cat /etc/default/grub | sed -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.14.146.mptcp'/" > tmp_grub

sudo mv tmp_grub /etc/default/grub

sudo update-grub

# Finally ask for MPTCP module loading at the loadtime

echo "
# Load MPTCP modules
sudo modprobe mptcp_olia
sudo modprobe mptcp_coupled
sudo modprobe mptcp_balia
sudo modprobe mptcp_wvegas

# Schedulers
sudo modprobe mptcp_rr
sudo modprobe mptcp_redundant
# The following line will likely not work with versions of MPTCP < 0.95
sudo modprobe mptcp_blest

# Path managers
sudo modprobe mptcp_ndiffports
sudo modprobe mptcp_binder" | sudo tee -a /etc/bash.bashrc

حال باید mininet و minitopo را نصب کنیم. برای اینکار ابتدا source code ها را از git گرفته و هر کدام را نصب می کنیم.

git clone https://github.com/mininet/mininet

سپس دستورات زیر را وارد می کنیم.

cd mininet

git tag  # list available versions

git checkout -b mininet-2.3.0 2.3.0  # or whatever version you wish to install

سپس دستور زیر را وارد می کنیم تا mininet نصب شود.

util/install.sh -a

تعداد پکیج هایی که دستور فوق نصب می کند زیاد است لذا مدت زمان قابل توجهی طول می کشد تا نصب شود. اگر هنگام نصب به مشکلی خوردید چندبار دیگر هم دستور بالا را اجرا کنید. اگر هنگام clone کردن openflow به مشکل برخوردیم باید در فایل util/install.sh تغییراتی را ایجاد کنیم. در این فایل باید همه //:git ها را به //:https تغییر دهیم (5 مورد). برای مثال مانند زیر خط اول را به خط دوم تبدیل می کنیم.

git clone git://github.com/mininet/openflow
git clone https://github.com/mininet/openflow

سپس دستور util/install.sh را اجرا می کنیم.

حال دستور زیر را می نویسیم تا مطمئن شویم که mininet درست نصب شده است.

sudo mn

سپس exit را می نوسیم تا از محیط CLI مینینت خارج شویم.

حال به مسیر home/vagrant رفته و دستور زیر را اجرا می کنیم تا کد minitopo را دریافت کنیم.

git clone https://github.com/qdeconinck/minitopo.git

سپس دستور زیر را می نویسیم تا کد های این پروژه را نیز داشته باشیم.

git clone https://github.com/hamidreza7799/mptcp.git

برای تعیین حالت های مختلف الگوریتم های کنترل ازدحام و مدیریت مسیر و کنترل ازدحام در minitop لازم است که در فایل minitopo/experiments/iperf_scenario.py از چهار دستور زیر استفاده کنیم که در حالت های مختلف بعضی از آن ها کامنت و بعضی از آن ها از کامنت خارج می شوند.

self.topo.command_global("modprobe mptcp_rr && sysctl -w net.mptcp.mptcp_scheduler=roundrobin")

self.topo.command_global("modprobe mptcp_ndiffports && sysctl -w net.mptcp.mptcp_path_manager=ndiffports ")

self.topo.command_global("echo 2 | sudo tee /sys/module/mptcp_ndiffports/parameters/num_subflows ")

برای مثال می خواهیم حالت LIA، Fullmesh، LR را اجرا کنیم. به پوشه lia_fullmesh_rtt می رویم و دستور های زیر را اجرا می کنیم.

python3 configuration.py -m 1

python3 configuration.py

دستور اول این خطوط را اضافه کرده و دستور دوم با توجه به پوشه ای که در آن اجرا می شود خطوط را کامنت می کند یا از کامنت خارج می سازد. (برای پوشه های بعدی فقط دستور دوم استفاده می شود)

حال دستور زیر را وارد می کنیم تا به اجرای minitopo ایرادی نگیرد.

git config --global -add safe.directory /home/vagrant/minitopo

برای اینکه بتوانیم هر یک از حالت ها را 50 بار آزمایش کنیم باید در هر پوشه دستور زیر را اجرا کنیم.

./run.sh

این دستور باعث می شود که iperf کلاینت mptcp در هر بار اجرا ذخیره گردد. در run.sh از minitopo برای شبیه سازی استفاده می شود که فایلی را به عنوان توپولوژی و فایل دیگری را به عنوان experiment دریافت می کند. فایل experiment نیز به iperf_scenario.py اشاره می کند و برای تغییر در توپولوژی و سناریو باید این فایل را تغییر بدهیم.

mptcp-1's People

Contributors

riasati avatar hamidreza7799 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.