TCP/IP 協定與 Internet 網路:第八章 TCP Socket 程式介面 上一頁 下一頁
8-2 Socket 基本功能
Socket 介面提供六個基本功能,來達成通訊連線的目的:
(A) 開啟插座(Create a socket)
我們可以用 socket() 呼叫程式,來產生一個通訊端點。在呼叫 socket() 程序時,必須給予適當的參數作為規劃通訊通道的模式,通道參數如下:
● Address Family:表示通道的位址模式,例如:Internet 或 Unix 通訊模式。
● Type of Service:任何一種通道模式都有其特殊的服務模式,一般可區分為電報傳輸(Datagram)或虛擬電路(Virtual Circuit)服務兩大類。
● Protocol:此通訊端點所使用的通訊協定,可區分為 TCP、UDP 或 IP。
(B) 連結通訊位址(Bind an address)
當開啟一個 Socket 後並不能直接通訊,就好像有一個電話機,但沒有電話號碼一樣,必須將電話機連結到電話交換機上,並給予一個電話號碼。bind() 程序就是將 Socket 連結到通訊端點上,並給予一個通訊埠口號碼,然而通訊號碼是由『IP Address + Port Number』所構成,有了這個號碼就成為 Internet 網路上一個成員,就好像電話機已連上一個電話號碼一樣,利用這個號碼就可以和其它成員通訊。圖 8-3 表示將 Socket 植入通訊埠口號碼的示意圖,通訊雙方都設定到各自的通訊號碼,雙方便可依照這個號碼來通訊,而不用理會網路實際的連接型態。
圖 8-3 Socket 埠口號碼
(C) 連結到對方插座(Connect to another socket)
當 Socket 連結到位址後,便可以和遠端 Socket 連線,來建構一個完整的通訊連線。通訊模式有兩種連線方式,一者為虛擬電路(Virtual Circuit)方式,通訊雙方需事先建立連線,才可以互相通訊,就好像必須撥接通電話,雙方才可以對話。連線建立後,雙方便依照此連線傳輸資料,資料傳送中無需再建立連線;另一者為電報傳輸(Datagram),雙方 Socket 並未建立連線,便直接將訊息傳送給對方,它的動作就好像將訊息傳送到某一信箱內,每一信息(或稱 Datagram)都必須註明對方的位址,也就是說,每一信息都必須自行建立通訊連線,再將訊息傳送過去,傳送完之後,該連線便自動消失。
(D) 接受對方端點連線(Accept a socket connection)
接受對方連線的情況只會發生在虛擬電路方式。當 Socket 連結到網路位址後,便可選擇進入聆聽狀態(Listen State),以等待遠端 Socket 要求連線。當 Socket 接收到要求連線訊息後,可選擇是否接受連線(Accept())。
(E) 傳送資料(Transfer data)
Socket 之間傳送資料,就好像一般程式將資料寫入磁碟機或緩衝器一樣的簡單,依照連結方式有不同的介面程式,如虛擬電路連接方式有:
● read() 和 write() 系統呼叫是作為一般資料的傳送與接收使用。
● send() 和 recv() 提供比 read()/write() 較多功能的系統呼叫。一般使用於較緊急的資料傳輸,這兩個系統呼叫所傳送的資料,會超越一般資料的佇列排序,而優先傳送或接收。
如果採用電報傳輸方式有:
● sendto() 和 recvfrom() 系統呼叫是做一般資料傳送與接收使用。
為了達到交談式的連線傳輸,不論虛擬電路或電報傳輸都可用下列兩個系統呼叫來傳輸資料:
● sendmsg() 和 recvmsg()。
(F) 停止插座操作(Shut down socket)
當執行 close() 系統呼叫停止 Socket 動作之後,將禁止所有資料傳輸。