名詞解釋
串列線路 IP (
SLIP)用於運行 TCP/IP 的點對點串列連線。 SLIP 通常專門用於串列連線,有時候也用於撥號,使用的
線路速率一般介於 1200bps 和 19.2Kbps 之間。 SLIP 允許
主機和
路由器混合連線通信(主機 - 主機、主機 - 路由器、路由器 - 路由器都是 SLIP 網路通用的配置),因而非常有用。
SLIP 只是一個包組幀協定,僅僅定義了在串列線路上將
數據包封裝成幀的一系列
字元。它沒有提供
定址、包類型標識、錯誤檢查 / 修正或者壓縮
機制。
SLIP 定義了兩個特殊字元: END 和 ESC 。 END 是
八進制300 (十進制 192), ESC 是八進制 333 (十進制 219)。傳送分組時, SLIP 主機只是簡單地傳送分組數據。如果數據中有一個位元組與 END 字元的編碼相同,就連續傳輸兩個
位元組ESC 和八進制 334 (十進制 220)。如果與 ESC 字元相同,就連續傳輸兩個位元組 ESC 和八進制 335 (十進制 221 。當分組的最後一個
位元組發出後,再傳送一個 END 字元。
因為沒有“標準的” SLIP 規範,也就沒有 SLIP 分組最大長度的實際定義。可能最好是接受 Berkeley UNIX SLIP
驅動程式使用的最大分組長度: 1006 位元組,其中包括 IP 頭和
傳輸協定頭(但不含分幀字元)。
壓縮串列線路 IP (CSLIP)在傳送出的 IP 分組上執行 Van Jacobson 頭部壓縮。這個壓縮過程顯著提高了互動式會話吞吐量。
如今,
點對點協定(P2P)廣泛替代了 SLIP ,因為它有更多特性和更靈活。
套用範圍
在Windows中要設定SLIP協定,比如在Windows 98中,假設已經創建了“撥號連線”,右鍵單擊該連線,選擇“屬性”。接著,在打開的屬性視窗中,選擇“
伺服器類型”選項卡,在“撥號網路伺服器類型”中選擇“SLIP:Unix連線”。最後,單擊“確定”按鈕即可。
套用缺點
SLIP是一種簡單的組幀方式,使用時還存在一些問題。首先,SLIP不支持在連線過程中的
動態IP位址分配,通信雙方必須事先告訴對方IP位址,這給沒有
固定IP位址的個人用戶上Internet網帶來了很大的不便;其次,SLIP幀中無協定類型欄位,因此他只能支持Ip協定;再有,SLIP幀中無校驗欄位,因此
鏈路層上無法檢測出傳輸差錯,必須由上層實體或具有糾錯能力的MODEM來解決差錯問題。
SLIP是一種在串列線路上對I P數據報進行封裝的簡單形式,在RFC 1055[Romkey 1988]中有詳細描述。SLIP適用於家庭中每台計算機幾乎都有的RS-232
串列連線埠和高速
數據機接入Internet。
十六進制數 | 縮寫 | 描述 |
0xC0 | END | 幀結束符 |
0xDB | ESC | 幀退出符 |
0xDC | ESC_END | 幀結束轉義符 |
0xDD | ESC_ESC | 幀退出轉義符 |
下面的規則描述了SLIP協定定義的幀格式:
1) IP數據報以一個稱作END(0xC0)的特殊
字元結束。同時,為了防止數據報到來之前的
線路噪聲被當成數據報內容,大多數實現在數據報的開始處也傳一個END字元(如果有線路噪聲,那么END字元將結束這份錯誤的
報文。這樣當前的報文得以正確地傳輸,而前一個錯誤報文交給上層後,會發現其內容毫無意義而被丟棄)。
2) 如果I P報文中某個字元為END,那么就要連續傳輸兩個位元組ESC,ESC_END(0XDB,0xDC)來取代它。
0xDB這個特殊
字元被稱作
SLIP的ESC字元,但是它的值與ASCII碼的ESC字元(0x1B)不同。
3) 如果IP報文中某個字元為SLIP的ESC字元,那么就要連續傳輸兩個位元組ESC,ESC_ESC(0xDB,0xDD)來取代它。
SLIP是一種簡單的幀封裝方法,還有一些值得一提的缺陷:
1) 每一端必須知道對方的I P地址。沒有辦法把本端的I P地址通知給另一端。
2)
數據幀中沒有類型欄位(類似於乙太網中的類型欄位)。如果一條串列線路用於SLIP,那么它不能同時使用其他協定。
3 ) SLIP沒有在數據幀中加上檢驗和(類似於乙太網中的CRC欄位)。如果SLIP傳輸的
報文被
線路噪聲影響而發生錯誤,只能通過上層協定來發現(另一種方法是,新型的
數據機可以檢測並糾正錯誤報文)。這樣,上層協定提供某種形式的CRC就顯得很重要。
目前狀況
廣泛使用
儘管存在這些缺點, SLIP仍然是一種廣泛使用的協定。它主要被用於支持TCP/IP網路控制協定(network control protocol,NCP)。
SLIP的歷史要追溯到1 9 8 4年,Rick Adams第一次在4.2
BSD系統中實現。儘管它本身的描述是一種非標準的協定,但是隨著
數據機的速率和可靠性的提高,SLIP越來越流行。現在,它的許多產品可以公開獲得,而且很多廠家都支持這種協定。
壓縮
由於
串列線路的速率通常較低(19200 b/s或更低),而且通信經常是互動式的(如Telnet和Rlogin,二者都使用TCP),因此在SLIP線路上有許多小的TCP分組進行交換。為了傳送1個位元組的數據需要20個位元組的IP首部和20個位元組的TCP首部,總數超過40個位元組。
既然承認這些性能上的缺陷,於是人們提出一個被稱作
CSLIP(即壓縮SLIP)的新協定,它在RFC1144[Jacobson 1990a]中被詳細描述。
CSLIP一般能把上面的4 0個位元組壓縮到3或5個位元組。它能在
CSLIP的每一端維持多達16個
TCP連線,並且知道其中每個連線的首部中的某些欄位一般不會發生變化。對於那些發生變化的欄位,大多數只是一些小的數字和的改變。這些被壓縮的首部大大地縮短了互動
回響時間。現在大多數的SLIP產品都支持CSLIP。
串列網際協定在記錄儀通信中的套用
在簡要介紹記錄儀結構的基礎上,重點論述了採用串列網際協定(
SLIP),在RS-232通信協定的物理層與用戶套用層間設計鏈路層的方法。鏈路層的引入提高了記錄儀上下位機通信的可靠性,應用程式的層次分明.結構清晰。
某記錄儀的硬體結構如圖1所示。下位機負責8路模擬信號的調理,採樣和實時上傳;兩路PID模擬輸出、16路開關量報警。上位機負責下位機上傳採樣值的處理、4路虛擬通道的組織、按鍵回響、顯示、PID控制、流量積算、存儲、列印等功能。因此,上位機80C320與下位機80C51之間的可靠通信是高品質記錄儀的關鍵技術之一。
硬體連線
上下位機通信協定是RS-232,其硬體連線方式大致可分為無握手、有握手、循環握手三類記錄儀採用最簡單的無握手三線連線全雙工方式,見圖。
由於上下位機距離短,省略電平轉換晶片,通過UART直接在TTL電平下進行數據收發。但RS-232串列通信只是定義在物理層的簡單協定,而工業現場環境複雜,信號在傳遞過程中常受到干擾,出現差錯是不可避免的。傳統的解決方案是在應用程式中加入通信糾錯模組,這種直接在物理層協定上開發應用程式的方案帶來兩方面的問題:
(1)程式結構混亂,給調試、維護、升級造成困難;
(2)軟體的通用性差,復用困難。
為解決上述問題,參照OSI(開放式系統互聯參考模型),借鑑串列線路網際協定(SLIP)〕在UNIX上的成功案例,在RS-232物理層上設計一個鏈路層。鏈路層包括兩部分內容:一是上下位機數據幀(包)的格式;二是差錯處理策略。基於物理層、鏈路層、套用層的上下位機通信模型如圖所示。
鏈路層設計
SLIP是一個簡單的面向字元的協定,它的規則只有三個:
(1)在每一個數據包的頭尾各加上一個特殊的標誌位元組END,封裝成SLIP幀。也有少數SLIP實現僅把一個標識位元組END放在數據包的末尾。
( 2)如果在數據包中的某一個位元組恰好與標誌位元組END的編碼一樣,那么就要將這個位元組更換成DEL+END這樣的兩個位元組序列。這裡的DEL字元成為SLIP的轉義字元。
( 3)如果在數據包中的某一個位元組恰好和DEL一樣,則將它更換為DEL+DEL的兩個位元組序列。
必須指出,END和DEL只是兩個不同的字元而已。只要在實現過程中,通訊雙方的DEL和END字元保持一致就可以了。
傳送方根據累加和校驗以及SLIP協定裝配傳送數據幀,首先對待傳送的數據包求累加和,然後根據SLIP協定進行打包傳送。在接收中斷程式中,根據SLIP協定判斷那塊數據是一個完整的數據包,然後根據校驗和判斷這個數據包是否接收正確。如果校驗和出錯,則丟棄這個數據組。打包操作如圖3所示,解包操作是打包操作的逆操作,就不在圖示說明了。加SLIP封裝時,如果圖中P的數值等於DEL或者END中的一個則對它也要附加轉義字元DEL 。