網絡知識

指引:java


重點:數據庫

  1. [HTTP 系列] 第 1 篇 —— 從 TCP/UDP 到 DNS 解析


1、五層協議的體系結構


1)應用層( dns,http )  DNS解析域名爲IP併發送http地址  json

在應用層有: 包括 FTP、HTTP、TELNET、SMTP等協議

2)傳輸層( tcp,udp )  創建tcp鏈接(三次握手) 跨域

在傳輸層中有 TCP協議 與 UDP協議。UDP包括DNS、TFTP等協議瀏覽器

 3)網絡層( IP,ARP )  IP尋址 安全

在網絡層有: IP協議、ICMP協議、和BOOTP協議。

 4)數據鏈路層(PPP)  封裝成幀 服務器

  • 在OSI模型中ARP協議屬於鏈路層;而在TCP/IP模型中,ARP協議屬於網絡層。
  • ARP協議、RARP協議
  • ARP協議的基本功能就是經過目標設備的IP地址,查詢目標設備的MAC地址,以保證通訊的順利進行

 5)物理層 
網絡


一、mac地址在數據鏈路層

MAC地址就是在媒體接入層上使用的地址,也叫物理地址、硬件地址或鏈路地址,由網絡設備製造商生產時寫在硬件內部。MAC地址與網絡無關,也即不管將帶有這個地址的硬件(如網卡、集線器、路由器等)接入到網絡的何處,都有相同的MAC地址,它由廠商寫在網卡的BIOS裏。
併發

MAC地址一般表示爲12個16進制數,每2個16進制數之間用冒號隔開,如: 08:00:20:0A:8C:6D 就是一個MAC地址,其中前6位16進制數 08:00:20 表明網絡硬件製造商的編號,它由IEEE機構分配,然後3位16進制數 0A:8C:6D 表明該製造商所製造的某個網絡產品(如網卡)的系列號。每一個網絡製造商必須確保它所製造的每一個以太網設備都具備相同的前三字節以及不一樣的後三個字節。這樣就可保證世界上每一個以太網設備都具備惟一的MAC地址。

ARP (Address Resolution Protocol) 是一種用來解析地址的協議,它能夠根據 IP 地址反查出對應的 MAC 地址。
app

二、UDP

用戶數據報協議 (User Datagram Protocol),是一個簡單的面向數據報的傳輸協議。

它的特色以下:

  • UDP 缺少可靠性。UDP 自己不提供確認序號,序列號,超時重傳等機制。UDP 數據報可能在網絡中被複制,被從新排序。即 UDP 不保證數據報會到達其最終目的地,也不保證各個數據報的前後順序,也不保證每一個數據報只到達一次。

    • UDP 是面向無鏈接的。UDP 客戶端和服務器以前沒必要存在長期的關係。UDP 發送數據報以前也不須要通過握手建立鏈接的過程。

    • UDP 不只支持單播,還支持多播和廣播。

    • UDP 頭部開銷小,它包含如下幾個數據:

      • 兩個十六位的端口號,分別是源端口和目的端口。

      • 整個數據報文的長度。

      • 整個數據報文的校驗和,用於發現頭部信息和數據中的錯誤

    三、TCP

    TCP (Transmission Control Protocol, 傳輸控制協議) 是一種面向鏈接的、可靠的、基於字節流服務的傳輸層通訊協議

  • TCP 提供一種面向鏈接的、可靠的字節流服務

  • 在一個 TCP 鏈接中,僅有兩方進行彼此通訊。廣播和多播不能用於 TCP

  • TCP 使用校驗和,確認和重傳機制來保證可靠傳輸

  • TCP 給數據分節進行排序,並使用累積確認保證數據的順序不變和非重複

  • TCP 使用滑動窗口機制來實現流量控制,經過動態改變窗口的大小進行擁塞控制



  • 2、http

    一、TCP/IP模型

    引入一個 TCP/IP的概念, TCP處於傳輸層, IP屬於網絡層,而這裏所探究的 HTTP,實際上就是基於 TCP/IP協議開發的, TCP/IP是個協議組,可分爲三個層次:網絡層、傳輸層和應用層。

    概述HTTP協議爲無差錯的協議按序傳輸未分段的數據流,這其實說的就是TCP協議。

    http是基於TCP/IP協議的應用層協議,用於客戶端和服務器之間的通訊。HTTP是一個無狀態的協議。 

    HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。以下圖所示:


    2. 發送一條HTTP請求會發生什麼? 

    當你在瀏覽器輸入一個URL的時候,有沒有想過這其中發生了什麼? 

    • 一、獲取主機名,例如:http://www.nowamagic.net/academy/ 
    •  二、經過DNS獲取服務器IP 
    •  三、獲取端口,默認是80端口 
    •  四、鏈接到 121.199.24.143:80服務器 
    •  五、經過TCP信道發送一個HTTP請求 
    •  六、服務器讀取一個HTTP請求 
    •  七、服務器查找所需資源並經過TCP信道返回資源 
    •  八、關閉TCP鏈接 


    3.HTTPS = HTTP+加密+認證+完整性保護


    3、跨域

    跨域產生的緣由,是由於受到同源策略的限制。同源策略指的是協議、域名、端口不相同。這裏我將介紹兩種跨域的方式:JSONP、CORS(跨域資源共享)

    兩個方式的比較:
    JSONP只支持GET請求,CORS支持全部類型的HTTP請求。
    JSONP的優點在於支持老式瀏覽器,以及能夠向不支持CORS的網站請求數據。複製代碼

    一、 JSONP

    原理:動態插入script標籤(由於script標籤不受同源策略的限制),經過插入script標籤引入一個js文件,這個js文件加載成功以後會執行咱們在url中指定的回調函數,而且會把咱們須要的json數據做爲參數傳入。

    二、 CORS 

     原理 :服務器在響應頭中設置相應的選項,瀏覽器若是支持這種方法的話就會將這種跨站資源請求視爲合法,進而獲取資源。

     實現 CORS分爲簡單請求和複雜請求,

    簡單請求指的是: 

    (1)請求方法是如下三種方法之一:HEAD、GET、POST; 
    (2)HTTP的頭信息不超出如下幾種字段:Accept、Accept-Language、Content-Language、Last-Event-ID、 Content-Type(只限於三個值application/x-www-form-urlencoded、multipart/form-data、text/plain)。 

     其餘狀況就是非簡單請求了。


    4、長鏈接與短鏈接

    一、何時用長鏈接,短鏈接?

    長鏈接多用於操做頻繁,點對點的通信,並且鏈接數不能太多狀況,。每一個TCP鏈接都須要三步握手,這須要時間,若是每一個操做都是先鏈接,再操做的話那麼處理速度會下降不少,因此每一個操做完後都不斷開,次處理時直接發送數據包就OK了,不用創建TCP鏈接。例如:數據庫的鏈接用長鏈接, 若是用短鏈接頻繁的通訊會形成socket錯誤,並且頻繁的socket 建立也是對資源的浪費。

    而像WEB網站的http服務通常都用短連接,由於長鏈接對於服務端來講會耗費必定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的鏈接用短鏈接會更省一些資源,若是用長鏈接,並且同時有成千上萬的用戶,若是每一個用戶都佔用一個鏈接的話,那可想而知吧。因此併發量大,但每一個用戶無需頻繁操做狀況下需用短連好。

    總之,長鏈接和短鏈接的選擇要視狀況而定。

    二、本質

    HTTP的長鏈接和短鏈接本質上是TCP長鏈接和短鏈接

    HTTP屬於應用層協議,在傳輸層使用TCP協議,在網絡層使用IP協議。

    IP協議主要解決網絡路由和尋址問題,
    TCP協議主要解決如何在IP層之上可靠的傳遞數據包,使在網絡上的另外一端收到發端發出的全部包,而且順序與發出順序一致。TCP有可靠,面向鏈接的特色。

    3. Http長鏈接和短鏈接

    在HTTP/1.0中,默認使用的是短鏈接。但從 HTTP/1.1起,默認使用長鏈接。

    長鏈接: 客戶端和服務端創建鏈接後不進行斷開,以後客戶端再次訪問這個服務器上的內容時,繼續使用這一條鏈接通道。

    • 鏈接->傳輸數據->保持鏈接 -> 傳輸數據-> 。。。 ->關閉鏈接。
    • 長鏈接指創建SOCKET鏈接後不論是否使用都保持鏈接,但安全性較差。
    • HTTP也能夠創建長鏈接,使用Connection:keep-alive

    短鏈接: 客戶端和服務端創建鏈接,發送完數據後立馬斷開鏈接。下次要取數據,須要再次創建鏈接。

    • 鏈接->傳輸數據->關閉鏈接
    • HTTP是無狀態的,瀏覽器和服務器每進行一次HTTP操做,就創建一次鏈接,但任務結束就中斷鏈接。
    • 也能夠這樣說:短鏈接是指SOCKET鏈接後發送後接收完數據後立刻斷開鏈接。

    4 Http長鏈接和TCP長鏈接的區別

    Http長鏈接 和 TCP長鏈接的區別在於: TCP 的長鏈接須要本身去維護一套心跳策略。,而Http只須要在請求頭加入keep-alive:true便可實現長鏈接。



    5、dns域名解析

    詳解DNS域名解析全過程

    相關文章
    相關標籤/搜索