計算機基礎系列之網絡基礎——網絡協議

what's the 網絡協議?

  一臺擁有硬件、操做系統和軟件的計算機已經具有可使用的功能,但要實現計算機與計算機之間的通信,還要遵循一系列的標準,這個標準就叫作互聯網協議。互聯網協議的功能是定義計算機如何接入Internet以及接入Internet的計算機通訊的標準。編程

  互聯網協議按照功能不一樣分爲osi七層協議或tcp/ip五層(其實只要掌握tcp/ip五層就足夠在小夥伴面前裝逼了)。瀏覽器

  tcp/ip五層指的是物理層、數據鏈路層、網絡層、傳輸層和應用層。服務器

  物理層基本就是指物理接口,這樣計算機才能接入Internet,實現計算機之間的交流。物理層的功能是基於電特性發送高低電壓,高電壓對應數字1,低電壓對應數字0(即二進制中的10101010)。網絡

  數字鏈路層的功能是定義電信號的分組方式。其中以太網協議規定了一組電信號構成一個數據包,數據包分爲報頭head和數據data兩部分。報頭head包含的內容是源地址、目標地址和數據類型。若是兩臺計算機處於同一個網絡環境下(即處於同一個局域網),計算機A經過廣播方式將數據包發出,數據包中的報頭含有本身的mac地址和目標計算機B的IP地址,B收到後識別出目標IP地址是本身的IP地址,確認無誤後發送一個數據包給A,其中報頭中含有本身的mac地址,在兩臺電腦互相瞭解到對方的mac地址後,兩臺計算機就能夠進行通信了。這種互相瞭解的方式即ARP協議socket

  網絡層的功能是引入一套新的地址用來區分不一樣的局域網,即網絡地址。該功能遵循IP協議。網絡層能夠實現不一樣局域網下兩臺計算機之間的交流,處理方式與ARP協議大同小異,不過在中間加了網關的IP,以實現兩臺計算機之間互相確認mac地址。tcp

  

網頁服務默認都是80端口,如百度www.baidu.com:80網站

  uri地址分爲三個部分:google

            協議部分:http://spa

            域名部分:即咱們熟悉的網站的名字,經過域名能夠獲得服務器的ip地址操作系統

            資源部分:即咱們打開連接後除去協議部分域名部分剩下的內容

  聯網後可經過dhcp協議獲取ip地址、網關地址、DNS地址等等。

  用戶使用的應用程序都位於應用層,應用層的功能是規定應用程序的數據格式。

  上圖即發送數據的一個過程,由上至下爲用戶層、傳輸層、網絡層、數據鏈路層和物理層。上一層的數據到達本層後成爲本層的數據,加上本層的報頭後傳給下一層;下一層接收數據後將含有報頭的數據視爲本層的數據,再次加入本層的報頭。最後的數據只有一個報頭,經過物理接口發送給接收者,接收者再逐層進行拆包。

 

socket

  咱們知道兩個進程若是須要進行通信最基本的一個前提能可以惟一的標示一個進程,在本地進程通信中咱們可使用PID來惟一標示一個進程,但PID只在本地惟一,網絡中的兩個進程PID衝突概率很大,這時候咱們須要另闢它徑了,咱們知道IP層的ip地址能夠惟一標示主機,而TCP層協議和端口號能夠惟一標示主機的一個進程,這樣咱們能夠利用ip地址+協議+端口號惟一標示網絡中的一個進程。

  可以惟一標示網絡中的進程後,它們就能夠利用socket進行通訊了,什麼是socket呢?咱們常常把socket翻譯爲套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操做抽象爲幾個簡單的接口供應用層調用已實現進程在網絡中通訊。

注:有關於socket的知識後期會有一個關於socket網絡編程的博客進行詳細敘述,這裏只是提一小嘴

 

網絡通訊的流程

1.本機獲取(主機須要具有的四個要素)

  • 本機的IP地址
  • 子網掩碼
  • 網關的IP地址
  • DNS的IP地址

獲取這四個要素有兩種方式:

  靜態獲取:即手動輸入配置

  動態獲取:經過dhcp協議獲取

  以太網頭 ip頭 udp頭 dhcp數據包

 

 

 

  (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服務器等等參數

 

2.打開瀏覽器,想要訪問Google,在地址欄輸入了網址:www.google.com。

3.dns協議(基於udp協議)

  頂級域名:以.com,.net,.org,.cn等等屬於國際頂級域名,根據目前的國際互聯網域名體系,國際頂級域名分爲兩類:類別頂級域名(gTLD)和地理頂級域名(ccTLD)兩種。類別頂級域名是以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等結尾的域名,均由國外公司負責管理。地理頂級域名是以國家或地區代碼爲結尾的域名,如"CN"表明中國,"UK"表明英國。地理頂級域名通常由各個國家或地區負責管理。

  二級域名:二級域名是以頂級域名爲基礎的地理域名,比喻中國的二級域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
通常來講,二級域名是域名的一條記錄,好比alidiedie.com是一個域名,www.alidiedie.com是其中比較經常使用的記錄,通常默認是用這個,可是相似*.alidiedie.com的域名所有稱做是alidiedie.com的二級

4.HTTP部分的內容

5.TCP協議

  TCP數據包須要設置端口,接收方(Google)的HTTP端口默認是80,發送方(本機)的端口是一個隨機生成的1024-65535之間的整數,假定爲51775。

 

  TCP數據包的標頭長度爲20字節,加上嵌入HTTP的數據包,總長度變爲4980字節。

 

6. IP協議

 

  而後,TCP數據包再嵌入IP數據包。IP數據包須要設置雙方的IP地址,這是已知的,發送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。

 

  IP數據包的標頭長度爲20字節,加上嵌入的TCP數據包,總長度變爲5000字節。

 

7. 以太網協議

 

  最後,IP數據包嵌入以太網數據包。以太網數據包須要設置雙方的MAC地址,發送方爲本機的網卡MAC地址,接收方爲網關192.168.1.1的MAC地址(經過ARP協議獲得)。

 

  以太網數據包的數據部分,最大長度爲1500字節,而如今的IP數據包長度爲5000字節。所以,IP數據包必須分割成四個包。由於每一個包都有本身的IP標頭(20字節),因此四個包的IP數據包的長度分別爲1500、1500、1500、560。

 

8 服務器端響應

 

  通過多個網關的轉發,Google的服務器172.194.72.105,收到了這四個以太網數據包。

 

根據IP標頭的序號,Google將四個包拼起來,取出完整的TCP數據包,而後讀出裏面的」HTTP請求」,接着作出」HTTP響應」,再用TCP協議發回來。

 

  本機收到HTTP響應之後,就能夠將網頁顯示出來,完成一次網絡通訊。