深入解析互聯(lián)網(wǎng)協(xié)議的原理
時間:2022-05-25 00:57:01 | 來源:網(wǎng)絡營銷
時間:2022-05-25 00:57:01 來源:網(wǎng)絡營銷
我們每天都在使用互聯(lián)網(wǎng),更有很多的是依靠互聯(lián)網(wǎng)來維持公司的正常運作、來維持人們的日常的生活,但你是否想過,互聯(lián)網(wǎng)的信息傳遞是如何實現(xiàn)的呢?
全世界幾十億臺電腦,連接在一起,兩兩通信。在中國的某一塊網(wǎng)卡送出信號,美國的另一塊網(wǎng)卡居然就收到了,兩者實際上根本不知道對方的物理位置,卻能彼此準確無誤的傳遞信息,你不覺得這是很神奇的事情嗎?
互聯(lián)網(wǎng)的核心是一系列協(xié)議,總稱為"互聯(lián)網(wǎng)協(xié)議"(Internet Protocol Suite)。它們對電腦如何連接和組網(wǎng),做出了詳盡的規(guī)定。如果你能理解了這些協(xié)議,也就理解了互聯(lián)網(wǎng)的原理,那么也就明白了互聯(lián)網(wǎng)的如何進行信息傳遞的了。
因為互聯(lián)網(wǎng)的協(xié)議實在太復雜、太龐大。所以我就根據(jù)自己的一些學習理解,整理一個簡潔的框架,在億企邦上跟大家分享一下,幫助大家從總體上把握它們。為了保證簡單易懂,我做了大量的簡化,有些地方并不全面和精確,但是你若能仔細的看完億企邦上的這篇文章,應該能夠理解互聯(lián)網(wǎng)的原理了。
一、互聯(lián)網(wǎng)概述 1、互聯(lián)網(wǎng)的定義 互聯(lián)網(wǎng)(internetwork,簡稱internet),始于1969年的美國,又稱因特網(wǎng),是全球性的網(wǎng)絡,是一種公用信息的載體,是大眾傳媒的一種。具有快捷性、普及性,是現(xiàn)今最流行、最受歡迎的傳媒之一。這種大眾傳媒比以往的任何一種通訊媒體都要快?;ヂ?lián)網(wǎng)是由一些使用公用語言互相通信的計算機連接而成的網(wǎng)絡,即廣域網(wǎng)、局域網(wǎng)及單機按照一定的通訊協(xié)議組成的國際計算機網(wǎng)絡。
2、五層模型 互聯(lián)網(wǎng)的實現(xiàn),分成好幾層。每一層都有自己的功能,就像建筑物一樣,每一層都靠下一層支持。
用戶接觸到的,只是最上面的一層,根本沒有感覺到下面的層。要理解互聯(lián)網(wǎng),必須從最下層開始,自下而上理解每一層的功能。
如何分層有不同的模型,有的模型分七層,有的分四層。億企邦覺得,把互聯(lián)網(wǎng)分成五層,應該比較容易解釋。
如上圖所示,最底下的一層叫做"實體層"(Physical Layer),最上面的一層叫做"應用層"(Application Layer),中間的三層(自下而上)分別是"鏈接層"(Link Layer)、"網(wǎng)絡層"(Network Layer)和"傳輸層"(Transport Layer)。越下面的層,越靠近硬件;越上面的層,越靠近用戶。
它們叫什么名字,其實并不重要。你只需要知道,互聯(lián)網(wǎng)分成若干層就可以了。
3、層與協(xié)議 每一層都是為了完成一種功能。為了實現(xiàn)這些功能,就需要大家都遵守共同的規(guī)則。
大家都遵守的規(guī)則,就叫做"協(xié)議"(protocol)。
互聯(lián)網(wǎng)協(xié)議(IP)特指為實現(xiàn)在一個相互連接的網(wǎng)絡系統(tǒng)上從一個源到一個目的地傳輸比特數(shù)據(jù)包(互聯(lián)網(wǎng)數(shù)據(jù)包)所提供必要功能的協(xié)議。其中并沒有增加端到端數(shù)據(jù)可靠性機制、流量控制機制、排序機制或者其它在端到端協(xié)議常見的功能機制?;ヂ?lián)網(wǎng)協(xié)議可在其支持的網(wǎng)絡上提供相應服務,實現(xiàn)多種類型和品質的服務。”
互聯(lián)網(wǎng)的每一層,都定義了很多協(xié)議。這些協(xié)議的總稱,就叫做"互聯(lián)網(wǎng)協(xié)議"(Internet Protocol Suite)。它們是互聯(lián)網(wǎng)的核心,下面介紹每一層的功能,主要就是介紹每一層的主要協(xié)議。
二、實體層 我們從最底下的一層開始。
電腦要組網(wǎng),第一件事要干什么?當然是先把電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式。
所謂的"實體層",它就是把電腦連接起來的物理手段。它主要規(guī)定了網(wǎng)絡的一些電氣特性,作用是負責傳送0和1的電信號。
三、鏈接層 1、定義 單純的0和1沒有任何意義,必須規(guī)定解讀方式:多少個電信號算一組?每個信號位有何意義?
這就是"鏈接層"的功能,它在"實體層"的上方,確定了0和1的分組方式。
2、以太網(wǎng)協(xié)議 早期的時候,每家公司都有自己的電信號分組方式。逐漸地,一種叫做"以太網(wǎng)"(Ethernet)的協(xié)議,占據(jù)了主導地位。
以太網(wǎng)規(guī)定,一組電信號構成一個數(shù)據(jù)包,叫做"幀"(Frame)。每一幀分成兩個部分:標頭(Head)和數(shù)據(jù)(Data)。
"標頭"包含數(shù)據(jù)包的一些說明項,比如發(fā)送者、接受者、數(shù)據(jù)類型等等;"數(shù)據(jù)"則是數(shù)據(jù)包的具體內容。
"標頭"的長度,固定為18字節(jié)。"數(shù)據(jù)"的長度,最短為46字節(jié),最長為1500字節(jié)。因此,整個"幀"最短為64字節(jié),最長為1518字節(jié)。如果數(shù)據(jù)很長,就必須分割成多個幀進行發(fā)送。
3、MAC地址 上面提到,以太網(wǎng)數(shù)據(jù)包的"標頭",包含了發(fā)送者和接受者的信息。那么,發(fā)送者和接受者是如何標識呢?
以太網(wǎng)規(guī)定,連入網(wǎng)絡的所有設備,都必須具有"網(wǎng)卡"接口。數(shù)據(jù)包必須是從一塊網(wǎng)卡,傳送到另一塊網(wǎng)卡。網(wǎng)卡的地址,就是數(shù)據(jù)包的發(fā)送地址和接收地址,這叫做MAC地址。
每塊網(wǎng)卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,通常用12個十六進制數(shù)表示。
如上圖所示,前6個十六進制數(shù)是廠商編號,后6個是該廠商的網(wǎng)卡流水號。有了MAC地址,就可以定位網(wǎng)卡和數(shù)據(jù)包的路徑了。
4、廣播 定義地址只是第一步,后面還有更多的步驟。
首先,一塊網(wǎng)卡怎么會知道另一塊網(wǎng)卡的MAC地址?
回答是有一種ARP協(xié)議,可以解決這個問題。這個留到后面介紹,這里只需要知道,以太網(wǎng)數(shù)據(jù)包必須知道接收方的MAC地址,然后才能發(fā)送。
其次,就算有了MAC地址,系統(tǒng)怎樣才能把數(shù)據(jù)包準確送到接收方?
回答是以太網(wǎng)采用了一種很"原始"的方式,它不是把數(shù)據(jù)包準確送到接收方,而是向本網(wǎng)絡內所有計算機發(fā)送,讓每臺計算機自己判斷,是否為接收方。
上圖中,1號計算機向2號計算機發(fā)送一個數(shù)據(jù)包,同一個子網(wǎng)絡的3號、4號、5號計算機都會收到這個包。它們讀取這個包的"標頭",找到接收方的MAC地址,然后與自身的MAC地址相比較,如果兩者相同,就接受這個包,做進一步處理,否則就丟棄這個包。這種發(fā)送方式就叫做"廣播"(broadcasting)。
有了數(shù)據(jù)包的定義、網(wǎng)卡的MAC地址、廣播的發(fā)送方式,"鏈接層"就可以在多臺計算機之間傳送數(shù)據(jù)了。
四、網(wǎng)絡層 1、網(wǎng)絡層的由來 以太網(wǎng)協(xié)議,依靠MAC地址發(fā)送數(shù)據(jù)。理論上,單單依靠MAC地址,中國的網(wǎng)卡就可以找到美國的網(wǎng)卡了,技術上是可以實現(xiàn)的。
但是,億企邦覺得這樣做有一個重大的缺點。以太網(wǎng)采用廣播方式發(fā)送數(shù)據(jù)包,所有成員人手一"包",不僅效率低,而且局限在發(fā)送者所在的子網(wǎng)絡。也就是說,如果兩臺計算機不在同一個子網(wǎng)絡,廣播是傳不過去的。這種設計是合理的,否則互聯(lián)網(wǎng)上每一臺計算機都會收到所有包,那會引起災難。
互聯(lián)網(wǎng)是無數(shù)子網(wǎng)絡共同組成的一個巨型網(wǎng)絡,很像想象中國和美國的電腦會在同一個子網(wǎng)絡,這幾乎是不可能的。
因此,必須找到一種方法,能夠區(qū)分哪些MAC地址屬于同一個子網(wǎng)絡,哪些不是。如果是同一個子網(wǎng)絡,就采用廣播方式發(fā)送,否則就采用"路由"方式發(fā)送。("路由"的意思,就是指如何向不同的子網(wǎng)絡分發(fā)數(shù)據(jù)包,這是一個很大的主題,本文就不深入介紹了,具體的可查看億企邦的互聯(lián)網(wǎng)技術專欄。)遺憾的是,MAC地址本身無法做到這一點。它只與廠商有關,與所處網(wǎng)絡無關。
這就導致了"網(wǎng)絡層"的誕生。它的作用是引進一套新的地址,使得我們能夠區(qū)分不同的計算機是否屬于同一個子網(wǎng)絡。這套地址就叫做"網(wǎng)絡地址",簡稱"網(wǎng)址"。 于是,"網(wǎng)絡層"出現(xiàn)以后,每臺計算機有了兩種地址,一種是MAC地址,另一種是網(wǎng)絡地址。兩種地址之間沒有任何聯(lián)系,MAC地址是綁定在網(wǎng)卡上的,網(wǎng)絡地址則是管理員分配的,它們只是隨機組合在一起。
網(wǎng)絡地址幫助我們確定計算機所在的子網(wǎng)絡,MAC地址則將數(shù)據(jù)包送到該子網(wǎng)絡中的目標網(wǎng)卡。因此,從邏輯上可以推斷,必定是先處理網(wǎng)絡地址,然后再處理MAC地址。
2、IP協(xié)議 規(guī)定網(wǎng)絡地址的協(xié)議,叫做IP協(xié)議。它所定義的地址,就被稱為IP地址。
目前,廣泛采用的是IP協(xié)議第四版,簡稱IPv4。這個版本規(guī)定,網(wǎng)絡地址由32個二進制位組成。
習慣上,我們用分成四段的十進制數(shù)表示IP地址,從0.0.0.0一直到255.255.255.255。
互聯(lián)網(wǎng)上的每一臺計算機,都會分配到一個IP地址。這個地址分成兩個部分,前一部分代表網(wǎng)絡,后一部分代表主機。比如,IP地址172.16.254.1,這是一個32位的地址,假定它的網(wǎng)絡部分是前24位(172.16.254),那么主機部分就是后8位(最后的那個1)。處于同一個子網(wǎng)絡的電腦,它們IP地址的網(wǎng)絡部分必定是相同的,也就是說172.16.254.2應該與172.16.254.1處在同一個子網(wǎng)絡。
但是,問題在于單單從IP地址,我們無法判斷網(wǎng)絡部分。還是以172.16.254.1為例,它的網(wǎng)絡部分,到底是前24位,還是前16位,甚至前28位,從IP地址上是看不出來的。
那么,怎樣才能從IP地址,判斷兩臺計算機是否屬于同一個子網(wǎng)絡呢?這就要用到另一個參數(shù)"子網(wǎng)掩碼"(subnet mask)。
所謂"子網(wǎng)掩碼",就是表示子網(wǎng)絡特征的一個參數(shù)。它在形式上等同于IP地址,也是一個32位二進制數(shù)字,它的網(wǎng)絡部分全部為1,主機部分全部為0。比如,IP地址172.16.254.1,如果已知網(wǎng)絡部分是前24位,主機部分是后8位,那么子網(wǎng)絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
知道"子網(wǎng)掩碼",我們就能判斷,任意兩個IP地址是否處在同一個子網(wǎng)絡。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1,運算結果為1,否則為0),然后比較結果是否相同,如果是的話,就表明它們在同一個子網(wǎng)絡中,否則就不是。
比如,已知IP地址172.16.254.1和172.16.254.233的子網(wǎng)掩碼都是255.255.255.0,請問它們是否在同一個子網(wǎng)絡?兩者與子網(wǎng)掩碼分別進行AND運算,結果都是172.16.254.0,因此它們在同一個子網(wǎng)絡。
在此,億企邦來為大家總結一下,IP協(xié)議的作用主要有兩個,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個子網(wǎng)絡。
3、IP數(shù)據(jù)包 根據(jù)IP協(xié)議發(fā)送的數(shù)據(jù),就叫做IP數(shù)據(jù)包。不難想象,其中必定包括IP地址信息。
但是前面說過,以太網(wǎng)數(shù)據(jù)包只包含MAC地址,并沒有IP地址的欄位。那么是否需要修改數(shù)據(jù)定義,再添加一個欄位呢?
回答是不需要,我們可以把IP數(shù)據(jù)包直接放進以太網(wǎng)數(shù)據(jù)包的"數(shù)據(jù)"部分,因此完全不用修改以太網(wǎng)的規(guī)格。這就是互聯(lián)網(wǎng)分層結構的好處:上層的變動完全不涉及下層的結構。
具體來說,IP數(shù)據(jù)包也分為"標頭"和"數(shù)據(jù)"兩個部分。
"標頭"部分主要包括版本、長度、IP地址等信息,"數(shù)據(jù)"部分則是IP數(shù)據(jù)包的具體內容。它放進以太網(wǎng)數(shù)據(jù)包后,以太網(wǎng)數(shù)據(jù)包就變成了下面這樣。
IP數(shù)據(jù)包的"標頭"部分的長度為20到60字節(jié),整個數(shù)據(jù)包的總長度最大為65,535字節(jié)。因此,理論上,一個IP數(shù)據(jù)包的"數(shù)據(jù)"部分,最長為65,515字節(jié)。前面說過,以太網(wǎng)數(shù)據(jù)包的"數(shù)據(jù)"部分,最長只有1500字節(jié)。因此,如果IP數(shù)據(jù)包超過了1500字節(jié),它就需要分割成幾個以太網(wǎng)數(shù)據(jù)包,分開發(fā)送了。
4、ARP協(xié)議 關于"網(wǎng)絡層",還有最后一點需要說明。
因為IP數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包里發(fā)送的,所以我們必須同時知道兩個地址,一個是對方的MAC地址,另一個是對方的IP地址。通常情況下,對方的IP地址是已知的(后文會解釋),但是我們不知道它的MAC地址。
所以,我們需要一種機制,能夠從IP地址得到MAC地址。
這里又可以分成兩種情況。第一種情況,如果兩臺主機不在同一個子網(wǎng)絡,那么事實上沒有辦法得到對方的MAC地址,只能把數(shù)據(jù)包傳送到兩個子網(wǎng)絡連接處的"網(wǎng)關"(gateway),讓網(wǎng)關去處理。
第二種情況,如果兩臺主機在同一個子網(wǎng)絡,那么我們可以用ARP協(xié)議,得到對方的MAC地址。ARP協(xié)議也是發(fā)出一個數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中),其中包含它所要查詢主機的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個"廣播"地址。它所在子網(wǎng)絡的每一臺主機,都會收到這個數(shù)據(jù)包,從中取出IP地址,與自身的IP地址進行比較。如果兩者相同,都做出回復,向對方報告自己的MAC地址,否則就丟棄這個包。
總之,有了ARP協(xié)議之后,我們就可以得到同一個子網(wǎng)絡內的主機MAC地址,可以把數(shù)據(jù)包發(fā)送到任意一臺主機之上了。
五、傳輸層 1、傳輸層的由來 有了MAC地址和IP地址,我們已經(jīng)可以在互聯(lián)網(wǎng)上任意兩臺主機上建立通信。
接下來的問題是,同一臺主機上有許多程序都需要用到網(wǎng)絡,比如,你一邊瀏覽網(wǎng)頁,一邊與朋友在線聊天。當一個數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)來的時候,你怎么知道,它是表示網(wǎng)頁的內容,還是表示在線聊天的內容?
也就是說,我們還需要一個參數(shù),表示這個數(shù)據(jù)包到底供哪個程序(進程)使用。這個參數(shù)就叫做“端口”(port),它其實是每一個使用網(wǎng)卡的程序的編號。每個數(shù)據(jù)包都發(fā)到主機的特定端口,所以不同的程序就能取到自己所需要的數(shù)據(jù)。
“端口”是0到65535之間的一個整數(shù),正好16個二進制位。0到1023的端口被系統(tǒng)占用,用戶只能選用大于1023的端口。不管是瀏覽網(wǎng)頁還是在線聊天,應用程序會隨機選用一個端口,然后與服務器的相應端口聯(lián)系。
“傳輸層”的功能,就是建立“端口到端口”的通信。相比之下,“網(wǎng)絡層”的功能是建立“主機到主機”的通信。只要確定主機和端口,我們就能實現(xiàn)程序之間的交流。因此,Unix系統(tǒng)就把主機+端口,叫做“套接字”(socket)。有了它,就可以進行網(wǎng)絡應用程序開發(fā)了。
2、UDP協(xié)議 現(xiàn)在,我們必須在數(shù)據(jù)包中加入端口信息,這就需要新的協(xié)議。最簡單的實現(xiàn)叫做UDP協(xié)議,它的格式幾乎就是在數(shù)據(jù)前面,加上端口號。
UDP數(shù)據(jù)包,也是由"標頭"和"數(shù)據(jù)"兩部分組成。
“標頭”部分主要定義了發(fā)出端口和接收端口,“數(shù)據(jù)”部分就是具體的內容。然后,把整個UDP數(shù)據(jù)包放入IP數(shù)據(jù)包的"數(shù)據(jù)"部分,而前面說過,IP數(shù)據(jù)包又是放在以太網(wǎng)數(shù)據(jù)包之中的,所以整個以太網(wǎng)數(shù)據(jù)包現(xiàn)在變成了下面這樣:
UDP數(shù)據(jù)包非常簡單,"標頭"部分一共只有8個字節(jié),總長度不超過65,535字節(jié),正好放進一個IP數(shù)據(jù)包。
3、TCP協(xié)議 UDP協(xié)議的優(yōu)點是比較簡單,容易實現(xiàn),但是缺點是可靠性較差,一旦數(shù)據(jù)包發(fā)出,無法知道對方是否收到。
為了解決這個問題,提高網(wǎng)絡可靠性,TCP協(xié)議就誕生了。這個協(xié)議非常復雜,但可以近似認為,它就是有確認機制的UDP協(xié)議,每發(fā)出一個數(shù)據(jù)包都要求確認。如果有一個數(shù)據(jù)包遺失,就收不到確認,發(fā)出方就知道有必要重發(fā)這個數(shù)據(jù)包了。
因此,TCP協(xié)議能夠確保數(shù)據(jù)不會遺失。它的缺點是過程復雜、實現(xiàn)困難、消耗較多的資源。
TCP數(shù)據(jù)包和UDP數(shù)據(jù)包一樣,都是內嵌在IP數(shù)據(jù)包的"數(shù)據(jù)"部分。TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長,但是為了保證網(wǎng)絡的效率,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,以確保單個TCP數(shù)據(jù)包不必再分割。
六、應用層 應用程序收到"傳輸層"的數(shù)據(jù),接下來就要進行解讀。由于互聯(lián)網(wǎng)是開放架構,數(shù)據(jù)來源五花八門,必須事先規(guī)定好格式,否則根本無法解讀。
“應用層”的作用,就是規(guī)定應用程序的數(shù)據(jù)格式。 舉例來說,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),比如Email、WWW、FTP等等。那么,必須有不同協(xié)議規(guī)定電子郵件、網(wǎng)頁、FTP數(shù)據(jù)的格式,這些應用程序協(xié)議就構成了“應用層”。
這是最高的一層,直接面對用戶。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的"數(shù)據(jù)"部分。因此,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣:
以上便是互聯(lián)網(wǎng)的五層結構,自下而上全部講完了。這是從系統(tǒng)的角度,解釋互聯(lián)網(wǎng)是如何構成的。下面億企邦再從用戶的角度,自上而下看看這個結構是如何發(fā)揮作用,完成一次網(wǎng)絡數(shù)據(jù)交換的。
七、數(shù)據(jù)包的結構 先對前面的內容,做一個小結。
我們已經(jīng)知道,網(wǎng)絡通信就是交換數(shù)據(jù)包。電腦A向電腦B發(fā)送一個數(shù)據(jù)包,后者收到了,回復一個數(shù)據(jù)包,從而實現(xiàn)兩臺電腦之間的通信。數(shù)據(jù)包的結構,基本上是下面這樣:
發(fā)送這個包,需要知道兩個地址:
* 對方的MAC地址
* 對方的IP地址
有了這兩個地址,數(shù)據(jù)包才能準確送到接收者手中。但是,前面說過,MAC地址有局限性,如果兩臺電腦不在同一個子網(wǎng)絡,就無法知道對方的MAC地址,必須通過網(wǎng)關(gateway)轉發(fā)。
上圖中,1號電腦要向4號電腦發(fā)送一個數(shù)據(jù)包。它先判斷4號電腦是否在同一個子網(wǎng)絡,結果發(fā)現(xiàn)不是(后文介紹判斷方法),于是就把這個數(shù)據(jù)包發(fā)到網(wǎng)關A。網(wǎng)關A通過路由協(xié)議,發(fā)現(xiàn)4號電腦位于子網(wǎng)絡B,又把數(shù)據(jù)包發(fā)給網(wǎng)關B,網(wǎng)關B再轉發(fā)到4號電腦。
1號電腦把數(shù)據(jù)包發(fā)到網(wǎng)關A,必須知道網(wǎng)關A的MAC地址。所以,數(shù)據(jù)包的目標地址,實際上分成兩種情況:
發(fā)送數(shù)據(jù)包之前,電腦必須判斷對方是否在同一個子網(wǎng)絡,然后選擇相應的MAC地址。接下來,我們就來看一下,實際使用中,這個過程是怎么完成的。
八、用戶的上網(wǎng)設置 1、靜態(tài)IP地址 你買了一臺新電腦,插上網(wǎng)線,開機,這時電腦能夠上網(wǎng)嗎?顯示光有這些還是不夠的。
所以你還必須做一些設置。有時,管理員(或者ISP)會告訴你下面四個參數(shù),你把它們填入操作系統(tǒng),計算機就能連上網(wǎng)了:
* 本機的IP地址
* 子網(wǎng)掩碼
* 網(wǎng)關的IP地址
* DNS的IP地址
下圖是Windows系統(tǒng)的設置窗口。
這四個參數(shù)缺一不可,后文會解釋為什么需要知道它們才能上網(wǎng)。由于它們是給定的,計算機每次開機,都會分到同樣的IP地址,所以這種情況被稱作“靜態(tài)IP地址上網(wǎng)”。
但是,這樣的設置很專業(yè),普通用戶望而生畏,而且如果一臺電腦的IP地址保持不變,其他電腦就不能使用這個地址,不夠靈活。出于這兩個原因,大多數(shù)用戶使用“動態(tài)IP地址上網(wǎng)”。
2、動態(tài)IP地址 所謂“動態(tài)IP地址”,指計算機開機后,會自動分配到一個IP地址,不用人為設定。它使用的協(xié)議叫做DHCP協(xié)議。
這個協(xié)議規(guī)定,每一個子網(wǎng)絡中,有一臺計算機負責管理本網(wǎng)絡的所有IP地址,它叫做“DHCP服務器”。新的計算機加入網(wǎng)絡,必須向“DHCP服務器”發(fā)送一個"DHCP請求"數(shù)據(jù)包,申請IP地址和相關的網(wǎng)絡參數(shù)。
前面說過,如果兩臺計算機在同一個子網(wǎng)絡,必須知道對方的MAC地址和IP地址,才能發(fā)送數(shù)據(jù)包。但是,新加入的計算機不知道這兩個地址,怎么發(fā)送數(shù)據(jù)包呢?
DHCP協(xié)議做了一些巧妙的規(guī)定。
3、DHCP協(xié)議 首先,它是一種應用層協(xié)議,建立在UDP協(xié)議之上,所以整個數(shù)據(jù)包是這樣的:
(1)、最前面的“以太網(wǎng)標頭”,設置發(fā)出方(本機)的MAC地址和接收方(DHCP服務器)的MAC地址。前者就是本機網(wǎng)卡的MAC地址,后者這時不知道,就填入一個廣播地址:FF-FF-FF-FF-FF-FF。
(2)、后面的“IP標頭”,設置發(fā)出方的IP地址和接收方的IP地址。這時,對于這兩者,本機都不知道。于是,發(fā)出方的IP地址就設為0.0.0.0,接收方的IP地址設為255.255.255.255。
(3)、最后的“UDP標頭”,設置發(fā)出方的端口和接收方的端口。這一部分是DHCP協(xié)議規(guī)定好的,發(fā)出方是68端口,接收方是67端口。
這個數(shù)據(jù)包構造完成后,就可以發(fā)出了。以太網(wǎng)是廣播發(fā)送,同一個子網(wǎng)絡的每臺計算機都收到了這個包。因為接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是發(fā)給誰的,所以每臺收到這個包的計算機,還必須分析這個包的IP地址,才能確定是不是發(fā)給自己的。當看到發(fā)出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服務器知道"這個包是發(fā)給我的",而其他計算機就可以丟棄這個包。
接下來,DHCP服務器讀出這個包的數(shù)據(jù)內容,分配好IP地址,發(fā)送回去一個"DHCP響應"數(shù)據(jù)包。這個響應包的結構也是類似的,以太網(wǎng)標頭的MAC地址是雙方的網(wǎng)卡地址,IP標頭的IP地址是DHCP服務器的IP地址(發(fā)出方)和255.255.255.255(接收方),UDP標頭的端口是67(發(fā)出方)和68(接收方),分配給請求端的IP地址和本網(wǎng)絡的具體參數(shù)則包含在Data部分。
新加入的計算機收到這個響應包,于是就知道了自己的IP地址、子網(wǎng)掩碼、網(wǎng)關地址、DNS服務器等等參數(shù)。
4、上網(wǎng)的設置 這個部分,需要記住的就是一點:不管是"靜態(tài)IP地址"還是"動態(tài)IP地址",電腦上網(wǎng)的首要步驟,是確定四個參數(shù)。這四個值很重要,值得重復一遍:
* 本機的IP地址
* 子網(wǎng)掩碼
* 網(wǎng)關的IP地址
* DNS的IP地址
有了這幾個數(shù)值,電腦就可以上網(wǎng)“沖浪”了。接下來,我們來看一個實例,當用戶訪問網(wǎng)頁的時候,互聯(lián)網(wǎng)協(xié)議是怎么運作的。
九、實例解讀:如何訪問網(wǎng)頁? 1、本機參數(shù) 我們假定,經(jīng)過上一節(jié)的步驟,用戶設置好了自己的網(wǎng)絡參數(shù):
* 本機的IP地址:192.168.1.100
* 子網(wǎng)掩碼:255.255.255.0
* 網(wǎng)關的IP地址:192.168.1.1
* DNS的IP地址:8.8.8.8
然后他打開瀏覽器,比如我們想要訪問億企邦,就在地址欄輸入了網(wǎng)址:www.mahaixiang.cn
這意味著,瀏覽器要向Google發(fā)送一個網(wǎng)頁請求的數(shù)據(jù)包。
2、DNS協(xié)議 我們知道,發(fā)送數(shù)據(jù)包,必須要知道對方的IP地址。但是,現(xiàn)在,我們只知道網(wǎng)址www.mahaixiang.cn,不知道它的IP地址。
DNS協(xié)議可以幫助我們,將這個網(wǎng)址轉換成IP地址。已知DNS服務器為8.8.8.8,于是我們向這個地址發(fā)送一個DNS數(shù)據(jù)包(53端口)。
然后,DNS服務器做出響應,告訴我們億企邦的IP地址是172.194.72.105。于是,我們知道了對方的IP地址。
3、子網(wǎng)掩碼 接下來,我們要判斷,這個IP地址是不是在同一個子網(wǎng)絡,這就要用到子網(wǎng)掩碼。
已知子網(wǎng)掩碼是255.255.255.0,本機用它對自己的IP地址192.168.1.100,做一個二進制的AND運算(兩個數(shù)位都為1,結果為1,否則為0),計算結果為192.168.1.0;然后對億企邦的IP地址172.194.72.105也做一個AND運算,計算結果為172.194.72.0。這兩個結果不相等,所以結論是,億企邦與本機不在同一個子網(wǎng)絡。
因此,我們要向億企邦發(fā)送數(shù)據(jù)包,必須通過網(wǎng)關192.168.1.1轉發(fā),也就是說,接收方的MAC地址將是網(wǎng)關的MAC地址。
4、應用層協(xié)議 瀏覽網(wǎng)頁用的是HTTP協(xié)議,它的整個數(shù)據(jù)包構造是這樣的:
HTTP部分的內容,類似于下面這樣:
GET / HTTP/1.1
Host: www.mahaixiang.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ......
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: ... ...
我們假定這個部分的長度為4960字節(jié),它會被嵌在TCP數(shù)據(jù)包之中。
5、TCP協(xié)議 TCP數(shù)據(jù)包需要設置端口,接收方(Google)的HTTP端口默認是80,發(fā)送方(本機)的端口是一個隨機生成的1024-65535之間的整數(shù),假定為51775。
TCP數(shù)據(jù)包的標頭長度為20字節(jié),加上嵌入HTTP的數(shù)據(jù)包,總長度變?yōu)?980字節(jié)。
6、IP協(xié)議 然后,TCP數(shù)據(jù)包再嵌入IP數(shù)據(jù)包。IP數(shù)據(jù)包需要設置雙方的IP地址,這是已知的,發(fā)送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。
IP數(shù)據(jù)包的標頭長度為20字節(jié),加上嵌入的TCP數(shù)據(jù)包,總長度變?yōu)?000字節(jié)。
7、以太網(wǎng)協(xié)議 最后,IP數(shù)據(jù)包嵌入以太網(wǎng)數(shù)據(jù)包。以太網(wǎng)數(shù)據(jù)包需要設置雙方的MAC地址,發(fā)送方為本機的網(wǎng)卡MAC地址,接收方為網(wǎng)關192.168.1.1的MAC地址(通過ARP協(xié)議得到)。
以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分,最大長度為1500字節(jié),而現(xiàn)在的IP數(shù)據(jù)包長度為5000字節(jié)。因此,IP數(shù)據(jù)包必須分割成四個包。因為每個包都有自己的IP標頭(20字節(jié)),所以四個包的IP數(shù)據(jù)包的長度分別為1500、1500、1500、560。
8、服務器端響應 經(jīng)過多個網(wǎng)關的轉發(fā),Google的服務器172.194.72.105,收到了這四個以太網(wǎng)數(shù)據(jù)包。
根據(jù)IP標頭的序號,Google將四個包拼起來,取出完整的TCP數(shù)據(jù)包,然后讀出里面的"HTTP請求",接著做出"HTTP響應",再用TCP協(xié)議發(fā)回來。
本機收到HTTP響應以后,就可以將網(wǎng)頁顯示出來,完成一次網(wǎng)絡通信。
以上這個例子就是訪問網(wǎng)頁整個流程,雖然經(jīng)過了簡化,但它大致上也已經(jīng)反映了互聯(lián)網(wǎng)協(xié)議的整個通信過程。
億企邦知識擴展——互聯(lián)網(wǎng)的發(fā)展: 互聯(lián)網(wǎng)始于1969年的美國,又稱因特網(wǎng)。是美軍在ARPA(阿帕網(wǎng),美國國防部研究計劃署)制定的協(xié)定下將美國西南部的大學UCLA(加利福尼亞大學洛杉磯分校)、Stanford ResearchInstitute(斯坦福大學研究學院)、UCSB(加利福尼亞大學)和UniversityofUtah(猶他州大學)的四臺主要的計算機連接起來。這個協(xié)定由劍橋大學的BBN和MA執(zhí)行,在1969年12月開始聯(lián)機。
1978年,UUCP(UNIX和UNIX拷貝協(xié)議)在貝爾實驗室被提出來,1979年,在UUCP的基礎上新聞組網(wǎng)絡系統(tǒng)發(fā)展起來。新聞組(集中某一主題的討論組)緊跟著發(fā)展起來,它為在全世界范圍內交換信息提供了一個新的方法。然而,新聞組并不認為是互聯(lián)網(wǎng)的一部分,因為它并不共享TCP/IP協(xié)議,它連接著遍布世界的UNIX系統(tǒng),并且很多互聯(lián)網(wǎng)站點都充分地利用新聞組。新聞組是網(wǎng)絡世界發(fā)展中的非常重大的一部分。
1989年,在普及互聯(lián)網(wǎng)應用的歷史上又一個重大的事件發(fā)生了。TimBerners和其他在歐洲粒子物理實驗室的人----這些人在歐洲粒子物理研究所非常出名,提出了一個分類互聯(lián)網(wǎng)信息的協(xié)議。這個協(xié)議,1991年后稱為WorldWideWeb,基于超文本協(xié)議??在一個文字中嵌入另一段文字的-連接的系統(tǒng),當你閱讀這些頁面的時候,你可以隨時用他們選擇一段文字鏈接。盡管它出現(xiàn)在gopher之前,但發(fā)展十分緩慢。
由于最開始互聯(lián)網(wǎng)是由政府部門投資建設的,所以它最初只是限于研究部門、學校和政府部門使用。除了以直接服務于研究部門和學校的商業(yè)應用之外,其它的商業(yè)行為是不允許的。90年代初,當獨立的商業(yè)網(wǎng)絡開始發(fā)展起來,這種局面才被打破。這使得從一個商業(yè)站點發(fā)送信息到另一個商業(yè)站點而不經(jīng)過政府資助的網(wǎng)絡中樞成為可能。
1991年,第一個連接互聯(lián)網(wǎng)的友好接口在Minnesota大學被開發(fā)出來。當時學校只是想開發(fā)一個簡單的菜單系統(tǒng)可以通過局域網(wǎng)訪問學校校園網(wǎng)上的文件和信息。緊跟著大型主機的信徒和支持客戶-服務器體系結構的擁護者們的爭論開始了。開始時大型主機系統(tǒng)的追隨者占據(jù)了上風,但自從客戶-服務器體系結構的倡導者宣稱他們可以很快建立起一個原型系統(tǒng)之后,他們不得不承認失敗??蛻?服務器體系結構的倡導者們很快作了一個先進的示范系統(tǒng),這個示范系統(tǒng)叫做Gopher。這個Gopher被證明是非常好用的,之后的幾年里全世界范圍內出現(xiàn)10000多個Gopher。它不需要UNIX和計算機體系結構的知識。在一個Gopher里,你只需要敲入一個數(shù)字選擇你想要的菜單選項即可。今天你可以用theUofMinnesotagopher選擇全世界范圍內的所有Gopher系統(tǒng)。