《網絡協議從入門到底層原理》筆記(五)網絡層、網絡層首部


第一章 網絡層概述

網絡層向上只提供簡單靈活的、無連接的盡最大努力交付的數據報服務。
網絡在發送分組時不需要先建立連接。每一個分組(即 IP 數據報)獨立發送,與其前后的分組無關(不進行編號)。
網絡層不提供服務質量的承諾。即所傳送的分組可能出錯丟失重復失序(不按序到達終點),當然也不保證分組傳送的時限。

  • 由於傳輸網絡不提供端到端的可靠傳輸服務,這就使網絡中的路由器可以做得比較簡單,而且價格低廉(與電信網的交換機相比較)。
  • 如果主機(即端系統)中的進程之間的通信需要是可靠的,那么就由網絡的主機中的運輸層負責可靠交付(包括差錯處理、流量控制等)
  • 網絡的造價大大降低,運行方式靈活,能夠適應多種應用。

網絡層數據包(IP數據包,Packet)由 首部、數據 兩部分組成
數據:很多時候是由傳輸層傳遞下來的數據段(Segment)

第二章 網絡層首部

版本(Version)

  •     占4位
  •     0b0100:IPv4
  •     0b0110:IPv6

首部長度(Header Length)

  •     占4位,二進制乘以4才是最終長度
  •     0b0101:20(最小值)
  •     0b1111:60(最大值)

區分服務(Differentiated Services Field)

  •     占8位
  •     可以用於提高網絡的服務質量(QoS,Quality of Service),這個了解即可

總長度(Total Length)

  •     占16位
  •     首部 + 數據的長度之和,最大值是 65535字節
  •     總長度必須不超過最大傳送單元MTU

標識(Identification)

  •     占16位
  •     數據包的ID,當數據包過大進行分片時,同一個數據包的所有片的標識都是一樣的
  •     是一個計數器專門管理數據包的ID,每發出一個數據包,ID就加1

標志(Flags)

  •     占3位
  •     第1位(Reserved Bit):保留
  •     第2位(Don’t Fragment):1代表不允許分片,0代表允許分片
  •     第3位(More Fragments):1代表不是最后一片,0代表是最后一片

片偏移(Fragment Offset)

  • 占13位
  • 片偏移乘以8:字節偏移(wireshark顯示的是字節偏移)
  • 每一片的長度一定是8的整數倍

IP數據報分片

一數據報的總長度為 3820 字節,其數據部分的長度為 3800 字節(使用固定首部),需要分片為長度不超過 1420 字節的數據報片。
因固定首部長度為 20 字節,因此每個數據報片的數據部分長度不能超過 1400 字節。
於是分為 3 個數據報片,其數據部分的長度分別為 1400、1400 和 1000 字節。
原始數據報首部被復制為各數據報片的首部,但必須修改有關字段的值。

生存時間(Time To Live,TTL)

  • 占8位
  • 每個路由器在轉發之前會將TTL減1,一旦發現TTL減為0,路由器會返回錯誤報告
  • 觀察使用 ping 命令后的TTL,能夠推測出對方的操作系統、中間經過了多少個路由器

協議(Protocol)

  • 占8位
  • 表明所封裝的數據是使用了什么協議

首部校驗和(Header Checksum)

  • 用於檢查首部是否有錯誤

第三章 網際控制報文協議 ICMP

為了更有效地轉發 IP 數據報和提高交付成功的機會,在網際層使用了網際控制報文協議 ICMP (Internet Control Message Protocol)

  • ICMP 是互聯網的標准協議。
  • ICMP 允許主機或路由器報告差錯情況和提供有關異常情況的報告。
  • 但 ICMP 不是高層協議(看起來好像是高層協議,因為 ICMP 報文是裝在 IP 數據報中,作為其中的數據部分),而是 IP 層的協議。

PING (Packet InterNet Groper)

  • PING 用來測試兩個主機之間的連通性。
  • PING 使用了 ICMP 回送請求與回送回答報文。
  • PING 是應用層直接使用網絡層 ICMP 的例子,它沒有通過運輸層的 TCP 或UDP。

ping /? 查看ping的用法
ping ip地址 -l 數據包大小 發送指定大小的數據包(ping www.baidu.com -l 1400)
ping ip地址 -f 不允許網絡層分塊 (ping www.baidu.com -l 2000 -f)

第四章 實戰

Wireshark抓包

向百度發送800字節的數據包

通過 Wireshark 抓包查看 ping www.baidu.com 發送的包

通過 ping 命令,實際上發送了4次 ICMP數據包:

通過 Wireshark 可以證實:

 完整網絡層

首部占20個字節,為了發送ICMP數據包還要再占8個字節

根據TTL追蹤經過路由器

這里的TTL是47,如果是linux服務器默認值是64,可能經過17個路由器?

 

ping ip地址 -i TTL 設置TTL的值
通過 tracert、pathping 命令,可以跟蹤數據包經過了哪些路由器

ping baidu.com -i 1 經過1次就消亡,第一個路由器再轉發前減一變為0,不給轉返回錯誤報告,由網關回復。

通過 ping baidu.com -i 1、ping baidu.com - i 2、ping baidu.com -i 3 …

一點一點增大TTL

可以追蹤發包到百度經過的路由器。

tracert 和 pathping 命令實際上更簡單也可以追蹤路由器:
tracert baidu.com
pathping baidu.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM