TCP/IP 與 Internet 網路:第十章 Internet 系統模型  上一頁           下一頁

 

翻轉工作室:粘添壽

 

10-2 Internet 系統模型

由網路服務的觀點來看,Internet 應用系統是建立在兩個(或兩個以上)通訊端點上,只要連結上這個通訊端點,且兩者之間給予適當的協議,雙方便能依照服務內容來運作,它的系統模型就如圖 10-1 所示。圖 10-1 (a) 為網路系統模型,經過下層通訊軟體連接之後,所建構的應用模型如圖 10-1 (b) 所示,因此我們便可依照圖 10-1 (b) 來探討應用系統的運作模式。在應用系統模型之中,為了讓雙方都能正常運作,必需包含下列功能:

通訊端點定址

多工服務端點

通訊語法

10-1 Internet 應用系統模型

以下針對這三個功能來介紹。

10-2-1 通訊端點定址 Domain Name

無論 Internet Intranet 網路所訴求的重點是透過遠距離之間的傳輸,而其中也許會經由多種網路型態連結,連線雙方也許是不同網路架構,因此連線雙方必須有一個傳輸獨立(Transport Independent的介面來互相通訊。依照此標準介面便可通行無阻的互相通訊,而不用考慮所經過的網路型態,此介面是由 TCP/UDP 層所提供,通訊雙方的連線方式如圖 10-1 (b) 所示。

我們將各種特殊的服務程式連結到傳輸埠口,任一埠口提供某一特殊服務,該埠口就稱之為『服務埠口』,在 Internet 網路上我們只要連結到該埠口,就可以得到某一特殊的服務。基本上,我們將服務埠口定名為IP 位址:傳輸埠口』(如 163.15.2.1:80),IP 位址為主機電腦在 Internet 網路上的唯一位址名稱(假設是唯一的),而傳輸埠口為該主機上 TCP/UDP 的連接埠口。此定名方式就如同電話號碼(IP 號碼)裡再連接分機號碼(TCP/UDP 埠口)一樣,在電話系統上,如能知道電話號碼和其分機號碼,在世界任何一個角落裡,都能撥接到其所需服務的地點,Internet 網路也如同此道理。

想要在任何一部主機電腦的傳輸埠口上連接某一個應用程式(如 Web Server)時,都而要公告週知,讓網路上所有使用者知道,的確不是一件容易的事,但最起碼我們可以將一些較常用的應用程式固定在某一埠口上,使用者只要知道該主機電腦的 IP 位址,便可以連結到一般常用的應用程式,譬如,將 Web Server 固定在埠口 80Telnet Server 在埠口 23ftp Server 在埠口 21 上。一般使用者就不需要特別去記憶,哪些應用程式是連接到第幾埠口,這些埠口就稱之為『著名埠口』(Well-known Port),一般常用的著名埠口如表 7-1 所示(或 Linux 系統的 /etc/services 檔案)。

雖然有了著名埠口可幫助使用者免去記憶傳輸埠口的困擾,但使用者還是需要知道某一主機的 IP 位址,才能連結到該服務,可是要記憶某一主機的 IP 號碼也是非常的困難,因此 Internet Society 提出『網域名稱』(Domain Name的架構。簡單的說,網域名稱是利用有結構性的命名方式來取代 IP 位址,讓使用者記憶有意義的名稱總是比沒有意思的數字來得容易。譬如:

linux-1.cu.edu.tw ←→ 162.15.2.62

linux-2.cu.edu.tw ←→ 163.15.2.30

當使用者以網域名稱來連接伺服器時,是由誰來負責將網域名稱轉換為 IP 位址呢?在 Internet 網路上有一套完整的『網域名稱系統』(Domain Name System, DNS來負責。基本上 DNS 也是屬於分散式處理環境,任一區域的 DNS 只負責該區域內名稱的查詢動作,如果超越管轄地區,便轉送到相關區域的 DNS 系統查詢。本書第十五章有針對 DNS 系統詳加介紹,這裡僅用圖 10-2 來說明 DNS 的查詢動作。圖10-2 中,工作站 A 執行 telnet linux-1.cu.edu.tw 命令後,假設工作站內未紀錄 linux-1 主機的 IP 位址,便發出訊號向管轄內的 DNS 伺服器查詢。伺服器回應 linux-1 IP 位址後,工作站 A 才確實執行 telnet 163.15.2.62 命令,連結到 163.15.2.62,又當主機執行 telnet 命令,Telnet 伺服器的著名埠口是 TCP 23,因此,所指定到的通訊端點是 163.15.2.62:23

10-2 網域名稱查詢動作

DNS 的命名方式是用樹狀結構,由根目錄(root.往下延伸,第二層表示組織單位(或區域),第三層以下再由各組織單位往下延伸,如圖 10-3 所示。早期 DNS 系統是由美國發展出來,因此,第二層的組織單位是以美國地區為主,各組織代碼的功能如表 10-1 所示。各國的國碼(Country Code)也架設在第二層上,譬如,tw代表台灣、jp代表日本、ca代表加拿大等等。各國的組織單位也是由各自國家代碼以下(第三層)來延伸。任何一個代碼表示一個網域,譬如台灣教育部的網域是edu.tw.,它的書寫方法是倒過來的方式,由最下層往上層來書寫,其中包含的網域是edu.tw..,但一般書寫都將根的網域(.)簡略掉,而書寫成edu.tw(一般電腦都會自動補上.)。

10-3 樹狀的 DNS 系統

既然 DNS 是屬於分散式系統,因此在某一網域下是否再發展出下一層的次網域,是由該網域的 DNS 系統來負責,這種管理工作將會在第十五章介紹。如圖 10-3,我們在 edu.tw. 網域下再設定次網域為 cu.edu.tw.nsysu.cu.edu.tw,又在這兩個網域下的次網域上都有一個名稱為 linux-1 的主機,但這兩個主機的網域名稱分別為:linux-1.tsnien.cu.edu.tw. linux-1.ee.nsysu.edu.tw.

10-1 各區域之網域名稱(部分)

  

    

com

商業組織 Commercial Organizations

edu

教育單位(Education Institutions

gov

政府機關(Government Institutions

mil

軍方單位(Military Group

net

網路支援中心(Network Support Centers

org

非營利事業組織(Organizations

auaus

Australia(澳大利亞)

cacan

加拿大(Canada

cnchn

中國(China

frfra

法國(France

hkhkg

香港(Hong Kong

itita

義大利(Italy

jpjpn

日本(Japan

krkor

南韓(Korea

twtwn

台灣(Taiwan

10-2-2 多工服務端點 Multiplex

依照我們所瞭解,網路應用服務是架設(或銜接)在主機電腦的某一傳輸埠口上,當這個傳輸埠口被某一客戶連接時,其它客戶端是否可同時要求連線呢?一般網路伺服器都必須允許同時連接多個客戶的請求,否則便失去伺服器的功能,但應如何來達到多工連線?其實它的動作非常簡單,當伺服器接受到連線請求後,系統便再產生一個次處理程式(Sub-process)(利用 fork() 系統呼叫),而將連線訊息轉移給次處理程式,並由次處理程式負責雙方的通訊,原來主程式又回到等待連線的狀態下,如此便可以達到多工的功能,我們用圖 10-3 來說明傳輸埠口的多工處理。譬如,網路上有一個 Telnet 伺服器位於 168.13.4.5:23,當 Uase_A163.15.2.30:1456)要求連線,伺服器接受連線後,便執行 fork() 功能呼叫產生 P1 處理程式,也將連線訊息轉移到 P1 上,便啟動 P1 User_A 之間通訊,它們之間的的通訊連線是 168.13.4.5:23 163.15.2.30:1456;同樣的,User_B 要求連線後,它們之間連線是 168.13.4.5:23 163.15.2.62:2378,雖然所有連線還是經過同一傳輸埠口,但是每個連線的號碼都不會一樣,因此還是可以區分出來的。(有關多工連線的實現,請參考第十章說明)

10-4 通訊端點之多工連線

10-2-3 通訊語法 NVT ASCII

Internet 網路為了要包容各種異質性電腦間互相通訊的需求,通訊語法採用最通用『網路虛擬終端機』(Network Virtual Terminal, NVT語法,將兩個通訊端點上的通訊行為,模仿成像終端機對主機之間的通訊一樣,這樣比較容易避免掉不同電腦之間語意相容性的問題。早期 Internet 尚未普遍時,NVT 是由 RFC 854 定義在 Telnet 通訊協定上使用,它的做法是無論客戶端的終端機是何種型態,都將其映射到 NVT 模式,同樣的,也將伺服器的終端機映射到 NVT 模式,不論雙方電腦系統的終端機是何種型態,雙方都可以依照 NVT 模式來通訊,後來發展的應用系統大多也採用這種模式。基本上,NVT 是一個有鍵盤與印表機的字元裝置,使用者由鍵盤上鍵入字元,並將該字元以 ASCII 碼傳送給伺服器,也有可能伺服器以 ASCII 碼傳送印表機,印表機再印出該字元的圖樣(如鍵盤上 "A" 的圖樣),因此它們之間是以最簡單的 ASCII 碼來傳遞,因此稱之為NVT ASCII。但在 Internet 上傳輸會有稍微改變,這些變化也只侷限於控制字元部份而已,基本上還是以 NVT ASCII 模式傳輸。

NVT ASCII 是採用 7 位元的英文字母表示法,每一個 7 位元字元都以一個 8 位元(一個位元組)來表示,而將其最高位元設定為 0。如此,有關應用程式的控制字元就可設計在 128 數字(0x7F)以後的字碼,也演變成不同應用系統的通訊協定。但各種控制字元的編碼也必須避開有些 8 位元的編碼字型,譬如,中文字型的圖形文字編碼等等。因此,各種應用系統的通訊協定大多製作在 0x7F 以後的控制碼,其中較接近於最後(0xFF)部份,較不易和其它編碼衝突。另外有關 NVT 的換行控制碼,則一律以 <CR>Carriage Return, 0x0D)和 <LF>Line Feed, 0x0A)兩個控制碼組合而成,可寫成 \r\n 來表示。而原來單純的 CRCarriage Return),則以 <CR> <NUL>NULL, 0x00)組合而成,也可以寫成 \r\0 來表示。

我們用 Telnet 協定來說明 NVT ASCII 的動作程序,Telnet 是以 IACInterpret As Command)(字碼為 0xFF)來表示控制命令的開始和結束,而以 SESub-option End)表示命令選項的結束,而其中包含的命令則用 NVT ASCII 表示。我們用圖 10-4 來說明 Telnet 如何利用 NTV ASCII 來協調雙方終端機型態,首先,客戶端送出 <IAC, WILL, 24> 給伺服端,如將其編碼成 NTV ASCII <0xFF, 0xFB, 24>,其中 24 表示協調終端機的選項,而 0xFB WILL 的字碼(請參考第十三章 Telnet 介紹)。伺服端收到後回應 <IAC, DO, 24> 表示同意協商終端機型態給客戶端,並通知客戶端送終端機型態 <IAC, SB, 24, 1, IAC, SE>,客戶端再送出終端機型態給伺服端 <IAC, SB, 24, 0, 'V', 'T', '2', '2', '0', IAC, SE>,其中 VT220 也是 NTV ASCII 編碼表示為 0x560x540x320x320x30

10-5 NTV ASCII 控制程序範例

既然,我們將應用系統中兩端通訊端點都模擬成『網路虛擬終端機』(NVT,這表示各種應用系統的通訊端點都可以用 Telnet 命令連結到它,並可用鍵盤輸入(ASCII)各種命令,以下我們用 Telnet 連結到 163.15.2.30 主機內 FTP 伺服器(Port 21)的通訊端點,並用鍵盤輸入各種命令,來觀察它的反應:(其中有底線部份表示使用者輸入控制字元)

[tsnien@linux-1 tsnien]$ telnet 163.15.2.30 21

Trying 163.15.2.30...

Connected to 163.15.2.30.

Escape character is '^]'.

220 linux-2.cu.edu.tw FTP server (Version wu-2.6.1-18) ready.

user tsnien

331 Password required for tsnien.

pass good478

230 User tsnien logged in.

help

214-The following commands are recognized.

   USER    PORT    STOR    RNTO    NLST    MKD     CDUP

   PASS    PASV    APPE    ABOR    SITE    XMKD    XCUP

   TYPE    DELE    SYST    RMD     STOU

   STRU    ALLO    CWD     STAT    XRMD    SIZE

   MODE    REST    XCWD    HELP    PWD     MDTM

   QUIT    RETR    RNFR    LIST    NOOP    XPWD

214 Direct comments to root@localhost.

pasv

227 Entering Passive Mode (163,15,2,30,223,54)

port 163,15,2,62,4,4

200 PORT command successful.

        由以上的介紹,我們可以瞭解 Internet 應用系統發展的三大基礎:通訊端點的定址法、通訊埠口的多工連線、以及 NVT ASCII 的控制字元。雖然各種應用系統都有各自的通訊協定,也大多是依照這三個基礎來發展,這對我們學習 Internet 網路應用有很大的幫助。

 

<GOTOP>