網絡層負責在不同網絡間盡力轉發數據包,不負責丟失重傳,也不負責順序重排序。
路由器工作在第三層網絡層,因此路由器是三層設備。
ARP協議
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播(目標MAC地址是FF-FF-FF-FF-FF-FF)到網絡上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。ARP廣播不可跨網段,只在本網段廣播。
arp -a:查看緩存的MAC地址。
ARP欺騙
-
單向ARP欺騙:
掐斷 A 與 B 的通訊,實現原理:C 向 A 發送一條 Arp 數據包,內容為:B 的地址是 00:00:00:00:00:00 (一個錯誤的地址),那么 A 此后向 B 發的數據包都會發到 00,而這個地址是錯誤的,所以通訊中斷了,但是要注意了,這里只是 A –> B 中斷了,B –> A 沒有中斷,所以這個叫單向欺騙。掐斷 B 與 A 的通訊,實現原理和第一條一樣,如果和第一條一起發,那么 A 和 B 的通訊就完全中斷了,即:A <– × –> B
嗅探 A 與 B 的通訊,實現原理:C 向 A 發送一條 Arp 數據包,內容為:B 的地址是 AA:BB:CC:DD:EE:FF (C自己的地址),也就是說,C 對 A 說:我才是 B,于是 A 把向 B 發送的數據都發給 C 了,C 得到數據后就可以為所欲為了,可以直接丟棄,那么通訊中斷,也可以再次轉發給 B,那么又形成回路,C 當了個中間人,監視 A 和 B 的通訊,此時你就可以用CAIN等任何抓包工具進行本地嗅探了,因為目標機器數據完全從你這你走,任意嗅探。當然你可以不轉發所有數據,只轉發部分數據, 把某些特定協議的數據分離出來,然后單獨處理,例如替換、修改(類似 zxarp 等 Arp 工具的插入、劫持數據功能),或者干點其他啥,都行。
雙向ARP欺騙:
A要跟C正常通訊,B向A說我是才C。B向C說我才是A,那么這樣的情況下把A跟C的ARP緩存表全部修改了。以后通訊過程就是 A把數據發送給B,B再發送給C,C把數據發送B,B再把數據給A。
ICMP協議
PING (Packet Internet Groper),因特網包探索器,用于測試網絡連接量的程序。Ping發送一個ICMP(Internet Control Messages Protocol,因特網信報控制協議)回聲請求消息給目的地并報告是否收到所希望的ICMP echo (ICMP回聲應答)。它是用來檢查網絡是否通暢或者網絡連接速度的命令。
它所利用的原理是這樣的:利用網絡上機器IP地址的唯一性,給目標IP地址發送一個數據包,再要求對方返回一個同樣大小的數據包來確定兩臺網絡機器是否連接相通,時延是多少。
ping指的是端對端連通,通常用來作為可用性的檢查, 但是某些病毒木馬會強行大量遠程執行ping命令搶占你的網絡資源,導致系統變慢,網速變慢。嚴禁ping入侵作為大多數防火墻的一個基本功能提供給用戶進行選擇。通常的情況下你如果不用作服務器或者進行網絡測試,可以放心的選中它,保護你的電腦。
ping + ip地址/域名 //發四次ICMP包,如 ping www.baidu.com
ping + ip地址/域名 + -t // 一直發ICMP包,直到 ctrl+c停止,用來不斷檢驗網絡是否通暢,如 ping www.baidu.com -t
ping /? // 查看ping的參數說明
TTL是 Time To Live的縮寫,該字段指定IP包被路由器丟棄之前允許通過的最大網段數量。TTL是IPv4包頭的一個8 bit字段。TTL每過一次路由器減一,減到零后數據包丟失。不同操作系統的默認初始TTL不同,Linux 64,Windows 128,Unix 255
pathping是指提供有關在源和目標之間的中間躍點處網絡滯后和網絡丟失的信息。
C:\Users\Yukim>pathping www.baidu.com
通過最多 30 個躍點跟蹤
到 www.a.shifen.com [220.181.111.188] 的路由:
0 DESKTOP-0V38VPE [10.170.53.153]
1 10.170.72.254
2 172.16.255.242
3 172.16.255.254
4 113.140.11.97
5 10.224.13.9
6 117.36.240.109
7 * 202.97.65.113
8 * * *
正在計算統計信息,已耗時 175 秒...
指向此處的源 此節點/鏈接
躍點 RTT 已丟失/已發送 = Pct 已丟失/已發送 = Pct 地址
0 DESKTOP-0V38VPE [10.170.53.153]
0/ 100 = 0% |
1 0ms 0/ 100 = 0% 0/ 100 = 0% 10.170.72.254
0/ 100 = 0% |
2 19ms 0/ 100 = 0% 0/ 100 = 0% 172.16.255.242
0/ 100 = 0% |
3 0ms 0/ 100 = 0% 0/ 100 = 0% 172.16.255.254
0/ 100 = 0% |
4 0ms 0/ 100 = 0% 0/ 100 = 0% 113.140.11.97
0/ 100 = 0% |
5 1ms 0/ 100 = 0% 0/ 100 = 0% 10.224.13.9
0/ 100 = 0% |
6 3ms 0/ 100 = 0% 0/ 100 = 0% 117.36.240.109
100/ 100 =100% |
7 --- 100/ 100 =100% 0/ 100 = 0% 202.97.65.113
跟蹤完成。
Tracert(跟蹤路由)是路由跟蹤實用程序,用于確定 IP數據包訪問目標所采取的路徑。Tracert 命令使用用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網絡上其他主機的路由。
IGMP協議
IGMP(因特網組播管理協議,Internet Group Management Protocol)可跨網段傳播,比較節省流量。
單播(unicast): 是指封包在計算機網絡的傳輸中,目的地址為單一目標的一種傳輸方式。它是現今網絡應用最為廣泛,通常所使用的網絡協議或服務大多采用單播傳輸,例如一切基于TCP的協議。
組播(multicast): 也叫多播, 多點廣播或群播。 指把信息同時傳遞給一組目的地址。它使用策略是最高效的,因為消息在每條網絡鏈路上只需傳遞一次,而且只有在鏈路分叉的時候,消息才會被復制。
廣播(broadcast):是指封包在計算機網絡中傳輸時,目的地址為網絡中所有設備的一種傳輸方式。實際上,這里所說的“所有設備”也是限定在一個范圍之中,稱為“廣播域”。
IP數據包
一個IP數據包由首部和數據兩部分組成:
- 首部的前一部分是固定長度,共20字節,是所有IP數據包必須具有的。
- 在首部的固定部分后是一些可選字段,其長度可變,通常沒有。
- 版本:占4位,指IP協議的版本。通信雙方使用的IP協議版本必須一致。日前廣泛使用的 IP協議版本號為 4 (即 IPv4)。IPv6 目前還處于起步階段。
- 首部長度:占 4 位,可表示的最大十進制數值是 15。請注意,這個字段所表示數的單位是32位字 ( 1 個32位字長是4 字節),因此,當 IP 的首部長度為 1111 時 (即十進制的 15),首部長度就達到 60字節。當 IP 分組的首部長度不是4字節的整數倍時,必須利用最后的填充字段加以填充。因此數據部分永遠在 4字節的整數倍開始,這樣在實現 IP協議時較為方便。首部長度限制為 60字節的缺點是有時可能不夠用。這樣做的目的是希望用戶盡量減少開銷。最常用的首部長度就是 20 字節 (即首部長度為 0101),這時不使用任何選項。
- 服務:占 8 位,用來獲得更好的服務。這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過。1998年IETF把這個字段改名為區分服務 DS (DifferentiatedServices)。只有在使用區分服務時,這個字段才起作用。
- 總長度:總長度指首部及數據之和的長度,單位為字節。因為總長度字段為 16位,所以數據報的最大長度為 2^16-1=65 535字節。在IP層下面的每一種數據鏈路層都有自己的幀格式,其中包括幀格式中的數據字段的最大長度,即最大傳送單元 MTU (Maximum Transfer Unit)。當一個數據報封裝成鏈路層的幀時,此數據報的總長度 (即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值。
-
標識:占 16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加 1,并將此值賦給標識字段。但這個“標識”并不是序號,因為 IP是無連接的服務,數據報不存在按序接收的問題。當數據報由于長度超過網絡的 MTU 而必須分片時,這個標識字段的值就被復制到所有的數據報的標識字段中。相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為
原來的數據報。 - 標志(Flag):占3 位,但目前只有2位有意義。標志字段中的最低位記為 MF (More Fragment)。MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最后一個。標志字段中間的一位記為 DF(Don't Fragment),意思是“不能分片”。只有當 DF=0時才允許分片。
- 片偏移:占 13位。較長的分組在分片后,某片在原分組中的相對位置。也就是說,相對用戶數據字段的起點,該片從何處開始。片偏移以 8個字節為偏移單位。這就是說,每個分片的長度一定是 8字節 (64位)的整數倍。
- 生存時間:占 8位,生存時間字段常用的英文縮寫是TTL (Time To Live),其表明數據報在網絡中的壽命。由發出數據報的源點設置這個字段。其目的是防止無法交付的數據報無限制地在因特網中兜圍子,因而白白消耗網絡資源。最初的設計是以秒作為 TTL的單位。每經過一個路由器時,就把TTL減去數據報在路由器消耗掉的一段時間。若數據報在路由器消耗的時間小于 1 秒,就把TTL值減 1。當 TTL值為 0時,就丟棄這個數據報。
- 協議:占 8 位,協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。
- 首部檢驗和:占 16位。這個字段只檢驗數據報的首部,不包括數據部分。這是因為數據報每經過一個路由器,都要重新計算一下首都檢驗和 (一些字段,如生存時間、標志、片偏移等都可能發生變化)。不檢驗數據部分可減少計算的工作量。
- 源地址:占32位。
- 目的地址:占 32位。
- IP數據報首部的可變部分就是一個可選字段。選項字段用來支持排錯、測量以及安全等措施,內容很豐富。此字段的長度可變,從 1 個字節到40個字節不等,取決于所選擇的項目。某些選項只需要 1 個字節,它只包括 1 個字節的選項代碼。但還有些選項需要多個字節,這些選項一個個拼接起來,中間不需要有分隔符,最后用全0 的填充字段補齊成為 4字節的整數倍。 增加首都的可變部分是為了增加 IP 數據報的功能,但這同時也使得 IP 數據報的首部長度成為可變的。這就增加了每一個路由器處理數據報的開銷。實際上這些選項很少被使用。新的 IPv6就將 IP數據報的首部長度做成固定的。