天天看點

計算機網絡常見面試題(一)1. TCP/UDP差別以及TCP如何保證傳輸可靠性2.TCP三向交握四次揮手3. TCP對應的協定和UDP對應的協定4. 常見的路由選擇協定,以及他們的差別5.OSI七層模型與TCP/IP五層模型6.OSI七層模型詳解及各層的硬體裝置7. IP位址的分類(尤其注意特殊IP)8. 強調下上文的特殊IP位址9. ARP協定的工作原理10. 在浏覽器中輸入網址後執行的全部過程11. NAT協定、DHCP協定、DNS協定的作用12. 子網路遮罩的作用

1. TCP/UDP差別以及TCP如何保證傳輸可靠性

TCP(Transmission Control Protocol,傳輸控制協定)是基于連接配接的協定,也就是說,在正式收發資料前,必須和對方建立可靠的連接配接。一個TCP連接配接必須要經過三次“對話”才能建立起來,其中的過程非常複雜,我們這裡隻做簡單、形象的介紹,你隻要做到能夠了解這個過程即可。我們來看看這三次對話的簡單過程:主機A向主機B發出連接配接請求資料包:“我想給你發資料,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接配接和要求同步(同步就是兩台主機一個在發送,一個在接收,協調工作)的資料包:“可以,你什麼時候發?”,這是第二次對話;主機A再發出一個資料包确認主機B的要求同步:“我現在就發,你接着吧!”,這是第三次對話。三次“對話”的目的是使資料包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送資料。

UDP(User Data Protocol,使用者資料報協定)是與TCP相對應的協定。它是面向非連接配接的協定,它不與對方建立連接配接,而是直接就把資料包發送過去!

UDP适用于一次隻傳送少量資料、對可靠性要求不高的應用環境。大家可以看到,發送的資料包數量是4包,收到的也是4包(因為對方主機收到後會發回一個确認收到的資料包)。這充分說明了UDP協定是面向非連接配接的協定,沒有建立連接配接的過程。正因為UDP協定沒有連接配接的過程,是以它的通信效果高;但也正因為如此,它的可靠性不如TCP協定高。QQ就使用UDP發消息,是以有時會出現收不到消息的情況。

tcp協定和udp協定的差别

差别 TCP UDP
是否連接配接 面向連接配接 面向非連接配接
傳輸可靠性 可靠 不可靠
應用場合 傳輸大量資料 少量資料
速度

TCP的可靠性如何保證:

在TCP的連接配接中,資料流必須以正确的順序送達對方。TCP的可靠性是通過順序編号和确認(ACK)來實作的。TCP在開始傳送一個段時,為準備重傳而首先将該段插入到發送隊列之中,同時啟動時鐘。其後,如果收到了接受端對該段的ACK資訊,就将該段從隊列中删去。如果在時鐘規定的時間内,ACK未傳回,那麼就從發送隊列中再次送出這個段。TCP在協定中就對資料可靠傳輸做了保障,握手與斷開都需要通訊雙方确認,資料傳輸也需要雙方确認成功,在協定中還規定了:分包、重組、重傳等規則;而UDP主要是面向不可靠連接配接的,不能保證資料正确到達目的地。

計算機網絡常見面試題(一)1. TCP/UDP差別以及TCP如何保證傳輸可靠性2.TCP三向交握四次揮手3. TCP對應的協定和UDP對應的協定4. 常見的路由選擇協定,以及他們的差別5.OSI七層模型與TCP/IP五層模型6.OSI七層模型詳解及各層的硬體裝置7. IP位址的分類(尤其注意特殊IP)8. 強調下上文的特殊IP位址9. ARP協定的工作原理10. 在浏覽器中輸入網址後執行的全部過程11. NAT協定、DHCP協定、DNS協定的作用12. 子網路遮罩的作用

2.TCP三向交握四次揮手

參考連結https://mp.weixin.qq.com/s/LyiwQuBQvtwV4RQCVsPQ7A

三次握手

三次握手(Three-way Handshake)其實就是指建立一個 TCP 連接配接時,需要用戶端和伺服器總共發送 3 個包。進行三次握手的主要作用就是為了确認雙方的接收能力和發送能力是否正常、指定自己的初始化序列号為後面的可靠性傳送做準備。實質上其實就是連接配接伺服器指定端口,建立 TCP 連接配接,并同步連接配接雙方的序列号和确認号,交換

TCP 視窗大小

資訊。

剛開始用戶端處于 Closed 的狀态,服務端處于 Listen 狀态。進行三次握手:

  1. 第一次握手:用戶端給服務端發一個 SYN 封包,并指明用戶端的初始化序列号 ISN©。此時用戶端處于

    SYN_SENT

    狀态。

    首步的同步位 SYN=1,初始序号 seq=x,SYN=1 的封包段不能攜帶資料,但要消耗掉一個序号。

  2. 第二次握手:伺服器收到用戶端的 SYN 封包之後,會以自己的 SYN 封包作為應答,并且也是指定了自己的初始化序列号 ISN(s)。同時會把用戶端的 ISN + 1 作為 ACK 的值,表示自己已經收到了用戶端的 SYN,此時伺服器處于

    SYN_RCVD

    的狀态。

    在确認封包段中 SYN=1,ACK=1,确認号 ack=x+1,初始序号 seq=y。

  3. 第三次握手:用戶端收到 SYN 封包之後,會發送一個 ACK 封包,當然,也是一樣把伺服器的 ISN + 1 作為 ACK 的值,表示已經收到了服務端的 SYN 封包,此時用戶端處于

    ESTABLISHED

    狀态。伺服器收到 ACK 封包之後,也處于

    ESTABLISHED

    狀态,此時,雙方已建立起了連接配接。

    确認封包段 ACK=1,确認号 ack=y+1,序号 seq=x+1(初始為 seq=x,第二個封包段是以要+1),ACK 封包段可以攜帶資料,不攜帶資料則不消耗序号。

發送第一個 SYN 的一端将執行主動打開(active open),接收這個 SYN 并發回下一個 SYN 的另一端執行被動打開(passive open)。

在 socket 程式設計中,用戶端執行 connect()時,将觸發三次握手。

計算機網絡常見面試題(一)1. TCP/UDP差別以及TCP如何保證傳輸可靠性2.TCP三向交握四次揮手3. TCP對應的協定和UDP對應的協定4. 常見的路由選擇協定,以及他們的差別5.OSI七層模型與TCP/IP五層模型6.OSI七層模型詳解及各層的硬體裝置7. IP位址的分類(尤其注意特殊IP)8. 強調下上文的特殊IP位址9. ARP協定的工作原理10. 在浏覽器中輸入網址後執行的全部過程11. NAT協定、DHCP協定、DNS協定的作用12. 子網路遮罩的作用

為什麼需要三次握手,兩次不行嗎?

三次握手的目的:

  1. 第一次握手:用戶端發送網絡包,服務端收到了。

    這樣服務端就能得出結論:用戶端的發送能力、服務端的接收能力是正常的。

  2. 第二次握手:服務端發包,用戶端收到了。

    這樣用戶端就能得出結論:服務端的接收、發送能力,用戶端的接收、發送能力是正常的。不過此時伺服器并不能确認用戶端的接收能力是否正常。

  3. 第三次握手:用戶端發包,服務端收到了。

    這樣服務端就能得出結論:用戶端的接收、發送能力正常,伺服器自己的發送、接收能力也正常。

是以,需要三次握手才能确認雙方的接收與發送能力是否正常。

試想如果是用兩次握手,則會出現下面這種情況:

如用戶端發出連接配接請求,但因連接配接請求封包丢失而未收到确認,于是用戶端再重傳一次連接配接請求。後來收到了确認,建立了連接配接。資料傳輸完畢後,就釋放了連接配接,用戶端共發出了兩個連接配接請求封包段,其中第一個丢失,第二個到達了服務端,但是第一個丢失的封包段隻是在某些網絡結點長時間滞留了,延誤到連接配接釋放以後的某個時間才到達服務端,此時服務端誤認為用戶端又發出一次新的連接配接請求,于是就向用戶端發出确認封包段,同意建立連接配接,不采用三次握手,隻要服務端發出确認,就建立新的連接配接了,此時用戶端忽略服務端發來的确認,也不發送資料,則服務端一緻等待用戶端發送資料,浪費資源。

什麼是半連接配接隊列

伺服器第一次收到用戶端的 SYN 之後,就會處于 SYN_RCVD 狀态,此時雙方還沒有完全建立其連接配接,伺服器會把此種狀态下請求連接配接放在一個隊列裡,我們把這種隊列稱之為半連接配接隊列。

當然還有一個全連接配接隊列,就是已經完成三次握手,建立起連接配接的就會放在全連接配接隊列中。如果隊列滿了就有可能會出現丢包現象。

這裡在補充一點關于SYN-ACK 重傳次數的問題:

伺服器發送完 SYN-ACK 包,如果未收到客戶确認包,伺服器進行首次重傳,等待一段時間仍未收到客戶确認包,進行第二次重傳。如果重傳次數超過系統規定的最大重傳次數,系統将該連接配接資訊從半連接配接隊列中删除。注意,每次重傳等待的時間不一定相同,一般會是指數增長,例如間隔時間為 1s,2s,4s,8s…

ISN(Initial Sequence Number)是固定的嗎

當一端為建立連接配接而發送它的 SYN 時,它為連接配接選擇一個初始序号。ISN 随時間而變化,是以每個連接配接都将具有不同的 ISN。ISN 可以看作是一個 32 比特的計數器,每 4ms 加 1。這樣選擇序号的目的在于防止在網絡中被延遲的分組在以後又被傳送,而導緻某個連接配接的一方對它做錯誤的解釋。

三次握手的其中一個重要功能是用戶端和服務端交換 ISN(Initial Sequence Number),以便讓對方知道接下來接收資料的時候如何按序列号組裝資料。如果 ISN 是固定的,攻擊者很容易猜出後續的确認号,是以 ISN 是動态生成的。

三次握手過程中可以攜帶資料嗎

其實第三次握手的時候,是可以攜帶資料的。但是,第一次、第二次握手不可以攜帶資料

為什麼這樣呢?大家可以想一個問題,假如第一次握手可以攜帶資料的話,如果有人要惡意攻擊伺服器,那他每次都在第一次握手中的 SYN 封包中放入大量的資料。因為攻擊者根本就不理伺服器的接收、發送能力是否正常,然後瘋狂着重複發 SYN 封包的話,這會讓伺服器花費很多時間、記憶體空間來接收這些封包。

也就是說,第一次握手不可以放資料,其中一個簡單的原因就是會讓伺服器更加容易受到攻擊了。 而對于第三次的話,此時用戶端已經處于 ESTABLISHED 狀态。對于用戶端來說,他已經建立起連接配接了,并且也已經知道伺服器的接收、發送能力是正常的了,是以能攜帶資料也沒啥毛病。

SYN攻擊是什麼?

伺服器端的資源配置設定是在二次握手時配置設定的,而用戶端的資源是在完成三次握手時配置設定的,是以伺服器容易受到 SYN 洪泛攻擊。SYN 攻擊就是 Client 在短時間内僞造大量不存在的 IP 位址,并向 Server 不斷地發送 SYN 包,Server 則回複确認包,并等待 Client 确認,由于源位址不存在,是以 Server 需要不斷重發直至逾時,這些僞造的 SYN 包将長時間占用未連接配接隊列,導緻正常的 SYN 請求因為隊列滿而被丢棄,進而引起網絡擁塞甚至系統癱瘓。SYN 攻擊是一種典型的 DoS/DDoS 攻擊。

檢測 SYN 攻擊非常的友善,當你在伺服器上看到大量的半連接配接狀态時,特别是源 IP 位址是随機的,基本上可以斷定這是一次 SYN 攻擊。在 Linux/Unix 上可以使用系統自帶的 netstats 指令來檢測 SYN 攻擊。

netstat -n -p TCP | grep SYN_RECV
           

常見的防禦 SYN 攻擊的方法有如下幾種:

  • 縮短逾時(SYN Timeout)時間
  • 增加最大半連接配接數
  • 過濾網關防護
  • SYN cookies 技術

四次揮手

建立一個連接配接需要三次握手,而終止一個連接配接要經過四次揮手(也有将四次揮手叫做四次握手的)。這由 TCP 的半關閉(half-close)造成的。所謂的半關閉,其實就是 TCP 提供了連接配接的一端在結束它的發送後還能接收來自另一端資料的能力。

TCP 的連接配接的拆除需要發送四個包,是以稱為四次揮手(Four-way handshake),用戶端或伺服器均可主動發起揮手動作。

剛開始雙方都處于 ESTABLISHED 狀态,假如是用戶端先發起關閉請求。四次揮手的過程如下:

  1. 第一次揮手:用戶端發送一個 FIN 封包,封包中會指定一個序列号。此時用戶端處于

    FIN_WAIT1

    狀态。

    即發出連接配接釋放封包段(FIN=1,序号 seq=u),并停止再發送資料,主動關閉 TCP 連接配接,進入 FIN_WAIT1(終止等待 1)狀态,等待服務端的确認。

  2. 第二次揮手:服務端收到 FIN 之後,會發送 ACK 封包,且把用戶端的序列号值 +1 作為 ACK 封包的序列号值,表明已經收到用戶端的封包了,此時服務端處于

    CLOSE_WAIT

    狀态。

    即服務端收到連接配接釋放封包段後即發出确認封包段(ACK=1,确認号 ack=u+1,序号 seq=v),服務端進入 CLOSE_WAIT(關閉等待)狀态,此時的 TCP 處于半關閉狀态,用戶端到服務端的連接配接釋放。用戶端收到服務端的确認後,進入 FIN_WAIT2(終止等待 2)狀态,等待服務端發出的連接配接釋放封包段。

  3. 第三次揮手:如果服務端也想斷開連接配接了,和用戶端的第一次揮手一樣,發給 FIN 封包,且指定一個序列号。此時服務端處于

    LAST_ACK

    的狀态。

    即服務端沒有要向用戶端發出的資料,服務端發出連接配接釋放封包段(FIN=1,ACK=1,序号 seq=w,确認号 ack=u+1),服務端進入 LAST_ACK(最後确認)狀态,等待用戶端的确認。

  4. 第四次揮手:用戶端收到 FIN 之後,一樣發送一個 ACK 封包作為應答,且把服務端的序列号值 +1 作為自己 ACK 封包的序列号值,此時用戶端處于

    TIME_WAIT

    狀态。需要過一陣子以確定服務端收到自己的 ACK 封包之後才會進入 CLOSED 狀态,服務端收到 ACK 封包之後,就處于關閉連接配接了,處于

    CLOSED

    狀态。

    即用戶端收到服務端的連接配接釋放封包段後,對此發出确認封包段(ACK=1,seq=u+1,ack=w+1),用戶端進入 TIME_WAIT(時間等待)狀态。此時 TCP 未釋放掉,需要經過時間等待計時器設定的時間 2MSL 後,用戶端才進入 CLOSED 狀态。

收到一個 FIN 隻意味着在這一方向上沒有資料流動。用戶端執行主動關閉并進入 TIME_WAIT 是正常的,服務端通常執行被動關閉,不會進入 TIME_WAIT 狀态。

在 socket 程式設計中,任何一方執行 close()操作即可産生揮手操作。

計算機網絡常見面試題(一)1. TCP/UDP差別以及TCP如何保證傳輸可靠性2.TCP三向交握四次揮手3. TCP對應的協定和UDP對應的協定4. 常見的路由選擇協定,以及他們的差別5.OSI七層模型與TCP/IP五層模型6.OSI七層模型詳解及各層的硬體裝置7. IP位址的分類(尤其注意特殊IP)8. 強調下上文的特殊IP位址9. ARP協定的工作原理10. 在浏覽器中輸入網址後執行的全部過程11. NAT協定、DHCP協定、DNS協定的作用12. 子網路遮罩的作用

揮手為什麼需要四次?

因為當服務端收到用戶端的 SYN 連接配接請求封包後,可以直接發送 SYN+ACK 封包。其中ACK 封包是用來應答的,SYN 封包是用來同步的。但是關閉連接配接時,當服務端收到 FIN 封包時,很可能并不會立即關閉 SOCKET,是以隻能先回複一個 ACK 封包,告訴用戶端,“你發的 FIN 封包我收到了”。隻有等到我服務端所有的封包都發送完了,我才能發送 FIN 封包,是以不能一起發送。故需要四次揮手。

2MSL等待狀态

TIME_WAIT 狀态也成為 2MSL 等待狀态。每個具體 TCP 實作必須選擇一個封包段最大生存時間 MSL(Maximum Segment Lifetime),它是任何封包段被丢棄前在網絡内的最長時間。這個時間是有限的,因為 TCP 封包段以 IP 資料報在網絡内傳輸,而 IP 資料報則有限制其生存時間的 TTL 字段。

對一個具體實作所給定的 MSL 值,處理的原則是:當 TCP 執行一個主動關閉,并發回最後一個 ACK,該連接配接必須在 TIME_WAIT 狀态停留的時間為 2 倍的 MSL。這樣可讓 TCP 再次發送最後的 ACK 以防這個 ACK 丢失(另一端逾時并重發最後的 FIN)。

這種 2MSL 等待的另一個結果是這個 TCP 連接配接在 2MSL 等待期間,定義這個連接配接的插口(客戶的 IP 位址和端口号,伺服器的 IP 位址和端口号)不能再被使用。這個連接配接隻能在 2MSL 結束後才能再被使用。

四次揮手釋放連接配接時,等待2MSL 的意義?

MSL是 Maximum Segment Lifetime 的英文縮寫,可譯為“最長封包段壽命”,它是任何封包在網絡上存在的最長時間,超過這個時間封包将被丢棄。

為了保證用戶端發送的最後一個 ACK 封包段能夠到達伺服器。因為這個 ACK 有可能丢失,進而導緻處在 LAST-ACK 狀态的伺服器收不到對 FIN-ACK 的确認封包。伺服器會逾時重傳這個 FIN-ACK,接着用戶端再重傳一次确認,重新啟動時間等待計時器。最後用戶端和伺服器都能正常的關閉。假設用戶端不等待 2MSL,而是在發送完 ACK 之後直接釋放關閉,一但這個 ACK 丢失的話,伺服器就無法正常的進入關閉連接配接狀态。

兩個理由:

  1. 保證用戶端發送的最後一個 ACK 封包段能夠到達服務端。

    這個 ACK 封包段有可能丢失,使得處于 LAST-ACK 狀态的 B 收不到對已發送的 FIN+ACK 封包段的确認,服務端逾時重傳 FIN+ACK 封包段,而用戶端能在 2MSL 時間内收到這個重傳的 FIN+ACK 封包段,接着用戶端重傳一次确認,重新啟動 2MSL 計時器,最後用戶端和服務端都進入到 CLOSED 狀态,若用戶端在 TIME-WAIT 狀态不等待一段時間,而是發送完 ACK 封包段後立即釋放連接配接,則無法收到服務端重傳的 FIN+ACK 封包段,是以不會再發送一次确認封包段,則服務端無法正常進入到 CLOSED 狀态。

  2. 防止“已失效的連接配接請求封包段”出現在本連接配接中。

    用戶端在發送完最後一個 ACK 封包段後,再經過 2MSL,就可以使本連接配接持續的時間内所産生的所有封包段都從網絡中消失,使下一個新的連接配接中不會出現這種舊的連接配接請求封包段。

為什麼 TIME_WAIT 狀态需要經過 2MSL 才能傳回到 CLOSE 狀态?

理論上,四個封包都發送完畢,就可以直接進入 CLOSE 狀态了,但是可能網絡是不可靠的,有可能最後一個 ACK 丢失。是以TIME_WAIT 狀态就是用來重發可能丢失的 ACK 封包。

3. TCP對應的協定和UDP對應的協定

  1. TCP對應的協定:
    1. FTP:定義了檔案傳輸協定,使用21端口。常說某某計算機開了FTP服務便是啟動了檔案傳輸服務。下載下傳檔案,上傳首頁,都要用到FTP服務。
    2. Telnet:它是一種用于遠端登陸的端口,使用者可以以自己的身份遠端連接配接到計算機上,通過這種端口可以提供一種基于DOS模式下的通信服務。如以前的BBS是-純字元界面的,支援BBS的伺服器将23端口打開,對外提供服務。
    3. SMTP:定義了簡單郵件傳送協定,現在很多郵件伺服器都用的是這個協定,用于發送郵件。如常見的免費郵件服務中用的就是這個郵件服務端口,是以在電子郵件設定-中常看到有這麼SMTP端口設定這個欄,伺服器開放的是25号端口。
    4. POP3:它是和SMTP對應,POP3用于接收郵件。通常情況下,POP3協定所用的是110端口。也是說,隻要你有相應的使用POP3協定的程式(例如Fo-xmail或Outlook),就可以不以Web方式登陸進郵箱界面,直接用郵件程式就可以收到郵件(如是163郵箱就沒有必要先進入網易網站,再進入自己的郵-箱來收信)。
    5. HTTP協定:是從Web伺服器傳輸超文本到本地浏覽器的傳送協定。
  2. UDP對應的協定:
    1. DNS:用于域名解析服務,将域名位址轉換為IP位址。DNS用的是53号端口。
    2. SNMP:簡單網絡管理協定,使用161号端口,是用來管理網絡裝置的。由于網絡裝置很多,無連接配接的服務就展現出其優勢。
    3. TFTP(Trival File Transfer Protocal),簡單檔案傳輸協定,該協定在熟知端口69上使用UDP服務。

4. 常見的路由選擇協定,以及他們的差別

常見的路由選擇協定有:RIP協定、OSPF協定。

RIP協定:底層是貝爾曼福特算法,它選擇路由的度量标準(metric)是跳數,最大跳數是15跳,如果大于15跳,它就會丢棄資料包。

OSPF協定:底層是迪傑斯特拉算法,是鍊路狀态路由選擇協定,它選擇路由的度量标準是帶寬,延遲。

5.OSI七層模型與TCP/IP五層模型

OSI七層模型

OSI中的層 功能 TCP/IP協定族
應用層 檔案傳輸,電子郵件,檔案服務,虛拟終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示層 資料格式化,代碼轉換,資料加密 沒有協定
會話層 解除或建立與别的接點的聯系 沒有協定
傳輸層 提供端對端的接口 TCP,UDP
網絡層 為資料包選擇路由 IP,ICMP,RIP,OSPF,BGP,IGMP
資料鍊路層 傳輸有位址的幀以及錯誤檢測功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
實體層 以二進制資料形式在實體媒體上傳輸資料 ISO2110,IEEE802,IEEE802.2

TCP/IP五層模型及對應的協定

  • 應用層:對應的協定有FTP(檔案傳送協定)、Telenet(遠端登入協定)、DNS(域名解析協定)、SMTP(郵件傳送協定),POP3協定(郵局協定),HTTP協定
  • 傳輸層:四層交換機、也有工作在四層的路由器,對應的協定有UDP協定、TCP協定
  • 網絡層:路由器、三層交換機,對應的協定有IP協定、ICMP協定、ARP協定、RARP協定
  • 資料鍊路層:網橋(現已很少使用)、以太網交換機(二層交換機)、網卡(其實網卡是一般工作在實體層,一半工作在資料鍊路層)
  • 實體層:中繼器、集線器、還有通常說的雙絞線也工作在實體層

注意:在OSI模型中ARP協定屬于鍊路層;而在TCP/IP模型中,ARP協定屬于網絡層。

除了層的數量之外,開放式系統互聯(OSI)模型與TCP/IP協定有什麼差別?

開放式 系統互聯模型是一個參考标準,解釋協定互相之間應該如何互相作用。TCP/IP協定是美國國防部發明的,是讓網際網路成為了目前這個樣子的标準之一。 開放式系統互聯模型中沒有清楚地描繪TCP/IP協定,但是在解釋TCP/IP協定時很容易想到開放式系統互聯模型。

兩者的主要差別如下:

  • TCP/IP協定中的應用層處理開放式系統互聯模型中的第五層、第六層和第七層的功能。
  • TCP/IP協定中的傳輸層并不能總是保證在傳 輸層可靠地傳輸資料包,而開放式系統互聯模型可以做到。TCP/IP協定還提供一項名為UDP(使用者資料報協定)的選擇。UDP不能保證可靠的資料包傳 輸。

TCP/IP全稱:Transmission Control Protocol / Internet Protocol 中文翻譯:傳輸控制協定 / 網際網路協定

6.OSI七層模型詳解及各層的硬體裝置

OSI七層模型詳解:

  1. 應用層,很簡單,就是應用程式。這一層負責确定通信對象,并確定由足夠的資源用于通信,這些當然都是想要通信的應用程式幹的事情。為作業系統或網絡應用程式提供通路網絡服務的接口。

    應用層協定的代表包括:Telnet、FTP、HTTP、SNMP等。

  2. 表示層,負責資料的編碼、轉化,確定應用層的正常工作。這一層,是将我們看到的界面與二進制間互相轉化的地方,就是我們的語言與機器語言間的轉化。資料的壓縮、解壓,加密、解密都發生在這一層。這一層根據不同的應用目的将資料處理為不同的格式,表現出來就是我們看到的各種各樣的檔案擴充名。
  3. 會話層,負責建立、維護、控制會話,區分不同的會話,以及提供單工(Simplex)、半雙工(Half duplex)、全雙工(Full duplex)三種通信模式的服務。我們平時所知的NFS,RPC,X Windows等都工作在這一層。管理主機之間的會話程序,即負責建立、管理、終止程序之間的會話。會話層還利用在資料中插入校驗點來實作資料的同步。
  4. 傳輸層,負責分割、組合資料,實作端到端的邏輯連接配接。資料在上三層是整體的,到了這一層開始被分割,這一層分割後的資料被稱為段(Segment)。三次握手(Three-way handshake),面向連接配接(Connection-Oriented)或非面向連接配接(Connectionless-Oriented)的服務,流控(Flow control)等都發生在這一層。是第一個端到端,即主機到主機的層次。傳輸層負責将上層資料分段并提供端到端的、可靠的或不可靠的傳輸。此外,傳輸層還要處理端到端的差錯控制和流量控制問題。

    在這一層,資料的機關稱為資料段(segment)。

    傳輸層協定的代表包括:TCP、UDP、SPX等

  5. 網絡層,負責管理網絡位址,定位裝置,決定路由。我們所熟知的IP位址和路由器就是工作在這一層。上層的資料段在這一層被分割,封裝後叫做包(Packet),包有兩種,一種叫做使用者資料包(Data packets),是上層傳下來的使用者資料;另一種叫路由更新包(Route update packets),是直接由路由器發出來的,用來和其他路由器進行路由資訊的交換。負責對子網間的資料包進行路由選擇。網絡層還可以實作擁塞控制、網際互連等功能。

    在這一層,資料的機關稱為資料包(packet)。

    網絡層協定的代表包括:IP、IPX、RIP、OSPF等

  6. 資料鍊路層,負責準備實體傳輸,CRC校驗,錯誤通知,網絡拓撲,流控等。我們所熟知的MAC位址和交換機都工作在這一層。上層傳下來的包在這一層被分割封裝後叫做幀(Frame)。在不可靠的實體媒體上提供可靠的傳輸。該層的作用包括:實體位址尋址、資料的成幀、流量控制、資料的檢錯、重發等。

    在這一層,資料的機關稱為幀(frame)。

    資料鍊路層協定的代表包括:SDLC、HDLC、PPP、STP、幀中繼等

  7. 實體層,就是實實在在的實體鍊路,負責将資料以比特流的方式發送、接收,就不多說了。

各層的裝置:

  1. 實體層:中繼器(Repeater,也叫放大器),集線器,網線。
  2. 資料鍊路層:網橋,交換機。
  3. 網絡層:路由器。
  4. 網關:網絡層以上的裝置。

7. IP位址的分類(尤其注意特殊IP)

綜述:

  • A類位址:以0開頭,第一個位元組範圍:0~127;
  • B類位址:以10開頭,第一個位元組範圍:128~191;
  • C類位址:以110開頭,第一個位元組範圍:192~223;
  • D類位址:以1110開頭,第一個位元組範圍為224~239;

8. 強調下上文的特殊IP位址

  1. 網絡位址

    IP位址由網絡号(包括子網号)和主機号組成,網絡位址的主機号為全0,網絡位址代表着整個網絡。

  2. 廣播位址

    廣播位址通常稱為直接廣播位址,是為了區分受限廣播位址。

    廣播位址與網絡位址的主機号正好相反,廣播位址中,主機号為全1。當向某個網絡的廣播位址發送消息時,該網絡内的所有主機都能收到該廣播消息。

  3. 多點傳播位址

    D類位址就是多點傳播位址。

    先回憶下A,B,C,D類位址吧

    A類位址以00開頭,第一個位元組作為網絡号,位址範圍為:0.0.0.0~127.255.255.255;

    B類位址以10開頭,前兩個位元組作為網絡号,位址範圍是:128.0.0.0~191.255.255.255;

    C類位址以110開頭,前三個位元組作為網絡号,位址範圍是:192.0.0.0~223.255.255.255。

    D類位址以1110開頭,位址範圍是224.0.0.0~239.255.255.255,D類位址作為多點傳播位址(一對多的通信);

    E類位址以1111開頭,位址範圍是240.0.0.0~255.255.255.255,E類位址為保留位址,供以後使用。

    Notice:隻有A,B,C有網絡号和主機号之分,D類位址和E類位址沒有劃分網絡号和主機号。

  4. 255.255.255.255

    該IP位址指的是受限的廣播位址。受限廣播位址與一般廣播位址(直接廣播位址)的差別在于,受限廣播位址之隻能用于本地網絡,路由器不會轉發以受限廣播位址為目的位址的分組;一般廣播位址既可在本地廣播,也可跨網段廣播。例如:主機192.168.1.1/30上的直接廣播資料包後,另外一個網段192.168.1.5/30也能收到該資料報;若發送受限廣播資料報,則不能收到。

    Notice:一般的廣播位址(直接廣播位址)能夠通過某些路由器(當然不是所有的路由器),而受限的廣播位址不能通過路由器。

  5. 0.0.0.0

    常用于尋找自己的IP位址,例如在我們的RARP,BOOTP和DHCP協定中,若某個未知IP位址的無盤機想要知道自己的IP位址,它就以255.255.255.255為目的位址,向本地範圍(具體而言是被各個路由器屏蔽的範圍内)的伺服器發送IP請求分組。

  6. 回環位址

    127.0.0.0/8被用作回環位址,回環位址表示本機的位址,常用于對本機的測試,用的最多的是127.0.0.1。

  7. A、B、C類私有位址

    私有位址(private address)也叫專用位址,它們不會在全球使用,隻具有本地意義。

    A類私有位址:10.0.0.0/8,範圍是:10.0.0.0~10.255.255.255

    B類私有位址:172.16.0.0/12,範圍是:172.16.0.0~172.31.255.255

    C類私有位址:192.168.0.0/16,範圍是:192.168.0.0~192.168.255.255

9. ARP協定的工作原理

首先,每台主機都會在自己的ARP緩沖區中建立一個 ARP清單,以表示IP位址和MAC位址的對應關系。

當源主機需要将一個資料包要發送到目的主機時,會首先檢查自己 ARP清單中是否存在該 IP位址對應的MAC位址,如果有,就直接将資料包發送到這個MAC位址;如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的MAC位址。

此ARP請求資料包裡包括源主機的IP位址、硬體位址、以及目的主機的IP位址。

網絡中所有的主機收到這個ARP請求後,會檢查資料包中的目的IP是否和自己的IP位址一緻。如果不相同就忽略此資料包;如果相同,該主機首先将發送端的MAC位址和IP位址添加到自己的ARP清單中,如果ARP表中已經存在該IP的資訊,則将其覆寫,然後給源主機發送一個 ARP響應資料包,告訴對方自己是它需要查找的MAC位址;源主機收到這個ARP響應資料包後,将得到的目的主機的IP位址和MAC位址添加到自己的ARP清單中,并利用此資訊開始資料的傳輸。

如果源主機一直沒有收到ARP響應資料包,表示ARP查詢失敗。

10. 在浏覽器中輸入網址後執行的全部過程

  1. 查找域名對應的IP位址。這一步會依次查找浏覽器緩存,系統緩存,路由器緩存,ISPNDS緩存,根域名伺服器。
  2. 向IP對應的伺服器發送請求。
  3. 伺服器響應請求,發回網頁内容。
  4. 浏覽器解析網頁内容。

由于網頁可能有重定向,或者嵌入了圖檔,AJAX,其它子網頁等等,這4個步驟可能反複進行多次才能将最終頁面展示給使用者。

11. NAT協定、DHCP協定、DNS協定的作用

NAT協定:網絡位址轉換(NAT,Network AddressTranslation)屬接入廣域網(WAN)技術,

是一種将私有(保留)位址轉化為合法IP位址的轉換技術,它被廣泛應用于各種類型Internet接入方式和各種類型的網絡中。原因很簡單,NAT不僅完美地解決了lP位址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隐藏并保護網絡内部的計算機。

借助于NAT,私有(保留)位址的"内部"網絡通過路由器發送資料包時,私有位址被轉換成合法的IP位址,一個區域網路隻需使用少量IP位址(甚至是1個)即可實作私有位址網絡内所有計算機與Internet的通信需求。

DHCP協定:動态主機設定協定(Dynamic Host ConfigurationProtocol, DHCP)

是一個區域網路的網絡協定,使用UDP協定工作,主要有兩個用途:給内部網絡或網絡服務供應商自動配置設定IP位址,給使用者或者内部網絡管理者作為對所有計算機作中央管理的手段。

DNS協定:DNS 是域名系統 (Domain Name System) 的縮寫,是網際網路的一項核心服務,它作為可以将域名和IP位址互相映射的一個分布式資料庫,能夠使人更友善的通路網際網路,而不用去記住能夠被機器直接讀取的IP數串。

12. 子網路遮罩的作用

子網路遮罩隻有一個作用,就是将某個IP位址劃分成網絡位址和主機位址兩部分。

用于子網路遮罩的位數決定于可能的子網數目和每個子網的主機數目。

計算方法示例:

定義子網路遮罩的步驟為:

A、确定哪些組位址歸我們使用。比如我們申請到的網絡号為 “210.73.a.b”,該網絡位址為c類IP位址,網絡辨別為“210.73.a”,主機辨別為“b”。

B、根據我們所需的子網數以及将來可能擴充到的子網數,用主控端的一些位來定義子網路遮罩。比如我們需要12個子網,将來可能需要16個。用第四個位元組的前四位确定子網路遮罩。前四位都置為“1”,即第四個位元組為“11110000”,這個數我們暫且稱作新的二進制子網路遮罩。

C、把對應初始網絡的各個位都置為“1”,即前三個位元組都置為“1”,則子網路遮罩的間斷二進制形式為:“11111111.11111111.11111111.11110000” 。

D、把這個數轉化為間斷十進制形式為:“255.255.255.240” 。

繼續閱讀