當咱們談網絡時,咱們談些什麼(1)--咱們如何接入因特網

博客新址,這裏更有趣算法

以前對於黑磚頭書,一直有種抵觸感,看着看着就不想看了,總感受TM這麼厚,何時能看完,看着就愁,暑假,硬着頭皮啃了《Thinking in Java》,還有《Head First設計模式》,邊作筆記,邊讀,這樣仍是蠻有成就感的,要不單純的讀,讀到後面,忘了前面,這樣反而對本身作這件事情產生了懷疑,和身邊的幾個大牛交流,給予的反饋是,看編程方面這些書,若是不是馬上去實踐,忘記很正常的事情,想起了知乎上一個關於讀書有什麼用的回答?咱們忘掉的每每是那些細節,而潛移默化的改變了咱們的思考方式。我的認爲對於編程的方面的學習就是創建一個知識框架,而後大腦中有了個框架,去實踐,根據實踐中遇到的問題,去具體的章節進行反饋,若是是要搞Android,要學Java上來就看《Thinking in Java》,勢必是一很痛苦的,若是先找一本基礎的書籍把體系創建起來,而後去實踐開發,遇到具體的問題去書中反饋,效果就會很好。回到正題。裝逼採用了春上春樹的命題方式,想着來將最近讀的《計算機網絡--自頂向下方法》結合現實中咱們網絡請求的整個過程作一個梳理。編程

上面都是廢話。設計模式

接下來咱們從咱們在瀏覽器中輸入一個URL,到咱們獲得一個頁面開始討論,內容中若有錯誤,歡迎各位指正。以百度爲例。從如何接入網絡到數據返回給咱們這個過程。瀏覽器

主機如何上網

首先咱們要考慮的一個問題就是,咱們的主機如何連入到網絡之中,也就是爲何當咱們將電腦鏈接網線以後,咱們就能夠上網了,這個過程發生了什麼?服務器

網絡請求

首先根據上圖,咱們來一個總覽,當咱們的電腦經過網線接入的時候,是如何獲取到IP的來上網的,當咱們用手機鏈接wifi又是如何獲取IP來上網的。網絡

撥號鏈接

對於撥號鏈接,當咱們電腦鏈接網線,而後開始進行撥號鏈接的時候,咱們的電腦此時在撥號未成功前已經進入了一個網段,可是不能上網的緣由就是咱們沒有IP,即便咱們的請求能夠出去,它也回不來,沒有源IP地址,返回的數據是沒法找到咱們的,而後這個時候,若是要上網,獲取IP是迫在眉睫的事情了。當咱們在咱們家中上網的時候是如何獲取的呢?架構

先看下咱們小區網絡設施的架構是如何?框架

咱們的每個小區中有一個路由器,路由器是具備IP和Mac地址的,而後咱們的小區中還有一個交換機,交換機是沒有IP和MAC地址的,其做用是根據咱們來的數據包進行一個針對mac地址的轉發,其中存放的是MAC地址和對應的轉發接口,這個時候可能會存在的一個疑問是爲何不直接用路由器進行轉發而還要用交換機呢?學習

路由器和交換器的不一樣spa

  1. 路由器是能夠替代交換機的,可是交換機是不能夠替代路由器的,路由器至關因而網橋,而交換機則至關於一個增強的集線器。

  2. 路由器是根據網絡IP地址進行轉發,屬於網絡層。而交換機是根據MAC地址進轉發,屬於鏈路層。

  3. 路由器能夠自行撥號,而交換機則不能夠。經過路由器,咱們將路由器的wan口鏈接到網絡,lan口鏈接咱們的電腦,進入咱們的路由器配置界面,此時,路由器會自動的檢測咱們的上網方式,而後根據咱們輸入的相應的參數進行一個鏈接,這個時候,咱們上網就不須要本身配置了,直接就能夠上網了。

  4. 路由還能夠提供防火牆的功能。而交換機不能夠。

  5. 交換器具備自學習功能,而路由不具有,從交換器流過的數據報,其mac地址會被記錄下來。

爲何要用交換機

交換器經常使用來組建一個局域網,而後經過路由器將其鏈接到Internet上去,說了其不一樣,可是爲何要用交換機呢?它能幹的事情,路由器都能幹,並且路由器還有其不少沒法實現的功能。緣由就是其處理快速,價格便宜,其根據幀中的MAC地址識別轉發接口的算法簡單,而若是將這些所有讓路由器來承擔,這樣就要精確的保存,該小區中全部用戶的IP地址,而且每個IP地址,咱們都須要進行一個比對,肯定從哪一個接口中出來,由於不在是第一個區域的ip表示,沒法經過前綴辨別了,因此須要對每個ip都預留一個惟一的端口,這樣當咱們的小區中新添加了用戶,那麼就須要單獨有一根線從路由器中出來鏈接向它,這樣一個小區就須要不少臺路由器來作這個操做,可是當咱們使用交換機就可有效的解決這個問題,咱們將每全部的用戶經過交換機進行鏈接,交換機的另外一端和路由器進行鏈接,這樣路由器就能夠經過前綴匹配將數據報發給一個交換器,而後交換器負責分發,這樣即便用戶增長,其只須要鏈接到交換器,而不須要到路由器拉根線過來。這樣能夠減小了路由器數量上消耗,下降了成本,提高了速度。

開始獲取IP

當咱們接入到了網絡中以後,咱們的操做系統生成一個DHCP(Dynamic Host Configuration)報文,發向DHCP的服務器的67端口,可是咱們怎麼知道DHCP服務器地址呢?咱們是不知道的,所以採用方式是在咱們本地的68端口,生成一個UDP包,其目的IP字段填寫的IP地址是255.255.255.255,而後向全子網進行廣播經過發送以太網幀,該幀的目的MAC地址是FF:FF:FF:FF:FF:FF,此時局域網中的主機收到後,是不會進行處理的,而後傳到路由器,路由器接收到以後,檢測其包含DHCP請求,而後交給上層處理,此時發送給DHCP服務器,這個時候,服務器接收到DHCP報文,會返回一個迴應報文,其中包含分配給它的IP地址,DNS服務器地址,默認網關路由器IP地址,也就是第一跳路由器的IP地址,這個時候,開始返回報文,報文如何找到是那一臺主機發出了這個報文呢?沒有IP地址,可是它有默認網段路由器地址,也就是第一跳路由的地址,獲得這個地址後,填充發送過來的源的MAC地址,而後返回,這個時候,到達路由器以後,發送到交換器,由於交換器具備自學習功能,也就是誰從它走過,它都是會記錄下來的,並且會記錄下從哪一個接口進入,什麼mac地址從哪個接口進入,而後什麼時間進入的,經過這個表,咱們就能夠將信息轉發給咱們的目的廣播主機。此時咱們就拿到IP和DNS服務器的地址,和咱們默認網關的地址。

有了IP地址,咱們接下來就能夠訪問網絡了。可是還有一個問題是當咱們拿到了網關的IP,可是殊不知道網關的mac地址,而咱們和網關處於同一個局域網下,所以咱們須要獲取到其mac地址,才能夠在鏈路層級上和其進行通訊,所以,這個時候出現了ARP,咱們將要找的IP地址廣播出去,這個時候局域網上的各個主機將會根據其中的IP地址進行一個迴應,若是是本身的將會返回一個mac地址回去,咱們會將其存放在一個ARP緩衝區中,而後下次若是須要就不須要再去尋找,直接經過mac地址就能夠找到。

無線鏈接

WIFI

咱們經過咱們的wifi進行鏈接上網的時候,和該過程不一樣,咱們的發送wifi信號的AP自己是具備IP地址的,在其下面的鏈接的便攜設備的IP是採用NAT協議(Network Address Translation)來給咱們本地的便攜設備生成一個ip,而後經過這個ip進行標記每一個接入設備。講到NAT,可能會想到一個問題,爲何有mac地址,而要用IP地址呢?緣由是MAC地址的分配是不規則的,沒法根據一個mac地址來肯定其存在的位置,因此找起來是很是費力的。可是若是在一個wifi下的話,在查詢上這應該不是一個問題了,爲何還用用ip,經過mac地址,再去廣播,確認接收,不也是能夠的嗎,可是當咱們最初沒有分配IP的時候,怎麼經過IP找呢?只能經過MAC地址去找。

如何接入?

首先,每一個AP設備會會週期性的發送一些信表幀(SSID,MAC地址),而後咱們的便攜設備會掃描全部的信道獲取該區域內的全部信標,也就是咱們手機開機wifi的時候,咱們看到的名字是ssid,mac地址,咱們看不到的,而後咱們與之創建關聯,便可發送數據。咱們請求的數據報,會被路由進行僞造,而後經過路由器的IP發送出去,回來的時候進行解包,分到每個設備上。

WLAN

咱們使用的移動的WLAN雖然都是經過咱們的wifi能夠搜索的到,可是其實現是不一樣的,對於WLAN,其被咱們找到的過程和咱們鏈接wifi是同樣的,可是其並不經過NAT協議,而是咱們藉助於它做爲一跳路由,向DHCP服務器獲取一個IP,這個過程和咱們經過撥號接入大體相同,惟獨不一樣之處在於咱們和第一跳路由的鏈接方式,一個是有線,一個是無線的,無線的如何維持這個鏈接和避免信道衝突的,將在後面具體細說。

下一篇文章寫如何根據URL從DNS獲取IP地址

相關文章
相關標籤/搜索