計算機網絡【六】網絡層協議

網絡層負責在不同網絡之間盡力轉發數據包(基于數據包的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

路由器等需要正確配置路由表才能夠進行通訊。

計算機通信的過程

發送端準備
  1. 應用程序準備要傳輸的文件
  2. 傳輸層將文件分段,并進行編號
  3. 網絡層給每一段加上地址
  4. 數據鏈路層 :判斷方法:使用自己的子網掩碼對比源IP和目標IP的網絡部分(與運算)
  • 相同,目標計算機和自己在同一個局域網內:廣播詢問目標IP的MAC地址(ARP協議)
  • 不相同,說明不在一個網段:廣播詢問網關IP的MAC地址(ARP協議)
    將MAC地址加在數據包上,再加上FCS(幀檢驗序列)
  1. 物理層將幀轉換為比特流發送

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 -aWindows查看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協議

根據帶寬選擇最佳路徑

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383656.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

epoll 水平觸發與邊緣觸發

https://blog.csdn.net/lihao21/article/details/67631516?refmyread epoll也是實現I/O多路復用的一種方法,為了深入了解epoll的原理,我們先來看下epoll水平觸發(level trigger,LT,LT為epoll的默認工作模式&#xff…

計算機網絡【3】網絡層

主要任務時把分組從源端發送到目的端,為分組交換網上的不同主機提供服務。網絡層傳輸單位是數據報 功能: 路由選擇與分組轉發(最佳路徑 )異構網絡互聯擁塞控制 數據交換方式 電路交換:通信時延小、有序傳輸、沒有沖…

C++空類的大小

https://blog.csdn.net/lihao21/article/details/47973609 本文中所說是C的空類是指這個類不帶任何數據,即類中沒有非靜態(non-static)數據成員變量,沒有虛函數(virtual function),也沒有虛基類(virtual base class)。 直觀地看&#xff0c…

Linux探秘之用戶態與內核態

https://www.cnblogs.com/bakari/p/5520860.html 一、 Unix/Linux的體系架構 如上圖所示,從宏觀上來看,Linux操作系統的體系架構分為用戶態和內核態(或者用戶空間和內核)。內核從本質上看是一種軟件——控制計算機的硬件資源&…

哈夫曼算法證明+哈夫曼編碼譯碼程序實現

哈夫曼算法證明 哈夫曼算法是一種貪心算法,我們考慮證明其最優子結構和貪心選擇性質: 最優子結構:假設一個樹是哈夫曼樹,則以其任意節點為根節點的最大子樹也是哈夫曼樹。 證明:子樹的根節點的值是其所有葉子節點出現…

Python3小知識

對于迭代器對象,Python默認賦值是將引用賦值,即指向同一片內存空間。為了實現對內存空間的賦值,我們可以使用分片進行深復制。例如: 當定義元組的時候,我們一般使用小括號將元素包圍起來,也可以不使用括號…

匯編:實現日歷星期數查詢工具

編制一個簡單日歷查詢工具,輸入年、月、日,能夠判斷當日的星期數,并進行輸出,數據的輸入和結果的輸出要有必要的提示,且提示獨占一行。 查閱資料 ? 經過查閱資料,發現有兩個相關的算法可以解決這個問題&…

一個通用純C隊列的實現

https://blog.csdn.net/kxcfzyk/article/details/31728179 隊列并不是很復雜的數據結構,但是非常實用,這里實現一個隊列是因為在我的另一篇博客非常精簡的Linux線程池實現中要用到。 隊列API定義如下: //queue.h #ifndef QUEUE_H_INCLUDED…

Dijkstra算法介紹+正確性證明+性能分析

算法介紹 源點s,數組d[u]表示s到u的最短距離,空集S,點集Q初始化:將源點s從點集中去掉,加入S,d[s]0,?v∈Q,d[v]w[s][v]\forall v\in Q ,d[v]w[s][v]?v∈Q,d[v]w[s][v]將Q中d[v]最小的點去掉加入S,并對u∈…

Linux C 實現一個簡單的線程池

https://www.cnblogs.com/GyForever1004/p/9185240.html 線程池的定義 線程池是一種多線程處理形式,處理過程中將任務添加到隊列,然后在創建線程后自動啟動這些任務。線程池線程都是后臺線程。每個線程都使用默認的堆棧大小,以默認的優先級…

斐波那契數列求解+尾遞歸

1.普通遞歸 這里觀察f[4]的遞歸樹代替f[10]的遞歸樹(后者比較大,畫不下)。 使用遞歸求解的時候復雜度為T(n)T(n?1)T(n?2)T(n)T(n-1)T(n-2)T(n)T(n?1)T(n?2),觀察遞歸樹,發現降速最快的是最右邊每次減2&#xff0c…

循環服務器,并發服務器模型以及I/O多路轉接模型

https://blog.csdn.net/xinianbuxiu/article/details/53455784 一、基于TCP/IP協議的基本循環服務器 tcp_server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #incl…

c++繼承父類的子類,如何調用父類的同名函數?

https://blog.csdn.net/qq_26399665/article/details/52080215 子類調用父類的同名函數&#xff1a; 子類和父類返回值參數相同&#xff0c;函數名相同&#xff0c;有virtual關鍵字&#xff0c;則由對象的類型決定調用哪個函數。 子類和父類只要函數名相同&#xff0c;沒有vi…

LCS最長公共子串

問題介紹 LCS問題(longest common subsequence problem)指的是求解兩個字符串最長公共子序列問題。這里的子序列是可以不連續的。LCS問題廣泛地出現在計算生物學中&#xff08;DNA序列、系統生成樹等等&#xff09;。這里介紹如何解決LCS問題&#xff0c;以及算法的正確性證明…

將字符串中的空格用%20替換

如果不需要原地操作&#xff0c;則一遍遍歷&#xff0c;將非空串復制&#xff0c;遇到空格加上%20&#xff0c;如果需要原地操作&#xff0c;首先進行遍歷出空格的個數x,然后擴容2x,從后往前遍歷實現。如果非空格字符串比空格字符串多的多的時候而且字符串非常長的時候使用原地…

12步輕松搞定python裝飾器

http://python.jobbole.com/81683/ 呵呵&#xff01;作為一名教python的老師&#xff0c;我發現學生們基本上一開始很難搞定python的裝飾器&#xff0c;也許因為裝飾器確實很難懂。搞定裝飾器需要你了解一些函數式編程的概念&#xff0c;當然還有理解在python中定義和調用函數…

操作系統【六】虛擬內存

傳統存儲管理方式的不足 一次性&#xff1a;作業必須一次性全部裝入內存后才能開始運行。這會造成&#xff1a;當作也很大時不能全部裝入內存&#xff1b;當大量作業要求運行時&#xff0c;由于內存無法容納所有作業&#xff0c;因此只有少量作業能夠運行&#xff0c;導致多道…

python裝飾器詳解

https://blog.csdn.net/xiangxianghehe/article/details/77170585 你會Python嘛&#xff1f; 我會&#xff01; 那你給我講下Python裝飾器吧&#xff01; Python裝飾器啊&#xff1f;我沒用過哎 以上是我一個哥們面試時候發生的真實對白。 ———————————————-分…

SQL Server【一】簡介和基本概念和命令

數據結構和數據庫的區別 數據庫是應用軟件級別研究數據的存儲和操作&#xff08;主要針對磁盤上的數據&#xff09; 數據結構是在系統軟件級別研究數據的存儲和操作&#xff08;主要是針對內存中的數據&#xff09; 對硬盤數操作是數據庫的強項&#xff0c;是數據庫研究的核心…

SQL Server【二】單表查詢

查詢 計算列 select * from emp; -- *通配符&#xff0c;表示所有的字段 -- from emp 從emp表查詢select empno, ename from emp; select ename as "員工姓名", sal*12 as "年薪" from emp;-- as可以省略&#xff0c;用于設置字段名 -- 注意用雙引號將字…