Linux網路程式設計基礎 IP位址和埠號

2021-08-17 11:18:15 字數 2302 閱讀 7780

1. 引言

網路通訊的本質仍然是程序間通訊。

以前,我們在學習程序間通訊的時候(共享記憶體、管道、以及用於同步的訊號量),並沒有提到過網路 ipc,那時候是因為基礎不太夠。另一方面,之前講的程序間通訊,所有的程序都位於同乙個作業系統上。

然而網路通訊跨越了這條「鴻溝」,穿越了世俗的界限,將程序間通訊擴充套件到了不同的計算機上。

在同乙個作業系統上,不同程序之間可以使用程序的 pid 號進行唯一標識。但是如果在不同計算機上,這種方法就行不通了,因為不同計算機上,也會有兩個一樣的程序

id 號。

所以在網路 ipc 中,為了標識目標的通訊程序,只能使用

ip 位址,但是光有

ip 位址也是不夠的啊!有人想到

ip 位址

+ 程序

pid

兩者聯合起來,好吧。。。 這種方法確實可行,但是它用起來並不是那麼爽,因為每次你要和另一台電腦上的程式通訊,你都得知道它的

pid,這一次它的

pid

是 2000

,說不定一次重新啟動後,就變成了

2017.

2. ip 位址

+ 埠號

(port)

實際上,標識目標程序的方案是使用 ip 位址

+ 埠號的方式,那埠號有是什麼呢?埠號是乙個新概念。

實際上它就是乙個 unsigned short 型別(

2位元組)的整數,所以說,最大的埠號是

65535.

首先,埠號首先是

穩定

的,程序每次啟動,都可以使用固定的埠號。埠號可以唯一標識當前作業系統的乙個程序,或者說,乙個埠號只能被乙個程序使用。

如果要進行網路通訊的話,就可以使用

(ip 位址

+ 埠號)來唯一的標識這個世界上的任何乙個程序。

(但是有些 ip 位址是私有位址,不能出現在公網上,這種

ip 位址就是我們常用的區域網

ip 位址,比如

192.168.***.***

這些。如果你是區域網內的計算機,你的計算機是無法被外網所訪問到的)

3. 套接字位址

在網路程式設計中,把(ip 位址

+ 埠號)這樣的一對值稱呼為套接字位址,新名詞套接字又是啥?

套接字的英文原文 socket,看看 有道 的解釋:

所以這裡的套接字,實質上應該是類似一種插槽的東西,不如就說是插座吧。那麼,套接字位址就是「插座」位址了。再者,是誰的「插座」?沒錯,是這個程序上的插座。

在計算機中,通常使用 192.168.166.5:80 這種以

ip:port

的形式來表示套接字位址。

在上圖所示中的程序,就安裝了 3 個插座,什麼意思呢?就是說這個程序它使用了

3 個埠號,我們使用這三個套接字位址中的任何乙個都可以聯絡這個程序。

所以,有了套接字位址了,和程序通訊也不是什麼難事了。不過,值得一提的是,這些插座,是本來就有的,還是需要自己去安裝的?這個問題我們下一次再討論。

4. 套接字位址在程式中的表示

剛剛用 ip:port 的方式來表示套接字位址,實際上這只是給人類看的,容易看的明白,在程式中,顯然就是結構體了。

這個結構體的樣子如下:

struct sockaddr_in ;
第乙個字段現在我先不解釋,以後再說。

5. 總結

v網路通訊使用

套接字位址

唯一的標識程序

v知道套接字位址是什麼

linux 網路基礎之IP位址

ip是英文internet protocol的縮寫,意思是 網路之間互連的協議 也就是為計算機網路相互連線進行通訊而設計的協議。ip 公有位址 公有位址 public address 由inter nic internet network information center網際網路資訊中心 負責。...

網路程式設計 IP位址

獲取本地主機位址物件 inetaddress ip inetaddress.getlocalhost system.out.println ip.gethostname ip.gethostaddress 根據給定主機名返回主機的 ip 位址。主機名也可為ip位址,檢查位址的有效性 ip位址和主機名...

Linux網路基礎二 IP位址規劃

ipv4定義了5種位址型別,其中3類 a類 b類和c類網路由單播ip位址構成。單播位址可以標識乙個單一的主機或介面,該位址能夠唯一標識該裝置。d類位址用於多播位址,因此大送給d類多播ipv4位址的資料報,實際上會傳給多給主機。最後e類是試驗性的,僅保留待將來使用。根據位址第乙個八位組可以判斷出網路類...