Internet 套接口的兩種類型
什么意思?有兩種 Internet 套接口?是的。不,我在撒謊。其實還有很多,但是我可不想 嚇著你。我們這里只講兩種。 Except for this sentence, where I‘m going to tell you that “Raw Sockets” are also very powerful and you should look them up.
好了,好了。那兩種類型是什么呢?一種是 “Stream Sockets”,另外一種是 “Datagram Sockets”。我們以后談到他們的時候也會用到 “SOCK_STREAM” 和 “SOCK_DGRAM”。 數(shù)據(jù)報套接口有時也叫“無連接套接口”(如果你確實要連接的時候用 connect()。)
流式套接口是可靠的雙向通訊的數(shù)據(jù)流。如果你向套接口安順序輸出“1,2”,那么他們 將安順序“1,2”到達(dá)另一邊。他們也是無錯誤的傳遞的,有自己的錯誤控制。
有誰在使用流式套接口?你可能聽說過 telnet,不是嗎?他就使用流式套接口。你需要你所輸入的字符按順序到達(dá),不是 嗎?同樣,WWW 瀏覽器使用的 HTTP 協(xié)議也使用他們。實際上,當(dāng)你通過端口80 telnet 到一個 WWW 站點,然后輸入 “GET pagename” 的時候,你也可以得到 HTML 的內(nèi)容。
為什么流式套接口可以達(dá)到高質(zhì)量的數(shù)據(jù)傳輸?他使用了“傳輸控制協(xié)議 (The Transmission Control Protocol)”,也叫 “TCP” (請參考 RFC-793 獲得詳細(xì)資料。)TCP 控制你的數(shù)據(jù) 按順序到達(dá)并且沒有錯誤。你也許聽到 “TCP” 是因為聽到過 “TCP/IP”。這里的 IP 是指 “Internet 協(xié)議”(請參考 RFC-791.) IP 只是處理 Internet 路由而已。
那么數(shù)據(jù)報套接口呢?為什么他叫無連接呢?為什么他是不可靠的呢?恩,有這樣的事實: 如果你發(fā)送一個數(shù)據(jù)報,他可能到達(dá),他可能次序顛倒了。如果他到達(dá),那么在這個包的內(nèi)部 是無錯誤的。
數(shù)據(jù)報也使用 IP 作路由,但是他不選擇 TCP。他使用“用戶數(shù)據(jù)報協(xié)議 (User Datagram Protocol)”,也叫 “UDP” (請參考 RFC-768.)
為什么他們是無連接的呢?主要原因是因為他并不象流式套接口那樣維持一個連接。 你只要建立一個包,在目標(biāo)信息中構(gòu)造一個 IP 頭,然后發(fā)出去。不需要連接。應(yīng)用程序有: tftp, bootp 等等。
“夠了!”你也許會想,“如果數(shù)據(jù)丟失了這些程序如何正常工作?”我的朋友,每個程序在 UDP 上有自己的協(xié)議。例如,tftp 協(xié)議每發(fā)出一個包,收到者發(fā)回一個包來說“我收到了!” (一個“命令正確應(yīng)答”也叫“ACK” 包)。如果在一定時間內(nèi)(例如5秒),發(fā)送方?jīng)]有收到應(yīng)答, 他將重新發(fā)送,直到得到 ACK。這一點在實現(xiàn) SOCK_DGRAM 應(yīng)用程序的時候非常重要。
什么是套接口的虛電路
虛電路是指位于兩臺網(wǎng)絡(luò)設(shè)備之間的連接,是由 OSI 網(wǎng)絡(luò)層為發(fā)送和接收數(shù)據(jù)而建立的邏輯通信路徑。具有虛電路性能的網(wǎng)絡(luò)包括 X.25 連接、幀中繼以及 ATM 網(wǎng)絡(luò)。
虛電路分為兩種:
一、永久虛電路(PVC)
永久虛電路(PVC)是指通信雙方的電路在用戶看來是永久連接的虛電路。PVC 由網(wǎng)管預(yù)先定義。PVC 適用于通過路由器維持恒定連接,從而便于在動態(tài)網(wǎng)絡(luò)環(huán)境下傳輸路由選擇信息的電路。載波信號為各用戶分配 PVC,從而降低網(wǎng)絡(luò)開銷并提高網(wǎng)絡(luò)性能。
二、另一種為交換虛電路(SVC)
交換虛電路(SVC)是指通信雙方的電路在用戶看來是由獨立節(jié)點臨時且動態(tài)連接的虛電路。一旦通信會話完成,便取消虛電路。
虛電路使得用戶看上去是一個物理連接的線路,其實它隱藏了很多網(wǎng)絡(luò)的轉(zhuǎn)發(fā)關(guān)系,從虛擬電路往下的層,都隱藏了,透明的讓用戶感到就是有一條線路與目標(biāo)機(jī)器直接連接著。
Shutdown CloseSocket 他們是應(yīng)用層的,而虛電路是網(wǎng)絡(luò)層的,使用Scoket創(chuàng)建或者關(guān)閉“鏈接”,最終可能會導(dǎo)致創(chuàng)建或者關(guān)閉虛電路,但也可能不會導(dǎo)致建立虛電路,因為Socket也可以創(chuàng)建數(shù)據(jù)報文形式的鏈接。