1. 程式人生 > >網路協議分析與設計——Spin實驗(尚不完善)

網路協議分析與設計——Spin實驗(尚不完善)

參考教材:《網路協議工程》吳禮發,電子工業出版社,2011.4

實驗環境:Ubuntu 18.04.1 LTS,Windows 10,VMware 15.0.2。

(一)Spin入門(iSpin究竟是怎麼裝上去的?是tar.gz的install.sh還是sudo apt install spin?)

Ubuntu下直接一句sudo apt install spin,就不make了。基本就裝好Spin了,想要最新版Spin的話就手動下載:

Spin - Formal Verification

http://spinroot.com/spin/whatispin.html

點選下方download,進入介面後下載spin649_linux64.gz。

image.png

拷貝到虛擬機器桌面,gunzip解壓後滑鼠右鍵點選解壓後的檔案,將它重新命名為spin,複製到/usr/bin下:

image.png

image.png

檢視版本,回顯6.4.9說明一切順利:

image.png

其他需要安裝的:(有些可能裝過了,不管咋樣挨個試一遍都裝沒裝全)

sudo apt-get install byacc

sudo apt-get install tcl

sudo apt-get install tk8.5

sudo apt-get install graphviz   //可以圖形化顯示執行結果

sudo apt-get install pan

(二)小試牛刀

開啟iSpin,先實驗個簡單的資料鏈路層RDT 1.0協議(書P152)

image.png

image.png

(這在裡面輸程式碼對齊不咋方便,不如在VS2017裡輸好了直接拷進來,再開啟)

點選選單欄的Simulate/Replay,設定maximum number of steps=300,點選“(Re)Run”開始模擬:

image.png

下面中間的黑色視窗是命令列形式,如果在shell裡執行iSpin右上角顯示的Background command executed,得到的結果就是中間窗口裡的樣子。

image.png


再看時序圖,SENDER和RECEIVER都是0→1→2→0→……不斷迴圈,這正是RDT 1.0協議:通道沒有誤碼,也不會丟失報文,接收方有無限接受能力,一方傳送,一方接收。這是個理想狀態下的協議。


接下來看看一般性驗證:點選選單欄Verification,選擇“safety”,點選Run,結果如下圖,結果基本與書中P154圖6-3一致。

image.png


無進展迴圈驗證則點選Liveness中的non-progress cycles,再點選一次Run,結果如下圖所示,與書中P154圖6-4一致:image.png



(三)實驗一:思考題6-5

報文和應答均會出錯,且都丟失,接收方沒有無限接收能力——實用的停等協議。請用PROMELA進行描述,並用SPIN模擬執行、一般性驗證、無進展迴圈驗證和人為加入錯誤進行認證。




參考連結:

1.模型檢測工具spin在ubuntu下的安裝方法 - 泥瓦匠的專欄 - CSDN部落格

https://blog.csdn.net/tiefanhe/article/details/8176418