摘要:構(gòu)成數(shù)據(jù)鏈路數(shù)據(jù)單元數(shù)據(jù)幀或幀,并對幀定界同步收發(fā)順序的控制。以太網(wǎng)規(guī)定,一組電信號構(gòu)成一個數(shù)據(jù)包,叫做幀。因此,整個幀最短為字節(jié),最長為字節(jié)。協(xié)議規(guī)定網(wǎng)絡(luò)地址的協(xié)議,叫做協(xié)議?,F(xiàn)在廣泛采用的是協(xié)議第四版,簡稱。
前言
勞于讀書,逸于作文。
原文地址:internet協(xié)議入門
博主博客地址:Damonare的個人博客
博主之前寫過一篇博客:網(wǎng)絡(luò)協(xié)議分析,在這篇博客里通過抓包,具體的分析了不同網(wǎng)絡(luò)協(xié)議的傳送的數(shù)據(jù)和傳送的方式。而此篇博客則用來作為一個大綱式的內(nèi)容,按照層級劃分,逐步介紹各層級的協(xié)議以及他們所起的作用。若有錯誤之處,歡迎批評指正。
正文 1.概述互聯(lián)網(wǎng)的實現(xiàn),分成好幾層。每一層都有自己的功能,就像建筑物一樣,每一層都靠下一層支持。
1.1 模型劃分首先我們需要明白的事互聯(lián)網(wǎng)的實現(xiàn)是分層級的,那么這個層級的劃分根據(jù)不同的模型又有一些不同。其中又有兩個模型的劃分是我們最常見到的,一個是OSI七層劃分,另一個是TCP/IP五層劃分。他們分別把互聯(lián)網(wǎng)分成了七層和五層。
OSI和TCP/IP模型是很基礎(chǔ)但又非常重要的網(wǎng)絡(luò)基礎(chǔ)知識
OSI七層模型
OSI的層 | 功能 | TCP/IP協(xié)議族 |
---|---|---|
應(yīng)用層 | 文件傳輸,電子郵件,文件服務(wù),虛擬終端 | TFTP,HTTP,SNMP,F(xiàn)TP,SMTP,DNS,Telnet |
表示層 | 數(shù)據(jù)格式化,代碼轉(zhuǎn)換,數(shù)據(jù)加密 | 沒有協(xié)議 |
會話層 | 解除或建立與別的接點的聯(lián)系 | 沒有協(xié)議 |
傳輸層 | 提供端對端的接口 | TCP,UDP |
網(wǎng)絡(luò)層 | 為數(shù)據(jù)包選擇路由 | IP,ICMP,RIP,OSPF,BGP,IGMP |
數(shù)據(jù)鏈路層 | 傳輸有地址的幀以及錯誤檢測功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理層 | 以二進制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) | ISO2110,IEEE802,IEEE802.2 |
每一層都是為了完成一種功能。為了實現(xiàn)這些功能,就需要大家都遵守共同的規(guī)則。
大家都遵守的規(guī)則,就叫做"協(xié)議"(protocol)。
這個協(xié)議就是我們所說的互聯(lián)網(wǎng)協(xié)議(internet protocol),每一層都有若干個協(xié)議,他們共同構(gòu)成了我們所要講的互聯(lián)網(wǎng)協(xié)議。
由以上表格我們可以看出,在OSI七層協(xié)議模型里會話層和表示層是沒有協(xié)議的,這里我們?nèi)〉氖?b>TCP/IP模型,分成五層也比較容易解釋。
那么這五層又都是什么呢?從上到下分別是:
層級 | 網(wǎng)絡(luò)設(shè)備 |
---|---|
應(yīng)用層 | 也就是用戶使用的應(yīng)用了。 |
傳輸層 | 四層交換機、也有工作在四層的路由器 |
網(wǎng)絡(luò)層 | 路由器、三層交換機 |
數(shù)據(jù)鏈路層 | 網(wǎng)橋(現(xiàn)已很少使用)、以太網(wǎng)交換機(二層交換機)、網(wǎng)卡(其實網(wǎng)卡是一半工作在物理層、一半工作在數(shù)據(jù)鏈路層) |
物理層 | 網(wǎng)卡,光纖,CAT-5線,中繼器、集線器、還有我們通常說的雙絞線也工作在物理層 |
如上表格所示,最底下的一層叫做物理層(Physical Layer),最上面的一層叫做應(yīng)用層(Application Layer),中間的三層(自下而上)分別是數(shù)據(jù)鏈路層(Data Link Layer)、網(wǎng)絡(luò)層(Network Layer)和傳輸層(Transport Layer)。越下面的層,越靠近硬件;越上面的層,越靠近用戶。下面來介紹每一層的功能,著重介紹每一層的主要協(xié)議
2. 物理層物理層規(guī)定:為傳輸數(shù)據(jù)所需要的物理鏈路創(chuàng)建、維持、拆除,而提供具有機械的,電子的,功能的和規(guī)范的特性 ——物理層(維基百科)
上面維基百科對于物理層的解釋說白了就是要把電腦連在一塊,方法呢,可以用光纜、電纜、雙絞線、無線電波等方式。
物理層就是把電腦連接起來的物理手段。它主要規(guī)定了網(wǎng)絡(luò)的一些電氣特性,作用是負責傳送0和1的電信號。
3. 數(shù)據(jù)鏈路層3.1 定義在兩個網(wǎng)絡(luò)實體之間提供數(shù)據(jù)鏈路連接的創(chuàng)建、維持和釋放管理。構(gòu)成數(shù)據(jù)鏈路數(shù)據(jù)單元(frame:數(shù)據(jù)幀或幀),并對幀定界、同步、收發(fā)順序的控制。 ——數(shù)據(jù)鏈路層(維基百科)
上面說的網(wǎng)絡(luò)實體也就是我們?nèi)粘S玫降氖謾C電腦等聯(lián)網(wǎng)設(shè)備了,我們剛剛了解到不同網(wǎng)絡(luò)實體之間通過一些物理手段(光纜,雙絞線,無線電波等)連接在了一起,來進行傳輸0和1電信號。單純的傳輸0和1沒有任何意義,肯定是要規(guī)定電信號的解讀方式,多少個電信號是一組?每一組代表的意義又是什么?
這就是數(shù)據(jù)鏈路層的功能,規(guī)定這些電信號的分組方式。
3.2 以太網(wǎng)協(xié)議剛剛開始的時候,每一家公司都有自己的一套對于電信號的解讀方式,后來隨著時間的推移,一種叫做以太網(wǎng)(Ethernet)的協(xié)議,占據(jù)了主導(dǎo)地位。
以太網(wǎng)規(guī)定,一組電信號構(gòu)成一個數(shù)據(jù)包,叫做"幀"(Frame)。每一幀分成兩個部分:標頭(Head)和數(shù)據(jù)(Data)。
標頭包含數(shù)據(jù)包的一些說明項,比如發(fā)送者、接受者、數(shù)據(jù)類型等等;數(shù)據(jù)則是數(shù)據(jù)包的具體內(nèi)容。
標頭的長度,固定為18字節(jié)。數(shù)據(jù)的長度,最短為46字節(jié),最長為1500字節(jié)。因此,整個幀最短為64字節(jié),最長為1518字節(jié)。如果數(shù)據(jù)很長,就必須分割成多個幀進行發(fā)送。
3.3 MAC地址我想在日常上網(wǎng)過程中,最為熟悉的就是用一根網(wǎng)線連接端口和電腦了吧,網(wǎng)線連接電腦實際上是連接的這個玩意兒:
上面就是我們所說的網(wǎng)卡了,它在物理層和數(shù)據(jù)鏈路層兩個層級工作,正所謂能力越大責任越大,網(wǎng)卡的重要性自然不言而喻了。前面說,以太網(wǎng)規(guī)定每一個數(shù)據(jù)包都有一個標頭(Head)來說明發(fā)送者,接受者信息,數(shù)據(jù)類型等信息。而網(wǎng)卡就是以太網(wǎng)規(guī)定的來標明發(fā)送者和接受者信息的工具。
網(wǎng)卡的地址,就是數(shù)據(jù)包的發(fā)送地址和接收地址,這叫做MAC地址。
這個Mac地址自然就是發(fā)送者,接受者信息的了,通過這個每臺電腦獨一無二的地址計算機就能通過一些方式找到另一臺電腦了。每塊網(wǎng)卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,通常用12個十六進制數(shù)表示。有了MAC地址,就可以定位網(wǎng)卡和數(shù)據(jù)包的路徑了。
3.4 廣播我們現(xiàn)在有了網(wǎng)卡,也知道每一塊網(wǎng)卡都有一個世界上獨一無二的Mac地址,那發(fā)送者應(yīng)該怎么去找接受者這臺設(shè)備呢,換句話說發(fā)送者怎么才能知道接受者的Mac地址呢?這就需要另一個協(xié)議了叫做ARP協(xié)議,這個協(xié)議留在后面介紹。這里我們只需要知道,發(fā)送者必須要知道接受者的Mac地址才能準確的發(fā)送數(shù)據(jù)。
以太網(wǎng)采用了一種廣撒網(wǎng)的方式,發(fā)送者發(fā)送的數(shù)據(jù)包會發(fā)送給本網(wǎng)絡(luò)內(nèi)所有的計算機,然后由接收到數(shù)據(jù)包的計算機來判斷自己是不是接收方。
圖片來自維基百科廣播),如圖所示,紅色主機是發(fā)送方,綠色某一臺是接收方,數(shù)據(jù)包會發(fā)送給同一個子網(wǎng)絡(luò)的所有綠色主機,然后由綠色主機根據(jù)數(shù)據(jù)包的標頭來判斷自己是不是接收方。如果是,就接受這個包,不是則丟棄。這種發(fā)送數(shù)據(jù)的方式就是廣播。
綜上,有了對于數(shù)據(jù)包的定義,網(wǎng)卡的Mac地址,廣播的發(fā)送方式,數(shù)據(jù)鏈路層基本就算完整了,然后不同計算機之間就可以傳送數(shù)據(jù)了。
4.網(wǎng)絡(luò)層4.1 網(wǎng)絡(luò)層的產(chǎn)生網(wǎng)絡(luò)層使兩終端系統(tǒng)能夠互連且決定最佳路徑,并具有一定的擁塞控制和流量控制的能力。 ——網(wǎng)絡(luò)層(維基百科)
走到這里我們實現(xiàn)的只是在一個子網(wǎng)絡(luò)里傳送數(shù)據(jù)。但我們知道,互聯(lián)網(wǎng)實際上是由大大小小的子網(wǎng)絡(luò)組成的:
大到一個ISP(因特網(wǎng)服務(wù)提供商,國內(nèi)較大的比如移動電信等),小到一個公司的局域網(wǎng),正事這些大大小小的子網(wǎng)絡(luò)組成了龐大的互聯(lián)網(wǎng)體系。但實際上,廣播的方式只能在子網(wǎng)絡(luò)內(nèi)進行,不同子網(wǎng)絡(luò)之間廣播方式是行不通的。
因此我們需要一種方法能夠判斷兩臺主機是否在同一個子網(wǎng)絡(luò)之內(nèi),如果在同一個子網(wǎng)絡(luò)就以廣播的方式傳輸數(shù)據(jù),如果不在同一個子網(wǎng)絡(luò)就以路由的方式傳輸(路由是個比較大的概念,本文不涉及),關(guān)于路由協(xié)議的了解戳這里,MAC地址做不到這一點,它只和廠商有關(guān),和計算機所處的網(wǎng)絡(luò)并沒有關(guān)系。
這就導(dǎo)致了"網(wǎng)絡(luò)層"的誕生。它的作用是引進一套新的地址,使得我們能夠區(qū)分不同的計算機是否屬于同一個子網(wǎng)絡(luò)。這套地址就叫做"網(wǎng)絡(luò)地址",簡稱"網(wǎng)址"。
網(wǎng)址的出現(xiàn),使得每臺計算機都有了兩個地址,一個是出生就帶著不會改變的Mac地址,一個是后期網(wǎng)絡(luò)管理員分配的可變的網(wǎng)絡(luò)地址。網(wǎng)址判斷兩臺計算機是否在同一個子網(wǎng)絡(luò),Mac地址則是將數(shù)據(jù)準確的傳遞到目標計算機中。因此邏輯上可以判斷必定是先處理網(wǎng)絡(luò)地址,再處理Mac地址。
4.2 IP協(xié)議規(guī)定網(wǎng)絡(luò)地址的協(xié)議,叫做IP協(xié)議。它所定義的地址,就被稱為IP地址。
現(xiàn)在廣泛采用的是IP協(xié)議第四版,簡稱IPv4。這個版本規(guī)定,網(wǎng)絡(luò)地址由32個二進制位組成,IPV6則是64個二進制組成。
由于IPV6還沒有廣泛應(yīng)用,這里還是用IPV4講解。一般我們用分成四段(IPV6分成八段)的十進制數(shù)表示IP地址,從0.0.0.0一直到255.255.255.255。這個地址分成兩部分,前一部分是網(wǎng)絡(luò)部分,后一部分代表主機。But!!!網(wǎng)絡(luò)部分具體是前16位還是前24位,我們沒法從IP地址進行判斷,這是我們就需要另一參數(shù)叫做子網(wǎng)掩碼。
所謂"子網(wǎng)掩碼",就是表示子網(wǎng)絡(luò)特征的一個參數(shù)。它在形式上等同于IP地址,也是一個32位二進制數(shù)字,它的網(wǎng)絡(luò)部分全部為1,主機部分全部為0。比如,IP地址172.16.254.1,如果已知網(wǎng)絡(luò)部分是前24位,主機部分是后8位,那么子網(wǎng)絡(luò)掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
知道"子網(wǎng)掩碼",我們就能判斷,任意兩個IP地址是否處在同一個子網(wǎng)絡(luò)。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1,運算結(jié)果為1,否則為0),然后比較結(jié)果是否相同,如果是的話,就表明它們在同一個子網(wǎng)絡(luò)中,否則就不是。
比如,已知IP地址172.16.254.1和172.16.254.233的子網(wǎng)掩碼都是255.255.255.0,請問它們是否在同一個子網(wǎng)絡(luò)?兩者與子網(wǎng)掩碼分別進行AND運算,結(jié)果都是172.16.254.0,因此它們在同一個子網(wǎng)絡(luò)。
那么問題來了,IP地址放在哪里存儲呢?是的,我們可以直接存儲在前面提到的以太網(wǎng)數(shù)據(jù)包的Data部分。
IP地址長這樣:
"標頭"部分主要包括版本、長度、IP地址等信息,"數(shù)據(jù)"部分則是IP數(shù)據(jù)包的具體內(nèi)容。
現(xiàn)在把它加到以太網(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.3 ARP協(xié)議現(xiàn)在為止我們必須知道兩個地址,一個是IP地址,一個是Mac地址才能把數(shù)據(jù)發(fā)送到目標主機,那么IP地址是已知的(后文解釋),MAC地址怎么獲取呢?
我們需要一種能通過IP地址得知MAC地址的機制,這個極致就是ARP協(xié)議。
那么,這里又分成兩種情況,一種是兩臺計算機在同一個子網(wǎng)絡(luò),那么我們可以用ARP協(xié)議,得到對方的MAC地址。ARP協(xié)議也是發(fā)出一個數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中),其中包含它所要查詢主機的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個"廣播"地址。它所在子網(wǎng)絡(luò)的每一臺主機,都會收到這個數(shù)據(jù)包,從中取出IP地址,與自身的IP地址進行比較。如果兩者相同,都做出回復(fù),向?qū)Ψ綀蟾孀约旱腗AC地址,否則就丟棄這個包。
另一種情況是兩臺計算機不在同一個子網(wǎng)絡(luò),
那么事實上沒有辦法得到對方的MAC地址,只能把數(shù)據(jù)包傳送到兩個子網(wǎng)絡(luò)連接處的"網(wǎng)關(guān)"(gateway),讓網(wǎng)關(guān)(后文解釋)去處理。
這一層為止,如果目標主機和本機在同一個子網(wǎng)絡(luò),我們通過IP地址,子網(wǎng)掩碼比較得出在同一個子網(wǎng)絡(luò)的結(jié)果,在通過ARP協(xié)議得到目標主機的Mac地址,發(fā)送!Success!
如果目標主機和本機不在同一個子網(wǎng)絡(luò),我們通過IP地址,子網(wǎng)掩碼比較得出在同一個子網(wǎng)絡(luò)的結(jié)果,然后交給本網(wǎng)絡(luò)的網(wǎng)關(guān)A處理,網(wǎng)關(guān)A根據(jù)路由協(xié)議得到目標主機所在子網(wǎng)絡(luò)的網(wǎng)關(guān)B,網(wǎng)關(guān)B再通過IP地址判斷得出和目標主機在同一個子網(wǎng)絡(luò),然后再通過ARP協(xié)議獲取Mac地址,發(fā)送!Success!
5. 傳輸層5.1 傳輸層的產(chǎn)生該層的協(xié)議為應(yīng)用進程提供端到端的通信服務(wù)。它提供面向連接的數(shù)據(jù)流支持、可靠性、流量控制、多路復(fù)用等服務(wù)?!獋鬏攲樱ňS基百科)
我們現(xiàn)在成功的實現(xiàn)了主機和主機之間的通信,那么問題又來了,主機之間不同的程序該怎么區(qū)分這個數(shù)據(jù)是不是發(fā)送給自己的呢。要知道,當你正在QQ聊天的時候,微信發(fā)送過來的消息內(nèi)容呈現(xiàn)在了QQ界面,這會讓計算機懵逼的!太混亂了!
這個時候我們就需要一個新的參數(shù)了!這個參數(shù)就是端口。
可連接兩個或兩個以上不同之電路裝置使之能夠傳遞電子或任何形式訊號之裝置.——端口(維基百科)
它其實是每一個使用網(wǎng)卡的程序的編號。每個數(shù)據(jù)包都發(fā)到主機的特定端口,所以不同的程序就能取到自己所需要的數(shù)據(jù)。
不同的程序在計算機中所占用的端口是不同的,確切的說是不能相同的,否則就混亂了。比如,HTTP所占用的端口一般是80,HTTPS所占用的端口一般是443。
端口是0到65535之間的一個整數(shù),正好16個二進制位。0到1023的端口被系統(tǒng)占用,用戶只能選用大于1023的端口。不管是瀏覽網(wǎng)頁還是在線聊天,應(yīng)用程序會隨機選用一個端口,然后與服務(wù)器的相應(yīng)端口聯(lián)系。
確切的說,傳輸層實現(xiàn)的是端對端的服務(wù),網(wǎng)絡(luò)層實現(xiàn)的僅僅是主機到主機之間的服務(wù)。只要確定主機和端口,我們就能實現(xiàn)程序之間的交流。因此,Unix系統(tǒng)就把主機+端口,叫做"套接字"(socket)。
5.2 UDP協(xié)議現(xiàn)在又出了一個新的數(shù)據(jù),就是端口信息?,F(xiàn)在以太網(wǎng)數(shù)據(jù)包里已經(jīng)包括發(fā)送者,接受者信息,數(shù)據(jù)類型,IP地址數(shù)據(jù)包,UDp數(shù)據(jù)包。
UDP數(shù)據(jù)包同樣是由標頭和數(shù)據(jù)組成:
標頭部分主要定義了發(fā)出端口和接收端口,
數(shù)據(jù)部分定義了具體的內(nèi)容。然后把它放在IP地址數(shù)據(jù)包的數(shù)據(jù)部分,前面我們說過IP數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)里面的,那么現(xiàn)在整個以太網(wǎng)數(shù)據(jù)包就成了這樣:
UDP數(shù)據(jù)包非常簡單,"標頭"部分一共只有8個字節(jié),總長度不超過65,535字節(jié),一個IP數(shù)據(jù)包正好可以容納。
5.3 TCP協(xié)議為了解決這個問題,提高網(wǎng)絡(luò)可靠性,TCP協(xié)議就誕生了。這個協(xié)議非常復(fù)雜,但可以近似認為,它就是有確認機制的UDP協(xié)議,每發(fā)出一個數(shù)據(jù)包都要求確認。如果有一個數(shù)據(jù)包遺失,就收不到確認,發(fā)出方就知道有必要重發(fā)這個數(shù)據(jù)包了。
因此,TCP協(xié)議能夠確保數(shù)據(jù)不會遺失。它的缺點是過程復(fù)雜、實現(xiàn)困難、消耗較多的資源。
TCP數(shù)據(jù)包和UDP數(shù)據(jù)包一樣,都是內(nèi)嵌在IP數(shù)據(jù)包的"數(shù)據(jù)"部分。TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長,但是為了保證網(wǎng)絡(luò)的效率,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,以確保單個TCP數(shù)據(jù)包不必再分割。
關(guān)于TCP協(xié)議的三次握手和四次揮手過程博主在網(wǎng)絡(luò)協(xié)議分析這篇博客里有較為詳細的說明。
6. 應(yīng)用層6.1 應(yīng)用層介紹應(yīng)用層直接和應(yīng)用程序接口并提供常見的網(wǎng)絡(luò)應(yīng)用服務(wù)。 ——應(yīng)用層(維基百科)
應(yīng)用程序收到"傳輸層"的數(shù)據(jù),接下來就要進行解讀。由于互聯(lián)網(wǎng)是開放架構(gòu),數(shù)據(jù)來源五花八門,必須事先規(guī)定好格式,否則根本無法解讀。
"應(yīng)用層"的作用,就是規(guī)定應(yīng)用程序的數(shù)據(jù)格式。
舉例來說,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),比如Email、WWW、FTP等等。那么,必須有不同協(xié)議規(guī)定電子郵件、網(wǎng)頁、FTP數(shù)據(jù)的格式,這些應(yīng)用程序協(xié)議就構(gòu)成了"應(yīng)用層"。
這是最高的一層,直接面對用戶。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的"數(shù)據(jù)"部分。因此,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣:
上面買的坑改填了,我們前面說過,我們對于目標主機的IP地址肯定知道的,為什么呢?還有就是當兩臺計算機不在同一個子網(wǎng)絡(luò)的時候,我們需要通過本機所在子網(wǎng)絡(luò)的網(wǎng)關(guān)A,再通過路由協(xié)議得到目標主機子網(wǎng)絡(luò)的網(wǎng)關(guān)B,由網(wǎng)關(guān)B將我們要發(fā)送給目標主機的數(shù)據(jù)包發(fā)送給目標主機。那么,網(wǎng)關(guān)又是什么呢?
6.2 DNS協(xié)議我們都知道由于IP地址不方便記憶,我們創(chuàng)造了域名這個概念。
DNS(網(wǎng)域名稱系統(tǒng),Domain Name System,有時也簡稱為域名)是因特網(wǎng)的一項核心服務(wù),它作為可以將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使人更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的IP地址數(shù)串。
例如,damonare.cn是一個域名,和IP地址119.29.180.47相對應(yīng)。DNS就像是一個自動的電話號碼簿,我們可以直接撥打damonare的名字來代替電話號碼(IP地址)。我們直接調(diào)用網(wǎng)站的名字以后,DNS就會將便于人類使用的名字(如 damonare.cn)轉(zhuǎn)化成便于機器識別的IP地址(如119.29.180.47)。
已知DNS服務(wù)器為8.8.8.8(這個和IP地址一樣管理員告知或是通過自行設(shè)置的),于是我們向這個地址發(fā)送一個DNS數(shù)據(jù)包(53端口):
DNS服務(wù)器做出響應(yīng),告訴我們Google的IP地址是172.194.72.105。于是,我們知道了對方的IP地址。
6.2 網(wǎng)關(guān)網(wǎng)關(guān)要區(qū)別于路由器(由于歷史的原因,許多有關(guān)TCP/IP的文獻曾經(jīng)把網(wǎng)絡(luò)層使用的路由器(英語:Router)稱為網(wǎng)關(guān),在今天很多局域網(wǎng)采用都是路由來接入網(wǎng)絡(luò),因此現(xiàn)在通常指的網(wǎng)關(guān)就是路由器的IP),經(jīng)常在家庭中或者小型企業(yè)網(wǎng)絡(luò)中使用,用于連接局域網(wǎng)和Internet。
前面我們已經(jīng)說過發(fā)送以太網(wǎng)數(shù)據(jù)包,需要知道兩個地址:
對方的MAC地址
對方的IP地址
有了這兩個地址,數(shù)據(jù)包才能準確送到接收者手中。但是,前面說過,MAC地址有局限性,如果兩臺電腦不在同一個子網(wǎng)絡(luò),就無法知道對方的MAC地址,必須通過網(wǎng)關(guān)(gateway)轉(zhuǎn)發(fā)。
上圖中,1號電腦要向4號電腦發(fā)送一個數(shù)據(jù)包。它先判斷4號電腦是否在同一個子網(wǎng)絡(luò),結(jié)果發(fā)現(xiàn)不是(后文介紹判斷方法),于是就把這個數(shù)據(jù)包發(fā)到網(wǎng)關(guān)A。網(wǎng)關(guān)A通過路由協(xié)議,發(fā)現(xiàn)4號電腦位于子網(wǎng)絡(luò)B,又把數(shù)據(jù)包發(fā)給網(wǎng)關(guān)B,網(wǎng)關(guān)B再轉(zhuǎn)發(fā)到4號電腦。
6.3 DHCP協(xié)議新買的電腦通常你必須做一些設(shè)置,才能上網(wǎng),有時,管理員(或者ISP)會告訴你下面四個參數(shù),你把它們填入操作系統(tǒng),計算機就能連上網(wǎng)了:
本機的IP地址
子網(wǎng)掩碼
網(wǎng)關(guān)的IP地址
DNS的IP地址
由于它們是給定的,計算機每次開機,都會分到同樣的IP地址,所以這種情況被稱作"靜態(tài)IP地址上網(wǎng)"。如下圖Window靜態(tài)IP上網(wǎng)設(shè)置界面:
這樣的設(shè)置很專業(yè),但普通用戶望而生畏,而且如果一臺電腦的IP地址保持不變,其他電腦就不能使用這個地址,不夠靈活。出于這兩個原因,大多數(shù)用戶使用"動態(tài)IP地址上網(wǎng)"。
動態(tài)IP地址上網(wǎng)使用的協(xié)議就是DHCP協(xié)議,這個協(xié)議規(guī)定,每一個子網(wǎng)絡(luò)中,有一臺計算機負責管理本網(wǎng)絡(luò)的所有IP地址,它叫做"DHCP服務(wù)器"。新的計算機加入網(wǎng)絡(luò),必須向"DHCP服務(wù)器"發(fā)送一個"DHCP請求"數(shù)據(jù)包,申請IP地址和相關(guān)的網(wǎng)絡(luò)參數(shù)。
前面說過,如果兩臺計算機在同一個子網(wǎng)絡(luò),必須知道對方的MAC地址和IP地址,才能發(fā)送數(shù)據(jù)包。但是,新加入的計算機不知道這兩個地址,怎么發(fā)送數(shù)據(jù)包呢?
DHCP協(xié)議做了一些巧妙的規(guī)定。
首先DHCP協(xié)議是建立在UDP協(xié)議之上,所以整個數(shù)據(jù)包是這樣的:
(1).最前面的"以太網(wǎng)標頭",設(shè)置發(fā)出方(本機)的MAC地址和接收方(DHCP服務(wù)器)的MAC地址。前者就是本機網(wǎng)卡的MAC地址,后者這時不知道,就填入一個廣播地址:FF-FF-FF-FF-FF-FF。
(2).后面的"IP標頭",設(shè)置發(fā)出方的IP地址和接收方的IP地址。這時,對于這兩者,本機都不知道。于是,發(fā)出方的IP地址就設(shè)為0.0.0.0,接收方的IP地址設(shè)為255.255.255.255。
(3).最后的"UDP標頭",設(shè)置發(fā)出方的端口和接收方的端口。這一部分是DHCP協(xié)議規(guī)定好的,發(fā)出方是68端口,接收方是67端口。
這個數(shù)據(jù)包構(gòu)造完成后,就可以發(fā)出了。以太網(wǎng)是廣播發(fā)送,同一個子網(wǎng)絡(luò)的每臺計算機都收到了這個包。因為接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是發(fā)給誰的,所以每臺收到這個包的計算機,還必須分析這個包的IP地址,才能確定是不是發(fā)給自己的。當看到發(fā)出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服務(wù)器知道"這個包是發(fā)給我的",而其他計算機就可以丟棄這個包。
接下來,DHCP服務(wù)器讀出這個包的數(shù)據(jù)內(nèi)容,分配好IP地址,發(fā)送回去一個"DHCP響應(yīng)"數(shù)據(jù)包。這個響應(yīng)包的結(jié)構(gòu)也是類似的,以太網(wǎng)標頭的MAC地址是雙方的網(wǎng)卡地址,IP標頭的IP地址是DHCP服務(wù)器的IP地址(發(fā)出方)和255.255.255.255(接收方),UDP標頭的端口是67(發(fā)出方)和68(接收方),分配給請求端的IP地址和本網(wǎng)絡(luò)的具體參數(shù)則包含在Data部分。
新加入的計算機收到這個響應(yīng)包,于是就知道了自己的IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址、DNS服務(wù)器等等參數(shù)。
6.4 小結(jié)應(yīng)用層比較重要的協(xié)議還有大名鼎鼎的HTTP協(xié)議,這個在博主的網(wǎng)絡(luò)協(xié)議分析這篇博客里對于TCP/HTTP協(xié)議有較為詳細的分析,在這里就不多做介紹了。
后記通過整篇博客分析,我想整個互聯(lián)網(wǎng)的層級劃分就很清楚了,也應(yīng)該明白了數(shù)據(jù)是如何發(fā)送的,大概的過程就是如此,但互聯(lián)網(wǎng)協(xié)議浩如煙海究極一生可能也無法真正理解。此篇博客僅僅作為一個入門,也算是一個大致的思路。關(guān)于數(shù)據(jù)包數(shù)據(jù)具體的形式,路由,以及其他協(xié)議就需要讀者自己去進一步發(fā)掘理解了。
參考文章:
互聯(lián)網(wǎng)協(xié)議入門(一)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80781.html
摘要:本文面向以太坊智能合約應(yīng)用程序開發(fā)人員,并討論如何在密碼保護后,安全地運行你的以太坊節(jié)點,以便通過進行安全輸出。以太坊,主要是針對工程師使用進行區(qū)塊鏈以太坊開發(fā)的詳解。 本文面向以太坊智能合約應(yīng)用程序開發(fā)人員,并討論如何在密碼保護后,安全地運行你的以太坊節(jié)點,以便通過Internet進行安全輸出。 Go Ethereum(geth)是以太坊節(jié)點最受歡迎的軟件。其他流行的以太坊實現(xiàn)是Pa...
摘要:本文面向以太坊智能合約應(yīng)用程序開發(fā)人員,并討論如何在密碼保護后,安全地運行你的以太坊節(jié)點,以便通過進行安全輸出。以太坊,主要是針對工程師使用進行區(qū)塊鏈以太坊開發(fā)的詳解。 本文面向以太坊智能合約應(yīng)用程序開發(fā)人員,并討論如何在密碼保護后,安全地運行你的以太坊節(jié)點,以便通過Internet進行安全輸出。 Go Ethereum(geth)是以太坊節(jié)點最受歡迎的軟件。其他流行的以太坊實現(xiàn)是Pa...
摘要:本文面向以太坊智能合約應(yīng)用程序開發(fā)人員,并討論如何在密碼保護后,安全地運行你的以太坊節(jié)點,以便通過進行安全輸出。以太坊,主要是針對工程師使用進行區(qū)塊鏈以太坊開發(fā)的詳解。 本文面向以太坊智能合約應(yīng)用程序開發(fā)人員,并討論如何在密碼保護后,安全地運行你的以太坊節(jié)點,以便通過Internet進行安全輸出。 Go Ethereum(geth)是以太坊節(jié)點最受歡迎的軟件。其他流行的以太坊實現(xiàn)是Pa...
摘要:中主要是使用語言。將的動態(tài)功能和標準的安全性引入大型網(wǎng)絡(luò)應(yīng)用的開發(fā)集成部署和管理之中。提供了一個圖形界面的管理工具,稱為信息服務(wù)管理器,可用于監(jiān)視配置和控制服務(wù)。 一、基本概念 1.1、WEB開發(fā)的相關(guān)知識 WEB,在英語中web即表示網(wǎng)頁的意思,它用于表示Internet主機上供外界訪問的資源。 Internet上供外界訪問的Web資源分為: 靜態(tài)web資源(如html 頁面...
閱讀 2914·2021-10-26 09:49
閱讀 3254·2021-10-14 09:42
閱讀 2102·2021-09-13 10:31
閱讀 2621·2019-08-30 11:13
閱讀 2986·2019-08-29 16:31
閱讀 1116·2019-08-29 13:58
閱讀 1880·2019-08-29 12:12
閱讀 3624·2019-08-26 13:48