網絡協議--通訊協議

網絡協議|通訊協議

最近在學習與思考,有哪些東西是學習了受益長久的呢?
我想到了,也能夠作了,答案在結束語中~編程

前言

目前全部的文章思想格式都是:知識+情感。
知識:對於全部的知識點的描述。力求不含任何的自我感情色彩。
情感:用我本身的方式,解讀知識點。力求通俗易懂,完美透析知識。

正文

全部的協議都須要具有協議的三要素
因爲網絡協議,只是列舉出知識點來,顯然沒有味道,因此,我採用問題與答案的方式。瀏覽器

協議的三要素

  • 語法,就是這一段內容要符合必定的規則和格式。
    • 例如,括號要成對,結束要使用分號等。
  • 語義,就是這一段內容要表明某種意義。
    • 例如數字減去數字是有意義的,數字減去文本通常來講就沒有意義。
  • 順序,就是先幹啥,後幹啥。
    • 例如,能夠先加上某個數值,而後再減去某個數值。

注意: 協議的三要素能夠保證人與計算機的交流沒有障礙~緩存

網絡協議的由來

問題:懂得了計算機與人之間的協議,明白了協議是幹什麼,怎麼控制多臺機器呢?服務器

解答:經過協議只能搞定一臺機器,想要控制多臺機器,必須經過網絡協議,纔可讓多臺機器互相協做,共同完成一件事。網絡

網絡協議初探

問題:瀏覽器怎麼顯示頁面數據的嗎?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才能夠將數據包從網口發出去。

結束語

網絡協議算是我以爲,做爲一個準備奮戰在一線編程世界,或者做爲一個技術人員,必需要掌握的能力,只惋惜本身領悟的時間太遲了!
可是,總歸本身走出了第一步,而且還會一直走下去~

相關文章
相關標籤/搜索