互連網協議入門

來源:互聯網
上載者:User

標籤:

互連網協議入門(一) http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

互連網協議入門(二) http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

 

1.  5層模型

 

"實體層",它就是把電腦串連起來的物理手段。它主要規定了網路的一些電氣特性,作用是負責傳送0和1的電訊號。

  

 

"連結層"的功能,它在"實體層"的上方,確定了0和1的分組方式。

 

乙太網路幀結構 http://www.cnblogs.com/mylinux/p/5553242.html

IP資料包結構 http://www.cnblogs.com/mylinux/p/3988928.html

TCP資料包結構  http://www.cnblogs.com/mylinux/p/5552738.html

 

2. ARP協議: 從IP地址得到MAC地址。

因為IP資料包是放在乙太網路資料包裡發送的,所以我們必須同時知道兩個地址,一個是對方的MAC地址,另一個是對方的IP地址。通常情況下,對方的IP地址是已知的(後文會解釋),但是我們不知道它的MAC地址。

 

第一種情況,如果兩台主機不在同一個子網路,那麼事實上沒有辦法得到對方的MAC地址,只能把資料包傳送到兩個子網路連接處的"網關"(gateway),讓網關去處理。

第二種情況,如果兩台主機在同一個子網路,那麼我們可以用ARP協議,得到對方的MAC地址。ARP協議也是發出一個資料包(包含在乙太網路資料包 中),其中包含它所要查詢主機的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個"廣播"地址。它所在子網 絡的每一台主機,都會收到這個資料包,從中取出IP地址,與自身的IP地址進行比較。如果兩者相同,都做出回複,向對方報告自己的MAC地址,否則就丟棄 這個包。

總之,有了ARP協議之後,我們就可以得到同一個子網路內的主機MAC地址,可以把資料包發送到任意一台主機之上了。

 

3. DHCP協議

首先,它是一種應用程式層協議,建立在UDP協議之上,所以整個資料包是這樣的:

  (1)最前面的"乙太網路標題",設定發出方(本機)的MAC地址和接收方(DHCP伺服器)的MAC地址。前者就是本機網卡的MAC地址,後者這時不知道,就填入一個廣播位址:FF-FF-FF-FF-FF-FF。

  (2)後面的"IP標題",設定發出方的IP地址和接收方的IP地址。這時,對於這兩者,本機都不知道。於是,發出方的IP地址就設為0.0.0.0,接收方的IP地址設為255.255.255.255。

  (3)最後的"UDP標題",設定發出方的連接埠和接收方的連接埠。這一部分是DHCP協議規定好的,發出方是68連接埠,接收方是67連接埠。

這個資料包構造完成後,就可以發出了。乙太網路是廣播發送,同一個子網路的每台電腦都收到了這個包。因為接收方的MAC地址是FF-FF-FF- FF-FF-FF,看不出是發給誰的,所以每台收到這個包的電腦,還必須分析這個包的IP地址,才能確定是不是發給自己的。當看到發出方IP地址是 0.0.0.0,接收方是255.255.255.255,於是DHCP伺服器知道"這個包是發給我的",而其他電腦就可以丟棄這個包。

接下來,DHCP伺服器讀出這個包的資料內容,分配好IP地址,發送回去一個"DHCP響應"資料包。這個響應包的結構也是類似的,乙太網路標題的 MAC地址是雙方的網卡地址,IP標題的IP地址是DHCP伺服器的IP地址(發出方)和255.255.255.255(接收方),UDP標題的連接埠是 67(發出方)和68(接收方),分配給請求端的IP地址和本網路的具體參數則包含在Data部分。

新加入的電腦收到這個響應包,於是就知道了自己的IP地址、子網路遮罩、網關地址、DNS伺服器等等參數。

 

4. 上網設定:小結

這個部分,需要記住的就是一點:不管是"靜態IP地址"還是"動態IP地址",電腦上網的首要步驟,是確定四個參數。這四個值很重要,值得重複一遍:

  * 原生IP地址
  * 子網路遮罩
  * 網關的IP地址
  * DNS的IP地址

有了這幾個數值,電腦就可以上網"衝浪"了。

 

5. DNS 原理入門 http://www.ruanyifeng.com/blog/

DNS伺服器的IP地址,有可能是動態,每次上網時由網關分配,這叫做DHCP機制;也有可能是事先指定的固定地址。Linux系統裡面,DNS伺服器的IP地址儲存在/etc/resolv.conf檔案。

5.1 工具軟體dig可以顯示整個DNS查詢過程。

    
$ dig math.stackexchange.com
dig命令的+trace參數可以顯示DNS的整個分級查詢過程。
    $ dig +trace math.stackexchange.com
dig命令可以單獨查看每頂層網域的NS記錄。
    $ dig ns com
    $ dig ns stackexchange.com
+short參數可以顯示簡化的結果。
    $ dig +short ns com
    $ dig +short ns stackexchange.com

 

5.2 網域名稱的層級


DNS伺服器怎麼會知道每個網域名稱的IP地址呢?答案是分級查詢。
請仔細dig的結果,每個網域名稱的尾部都多了一個點。

比如,網域名稱math.stackexchange.com顯示為math.stackexchange.com.。這不是疏忽,而是所有網域名稱的尾部,實際上都有一個根網域名稱。

舉例來說,www.example.com真正的網域名稱是www.example.com.root,簡寫為www.example.com.。因為,根網域名稱.root對於所有網域名稱都是一樣的,所以平時是省略的。

根網域名稱的下一級,叫做"頂級網域名稱"(top-level domain,縮寫為TLD),比如.com、.net;再下一級叫做"次級網域名稱"(second-level domain,縮寫為SLD),比如www.example.com裡面的.example,這頂層網域是使用者可以註冊的;再下一級是主機名稱(host),比如www.example.com裡面的www,又稱為"第三層網域名",這是使用者在自己的域裡面為伺服器分配的名稱,是使用者可以任意分配的。

總結一下,網域名稱的層級結構如下。

主機名稱.次級網域名稱.頂級網域名稱.根網域名稱# 即host.sld.tld.root

  DNS伺服器根據網域名稱的層級,進行分級查詢。

所謂"分級查詢",就是從根網域名稱開始,依次查詢每頂層網域的NS記錄,直到查到最終的IP地址,過程大致如下。

    1. 從"根網域名稱伺服器"查到"頂級網域名稱伺服器"的NS記錄和A記錄(IP地址)

    2. 從"頂級網域名稱伺服器"查到"次級網域名稱伺服器"的NS記錄和A記錄(IP地址)

    3. 從"次級網域名稱伺服器"查出"主機名稱"的IP地址

仔細看上面的過程,你可能發現了,沒有提到DNS伺服器怎麼知道"根網域名稱伺服器"的IP地址。回答是"根網域名稱伺服器"的NS記錄和IP地址一般是不會變化的,所以內建在DNS伺服器裡面。

 

5.3 其他DNS工具


除了dig,還有一些其他小工具也可以使用。
(1)host 命令
host命令可以看作dig命令的簡化版本,返回當前請求網域名稱的各種記錄。
    $ host github.com
    github.com has address 192.30.252.121
    github.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 1 ASPMX.L.GOOGLE.COM.

    $ host facebook.github.com

    facebook.github.com is an alias for github.map.fastly.net.
    github.map.fastly.net has address 103.245.222.133

host命令也可以用於逆向查詢,即從IP地址查詢網域名稱,等同於dig -x <ip>。
    $ host 192.30.252.153
    153.252.30.192.in-addr.arpa domain name pointer pages.github.com.

(2)nslookup 命令
nslookup命令用於互動式地查詢網域名稱記錄。
    $ nslookup
    > facebook.github.io
    Server:     192.168.1.253
    Address:    192.168.1.253#53

    Non-authoritative answer:
    facebook.github.io  canonical name = github.map.fastly.net.
    Name:   github.map.fastly.net
    Address: 103.245.222.133
    >

(3)whois 命令
whois命令用來查看網域名稱的註冊情況。
    $ whois github.com

互連網協議入門

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.