TCP/IP 協定與 Internet 網路:第七章 傳輸層協定  上一頁           下一頁

 

翻轉工作室:粘添壽

 

7-6 TCP 程式介面

        既然程式設計師可以透過傳輸埠口連結到應用程式,而不用理會網路所連結型態,這也表示傳輸層介面是和網際層的關係是獨立性的,因此,傳輸層必須提供程式介面讓使用者銜接。使用者也可透過程式介面來開發網路應用程式,在網路系統上有兩個介面標準:Socket TLITransport Layer Interface),但 Internet 網路的應用層協定大多建立在 Socket 介面上,我們在第十章有詳細介紹 Socket 開發程式的範例,至於 TLI 介面在 Internet 網路上較少應用,讀者如欲更瞭解 TLI 的運作原理,請參考有關書籍(或附錄上參考書目)。以下就針對這兩個標準作簡單的介紹。

7-6-1 Socket 程式介面

Socket 是一種『應用程式介面』(Application Program Interface, API,它是由一組稱為Socket Library的庫存函數所構成,它提供開發各式各樣應用程式的工具,程式設計師只要透過介面程式來編寫應用程式,就不需要去考慮網路是如何實現出來的。就如一般作業系統上的『系統呼叫』(System Call程式一樣。程式設計者只要呼叫 open() 介面程式,而給予適當的參數(parameter),它便會指定到磁碟機或其他週邊設備上,亦可存取到所需的資料,而無需考慮到磁碟機和其他週邊設備如何驅動馬達和磁軌。

『插座』(Socket的概念是希望提供一標準介面,來銜接一般應用程式,也就是說,提供一個網路和程式之間的標準介面,只要應用程式合乎 Socket 的介面標準(也就是系統呼叫的參數),便可安然無恙的連接到網路,而不用理會網路實際的連接型態。這種觀念就好像我們一般電話『插座』一樣,只要合乎插座內的配線裝置,就可以連結到電話系統,甚至可撥接電話到任何地方,而不用理會電話系統實體上是如何安裝及跨接。

Socket 為了提高程式設計的方便性,將各種功能呼叫程式製作成庫存函數,並可載入系統核心,讓使用者編寫網路應用程式,就如一般檔案系統一樣,以下簡略介紹一般較常用的 Socket 功能呼叫:

(1) socket()開啟 Socket 通訊服務點。

(2) bind() socket() 定址,連結至相對應的 TCP UDP 埠口。

(3) listen()設定 socket 為等待狀態,等待 Client 端要求連線。

(4) connect()要求和對方通訊端(socket)連線。

(5) accept()接受對方(socket)連線要求。

(6) write()將資料寫入連線中的 socket,傳送到通訊對方。

(7) read()由連線的 socket() 中讀取資料。

(8) close()釋放 socket,中斷連線。

7-21 是利用 Socket 功能呼叫所開發之檔案伺服器的主從式架構,此型態是連接導向方式,一般都必須使用 TCP 連線。首先 Server 端利用 socket()bind() 連結到通訊傳輸埠口(TCP 埠口),而以 listen() 進入聆聽狀態,並以 accept() 等待對方連線要求。Client 端可以用 connect() 要求連線,連線後雙方以 read() write() 來接收或傳送資料,並以 close() 功能呼叫來結束雙方的通訊。

7-21 利用 Socket 發展程式範例

7-6-2 TLI 程式介面

『傳輸層介面』(Transport Layer Interface, TLI最早是在 Unix System V 3.0 版本中出現,而是作為 OSI 通訊協定的傳輸層介面標準。TLI 介面和 Socket 介面最大的不同點是,Socket Library 中所提供的功能呼叫,如 read()write() 都屬於 Unix 『系統呼叫』(System Call,而是屬於作業系統的一部份,也就是說,Socket 介面是包含在 Unix 的核心程式之內。而 TLI 僅是一個介面程式,使用者必須將 TLI Library 和所發展的程式連結(Link)在一起,才可以產生執行檔。TLI 介面在執行時,必須透過 Unix Stream I/O 介面(請參考 Unix 作業系統)才可以和傳輸層作溝通。

雖然 Socket TLI 介面在實現方面有所不同,但它們的目的都是一致的,也是網路應用程式和網路下層之間的標準介面,讓使用者不用理會網路實際的連結型態,便可開發網路應用程式。TLI Library 也提供一系列的標準功能呼叫,以下我們列出一些較常用的介面程式:

(1) t_open()開啟 TLI 通訊端點。

(2) t_bind()對通訊端點定址到 TCP UDP 傳輸埠口。

(3) t-alloc()配置記憶體佔用空間。

(4) t_listen()設定通訊端點為聆聽(Listen)狀態。

(5) t_connect()要求對方連線。

(6) t_accept()接受對方連線要求。

(7) t_snd()連接導向的傳送資料。

(8) t_rcv()連接導向的接收資料。

(9) t_close()結束通訊連線。

7-22 為利用 TLI 發展一個檔案伺服器的主從式架構,此型態也是連接導向方式(TCP 連線)。首先,Server 端利用 t_open() t_bind() 開啟一個通訊端點,並連結到 TCP 傳輸埠口上,再載入記憶體空間內(t_alloc())執行,緊接著,呼叫 t_listen() 來等待 Client 端連線要求。Client 端也連結到通訊端點後,以 t_connect() Server 端要求連線。Server 端收到連線訊號後,以 accept() 呼叫得知連線對方的位址。爾後雙方以 t_snd() t_rcv() 互相傳送與接收資料。

7-22 利用 TLI 發展程式範例

 

 

<GOTOP>