為何IP地址不設計得更長,讓用戶都使用公網IP,去掉路由器交換機,讓電腦的互連就像打電話一樣方便呢?
題主不會簡單認為把電話線扎在一起就可以打電話吧?哈哈,我原來也是那麼想!!!電話線一端連著電話機,另一頭可是交換機,沒有這些電話機想打電話,沒門!
儘管目前有IPv6,128位的長度,多到可以給地球上每粒沙子分一個地址,但是IPv6和IPv4一樣屬於扁平化定址,只是IPv6無需再使用類似IPv4私有地址,無需再做地址翻譯,其它的沒有本質差別。
何謂扁平化定址?
即地址本身沒有攜帶任何位置信息,比如 111.111.111.111 這個IP位置在哪裡?路由器通過廣告的形式告訴別的路由器,然後別人才會知道:哦,你小樣竟然在那裡!
而電話採用的是分層定址,何謂分層定址?
比如上海的王二狗在美國海淘了一些美食,留下的地址是:
中國 上海市 黃浦區 人民路 200號 1號樓 101室
電話是:
86 21 6222 3333
無論是地址還是電話都可以唯一定位王二狗的位置,它們都使用了分層定址的概念,大概使用4到5層的遞進,使得搜索範圍越縮越小,直到最終準確定位。
以電話號碼為例,採用金字塔式分層結構:
86 國家代號
21 上海區號
6222 局號
3333 線路號
美國客服打這個電話,電話會這樣轉接:
客服-&> 美國本地局-&> 美國長途局 -&> 美國國際局 -&> 中國國際局-&> 上海長途局 -&> 上海本地局 -&> 王二狗
假定美國客服撥的號碼是0086 21 6222 3333,本地局一看0打頭,立馬扔給長途局(類似預設路由),長途局一看00,立馬扔給國際局(類似預設路由),美國國際局經過仔細查找86,知道這是中國的電話,轉給中國國際局,國際局查詢區號21,扔給上海長途局,就這樣一級級查找,電話接通。
電話和上網區別
電話是先用信令協議ISUP(攜帶地址:電話號碼)把端對端信道先分配、並連接好(如一根物理線路),然後雙向語音流(不攜帶地址,無需定址,因為端對端線路已經搭接好了)順著線路流向對方,所有流量走保留的、統一的信道。
上網是一個個獨立的IP包,每個IP包必須攜帶地址(要依靠IP地址來定址),然後根據沿途路由器的路由表來尋找更靠近目的地的路由器,每個IP包不保證走同一條路徑,具體走哪條路徑,由沿途路由器獨立選擇。
像電話一樣方便?知道現代電話(1990年之後)里的一個必要組件,就叫做程式控制交換機嗎?交換機,交換機,交換機。為什麼要有這個呢?就是為了電話線路不是一條直連另一條,而是通過封包走個路由網路啊。為什麼要走路由網路呢?因為這樣效率高啊。
懂了沒。
而這一切因為分層分的很好,所以在線路改造的時候不用衝到你家讓你換電話機,在電信局那邊換了就行了,設備照樣兼容。不要因此就以為電話是直接連的。
再者,1990年代末上網的朋友們都知道,當時56k貓分兩種協議,互相不兼容。就是因為電信網路裡面真正傳輸的是數字信號,而貓的模擬信號量化到數字後,如果量化方式和預期不同,就可能差出去一個數。
所以,都是數字的,都是交換機的,都是路由網路的。有唯一的電話號碼這件事情,並不影響到網路如何布。你們不要總是只知道要叫題主學習一個嘛……雖然他確實需要學習一個……
我理解,題主對於路由器的認識局限在家用路由器那種,一個外網IP地址就可使得連在路由器上的若干台設備都能上網。
但是題主,你家的路由器可不只是個OSI七層模型中網路層的那個路由器而已,他還同時是個帶NAT和DHCP功能的網關哦。當然了網關做的其實也是路由的事情,只是他有一些特別的地方。
我們知道,你的一台設備連上了家用路由器之後,獲得的IP地址(由路由器的DHCP來分配),通常是192.168.x.x(當然也有其他情況)。注意這個IP地址只是內網的IP,而不是公網的IP。如果你打開百度輸入ip來查詢你現在的IP地址的話,會看到另一個地址;同時,你連接在這台路由器上的所有設備查到的IP,都是同一個值。
雖然我們通常都知道,互聯網上的每台設備都有一個獨立的IP,但是這個情況下,顯然我們連在路由器的若干台設備都是用的是相同的IP地址,這又是怎麼做到的呢?這就是上面說的NAT地址轉換。
我們假想一個使用場景就能很明白的理解這個問題了。假設你連在路由器上的一台電腦,內網IP地址是192.168.0.2,路由器網關的IP是192.168.0.1。這個時候你要打開瀏覽器訪問百度(通常情況下是為了測試網路有沒有連通嗯),你的電腦通過DNS域名解析拿到了http://www.baidu.com的IP地址,假設是a.b.c.d。然後建立一個TCP連接,指向了a.b.c.d的80埠,本地綁定的埠假設是15649(隨便瞎寫的)。這時候由於這個a.b.c.d並不在你的路由器的子網內,於是你的電腦將這個數據包發送給了你的路由器,路由器一看這應該是往外網發的,同時還需要經過NAT,於是就把這個數據包改了,使用自己的26478埠,自己的外網IP地址,給a.b.c.d發送了這個數據包,同時建立了自己的26478埠和192.168.0.2的15649埠的綁定。然後發送出去的數據包經過互聯網上若干真正的「路由器」到達了百度。
百度收到了之後需要給你返回你請求的網頁,這又是一個數據包。他發送給的是你的路由器的外網IP地址,的26478埠。路由器收到這個之後,查找發現26478埠對應的是192.168.0.2的15649埠,於是就把這個數據包發送給了你的電腦。這個埠到內網地址的映射,我們就叫做網路地址轉換(NAT)。
於是通過這樣的方式,我們就允許了多個設備同時使用了一個公網IP。但是這樣也是有問題的,由於NAT只能在內網向外發送數據包的時候建立綁定,然後才能準確的轉發回復的數據包,所以NAT子網內部的機器只能訪問外部的設備,而外部的機器就不能直接連接到內網的設備上,也就導致了子網內部的機器是不能用來當做伺服器的。
NAT地址轉換技術確實在一定程度上緩解了IP地址不足的問題,但是這還是不夠的畢竟NAT也有限制,也不太複合IP協議設計之初連接萬物的目標。所以我們還是發展出了IPv6。
然而!此處進入正題!就算IP地址足夠長了,能夠給任何一台設備都有唯一的IP了,像IPv6那樣,依然,也是,不能去掉交換機和路由器的!絕對不能!
排除家用路由器,真正互聯網主幹上的路由器是幹什麼的,是通過在他連接的不同網路之間轉發數據包,數據包可以從任何設備到達另一個設備的。
交換機也是乾的數據轉發的事情,不過交換機工作在數據鏈路層,而路由器工作在網路層。這裡主要區分的是,交換機連接和轉發的是同一種類型的網路(比如乙太網,無線乙太網,移動網路),這種轉發只能在同一個類型的網路中進行,使用的設備地址是物理地址(MAC地址)。而路由器使用IP地址進行路由轉發,可以連接多種類型的網路,比如可以將一個無線乙太網中的數據包轉發到另一個有線乙太網當中。
篇幅問題不對這些的更進一步的原理細說了(經驗告訴我們太長的回答沒人看)樓主多學習,路由器不能去掉,交換機也不能去掉。
唯一能去掉的是nat而已。
有人說ipv6地址夠銀河系用的也不要那麼樂觀。只有64位id是區分主機的,在物聯網時代並不夠用。如果是自動配置,那會更慘,64位的id引起ip地址衝突的可能性還是很大的。
IP地址必須匯聚才能減輕互聯網上的路由表配置項。而當年設計v6的時候被運營商主導,過度用了前綴。以後估計會把前綴改到32位,用96位區分主機,那才是海量。TCP/IP協議是美國國防部在上個世紀七十年代制定的,那個時代計算機數量很少,IPv4的地址空間有4, 294, 967, 296個地址,哪有那麼多計算機啊,那時計算機的CPU和內存也有限,網速也低,由於IP地址需要在IP消息中攜帶,IP地址太長也會降低有效載荷的比例和處理能力。
當然IPv4不夠用不見得是地址空間本身不夠用了,而是地址空間分配的機制有問題,早先大手大腳分配了很多A類地址,B類地址,A類地址相當於整個地址空間的1/256,後來就不夠分了,所以又提出無類別域間路由(CIDR),當然IPv6的提出根本上解決了IP地址不夠用的問題。
你確認打電話不需要交換機嗎?聽說過程式控制交換機嗎?在你打電話時,你的電話和對方電話要建立起一個電路,在打電話時這個電路是你們專享的(語音一般是64K帶寬),電話局之間的電纜通過交換機實現多路復用,頻分復用。
TCPIP協議與電話要求不一樣。電話的通路上只要一段線路被破壞,電話就打不通了。而TCPIP是為戰時設計的,因此需要在某段線路不通時通過另外的線路通信,比如北京到廣州,一條路是北京-武漢-廣州,一條路是北京-上海-廣州,可能還有一條路是北京-上海-武漢-廣州,當北京-武漢不通時,可以通過另外兩條路依然能從北京到達廣州,這就需要路由器了。
沒人邀我,所以不謝。就這麼隨手寫點。
1,目前所說IP地址,嚴格意義來說,是IPv4地址,起源於上世紀七十年代,最來源是美國軍方的一個項目,阿帕網。
2,終端的處理資源,就拿內存來說,05年06年左右的我的台式機,內存是512M ,後來擴到1GB,伺服器4G/8G/18G,現在呢,我用的筆記本配了8G內存,家裡計劃再來個台式機,直接配到32G,去年一個項目上配置的伺服器,一台伺服器內存配置到512G。而回溯到70年代,那個年代計算機,內存是以KB為單位的,好一些的能到MB。
3,在這種情況下,內存的使用是非常金貴的。而TCP/IP協議的設計,也秉承了這一理念。拿出4個BYTE做編址,這已經非常腐敗了。
以上三點是說,不是設計成這樣夠用,而是設計成這樣是因為當時計算機只能支持這樣的計算。
4,下一代成熟的IP協議版本號是V6,在IPv6中,地址長度是IPV4的4倍。可能四位元組到16位元組你會覺得沒有太大的影響。但是在05年到06年,找一台能四開魔獸世界的電腦,一定會非常轟動。IPV6地址有2^128個,展開後有30多個0。所以說,不是設計不出來足夠的IP地址,現在能設計出來,也能實現。
5,IPV6技術已基本成熟,目前部署起來的障礙主要在成本上。各種IPV4協議的魔改,特別是NAT,正在不斷的為IPV4續1S。部署IPV6的成本,遠遠大於部署魔改IPV4.
6,就算是普及了IPV6,一人一個公網地址,或者全球計算機各種消失,IPV4足夠用,一人一個公網地址,路由器交換機一樣是存在的。因為處理公網地址和私有地址的轉化,只是這些網路設備的一點微薄的貢獻
題主還需要向IPv6學習一個。IPv6的地址已經可以在全銀河系範圍內使用也不怕地址不夠了,路由器在今天也不是為了擴展地址而繼續使用的。
你還是要學習一個,不要開歷史倒車
你說的這個地址更長,去掉路由和交換扁平化的網路,可不就是只用mac的二層網路么謝 @周立 邀。樓上幾位兄弟已經把原因說的很清楚而且很易懂了。不過難得碰到我會的問題,就班門弄斧下。說說自己的看法。
先回答題主的疑問,就算ipv4夠用,我們也是需要交換機和路由器的,路由器的概念用快遞來解釋再通俗不過了,一件快遞從始發地到終點就像發送端主機發送一個數據包到接收端主機一樣,如果沒有路由器的存在。數據包就不知道往哪裡走了,何談穩定的網路傳輸?
而交換機,也是必須所需要的。樓上所說的電話交換,就是一個很棒的例子。
然後,題主這種設想在網路最開始的時候,的確是這樣的,但是後來由於諸多原因,網路逐漸由軍用到民用,規模就越來越大了。
如果題主不清楚有ipv6這個概念,可以先去了解一下。ipv6的出現就給題主的問題給了一種解決的可能(但是交換機和路由器還是要存在的,即使你不知道它在哪。)
ipv4地址空間提供了大約43億個可用ip。除去一些多播,測試和其他目的的地址,大概有37億個地址可分配。由於計算機能力越來越強,還有網路的迅猛發展,不光是pc需要ip地址了。行動電話,智能家居等。都可以訪問網路,導致了ipv4的枯竭。
ipv6在普及,題主的疑問說不定幾年後就能看到例子了。(國內部分高校已經是ipv6了。)電話也有交換機。交換機的工作曾經甚至是由接線員人肉完成的。
首先,電話不是直連的。
其次,去掉交換機或者路由器,那設備只能直連了,那一個設備上要多少個介面啊,密密密密麻麻麻麻,會嚇死密集恐懼症患者的。
再者,設計一個協議的時候,只是基於當前以及未來一段時間的需求而已。一步到位其實也是對資源的浪費。而地址的短缺其實也刺激了別的協議的發展比如MPLS VPLS之類的,不能說這是好或者壞是吧。
最後,協議一代代的發展,我們這樣的通信汪才能持續有飯吃23333
其實早就已經有IPV6了,只是太長,IPV4的地址你能記住,但是IPV6的地址想記住那是非常困難滴。
嗯,於是你的電腦需要60億條線嗎
那要是說換就換,思科華為不是白忙活了,(手動斜眼
你要問當年為什麼設計不夠長?
因為當年以為4294967296個理論地址完全夠用了啊。誰知道後來連條狗都可以戴有個有攝像頭的無線追蹤器呢。
還是你要問為什麼後來不弄更長一點?
因為這長度不是說加就加的啊,又不是你手機上的App點個市場更新一下就ok了,要改IP地址長度要改硬體的。不是說硬體上跑的固件,你家路由器上刷的那種,而是硬體,矽片。
可是呢,制定標準的那群人還想啊,你說這個地址變長了,我們順便也解決幾個相關的問題吧。結果把標準弄的有點複雜,不好懂了。所以IPv6就很難推。
另外就是,這個電話啊,它也是要經過交換機路由器的。你不知道它們藏在你家樓下哪兒,不等於它不存在啊。
互聯網接入商本來也是打算提供電話一樣的服務的。但是誰曾想,當年懂得上網的人懂的太多(一群工程師嘛),不像電話用戶一樣想要多一路獨立通話就從電話公司再買一條線路,這群可惡的技術宅居然懂得自己在家架設網路基礎設備,讓家裡所有電腦都可以共享帶寬。簡直慘無人道。
這種慘無人道的事情居然後來被普通人也學會了,於是接入商就只好賣帶寬了,反正你們都知道怎麼自己弄了嘛。相應的你家裡也就必須有個路由器了。不然你就得考慮買了個新電腦要去接入商那裡多買一條寬頻接入。
其實要我說,上網比打電話容易多了。還記得當時打電話要翻電話本么?還記得要分內線外線么?還記得打長途要去郵電局排隊申請嗎?還記得一個人打電話另一個人要等嗎?還記得你偷偷給小相好打電話的時候你媽在另一個話機上聽得一清二楚嗎?不要拿現在的手機的體驗來想像電話啊。
題主的意思我不是很清楚,說說我的理解。
我覺得題主是問為什麼兩台計算機通信不使用唯一的一個編號,把編號設計的長一點這樣全世界的計算機都有唯一的編號,通信時直接點對點,也不需要私網到公網的轉化了,至於要不要路由器,講道理當初在設計數據鏈路層的時候48位的mac地址已經足夠計算機編碼唯一了,直接通過mac地址通信技術上也是可以實現的(略麻煩),那麼為什麼要有上面的網路層,為什麼要有ip地址,ip地址其實是劃分網路的,主要是因為廣播,乙太網最初是向全網發廣播,然後每台計算機再判斷廣播包是不是發給自己的,是則接收,否則丟棄,後面有了交換機,才能夠按地址發送數據包,但是要在全世界廣播,想想就可怕,所以有了劃分網路的ip地址,同一網路廣播是很方便的。
至於為什麼要劃分私有地址,這純粹是後來32位的ip地址不夠用了,用私有地址來擴充網路,ipv6能夠讓地球上的每一台設備都有不同的地址,但是他們之間通信還是要路由器和交換機的。去掉路由器是不可能的,路由器完成數據轉發和路由原則動作。去掉了路由器,你想弄出一個超大集中式定址,想想什麼計算量,想想如何接入各種設備。交換機完全可以廢除,但是交換機便宜啊,你要有區域網需求這個組網成本低啊。當然你可以不用交換機,全路由定址,想想路由選擇演算法的計算量,你還能買到99的無線路由用嗎?這還能帶四個乙太網埠。雖然這個設備還不能叫做路由器,只是具有最簡單路由功能的一個嵌入式設備。
呵呵,看到很多人說IPv6,我也是醉了。
在今年看來,IPv6也許夠用。但到了未來,誰知道人類會不會向全宇宙進軍?到時候的【宙乎】的網站里會出現一條提問:
為毛IPv6地址不設計得更長....
要真正解決這個問題,需要使用變長地址。靜態長度的地址,無論多長,即使是IPv1024,都會出現不夠用的情況。
類似的問題,在計算機里還有很多,比如千年蟲與32位的Date問題。中國人總覺得國人目光短淺,但從這個問題看當年的美國頂尖工程師、科學家,會發現他們也一樣嘛~
當年覺得夠用,就好像現在我們覺得ipv6肯定夠用一樣。
以後說不定出了生物計算機聯網,三四個神經元就需要一個ip。。。
你應該想想那些比你專業的專家為什麼要設計成現在這樣,為什麼不設計成你想的那樣。。。
推薦閱讀:
※大多tcp應用採用長度+數據的格式傳輸數據,如何防止惡意虛報長度?
※動態ip會阻礙網警查到使用人嗎?
※如何深入學習 TCP/IP 協議,以及網路層、傳輸層、應用層各協議?
※TCP四次分手中,主動關閉方最後為什麼要等待2MSL之後才關閉連接?
※tcp首部只有埠號沒有ip地址,那麼網路層怎麼知道目的ip地址的呢?