虛擬電路(virtual circuit)
虛擬電路是網路層另一種可能的運作方式:在任何資料流動之前,先在網路中建立一條固定路徑,就像打電話給旅行社,事先把整段轉機行程都訂好,使每一段都有預留位。一旦路徑建立完成,這段對話的每個封包都走完全相同的路線,而沿途每台路由器都記得這條連線。
它的運作是這樣的。先進行一個建立階段:一個連線請求訊息穿過網路,在每台路由器上建立一筆對應,把進入鏈路上的一個小小連線識別碼(VC 編號)對應到下一條鏈路與一個新的 VC 編號。之後的資料封包只需帶著那個小小的 VC 編號,而不必帶完整的目的位址;每台路由器做一次很小的查表、換掉編號、再轉送。因為路由器保存了每條連線的狀態,它們可以保證按序遞送、並沿選定路徑預留頻寬。經典例子有早期的電話網路、X.25、ATM 與 Frame Relay;MPLS 標籤則是它的現代近親。
網際網路在它的網路層刻意「沒有」選擇這種模型;它選了資料報。這個取捨正是重點所在:虛擬電路提供可預測、按序的遞送,以及容易實現的服務品質保證,但路由器要背負狀態、建立階段會增加延遲,而且路徑上只要一台路由器故障,就會打斷穿過它的每一條電路。資料報則放棄這些保證,換來無狀態、有韌性、構造簡單的路由器。(注意:TCP 確實提供類似連線、按序的位元組串流,但那是在兩端主機上、架在純資料報網路之上建立的——中間的路由器依然無狀態。)
在 ATM 網路上,建立階段串起這條鏈:路由器 A 把進入的 VC 12 對應到送出的 VC 47,路由器 B 把進入的 VC 47 對應到送出的 VC 5,依此類推。每個資料胞元只帶那個小小的 VC 編號;路由器只是換號、轉送,從不需要讀取完整位址。
一條事先安排好、每一跳都有狀態的路徑——這是網際網路沒走的那條路。
別把虛擬電路和 TCP 連線搞混。虛擬電路存在於網路層,需要路由器保存狀態;TCP 連線則存在於兩端主機,架在一個無狀態的資料報網路之上。