網絡層負責在不同網絡之間盡力轉發數據包(基于數據包的IP地址轉發)。不負責丟失重傳,也不負責順序(每一個數據包都是單獨選擇路徑)。
可靠傳輸是由傳輸層實現。
網絡設備和OSI參考模型
通過分層,屏蔽了互聯網傳輸中的物理設備和通訊協議的復雜性。
路由器可以看到網絡層的地址,因此稱路由器為三層設備。
子網掩碼的作用:說明網段中網絡部分是哪些,比如說子網掩碼為255.255.0.0
,這就意味著這個局域網中的所有計算機(比如說IP地址為x.y.z.w
)都有相同的網絡部分x.y
,后面的主機部分z.w
是可以自己規劃的。
網關:局域網中和外界交換數據的接口(一般是交換機接該局域網的接口),用于說明如果需要向外部傳輸數據需要給哪個接口發送信息。有一個不成文的規定:網關地址為該局域網內第一個可以使用的地址。例如:子網掩碼255.255.0.0
,網絡部分11.10.
,那么網關的地址一般就是11.10.0.1
。
路由器等需要正確配置路由表才能夠進行通訊。
計算機通信的過程
發送端準備
- 應用程序準備要傳輸的文件
- 傳輸層將文件分段,并進行編號
- 網絡層給每一段加上地址
- 數據鏈路層 :判斷方法:使用自己的子網掩碼對比源IP和目標IP的網絡部分(與運算)
- 相同,目標計算機和自己在同一個局域網內:廣播詢問目標IP的MAC地址(ARP協議)
- 不相同,說明不在一個網段:廣播詢問網關IP的MAC地址(ARP協議)
將MAC地址加在數據包上,再加上FCS(幀檢驗序列)
- 物理層將幀轉換為比特流發送
IP地址負責首地址和目的地址,MAC地址負責這一跳和下一跳。交換機等設備只能根據MAC地址進行傳輸。集線器是廣播式傳輸,不會對比特流進行判斷。
集線器和網線都是物理層設備。
交換機進行存儲轉發:會將比特流接收,然后查看目標MAC地址決定如何轉發。即交換機可以看懂數據鏈路層的地址。因此說交換機工作在第二層(數據鏈路層),是二層設備。
路由器:收到數據幀以后檢查是發送給自己的然后將數據幀轉換為數據包(網絡層數據),然后根據目標IP地址和自己儲存的路由表選擇路徑。
(會修改數據包中的生存時間和數據幀中的MAC地址)
點到點通信:使用PPP協議,將數據包重新封裝成數據幀,不寫原MAC地址,只寫目標MAC地址FF(因為不需要判斷,只有一個鏈路)。
因此路由器是網絡層設備(三層設備)
病毒是一種應用程序。在傳送的時候會被應用層切成小段,因此集線器、交換機、路由器都不會中病毒。
但是病毒可能影響網絡通信:
比如在內網不斷發送廣播通信,或者某個計算機占用了過多的流量。
網絡層協議
ARP協議為IP協議提供服務,IP協議為ICMP和IGMP協議提供服務
ARP協議
負責將IP地址解析為MAC地址,是數據通信之前的工作。
假如發送方IP為X,MAC為A,接收方IP為Y
在確定IP地址Y以后,發送廣播(目標MAC地址為全FFF-FF-FF-FF-FF-FF
),詢問IP地址為Y的電腦的MAC地址,Y收到廣播后發現是詢問自己的MAC地址,就將自己的MAC地址B告訴X。然后X將Y的MAC地址保存在緩存中,方便下次發送數據(下次發送的時候就不會進行詢問了)
arp -a
Windows查看ARP緩存
ARP欺騙
因為ARP協議采取的是廣播通信的方式來獲得目標IP的MAC地址,如果根據這一特性當收到廣播的時候就算不是詢問自己的MAC地址也回應, 就會導致發送方誤以為這個MAC地址是真的(當然目標IP也會發送一個MAC地址,但是后發送的會覆蓋前面的),然后將數據都發給這個惡意回復的電腦,再將數據發給目標IP,通過這種方式獲取本不是發送給自己的數據。
相關軟件:網絡執法官、P2P終結者
ARP欺騙是數據鏈路層故障(因為是MAC地址出錯)
可以用arp -s
靜態設置IP地址的MAC地址
但是靜態設置的重新啟動電腦以后就會被清除
可以將命令放在bat文件中,然后運行gpedit.msc
(組策略編輯器)添加到開機腳本中
本地連接->修復,會將ARP的緩存清除掉
ICMP協議
在IP協議之上,用來測試網絡層是否暢通,如果有故障還能報告故障。
PING 命令使用 ICMP協議
主要命令PING
(Packet Internet Grope),因特網包探索其,用于測試網絡連接量的程序。
ping 局域網的延遲一般小于10ms
TTL 對方發回來的數據包的生存時間(數據包的生存周期),每經過一個服務器,數據包的TTL減一,當數據包的TTL為0的時候將不會再發送該數據包。(通過這種方式防止數據包在網路上循環)
使用TTL可以粗略地估計對方的操作系統:如果ping的時間不長,可以通過TTL的范圍判斷。
- Linux 64
- Windows 128
- Unix 255
參數: /?
查看所有的參數
ping -t
不斷ping ping -l size IP
改變包的大小
ping -i TTL IP
改變TTL的大小,能夠跟蹤途徑的服務器
QQ能上網,但是網頁打不開:說明網絡層沒有問題,沒有欠費,沒有ARP欺騙,應該配置DNS服務器。
就算DNS服務器出現問題,QQ能夠登錄的原因是QQ直接使用IP地址,因此不需要解析域名。
ping的時候注意是哪里返回信息
本地返回目標主機不可到達:可能網關錯誤
網關返回目標主機不可到達:路由器沒有設置路由
pathping
跟蹤數據包路徑,計算丟包情況(只能夠在windows下使用)
tracert
跟蹤路徑,在路由器上也支持(traceroute
)
ping
命令使用ICMP協議,雖然可以產生網絡流量,但是是網絡層命令,不是應用層程序(不需要對方安裝什么應用程序)
IGMP協議
Internet 組播管理協議
通信方式
點到點通信:目標地址很明確
廣播通信:在一個網段中實現,目標MAC地址為全一,網段中的所有計算機都能收到。但是無法跨越路由器
組播(多播):相當于電視頻道,讓一組計算機綁定多播地址接收一個計算機發送的信息
IGMP協議原理
IGMP協議放在路由器上,掃描本網段中哪些計算機綁定多播地址,向上游路由器請求數據包。
多播不建立會話。
IP數據包
一個IP數據包由首部和數據兩部分組成
首部:
- 首部的前一部分是固定長度,共20字節,是所有IP數據報必須具有的
- 在首部的固定部分的后面是一些可選字段,其長度是可變的(大部分數據包都沒有)
- 版本 4bit:用來標識TCP/IP協議是哪一個版本的 v4/v6
- 首部長度:4bit,是否有可選字段
- 區分服務:一個字節,設置數據包優先級 QoS
- 總長度:2字節,數據包總共的長度,16bit,最大65535字節(216-1),數據鏈路層數據最大1500字節(最大傳輸單元MTU),因此需要對大的數據包進行分片才能成功發送。因此數據包的數據部分最大為1480字節(1500-20),否則就需要分片
分片:將數據包中數據部分分割后都加上IP地址和分片的標識 ,傳輸后再組裝成大的包再給網絡層。
如果有的分片沒有達到,接收方就會等待。(淚滴攻擊) - 標識:2個字節數據包的標號,同一個數據包的分片有相同的標識
- 標志:占3bit,目前只有兩位有意義。標志字段的最低為是MF(More Fragment),MF=1標識后面還有分片,MF=0標識這是最后一個分片。標志字段中間一位是DF(Don’t Fragment),只有當DF=0的時候才允許分片
- 片偏移:該片開始部分在原數據包中數據部分位置/8
- 生存時間:就是ping命令中的TTL,每經過一個路由器就會減一,防止數據包在路由環路上一直傳送
- 協議:傳輸層UDP(17)/TCP(6) 網絡層OSPF(89)/ICMP(1)/IGMP(2) IPv6(41)
- 首部檢驗和:只檢驗數據包的首部,不檢驗數據部分。
- 源IP地址32bit 4字節
- 目標IP地址32bit 4字節
- 可變部分:為了增加IP數據包的功能(新的IP版本IPv6沒有可變部分),實際上很少使用
IP協議
讓路由器自動學習路由表的所有協議都是IP協議,有很多。
路由分為兩種:
- 管理員設置的靜態路由(網絡環境比較復雜的時候不太現實)
- 路由器自動學習的動態路由
網絡暢通的條件:數據包有去有回:沿途的路由都知道源IP地址和目標IP地址應該怎么走
靜態路由:需要管理員告訴路由器所有沒有直連的網絡下一跳給誰
適合小的網絡
不會隨著網絡狀態的變化自動調整
動態路由
RIP協議
每個路由器周期性廣播路由表:每隔30秒發一個廣播,告訴自己連接的網段。
如果沒有發送廣播其他路由器就認為沒有到達
判斷路徑的標準:跳數越少越好
周期性更新說明路由器還在工作
如果3個周期(90S)沒有發送消息,鄰居就認為該路由器已經去世
最大跳數15跳。
不適應網絡規模比較大的情況
OSPF協議
根據帶寬選擇最佳路徑