遠程終端信息
在計算機科學中,遠程終端是一個SSH-2和Telnet終端仿真程式,它可以讓你連線到你的UNIX和Linux伺服器,NAS,虛擬主機,虛擬設備,路由器和所有其他系統,支持SSH-2或Telnet連線。遠程終端地址是通過遠程終端登錄遠程設備或系統所需要的地址。遠程終端地址一般分為專用地址、廣播地址和公用地址。
在UT1553B RTI Remote Terminal Interface中指出分配RTI遠程終端地址可以通過軟體或者硬體實現,主機分配RT的I遠程地址通過執行一個控制暫存器寫來實現的。終端地址匯流排(TA(4:0))選通至RTI遠程終端地址暫存器在控制暫存器寫入完成後。分配RTI遠程終端地址可以通過硬體,利用TALEN /校驗輸入引腳操作在終端鎖存地址的使能模式。這個終端地址匯流排鎖存到RTI當TALEN斷言(例如邏輯低)。有效的遠程終端地址(RTA)包括十進制位0到31,如果是廣播是禁用的,如果廣播,0到30是可以的。 十進制地址31(11111)不應作為專用地址分配。如採用廣播選擇方式,RT除了它的專用地址外,還應指定十進制地址31(11111)作為公用地址。
線協定
MIL-STD-1553的匯流排協定
MIL-STD-1553是由美國國防部出版的軍用標準,其定義了串列數據匯流排的機械,電氣和功能特性。它最初設計為與軍用航空電子設備一起使用的航空電子數據匯流排,但也成為軍用和民用太空飛行器車載數據處理(OBDH)子系統的常用功能。它具有多個(通常為雙)冗餘平衡線路物理層,(差分)網路接口,時分復用,半雙工命令/回響協定,並可處理多達30個遠程終端(設備)。使用光纖布線代替電氣的MIL-STD-1553版本稱為MIL-STD-1773。
MIL-STD-1553多路復用數據匯流排系統由控制多個遠程終端(RT)的匯流排控制器(BC)組成,所有這些匯流排控制器都通過數據匯流排連線在一起,從而在匯流排控制器和所有關聯的遠程終端之間提供單一數據通路。也可能有一個或多個匯流排監視器(BM); 然而,匯流排監視器特別不允許參與數據傳輸,並且僅用於捕獲或記錄用於分析的數據等。在冗餘匯流排實現中,使用多個數據匯流排來提供多於一個的數據路徑,即雙冗餘數據匯流排,三冗餘數據匯流排等。數據匯流排上的所有傳輸均可訪問BC和所有連線的RT。訊息由一個或多個16位字(命令,數據或狀態)組成。使用曼徹斯特碼傳輸包含每個字的16位,其中每個位作為邏輯0的邏輯1或低 - 高序列傳送為0.5μs高和0.5μs低。每個單詞前面都有一個3μs的同步脈衝(1.5μs低,加上數據字高1.5μs,命令和狀態字相反,在曼徹斯特碼中不會發生),後跟一個奇校驗位。實際上,每個字可以被認為是一個20位字:3位用於同步,16位用於有效負載,1位用於奇校驗控制。訊息內的字連續傳輸,訊息之間的差距必須至少為4微秒。然而,這個訊息間的間隙可能並且通常比4μs大得多,甚至與一些較舊的匯流排控制器甚至高達1 ms。器件必須在4-12μs內開始傳送其有效命令的回響,如果在14μs內沒有啟動回響,則認為沒有收到命令或訊息。
匯流排上的所有通信都由匯流排控制器控制,使用從BC到RT的命令進行接收或傳送。從BC到終端的數據傳輸,(序列的形式是<originator>.<word_type(destination)>和類似於CSP的符號)的序列是
master.command(terminal)→terminal.status(master)→master.data(terminal)→master.command(terminal)→terminal.status(master)
並且用於終端到終端通信
master.command(terminal_1)→terminal_1.status(master)→master.command(terminal_2)→terminal_2.status(master)→master.command(terminal_1)→terminal_1.data(terminal_2)→master.command(terminal_2)→terminal_2.STATUS(主)
這意味著在傳輸過程中,所有通信都由匯流排控制器啟動,終端設備不能自己開始數據傳輸。在RT到RT傳輸的情況下,序列如下:RT接口(例如RT1)後面的子系統中的套用或功能將要傳送的數據寫入特定(傳送)子地址(數據緩衝區)。將數據寫入子地址的時間不一定與事務的時間相關聯,儘管接口確保不傳送部分更新的數據。匯流排控制器命令作為數據目的地的RT(例如RT2)以指定的(接收)數據子地址接收數據,然後命令RT1從命令中指定的傳送子地址進行傳送。RT1傳送狀態字,指示其當前狀態和數據。匯流排控制器接收RT1的狀態字,並看到傳送命令已被接收並且沒有任何問題。RT2接收共享數據匯流排上的數據,並將其寫入指定的接收子地址並傳送其狀態字。接收RT接口後面的子系統上的應用程式或功能可以訪問數據。再次,這種閱讀的時間不一定與轉移的時間相關。匯流排控制器接收RT2的狀態字,並看到接收命令和數據已被接收並且沒有問題。RT2接收共享數據匯流排上的數據,並將其寫入指定的接收子地址並傳送其狀態字。接收RT接口後面的子系統上的應用程式或功能可以訪問數據。再次,這種閱讀的時間不一定與轉移的時間相關。匯流排控制器接收RT2的狀態字,並看到接收命令和數據已被接收並且沒有問題。RT2接收共享數據匯流排上的數據,並將其寫入指定的接收子地址並傳送其狀態字。接收RT接口後面的子系統上的應用程式或功能可以訪問數據。再次,這種閱讀的時間不一定與轉移的時間相關。匯流排控制器接收RT2的狀態字,並看到接收命令和數據已被接收並且沒有問題。
BC和特定RT之間或匯流排控制器和一對RT之間允許六種類型的事務:
信息傳輸格式
控制器到RT傳輸。匯流排控制器傳送一個16位接收命令字,緊接著是1到32個16位數據字。所選的遠程終端然後傳送單個16位狀態字。
RT到控制器傳輸。匯流排控制器向遠程終端傳送一個傳送命令字。遠程終端然後傳送單個狀態字,緊接著是1到32個字。
RT到RT轉接。匯流排控制器立即發出一個接收命令字,然後傳送一個傳送命令字。傳送遠程終端立即傳送狀態字,後跟1到32個數據字。接收終端然後傳送其狀態字。
沒有數據字的模式命令。匯流排控制器傳送一個子地址為0或31的命令字,表示模式碼類型命令。遠程終端用狀態字進行回響。
模式命令與數據字(傳送)。匯流排控制器傳送一個子地址為0或31的命令字,表示模式碼類型命令。遠程終端用一個狀態字立即回響一個單個數據字。
數據字(接收)的模式命令。匯流排控制器傳送一個具有0或31的子地址的命令字,表示一個模式代碼類型命令,緊隨其後一個數據字。遠程終端用狀態字進行回響。
MIL-STD-1553B還介紹了可選廣播傳輸的概念,其中將數據傳送到實施該選項的所有RT,但沒有RT回響,因為這將導致匯流排上的衝突。這些可以用於將相同數據傳送到多個RT的地方,以減少事務數量,從而減少數據匯流排上的負載。然而,接收這些廣播的RT沒有明確的回響意味著在事務發生錯誤的情況下,這些傳輸不能被自動重新嘗試。
BC和所有能力RT之間允許四種類型的廣播事務:
廣播信息傳輸格式
控制器到RT(s)傳輸。匯流排控制器傳送一個接收命令字,終端地址為31,表示廣播類型命令,緊接著是0到32個數據字。實現廣播的所有遠程終端將接受數據,但是遠程終端將不會回響。
RT到RT(s)傳輸。匯流排控制器發出一個接收命令字,終端地址為31,表示廣播類型命令,緊接著是一個傳送命令。傳送遠程終端立即傳送狀態字,後跟1到32個數據字。實現廣播的所有遠程終端將接受數據,但是遠程終端將不會回響。
模式命令無數據字(廣播)。匯流排控制器傳送一個命令字,終端地址為31,表示廣播類型命令,子地址為0或31,表示模式代碼類型命令。無遠程終端將回響。
使用數據字(廣播)的模式命令。匯流排控制器傳送一個命令字,終端地址為31,表示廣播類型命令,子地址為0或31,表示模式代碼類型命令,緊接著是一個數據字。無遠程終端將回響。
終端與偽終端
終端
終端(Terminal)也稱終端設備,是計算機網路中處於網路最外圍的設備,主要用於用戶信息的輸入以及處理結果的輸出等。
在早期計算機系統中,由於計算機主機昂貴,因此一個主機(IBM大型計算機)一般會配置多個終端,這些終端本身不具備計算能力,僅僅承擔信息輸入輸出的工作,運算和處理均由主機來完成。
在個人計算機時代,個人計算機可以運行稱為終端仿真器的程式來模仿一個終端的工作。
隨著行動網路的發展,移動終端(如手機、PAD)等得到了廣泛的套用。此時,終端不僅能承擔輸入輸出的工作,同時也能進行一定的運算和處理,實現部分系統功能。
偽終端
對於遠程網路用戶來說,上節描述的 Terminal 登錄過程並不適用,網路用戶既不能遠程使用串列連線埠設備,也不能遠程控制顯示器設備。因此需要創建一個虛擬的終端設備為其服務—— 偽終端。
偽終端,顧名思義,不是真正的終端,不能操作某個物理設備。它是虛擬的終端驅動設備,用來模擬串列終端的行為。
當使用 ssh、telnet 等程式連線到某台伺服器上時進行操作時,底層使用的就是偽終端技術。
偽終端是成對的邏輯終端設備,分為“主設備”(master)和“從設備”(slave),例如/dev/ptyp3和/dev/ttyp3。
其中,“從設備”提供了與真正終端無異的接口,可以與系統進行 IO,規範終端行輸入。;而“主設備”與管道檔案類似,可以進行讀寫操作。往“主設備”寫入的數據會傳輸到“從設備”,而“從設備”從系統獲取到的數據也會同樣的傳輸到“主設備”。因此,也可以說,偽終端是一個雙向管道。
構建遠程服務
一個遠程終端服務程式由兩個部分構成:偽終端和 shell 進程。通常構建如下:
1 創建偽終端設備。
2 fork 創建子進程,並將該子進程的標準輸入、輸出和錯誤輸出均 dup 為偽終端的"從設備"。
3 在子進程中 exec 執行 /bin/bash 命令,啟動 shell 進程。由於上一步的操作,該子進程(也就是 shell 進程)的 stdin、stdout 和 stderr 已與偽終端進行了綁定。如此,shell 子進程的輸出、輸出、錯誤輸出均是通過偽終端的“從設備”進行的。
經過上述操作,可以說這個子進程就是一個“終端進程“了:既能夠完成終端的輸入輸出操作,又能解釋執行用戶輸入與系統核心互動。
由於偽終端“雙向管道”的特性:對偽終端“主設備”的寫操作,將傳輸到“從設備”,也就是傳輸給”終端進程“;而”終端進程“執行命令後的輸出,將通過“從設備”傳輸返回至“主設備”。如此一來,對”終端進程“ 的 IO 操作完全可以通過操作偽終端的“主設備”來完成。
對“主設備”進行讀寫操作,就等同於在對一個終端 shell 進行操作。因此,如果在父進程中將該偽終端“主設備”與網路 socket 綁定,就能夠實現遠程終端操作了。(當然也可以將該“主設備”與其他檔案描述符綁定,例如與另一進程通信的管道 fd 綁定等等,這些就取決於功能需求了)。
數據傳輸可見下圖: