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