深入淺出理解套接字
套接字是實現網路通訊的底層原理,理解套接字是網路程式設計的基礎。下面,我試著用通俗的語言來描述利用套接字實現網路通訊的過程,不對的地方請各位大蝦指正。
首先,網路通訊是誰和誰的通訊呢?常見說法有兩種,一是客戶端和伺服器端,二是主機和主機之間。這兩種說法都是正確的,但是比較籠統,不利於理解網路通訊本質。實際上,是一台主機上的程序和另一台主機上的程序進行的資料傳輸。那好,假設我們有兩台主機a和b,它們通過網路連線。
現在主機a上有乙個程序processa,主機b上有乙個程序processb,processa為客戶端程序,processb為伺服器端程序。這兩個程序之間如何通訊呢?
很顯然,要經過如下三個步驟:1,processa請求連線processb。
2,processb接受processa連線。
3,建立連線,開始通訊。
看起來這三個步驟很簡單,但是要在網路中實現這幾步可不是一件簡單的事。首先,對processa來說,processb的位址是什麼呢?是主機b的ip位址嗎?顯然ip是必須要有的,但只有ip是遠遠不夠的,為什麼?因為ip位址只是唯一標示了主機,但一台主機上有很多程序,還必須明確標示出是哪個程序才行,這就要用到埠的概念。也就是說,埠是在網路通訊時,標示主機上的程序的乙個數字,通常為乙個16位的整數。這樣一來,我們用乙個位址結構就可以讓processa找到processb啦。我們將這種位址結構稱為套接字位址。這就解決了第乙個步驟。
現在,我們假設processa已經和processb建立了連線。那麼它們如何傳送資料呢?連線建好就相當於兩個程序間的管道連通了。那麼,程序a可能既要往本地磁碟檔案中寫資料,又要給processb傳資料。它怎麼確定資料往哪傳呢,很簡單,我們在processa中給這個連線建乙個標示符,像檔案標示符一樣,稱之為套接字。套接字和特定的網路連線繫結。網路連線用如下資料結構標示:。這個資料結構稱為套接字位址對。現在我們知道了,套接字就是一種特殊的檔案,它和套接字位址對繫結以傳輸資料。
回頭來看第二步。processb肯定也是先建立乙個套接字,但是,這個套接字比較特殊,因為它不能直接和乙個套接字位址對繫結。它只能先和自己的套接字位址繫結。但是這個套接字可以收到發給自己的連線請求,為什麼呢?因為它已經有套接字位址了。等processa傳送請求連線資料過來後,連線資料中有processa中的套接字的套接字位址。這樣,processb中的套接字就也和套接字位址對繫結了。下面,二者就可以自由通訊啦!
深入淺出理解索引
一 深入淺出理解索引結構 實際上,您可以把索引理解為一種特殊的目錄。sql server提供了兩種索引 聚集索引 clustered index,也稱聚類索引 簇集索引 和非聚集索引 nonclustered index,也稱非聚類索引 非簇集索引 下面,我們舉例來說明一下聚集索引和非聚集索引的區別...
深入淺出理解索引
一 深入淺出理解索引結構 實際上,您可以把索引理解為一種特殊的目錄。sql server提供了兩種索引 聚集索引 clustered index,也稱聚類索引 簇集索引 和非聚集索引 nonclustered index,也稱非聚類索引 非簇集索引 下面,我們舉例來說明一下聚集索引和非聚集索引的區別...
深入淺出理解 COOKIE MAPPING
在網際網路中,我們有著許多標識唯一使用者的技術手段,其中,最為常見的就是 cookie 了 什麼是cookie請參看 分析中的cookie 簡單的多,cookie具備幾個特徵 正因為cookie具備上述幾個特徵,也就衍生出cookie在使用上的一些特點了,我們以dsp.com 廣告購買平台 adx....