最近在學習與思考,有哪些東西是學習了受益長久的呢?
我想到了,也能夠作了,答案在結束語中~編程
目前全部的文章思想格式都是:知識+情感。 知識:對於全部的知識點的描述。力求不含任何的自我感情色彩。 情感:用我本身的方式,解讀知識點。力求通俗易懂,完美透析知識。
全部的協議都須要具有協議的三要素。
因爲網絡協議,只是列舉出知識點來,顯然沒有味道,因此,我採用問題與答案的方式。瀏覽器
注意: 協議的三要素能夠保證人與計算機的交流沒有障礙~緩存
問題:懂得了計算機與人之間的協議,明白了協議是幹什麼,怎麼控制多臺機器呢?服務器
解答:經過協議只能搞定一臺機器,想要控制多臺機器,必須經過網絡協議,纔可讓多臺機器互相協做,共同完成一件事。網絡
問題:瀏覽器怎麼顯示頁面數據的嗎?socket
解答:瀏覽器能夠顯示頁面,經過的正是網絡協議。接下來看看看整個過程:tcp
1)瀏覽器輸入URL:www.baidu.com學習
2)瀏覽器只知道域名,並不知道訪問的IP與端口。操作系統
a:此時會先在本身的主機DNS緩存表hosts文件中尋找是否有域名解析的IP地址,code
b:若是沒找到,就會去local DNS服務器尋找;
c:若是沒找到,就會去根域名服務器尋找;
d:若是沒找到,就回去頂級域名服務器尋找;
e:若是沒找到,就回去二級域名服務器尋找(這裏必定能夠找到,要是尚未找到,表示就沒有住註冊這個域名)
f:只要找到了,首先會將相應的域名與 IP的對應信息緩存在 local DMS服務器中,方便下次尋找;
g:只要找到了,其次會將相應的域名與 IP的對應信息緩存在 hosts 文件中,方便下次尋找;
h:此時瀏覽器就知道了該訪問域名對應的IP地址。
g:通常服務器的端口默認的是80端口(這個80端口屬於公網端口,不是本身想改就能夠改的,就不能改!!!)
3)基於已經得到IP信息,瀏覽器就會開始打包請求信息,此時能夠得到使用http/https封裝數據的報文。DNS、HTTP、HTTPS屬於應用層,或者五層。此時封裝的數據是請求的信息,不包含ip與端口。
a:對於通常的請求,一般使用http 協議;
b:對於支付等請求,使用https協議。
4)四層,即傳輸層,接受來自應用層的數據包,經過socket編程進行打包。此時會加上目標端口信息與源端口(自身檢測端口)。操做系統每每經過端口來判斷,它獲得的包應該給哪一個進程。傳輸層存在兩種協議:
a:TCP,面向鏈接的協議,通常都是採用這種方式
b:UDP,無鏈接協議,在探測請求經過的路由時,使用udp。
5)三層,即網絡層,接受來自傳輸層的數據包。經過IP協議,添加目標IP信息與源IP信息。操做系統會針對當前的目標IP進行相應的判斷。
6)二層,即數據鏈路層,接受來自網絡層的數據包。封裝目標/網關的Mac地址與主機Mac地址。
a:當目標IP與本機屬於同一個局域網的時候,直接就會直接使用ARP協議,廣播方式,經過吼的方式得到目標ip主機 的MAC地址。進行數據報的封裝。
b:當目標IP與本機不屬於同一個局域網的時候,直接就會直接使用ARP協議,廣播方式,經過吼的方式得到當前網關(通常爲192.168.1.1/24) 的MAC地址。進行數據報的封裝。
c:在本機操做系統啓動的時候,會被DHCP協議配置IP地址,子網掩碼,默認網關信息。
7)物理層,接受來自數據鏈路層的數據包,使用網卡將包轉成二進制發出去。
8-1)若是是當前局域網,目標主機直接就接收到了請求的信息。
8-2)若是不是當前局域網,數據會到達網關,網關會取出Mac地址,再取出IP頭,查一下表表,看下發到哪個位置。
通常網關就是路由器,屬於3層設備,而且路由器之間會相互溝通,去哪裏須要怎麼走,使用的是OSPF與BGP的路由協議。
此時繼續使用ARP呼叫另外一個局域網的網關,獲取他的Mac地址,而且將當前數據報的Mac地址換爲目標網關的Mac地址。
9)目標網關獲取數據包,取下Mac頭,取下ip頭,就是當前的局域網,此時使用ARP協議呼叫目標ip主機,請求Mac信息,再將Mac頭換爲目標主機的mac頭。
10)此時目標服務器主機獲取了包,取下Mac頭,取下ip頭,將包交給TCP層,會有相應的進程監聽請求的端口。此時先進行一個回覆包操做,說明這個其你去我收到了,你等着個人消息吧!
a:若是本機一直沒有等到服務器主機返回的信息,那麼此時TCP會從新發送 一次,一直等到收到了回覆爲止。不須要本身從新刷新頁面,自動操做。
b:當TCP出問題了,此時瀏覽器的應用層從新發送請求。
c:目標服務器,通常都會有一個相似於 Tomcat的接待員,將請求的處理信息,分發給對應的處理進程,並收集處理的結果。使用RPC調用便可實現,基於 HTTP 協議放在 HTTP 的報文裏面的,有直接封裝在 TCP 報文裏面的遠程過程調用。
11)目標服務器將請求處理結束以後,從新封裝數據包,只是將源ip與目標ip進行互換,源Mac與目標Mac互換。
12)經歷漫長的路途,本機得到了請求的數據,瀏覽器會將得到響應數據進行渲染展現,
問題:你們都知道網絡是分層的,可是爲何要分層嗎?
解答:網絡分層,屬於分而治之的思想,每一層各司其職。接下來看看,每一層都是怎麼工做的。
1)當網絡包通過網口的時候,若是網口配置的是混雜模式,會將全部的數據包 都拿進來處理
2)當得到了網絡上的數據包,先拿下來mac看看是否是本身主機的,
a:mac不是本身主機的,直接丟棄
b:Mac是 本身主機的,就送到三層處理
3)三層,即網絡層,看到了二層送上來的包,拿下ip頭看看是否是主機ip的,
a:ip不是本身主機的,將數據轉發出去(這就是mac衝突的問題)
b:ip是 本身主機的,就送到四層處理
4)四層,即傳輸層,看看是TCP仍是UDP協議,若是這是一個tcp,正常包就直接給監聽端口的進程,若是是發起或者 應答包,此時主機須要回覆一個收到的包的確認消息。
5)五層,即應用層,將包在不一樣的進程中進行相應的處理。
6)若是應用層繼續請求數據,就一層層的封裝數據,發送出去。
問題:網絡中不論是7層仍是5層,又或者是4層,每一層與上一層和下一層之間的關係是什麼?
回答:網絡分層中,下一層,會將接受到,來自上一層數據包進行封裝。上一層,會未來自下一層的數據包進行解包。
每一層都只在本身本層的工做以內活動。
只要是在網絡上跑的包,都是完整的。能夠有下層沒上層,絕對不可能有上層沒下層。
全部在網絡上的包,必需要有IP層與MAC層的封裝,否則數據包發佈出去。
問題:在網絡傳輸的中,頂層在傳輸的時候,底層又都在幹什麼?
回答:只要上層要發包,下層就要幹活,須要封裝IP與mac才能夠將數據包從網口發出去。
網絡協議算是我以爲,做爲一個準備奮戰在一線編程世界,或者做爲一個技術人員,必需要掌握的能力,只惋惜本身領悟的時間太遲了!
可是,總歸本身走出了第一步,而且還會一直走下去~