我還在上大學那會兒就說要推廣ipv6技術了,但直到今天大多數教科書關於網路的部分重點仍然在ipv4上面。前不久google發布了全球ipv6的部署統計,除了比利時差不多佔了一半,哪怕是資訊科技發達的北美都差強人意,更別說第三世界國家了。按理說ipv4僅能提供43億左右的位址,全球人均乙個都不夠分,何況現在物聯網時代有多少五花八門的裝置需要ip位址。當然我是知道我們有區域網,也就是所謂的內網,是不需要占用公網ip位址的,但是一直沒弄清具體的原理。作為乙個程式設計師,對tcp之類的傳輸層協議自然是要清楚的,但是網路層和鏈路層就不怎麼了解,一來和普通應用程式開發的關係不大,再說涉及到的各種裝置、解決方案、協議都太多了,恐怕只有網路管理員和it系統集**員需要和那些東西打交道。既然ipv4能苟延殘喘至今,關於內網通訊的問題還是有必要搞清的,畢竟內部ip有諸多限制,典型的例子,比如開發p2p程式要如何穿透?把相關的知識整理了一下,大概知道個所以然,具體細節還是需要去查詢文件的。
首先,目前的路由基本都支援無類位址。無類位址區別於有類位址,也就是a類、b類、c類位址(d類和e類位址有特殊用途)。a類位址可以提供的網路數目不多,但乙個網路可以容納n多個主機,c類恰好相反,乙個網路中只能有256-2=254個主機。為了讓ip位址分配更加靈活,就有了掩碼的概念,比如乙個b類位址看成二進位制形式,前16位是網路號,後16位是主機號,如果掩碼變成17位呢,那麼支援的主機數目就要減半了。因此,大的網路可以拆分成小網路,反過來,小規模的網路也可以合併,比如兩個相鄰的c類位址合在一起,支援的主機數目差不多翻倍。當然這一切的前提是有了相應的規範和協議支援。這樣一來,網路服務提供商可以申請合適規模的網路位址,避免ipv4位址快速枯竭。
接下來,假如從網際網路服務**商(比如電信、網通)那裡申請到了乙個連線,那麼家庭裡所有的電腦和手機都可以上網,家庭內部等於組建了乙個小型的區域網,所有裝置都鏈結到負責連通外部網路的路由器上面(常見的有tp-link)。此時用ipconfig命令可以看到詳情,通常ip位址和預設閘道器是192.168開頭的,掩碼是255.255.255.0。事實上,a、b、c類位址各自劃分出了一段供內網使用,分別是10.0.0.0~10.255.255.255(a類),172.16.0.0~172.31.255.255(b類),192.168.0.0~192.168.255.255(c類),這類位址是可重用的私有位址,絕對不會在網際網路上被當作公共ip位址來訪問。通常路由器同時充當dhcp伺服器,會自動將家庭區域網設定成c類私有位址,因為裝置不會太多,如果是在大一點的組織內,內部網路可能是由a類或b類私有位址進一步劃分的(當然也有把公網ip位址用作內部ip位址的,並不規範)。另外,我發現自己的dns server被自動設定為10.64.0.200,這也應該是乙個私有位址,個人推測,需要解析dns網域名稱時,路由器會把分組傳送到家庭區域網的外部的dns伺服器,但它仍然位於網路服務提供商的內部網路。我們通過路由器撥號上網的時候,這些預設配置資料會被獲取並自動設定。
於是,內部網路通過路由器接入外網(內外是相對的,比方說你的外網其實是另乙個大型的區域網),就可以訪問網際網路上的公有ip位址了,但是外部網路如何訪問內網的主機呢,其實是辦不到的,對外部而言內網的所有主機都共享乙個ip位址。我們知道一些常見的協議比如tcp,需要連線的雙方的ip位址和埠號,假設內網的某台主機是客戶端,公網的某個ip是服務端,那麼如何連線呢,此時網路位址轉換(network address translator)就派上用場了。nat分為基本的位址轉換和napt轉換方式,現在常見的是後者,根據全稱network address port translator就可以得知是利用埠號進行了ip共享。當內部主機連線外面的伺服器時,會為該連線建立乙個位址對映,內部的主機對外表現為同一位址,但是埠號變了,可用的埠號有幾萬了,足夠許多支撐許多內網主機同時執行了。當然也會帶來一些新的問題,比如傳輸層協議有crc校驗,首部的ip位址和埠號都要參與校驗,一旦轉換過後crc就失效了,所以負責nat的閘道器還有額外的工作要做。
雖然內網的主機可以訪問外網,但反過來則不能,例如在乙個tcp通訊中,內網的主機作為客戶端可以去連線服務端,但外部主機卻無法主動發起乙個連線,因為內網的ip位址在網際網路上根本不可達,內網的主機若想成為服務端,於是需要動態網域名稱解析來完成這個任務。動態網域名稱解析可以讓不斷變更的ip位址繫結到固有的網域名稱上,一些動態網域名稱服務提供商(比如花生殼)也有相應的內網版軟體,其原理等於是多了一重**。其過程相當於內網的主機先執行軟體去連線外部的伺服器(當然也需要保活該連線),固有網域名稱解析指向該伺服器,於是根據預設的對映,資料會被**到內網的主機,從外界看起來好像訪問的是乙個固定的**一樣。通過這種方法一些訪問量不大的**可以直接在內部建站,然後購買動態網域名稱解析服務,不僅成本比租用虛擬主機要低,還可以避免一些安全性問題。
IPv4單播位址
ipv4單播位址標識網路中的乙個介面的位置,就像用街道位址標識城市街區的房子一樣。正如乙個街道位址必須能夠標識乙個唯一的住所一樣,ipv4單播位址也必須是全域性唯一的,而且要採用一種統一的格式。1.單播位址的組成 每個ipv4單播位址包括乙個網路id和乙個主機id。l 網路id 又稱網路位址 它是i...
ipv4的私有位址
本文出自 ipv4的位址,有4個8位二進位制數表示,為了表示方便,常常用十進位制數表示,8位的二進位制的範圍是0 255。這樣一共可以有4gb的定址範圍。a 10.0.0.0 10.255.255.255 8 b 172.16.0.0 172.31.255.255 12 c 192.168.0.0 ...
IPV4的私有位址
a類位址 1 a類位址第1位元組為網路位址,其它3個位元組為主機位址。10.x.x.x是私有位址 所謂的私有位址就是在網際網路上不使用,而被用在區域網路中的位址 範圍 10.0.0.0 10.255.255.255 127.x.x.x是保留位址,用做迴圈測試用的。2.b類位址 1 b類位址第1位元組...