這節學習書上2.1~2.2.2節。協議設計是協議工程所有流程中的第一步,用於產生協議文本初稿,也就是用自然語言描述所設計的協議是什麼內容。
1 協議模型
複雜的協議一般用分層的方式設計,如下圖是OSI體系結構中的n層協議模型,每個實體(entity) 表示能發送和接收信息的硬件或軟件進程,下層爲上層提供服務,同層對等實體之間實現該層協議信息交換的數據單元是協議數據單元(Protocol Data Unit)。
PDU在物理層就是比特(bit),在數據鏈路層就是幀(frame)或信元(cell),在網際層就是包(packet),在傳輸層叫段(segment),在應用層叫數據(data)。書上還認爲傳輸層以上都可以叫報文(message)。
PDU一般都由用戶數據和協議控制信息(Protocol Control Information) 兩部分組成。
同一系統中相鄰兩層的實體交互信息的地方是服務訪問點(Service Access Point),交換的數據單元是服務數據單元(Service Data Unit),每一層都可以使用四種服務原語:
服務原語 | 意義 |
---|---|
Request | 一個實體希望得到某種服務 |
Indication | 把關於某一事件的信息告訴某一實體 |
Response | 一個實體願意響應某一事件 |
Confirm | 把一個實體的服務請求加以確認並告訴它 |
SDU就是PDU中的用戶數據,有時是多個SDU 拼裝成一個PDU,有時是一個SDU 分段成多個PDU。
在設計協議時,要像OSI模型這樣將協議和服務分開來:協議是水平的,控制對等實體之間的通信規則;服務是垂直的,由下層向上層通過層間接口提供。一個層內的功能並不是都能稱爲“服務”,只有能夠被高層看見的功能才能叫“服務”,上層與下層通過服務原語命令的交互獲取服務。
2 協議的通信環境
2.1 通信環境的內容
兩個n層的協議實體,通過n-1層服務訪問點,所形成的邏輯通路(注意只是邏輯上纔有的通路)稱爲n-1層通道。n層協議的通信環境包括:
- 用戶要求
- n-1層通道的性質
- n層協議運行在什麼操作系統上
- 硬件環境
協議設計時這些內容都必須明確指定,不能含糊。
2.2 通道的類型
- 空通道(empty channels):報文的發送事件和延時時間爲0
- 非緩衝通道(non-buffered channels):通道中同一時刻最多隻有一個正在傳送的報文
- 緩衝通道(buffered channels):允許同一時刻通道中有多個報文停留
2.3 通道的形成方式
假設A和B是n層的兩個實體,則A和B之間的n-1層通道的形成方式有:
- A和B建立並獨佔一條連接,這種情況下n-1層必須能提供連接服務
- A和B與其它協議實體共享一條連接
- A和B使用n-1層提供的無連接服務通信
- 如果n-1層是物理層,A和B可以獨佔或者共享一條物理信道
2.4 通道的隊列性質
注意物理層信道是沒有隊列性質的,如果n-1層是物理層,那麼它形成的通道也沒有隊列的性質,這時候報文在通道中的時延是固定的,不會丟失並且有序。
對於物理層以上的其它n-1層通道都具有隊列性質,報文從n層協議實體源端發出之後要在n層以下各層多次存儲轉發,每個存儲轉發的地方都是一個隊列,隊列越長報文的延時就越大,如果隊列長度達到最大允許長度,後邊進來的報文還會丟失。
2.5 回程時延(Round Trip Time)
RTT是指n層的源端實體發出一個報文開始,直到應答信息達到該實體所花費的時間。
2.6 通道的差錯特性
通道的差錯特性包括:
- 報文出錯率
- 報文丟失率
- 報文重複率
- 報文失序率
這和通道形成方式有關,如n-1層通道是用有連接服務,或者用物理信道形成的,那麼報文不會時序,否則就有可能失序。
2.7 通道的可靠性
和通道故障,如斷連、復位等有關。
2.8 報文的最大長度
主要影響n層協議的報文分段、報文拼接等功能。
2.9 通道的工作方式
可以分爲單工、半雙工、全雙工(相當於兩個分離的單工通道)。或者分爲同步和異步。
2.10 通道的帶寬(bandwidth)
通道帶寬指能傳送的數字信號的速率,可以用數據率或者比特率表示。可以進一步分爲前向帶寬、後向帶寬、峯值帶寬等。
3 協議提供的服務
從通信角度看各層提供的服務可以分爲面向連接的(connection-oriented) 和無連接的(connectionless) 服務。
3.1 面向連接的服務
即在數據交換前必須建立連接,交換完成後再斷開連接。在傳送數據時按序傳送,就好像服務通信中一直佔用一條物理電路一樣,所以也叫虛電路服務。
這種方式適合一定期間內要向同一目的地發送很多報文的情況。如果兩個用戶頻繁通信,則可以建立永久虛電路,以省去每次連接和釋放的代價。
3.2 無連接的服務
無連接服務下層資源不會預定保留(如下層的通道隊列),會在數據傳輸時動態分配。而且不需要檢查通信雙方都是活躍的,發就是發,收就是收,所以無法防止報文丟失,只適合傳送少量報文。
具體有三種類型:
- 數據報(datagram):不需要接收任何響應,所以不可靠,也叫盡最大努力交付(best effort delivery)。
- 證實交付(confirmed delivery):對n層源端實體發送的報文,在其n-1層要向上返回一個證實,表示報文我已經發出去了,但是還是不能保證接收端確實接收到了。這種方式也叫可靠的數據報。
- 請求回答(request-reply):接收端用戶每收到一個報文,就向發送端回一個應答報文。事務一問一答、數據庫查詢都適合用這種服務。