數據鏈路層詳解

數據鏈路層的目的

  • 用於兩個設備(同一種數據鏈路節點)之間的進行傳遞

認識以太網

  • 以太網不是一種具體的網絡,而是一種技術標準,既包含了數據鏈路層的內容,也包含了物理層的內容,例如:規定了網絡拓撲結構,訪問控制方式,傳輸速率等
  • 例如以太網中的網線必須使用雙絞線,傳輸速率有10M,100M,1000M等
  • 以太網是當前應用最廣泛的局域網計數,和以太網並列的還有令牌環網,無線LAN等

以太網幀格式

image

  • 源地址和目的地址是指網卡的硬件地址(也叫MAC地址), 長度是48位,是在網卡出廠時固化的
  • 幀協議類型字段有三種值,分別對應IP、ARP、RARP
  • 幀末尾是CRC校驗碼

理解MAC地址和IP地址

  • IP地址描述的是路途總體的起點和終點
  • MAC地址描述的是路途上的每一個區間的起點和終點

認識MTU

  • MTU相當於發快遞時對包裹尺寸的限制,這個限制是不同的數據鏈路層對應的物理層,產生的限制
  • 以太網幀的數據長度規定最小46個字節最大1500個字節,ARP數據包的長度不夠46個字節,要在後面補填充位
  • 最大值1500稱以太網的最大傳輸單元(MTU),不同的網絡類型有不同的MTU
  • 如果一個數據包從以太網路由到撥號鏈路上,數據包長度大於撥號鏈路的MTU了,則需要對數據包進行分片
  • 不同的數據鏈路層標準的MTU是不同的

MTU對IP協議的影響

由於數據鏈路層MTU的限制,對於較大的IP數據包要進行分包操作

  • 即將較大的IP包分成多個小包,並給每個小包打上標籤
  • 每個小包IP協議頭的16位標誌id都是相同的
  • 每個小包的IP協議頭的3位標誌字段中,第2位置爲0,表示允許分片,第3位表示結束標記,也就是表示當前是否是最後一個小包,如果是1的話,就說明是最後一個小包,反正0就說明後面還有這個報文的小包。
  • 到達對端時再將這些小包,就按順序重組,拼裝到一起返回給傳輸層
  • 一旦這些小包中任意一個小包丟失,接收端的重組就會失敗,但是IP層不會負責重新傳輸數據
    image

MTU對UDP協議的影響

  • 一旦UDP攜帶的數據超過1472(1500-20(IP首部)-8(UDP首部)),那麼就會在網絡層分成多個IP數據報
  • 這多個IP數據報有任意一個丟失,都會引起接收端網絡層重組失敗,那麼這意味着,如果UDP數據報在網絡層被分片,整個數據被丟失的概率就大大增加了。

MTU對於TCP協議的影響

  • TCP的一個數據報也不能無限大,還是受制於MTU,TCP的單個數據報的最長消息長度,稱爲MSSS
  • TCP在建立鏈接的過程中,通信雙方會進行MSS協商
  • 最理想的情況下,MSS的值正好是在IP不會被分片處理的最大長度(這個長度仍然是受制於數據鏈路層的MTU)
  • 雙方在發送SYN的時候會在TCP頭部寫入自己能支持的MSS值
  • 然後雙方得知對方的MSS值之後,選擇較小的作爲最終MSS
    -== MSS的值就是在TCP首部的40字節==變長選項中(kind=2)
  • MSS受制於MTU,MSS在選項中
    MSS和MTU的關係
    image

ARP協議

ARP不是一個單純的數據鏈路層協議,而是一個介於數據鏈路層和網絡協議之間的協議

ARP協議的作用

  • ARP協議建立了主機IP地址和MAC地址的映射關係
  • 在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址
  • 數據首先是被網卡接受到再去處理上一層協議的,如果接受到的數據包的硬件地址與本機不符,則直接丟棄
  • 通訊前必須獲得目的主機的硬件地址
  • 如果沒不用目的主機地址來先甄別,這樣每次都要傳到網絡層才能甄別,效率太低了

ARP通信的過程

  • 源主機發出ARP請求,詢問IP地址是192.168.0.1的主機的硬件地址是多少,並將這個請求廣播到本地網段(以太網幀首部對的郵件地址填FF:FF:FF:FF:FF:FF表示廣播)
  • 目的的主機接受到廣播的ARP請求從,發現其中的IP地址與本機相符,則發送一個ARP應答數據包給源主機,將自己的硬件地址填寫在應答包中
  • 每臺主機都維護一個ARP緩存表,可以用arp -a命令查看。緩存表中的表項過期時間(一般爲20分鐘),如果20分鐘內沒有再次使用某個表項
    則該表項失效,下次還要發出ARP請求來獲得目的主機的硬件地址

查看ARP緩存表 (這樣就不用再次請求IP地址對應的MAC地址了)

arp -a

  • 結果:
    image

爲什麼要有緩存表?

  • 下次就不需要再找MAC地址了

爲什麼表項要有過期時間而不是一直有效?

  • 可能IP或者MAC地址有變動,網卡壞了,換網卡了

ARP數據報的格式

image

  • 以太網地址其實就是MAC地址
  • 幀類型 : 區分是 ARP還是IP還是 RARP
  • 硬件類型:指鏈路層網絡類型,1爲以太網
  • 協議類型:指要轉換的地址類型,0x0800爲IP地址
  • 硬件地址長度:對於以太網地址爲6字節
  • 協議地址長度:對於和IP地址爲4個字節
  • op:爲1白哦是ARP請求,op字段爲2表示ARP應答

DNS協議

此協議是把域名變成IP的系統

發展

互聯網信息中心統一管理 (不方便,要每次下載更新)

  • 最初,通過互聯網信息中心來管理這個hosts文件的
  • 如果一個新計算機要接入網絡,或者某個計算機IP變更,都需要到信息中心申請變更hosts文件
  • 其他計算機也需要定期下載更新版本的hosts文件才能正確上網。

hosts文件管理麻煩,於是產生了DNS系統

  • 一個組織的系統管理機構,維護系統內的每個主機的IP和主機名的對應關係
  • 如果新計算機接入網絡,這個信息註冊到數據庫中
  • 用戶輸入域名的時候,會自動查詢DNS服務器,由DNS服務器檢索數據庫,得到對應的IP地址
  • 在域名解析的過程中仍然會優先查找hosts文件的內容

查詢計算機上的hosts文件

cat /etc/hosts

瀏覽器輸入一個url後 (域名解析過程)

1.域名解析

  • 1.瀏覽器得到url後先在緩存找,url緩存,緩存是有時間的(2分鐘到30分鐘不等)
  • 2.系統緩存- 如果在瀏覽器緩存裏沒有找到需要的記錄,瀏覽器就會做一個系統調用,到系統緩存中找
  • 3.路由緩存
  • 4.ISP的DNS服務器中的DNS緩存
  • 5.遞歸搜索,你的ISP的DNS服務器從跟域名服務器開始遞歸搜索,從.com頂級域名服務器到Facebool的域名服務器。一般DNAS服務器的緩存中會有.com域名發,所以到頂級服務器的匹配過程不是那麼必要

2.發送HTTP請求 返回一個重定向(爲了排名,爲了緩存能少點)

3.瀏覽器跟蹤重定向地址

4.服務器處理請求

5.返回一個HTML響應

6.瀏覽器開始顯示HTML

7.瀏覽器獲取HTML中的對象 (比如圖片)

Facebook聊天功能提供了關於AJAX一個有意思的問題案例:把數據從服務器端推送到客戶端。因爲HTTP是一個請求-響應協議,所以聊天服務器不能把新消息發給客戶。取而代之的是客戶端不得不隔幾秒就輪詢下服務器端看自己有沒有新消息。

這些情況發生時長輪詢是個減輕服務器負載挺有趣的技術。如果當被輪詢時服務器沒有新消息,它就不理這個客戶端。而當尚未超時的情況下收到了該客戶的新消息,服務器就會找到未完成的請求,把新消息做爲響應返回給客戶端

ICMP協議

  • ICMP協議是一個網絡層協議
  • 用來測試網絡是否暢通

ICMP功能

  • 確認IP包是否成功到達目標地址
  • 通知在發送過程中IP包被丟的原因
  • ICMP也基於IP協議工作,但是它並不是傳輸層的功能,因此人們仍然把它歸結爲網絡層協議
  • ICMP只能搭配IPv4使用,如果是IPv6的情況下,需要是用ICMPv6
  • ICMP確認IP包是否到達的過程其實也是ARP請求MAC地址的過程
    image
    ICMP的報文格式
0                 7                    15                  31
-------------------------------------------------------------
|   類型          | 代碼                |校驗和             |
-------------------------------------------------------------
|               不同類型的代碼有什麼不同的內容              |
-------------------------------------------------------------

ICMP大概分爲兩類報文

  • 一類是通知出錯原因
  • 一類是用於診斷查詢

ping 命令

  • 注意,此處ping的是域名,而不是url,一個域名可以通過DNS解析成IP地址
  • ping命令不光能驗證網絡的連通性,同時還會統計響應時間和TTL(IP包中的Time To Live ,生存週期)
  • ping命令會先發送一個ICMP Echo Request給對端
  • 對端接受到後,會返回一個ICMP Echo Reply

image

NAT技術

目的

  • 爲了解決IP地址數量不充足的問題

關於NAT

  • NAT技術當前解決IP地址不夠用的主要手段,是路由器的一個重要功能
  • NAT能夠將私有IP對外通信時轉爲全局IP.也就是一種將私有IP和全局IP互相轉化的技術方法
  • 好多學校,家庭,公司內部都採用每個終端設置私有IP,而在路由器或必要的服務器上設置全局IP
  • 全局IP要求唯一,但是私有IP不需要,在不同的局域網中出現的私有IP是完全不影響的

NAT IP轉換過程

  • NAT路由器將源地址從10.0.0.10替換成全局的IP 202.244.174.37
  • NAT路由器收到外部的數據時,又把目標IP從202.244.174替換回10.0.0.10

NAPT

  • 當多個主機訪問訪問同一個外網服務器,對於服務器返回的數據中,目的IP都是相同對的,NAT路由器中用IP和port來建立這個關聯
    image
  • 這個關聯關係是NAT路由器自動維護的,例如在TCP的情況下,建立鏈接時,就會生成這個表項,在斷開鏈接時,就會刪除這個表項

NAT技術缺陷

  • 無法從NAT外部向內部服務器建立鏈接
  • 轉換表的生成和銷燬是額外的開銷
  • 通信過程一旦NAT設備異常,所有上面的TCP鏈接也會斷開

解決缺陷辦法

NAT穿越技術 – 解決NAT缺點

NAT和代理服務器區別

目的

從應用上講, NAT設備是網絡基礎設備之一, 解決的是IP不足的問題. 代理服務器則是更貼近具體應用, 比
如通過代理服務器進行翻牆, 另外像迅遊這樣的加速器, 也是使用代理服務器.

底層實現(網絡層和應用層)

從底層實現上講, NAT是工作在網絡層, 直接對IP地址進行替換. 代理服務器往往工作在應用層.

範圍

從使用範圍上講, NAT一般在局域網的出口部署, 代理服務器可以在局域網做, 也可以在廣域網做, 也可以
跨網.

部署位置 (防火牆,路由器,服務器)

從部署位置上看, NAT一般集成在防火牆, 路由器等硬件設備上, 代理服務器則是一個軟件程序, 需要部署
在服務器上.

代理服務器作用

  • 翻牆:廣域網中的代理
  • 負載均衡:局域網中的代理

正向代理和反向代理

代購的例子

花王尿不溼是一個很經典的尿不溼品牌, 產自日本.
我自己去日本買尿不溼比較不方便, 但是可以讓我在日本工作的表姐去超市買了快遞給我. 此時超市看到的買家是我表
姐, 我的表姐就是 “正向代理”;
後來找我表姐買尿不溼的人太多了, 我表姐覺得天天去超市太麻煩, 乾脆去超市買了一大批尿不溼屯在家裏, 如果有人
來找她代購, 就直接把屯在家裏的貨發出去, 而不必再去超市. 此時我表姐就是 “反向代理”

  • 正向代理用於請求的轉發(例如藉助代理繞過反爬蟲).
  • 反向代理往往作爲一個緩存.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章