计算机网络-网络层上篇

目录

一、网络层概述

二、网络层提供的两种服务

(一)面向连接的虚电路服务

(二)无连接的数据报服务

(三)虚电路服务与数据报服务的比较

三、IPv4地址及其应用

(一)IPv4地址概述

(二)分类编址的IPv4地址

1、A类地址

2、B类地址

3、C类地址 

(三)划分子网的IPv4地址

(四)无分类编址的IPv4地址

(五)IPv4地址的应用规划

1、定长的子网掩码FLSM

2、边长的子网掩码VLSM

3、例题

四、IP数据包的发送和转发过程

五、静态路由配置及其可能产生的路由环路问题

(一)静态路由

​(二)默认路由

(三)特定主机路由

(四)路由环路问题

1、静态路由配置错误导致的路由环路问题

2、聚合了不存在的网络导致的路由环路

3、网络故障导致的路由环路


一、网络层概述

网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输

要实现网络层任务,需要解决以下主要问题:

  • 网络层向运输层提供怎样的服务 (“可靠传输”还是“不可靠传输”)
  • 网络层寻址问题
  • 路由选择问题

因特网 (Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈

由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层

综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。

二、网络层提供的两种服务

(一)面向连接的虚电路服务

可靠通信由网络来保证
必须建立网络层的连接——虚电路VC(Virtual Circuit)
通信双方沿着已建立的虚电路发送分组
目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)。
这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复)。

通信结束后,需要释放之前所建立的虚电路。
很多广域分组交换网都使用面向连接的虚电路服务例如,曾经的X.25和逐渐过时的帧中继FR、异步传输模式ATM等。

然而,因特网的先驱者并没有采用上面这种服务,而是采取了无连接的数据报服务。 

(二)无连接的数据报服务

可靠通信应当由用户主机来保证
不需要建立网络层连接
每个分组可走不同的路径
每个分组的首部必须携带目的主机的完整地址

这种通信方式所传送的分组可能误码、丢失、重复和失序
由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)

因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘 (用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心。

(三)虚电路服务与数据报服务的比较

由于TCP/IP体系结构的因特网的网际层提供的是简单灵活、无连接的、尽最大努力交付的数据报服务,因此本章主要围绕网际层如何传送IP数据报这个主题进行讨论。 

三、IPv4地址及其应用

(一)IPv4地址概述

在TCP/IP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚。

IPv4地址就是给因特网(lnternet) 上的每一台主机 (或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符
IP地址由因特网名字和数字分配机构ICANN(Intemet Corporation for Assigned Names and Numbers)进行分配

  • 我国用户可向亚太网络信息中心APNIC(Asia Pacific Network lnformation Center)申请IP地址,需要缴费
  • 2011年2月3日,互联网号码分配管理局IANA (由ICANN行使职能)宣布,IPv4地址已经分配完毕
  • 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。

IPv4地址的编址方法经历了如下三个历史阶段

32比特的IPv4地址不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。 

8位无符号二进制整数转十进制数的转换方法 

十进制正整数转8位无符号二进制数的转换方法 

(二)分类编址的IPv4地址

1、A类地址

2、B类地址

注意:有些教材中指出128.0是保留网络号,B类第一个可指派的网络号为128.1。
但根据2002年9月发表的RFC 3330文档,128.0网络号已经可以分配了。有兴趣的同学可以自行查询以128.0开头的IP地址,看看它们属于哪些国家

3、C类地址 

注意:有些教材中指出192.0.0是保留网络号,C类第一个可指派的网络号为192.0.1。
但根据2002年9月发表的RFC 3330文档,192.0.0网络号已经可以分配了。只不过目前还没有分配出去。

总结: 

(三)划分子网的IPv4地址

为什么会出现划分子网?

举例:假设子网1本来是一个公司的所有设备,申请的是B类子网,但是只使用了子网的一部分IP地址,当后续公司扩展,新建了其他子网,此时如果继续申请B类子网, 不仅会浪费原有B类子网的IP地址,还需要等待时间和花费更多的费用。所以就出现了子网划分。在主机号中取一部分的比特当成子网号

如果未在图中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特被
用作子网号了呢?

32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号

  • 子网掩码使用连续的比特1来对应网络号和子网号
  • 子网掩码使用连续的比特0来对应主机号
  • 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址

【举例】已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节
【解析】

默认的子网掩码是指在未划分子网的情况下使用的子网掩码

(四)无分类编址的IPv4地址

划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题。
1993年,IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing)的RFC文档:RFC1517~1519和1520。

  • CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念
  • CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。

CIDR使用“斜线记法”,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量

CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块“

我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节

  • 地址块的最小地址
  • 地址块的最大地址
  • 地址块中的地址数量
  • 地址块聚合某类网络(A类、B类或C类)的数量地址掩码(也可继续称为子网掩码)

【练习】请给出CIDR地址块128.14.35.7/20的全部细节(最小地址,最大地址,地址数量,聚合
C类网数量,地址掩码)。

解析

路由聚合 

(五)IPv4地址的应用规划

1、定长的子网掩码FLSM

  • 使用同一个子网掩码来划分子网
  • 子网划分方式不灵活: 只能划分出2”个子网(n是从主机号部分借用的用来作为子网号的比特数量)
  • 每个子网所分配的IP地址数量相同容易造成IP地址浪费

2、边长的子网掩码VLSM

  • 使用不同的子网掩码来划分子网
  • 子网划分方式灵活: 可以按需分配
  • 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费

3、例题

【举例】假设申请到的C类网为218.75.230.0,请使用定长的子网掩码给下图所示的小型互联网中的各设备分配IP地址

我们需要将C类网络218.75.230.0划分成5个子网,每个子网上可分配的IP地址数量不得少于各自的需求

因为是5个子网,所以需要3位比特位作为子网号

划分出来的8个子网如下,从其中挑选5个分配即可:

【举例】假设申请到的地址块为218.75.230.0/24,请使用变长的子网掩码给下图所示的小型互联网中的各设备分配IP地址

首先分析至少需要多少位主机位才能满足需要

我们需要从地址块218.75.230.0/24中取出5个地址块(1个“/27”地址块,3个“/28”地址块,1个“/30”地址块),按需分配给5个网络

四、IP数据包的发送和转发过程

IP数据报的发送和转发过程包含了以下两个部分:

  • 主机发送IP数据包
  • 路由器转发IP数据包

以下是两个网络,由路由器R相连,不同网络间的主机相互发送数据属于间接交付,同个网络内的属于直接交付。 

源主机是如何知道目的主机是否与自己在同一网络中?

将目标主机的IP地址与自己的子网掩码相与,结果不为自己的网络地址则属于不同网络。如下图,将F地址与C的子网掩码相与,结果与C的网络地址不同,就知道了F与自己不在同一网络内。

主机C如何知道路由器R的存在?S1网络内的主机的默认网关为R路由器端口0的IP地址,主机发送跨网络的数据报会发送到默认网关也就是路由器R。路由器R接收到数据报后会如何进行转发?

  • 检查IP数据报首部是否出错:若出错,则直接丢弃该IP数据报并通告源主机;若没有出错,则进行转发
  • 根据IP数据报的目的地址在路由表中查找匹配的条目:若找到匹配的条目,则转发给条目中指示的下一跳若找不到,则丢弃该IP数据报并通告源主机

对于广播数据报,路由器不转发,也就是路由器即隔离冲突域,也隔离广播域

五、静态路由配置及其可能产生的路由环路问题

静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表

  • 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化
  • 一般只在小规模网络中采用

使用静态路由配置可能出现以下导致产生路由环路的错误

  • 配置错误
  • 聚合了不存在的网络
  • 网络故障

(一)静态路由

路由器R1同个自己的接口0所配置的IP地址和地址掩码,可以自动得出接口0所在的网络,,由于接口0与该网络直连,则下一跳不是路由器地址,而是通过接口0转发IP数据报给该网络中的某个主机,这属于直接交付。这条自动得出的路由条目的类型属于直连路由。R1的1号端口和R2的两个端口也同理。但如果R1要发送IP数据报给网络192.168.2.0/24,此时可以使用路由器的相关配置命令,给R1添加一条到达该目的网络的路由条目。该路由条目是我们人工配置的静态路由,目的网络为目的网络的地址,下一跳则是R2的0号端口 

(二)默认路由

如果是发送IP数据报给R2连接的因特网, 由于因特网中包含了众多的网络,如果我们给R1的添加针对这些网络的每一条路由条目,则会给人工配置带来巨大的工作量,并且使R1的路由表变得非常大,降低了查表转发的速度。实际上,对有相同下一跳的不同目的网络的路由条目,可以用一条默认路由条目来替代。默认路由条目中的目的网络地址为0.0.0.0,地址掩码也为0.0.0.0,其CIDR形式为0.0.0.0/0。在本例中,默认路由的下一跳地址为R2的0号端口,由于是人工配置,因此也为静态路由,当没有路由表项匹配目的地址时,自动发送至默认路由

(三)特定主机路由

特定主机路由一般用于网络管理人员对网络的管理和测试,另外,在需要考虑某种安全问题时,也可采用特定主机路由。特定主机路由的目的网络为特定主机的IP地址,地址掩码为255.255.255.255,其CIDR形式为特定主机IP地址/32,在本例中,特定主机路由的下一跳地址为R2的0号端口,由于是人工配置,因此也为静态路由。可以看到特定主机路由的网络前缀最长,路由最具体,而默认路由前缀最短,路由最模糊,当路由器查表转发IP数据报时,有多条路径可选的情况下,选择前缀最长的路由条目进行转发。

(四)路由环路问题

1、静态路由配置错误导致的路由环路问题

例子基本情况如下:

当R2要转发数据报到网络192.168.1.0/24,下一跳转发的应该是R1的接口0,此时如果错误的配置R2的静态路由表项下一跳地址为R3的端口0,就会出现路由环路

 

为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间TTL字段,IP数据报进入路由器后,TTL字段的值减1。若TTL的值不等于0,则被路由器转发,否则被丢弃。 

2、聚合了不存在的网络导致的路由环路

共同的前缀聚合出一个路由。

当R2想发送到网络192.168.3.0/24,此时R1所连接的网络中不存在改网络,但是在R2的路由表中却有对应的路由条目,所以会转发到R1的1号端口,而R1找不到对应的路由条目,又会转发到默认路由,即R2的0号端口。

可以在R2的路由表中配置聚合网络中不存在的黑洞路由,本质上是路由器内部的一个虚拟接口,让IP数据报有来无回,相当于丢弃该数据报、

3、网络故障导致的路由环路

R1连接的192.168.1.0/24线路发生故障, 会删除路由表相应的路由条目,但是R2不知道,所以发送到该网络的数据报会进入R1的1号端口,然后又走R1的默认路由,发生路由环路。

可以配置黑洞路由,当线路故障,删除相应的路由条目时,添加对应网络的黑洞路由。当网络线路恢复正常,会使黑洞路由失效,添加正常的路由条目。当线路故障,会自动删除路由条目,恢复黑洞路由。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/37081.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python中的生成器(generator)

一、生成器 生成器是 Python 中非常有用的一种数据类型,它可以让你在 Python 中更加高效地处理大量数据。生成器可以让你一次生成一个值,而不是一次生成一个序列,这样可以节省内存并提高性能 二、实现generator的两种方式 python中的gener…

SuperMap iClient3D for Cesium最短路径分析

作者:Mei 目录 前言实现思路实现步骤1、构建二维网络数据集1.1拓扑检查1.2线拓扑数据集处理1.3构建二维网络数据集 2、发布网络分析服务3、实现代码 前言 在交通、消防业务场景中,如果某地发生火灾或者交通事故,需要快速规划出最短抢救路线&a…

flask计算pin码

目录 Flask计算pin码 <1> 概念 什么是pin码&#xff1f; pin码生成条件&#xff1f; 读取相关文件绕过过滤 <2> 源码分析 werkzeug 1.0.x版本 计算PIN的源码 werkzeug 2.0.x版本 计算PIN的源码 <3> 计算生成pin的脚本 CTF中 flask-pin的应用 <1…

volatile原理剖析和实例讲解

一、是什么 volatile是Java的一个关键字&#xff0c;是Java提供的一种轻量级的同步机制&#xff0c; 二、能做什么 保证了不同线程对这个变量进行操作时的可见性&#xff0c;有序性。 三、可见性 可见性主要是指一个线程修改了共享变量的值&#xff0c;另一个线程可以看见…

RPC 框架架构设计

RPC 框架架构设计 RPC 又称远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c;用于解决分布式系统中服务之间的调用问题。通俗地讲&#xff0c;就是开发者能够像调用本地方法一样调用远程的服务。下面我们通过一幅图来说说 RPC 框架的基本架构。 RPC 框架…

Python_与redis数据库交互

目录 redis模块的使用 连接方式 连接池 操作 设置值 获取值 管道 事务 源码等资料获取方法 python可以使用redis模块来跟redis交互 redis模块的使用 安装模块: pip3 install redis 导入模块&#xff1a;import redis 连接方式 严格连接模式&#xff1a;rredis.St…

40.RocketMQ之高频面试题大全

消息中间件如何选型 RabbitMQ erlang开发&#xff0c;对消息堆积的支持并不好&#xff0c;当大量消息积压的时候&#xff0c;会导致 RabbitMQ 的性能急剧下降。每秒钟可以处理几万到十几万条消息。 RocketMQ java开发&#xff0c;面向互联网集群化功能丰富&#xff0c;对在线业…

Win10安全中心怎么关闭?Win10安全中心关闭方法

Win10安全中心怎么关闭&#xff1f;关闭Win10的安全中心可以帮助用户自定义系统的安全和防护设置&#xff0c;但有些用户不知道怎么操作才能关闭安全中心&#xff0c;首先用户需要打开Win10电脑的设置选项&#xff0c;接着打开安全中心&#xff0c;然后关掉安全中心的实时保护、…

SQL力扣练习(六)

目录 1. 部门工资前三高的所有员工(185) 题解一(dense_rank()窗口函数&#xff09; 题解二&#xff08;自定义函数&#xff09; 2.删除重复的电子邮箱(196) 题解一 题解二&#xff08;官方解析&#xff09; 3.上升的温度(197) 解法一&#xff08;DATEDIFF()&#xff09;…

非主流币波段策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

探究Vue源码:mustache模板引擎(5) 对比rollup与webpack,在本地搭建webpack环境

好 从本文开始 我们就来手写一下mustache这个库 他是模板引擎的一个祖先 将模板字符串编译成一个dom字符串 就是它的思想&#xff0c;这也是一个具有跨时代意义的思想 这里的话 我们还是搭一个 webpack 的项目环境 这里值得一提的是 mustache 他官方是通过rollup来进行打包的 …

【Docker】Docker的部署含服务和应用、多租环境、Linux内核的详细介绍

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

速通matplotlib库

速通matplotlib库 前言 ​ 最近在复习之前学习过的知识点&#xff0c;因此想到把学过的总结一下&#xff0c;方便后面再次复习&#xff0c;所以有了这个系列。 说明 ​ 由于标题写的是“速通”&#xff0c;因此我的想法是可以让大家看完这篇文章&#xff0c;可以上手matplotlib…

爬虫正常用哪种代理比较好?

目录 爬虫使用哪种代理IP 爬虫使用代理IP时需要考虑什么 爬虫怎么使用代理IP 爬虫使用代理IP示例代码 爬虫使用哪种代理IP 在使用代理IP进行爬虫时&#xff0c;以下几种类型的代理被认为是比较好的选择&#xff1a; 1. 高匿名代理&#xff1a;高匿名代理隐藏了真实的IP地址…

简要介绍 | 边缘计算:原理,研究现状与未来展望

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对边缘计算进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 边缘计算&#xff1a;原理&#xff0c;研究现状与未来展望 What is Edge Computing? | Moving Intelligence to the Edge 一、背景介…

漏刻有时数据可视化Echarts组件开发(27):端午地图粽情之你的家乡吃甜还是吃咸?

端午地图粽情之你的家乡吃甜还是吃咸&#xff1f; 前言Echarts创意来源Echarts核心代码1.引入外部文件2.构建HTML容器3.Echarts组件开发预置各省数据初始化DOM配置选项geo组件series组件自适应浏览器完整option选项配置代码 前言 中国各地对粽子的口味偏好存在一定的差异&…

【openGauss数据库】---设置开机自启动openGauss数据库服务

【openGauss数据库】---设置开机自启动openGauss数据库服务 &#x1f53b; 一、openGauss 自定义服务的配置文件了解&#x1f53b; 二、设置openGauss 开机自启动&#x1f53b; 三、总结—温故知新 &#x1f448;【上一篇】 &#x1f496;The Begin&#x1f496; 点点关注&am…

css animation 鼠标移入暂停会抖动

如图 实现一个赞助商横向滚动列表墙&#xff0c; 上下两排向右滚动&#xff0c;中间向左滚动&#xff0c;鼠标移入暂停当前行。 实现&#xff1a; // 使用animation.moving {animation: move 20s linear infinite; }keyframes move {0% {}100% {transform: translateX(-50%);…

【深入浅出 Spring Security(十三)】使用 JWT 进行前后端分离认证(附源码)

使用 JWT 进行前后端分离认证 一、JWT 的简单介绍二、使用 JWT 进行安全认证后端结合SpringSecurity实现前端Vue3结合Pinia、Axios实现测试结果 一、JWT 的简单介绍 JWT 全称 Java web Token&#xff0c;在此所讲述的是 JWT 用于身份认证&#xff0c;用服务器端生成的JWT去替代…

CV多模态和AIGC的原理解析:从CLIP、BLIP到Stable Diffusion、Midjourney

前言 终于开写本CV多模态系列的核心主题&#xff1a;stable diffusion相关的了&#xff0c;为何执着于想写这个stable diffusion呢&#xff0c;源于三点 去年stable diffusion和midjourney很火的时候&#xff0c;就想写&#xff0c;因为经常被刷屏&#xff0c;但那会时间错不…