计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

news2025/1/15 13:36:30

文章目录

  • 1 网络层的两个层面
  • 2 网络协议IP
    • 2.1 虚拟互联网络
    • 2.2 IP地址
      • 2.2.1 固定分类编址方式
      • 2.2.2 无分类编制CIDR
      • 2.2.3 MAC地址和IP地址区别
    • 2.3 地址解析协议ARP
      • 2.3.1 解析过程
    • 2.4 IP数据报格式
  • 3 IP层转发分组流程
  • 4 国际控制报文协议ICMP
    • 4.1 ICMP格式结构
    • 4.2 分类
      • 4.2.1 差错报告报文
      • 4.2.2 询问报文
    • 4.3 应用

以前人们想借鉴电信网(电话网络)成功的经验,尝试采用虚电路服务,让网络层负责可靠交付,通信之前先建立虚电路。但是互联网的先驱者们提出让网络层尽可能简单,即用网络层提供简单灵活的,无连接的,尽最大努力交付的数据报服务,这是因为考虑到互联网的终端都是有智能的计算机而不是简单的电话,所以终端有着很强的数据处理能力,那么也就不需要网络层来进行这部分的可靠交付了。

后来多年的实践证明,先驱者们的选择多么正确

(1)网络层简单使得网络中的路由器可以做得比较简单,价格低廉,因而易于拓展,便于大规模发展

(2)运行方式灵活,能够适应多种应用

1 网络层的两个层面

两个主机通信的时候,需要经过若干个路由器转发信息。

转发的信息实际就两大类:一是传送的数据(数据层面),二是路由信息(控制层面)

  • 数据层面的信息转发:只需要查找本路由器的路由表,把收到的分组从对应的接口发送出去,数据部分直接硬件转发,速度极快,为纳秒数量级
  • 控制层面的信息转发:路由器必须得经常和相邻的路由器交互路由信息更新自己的路由表,所以更为复杂,,软件介入转发,速度会慢了很多,为秒数量级

2 网络协议IP

IP是TCP/IP体系中最重要的两个协议之一

与IP协议配套使用的还有

地址解析协议ARP

网际控制报文协议ICMP

网际组管理协议 IGMP

如下图所示

在这里插入图片描述

我们会发现ICMP,IGMP协议在IP的上方,是因为这两个协议经常需要调用IP协议

而ARP协议在IP的下方,是因为IP协议需要经常调用ARP协议

在讨论网际协议IP前,必须先了解什么是虚拟互联网络

2.1 虚拟互联网络

我们知道网络是要将全世界五花八门的计算机互联在一起,这就需要解决很多问题,最首要的一个就是异构,差异性

比如:不同的寻址方案,不同的组大分组长度,比如不同的差错控制方案等等一大堆。

那么该怎么办呢?

先驱者们提出在网络层,通过IP协议来进行统一,就是不管你其他层的协议是什么,我的网络层大家都用IP协议,这样仿佛在网络层看起来是一个统一的网络,也就叫做我们的虚拟互联网络。

所以大家可以感受到IP协议的重要性了吧!!!之前我们讲的一些协议可能通用性并没有那么强,但IP是互联网每一个用户都得遵守的boss rules

一个在互联网上的设备必须有IP地址才能与其他设备进行通信,接下来我们来了解IP地址

2.2 IP地址

整个因特网看成是一个单一的,抽象的网络

IP地址就是给每一个连接在因特网上的主机分配一个在全世界范围是唯一的32位的标识符

2.2.1 固定分类编址方式

IP地址由网络号和主机号组成,又叫做两级IP——网络号+主机号

​ 网络号表示着主机所连接到的网络,主机号表示该主机(对路由器的话是路由器)

最开始的时候采用固定分类的IP地址,即网络号的位数是固定的(8位A类,16位B类和24位C类)

如何区分不同类别的地址呢?通过网络号的前缀,如下图

在这里插入图片描述

对于A类地址,是网络号为8位的

​ 总地址空间 2 31 2^{31} 231个 接近43亿

​ 网络号个数:由于A类地址网络号有7位,所以A类地址可以分配的网络号个数 2 7 − 2 = 126 个 2^7-2=126个 272=126,这里为什么要减去2呢,因为0000 000的网络号有特殊含义代表“本网络”,0111 1111的网络号代表环回测试

​ 主机号个数: 2 24 − 2 2^{24}-2 2242 为什么这里还要减2呢,因为全0是本网络,全1是所有的广播

对于B类地址,是网络号为16位的

​ 总地址空间 2 30 2^{30} 230

​ 网络号个数: 2 14 2^{14} 214

​ 主机号个数: 2 16 − 2 2^{16}-2 2162

对于C类地址,是网络号为24位的

​ 总地址空间 2 29 2^{29} 229

​ 网络号个数: 2 21 2^{21} 221

​ 主机号个数: 2 8 − 2 2^{8}-2 282

以上A,B,C类都是单播地址,而D类地址是多播地址

这样的好处是简单,看前缀就知道什么类型的地址了

缺点是:使用不灵活的问题

2.2.2 无分类编制CIDR

于是采用更为灵活的CIDR

上一个网络号位数是由类别决定的,每一个类别网络号位数是固定的,而CIDR的网络号位数是由掩码决定的,是可变的

之前的网络号在CIDR里更名为网络前缀

网络前缀可以通过斜线+数字表示,如/20

比如IP 128.14.32.7/20 我们可以知道 网络前缀20位,那么主机号30-20=12位!

人为可以看斜线数字,计算机怎么知道有多少位网络前缀呢?

通过子网掩码

如上述IP 128.14.32.7/20,有20个并列的1,12个并列的0组成掩码

其中1的个数代表网络号个数,0的个数代表主机号个数

我们将IP地址和子网掩码按位与,可以得到网络地址

有三个比较特殊的地址块

1 前缀n=32,用于主机路由

2 前缀n=31,用于点对点路由

3 前缀n=0,且所有主机号为0,用于默认路由

这些用途后面讲到

路由聚合——用较大的CIDR块替代较小的CIDR块,减少查找转发表的时间

2.2.3 MAC地址和IP地址区别

MAC地址是物理地址,硬件实现,在数据链路层,MAC帧首部

IP地址是逻辑地址,软件实现,在网络层,IP数据报首部

假设从A1,到B1,途径R1,R2两个路由器

IP数据报都不变,即IP首地址和源地址都是A1,B1

但MAC帧的首地址尾地址会发生变化,一开始A1,R1,然后R1,R2……

特殊IP地址

在这里插入图片描述

点分十进制记法

IP编址可以解决世界各地网络硬件地址差异大,转换工作复杂的问题

网络地址转换过程

​ 离开专用网的时候,替换源地址,将内部地址替换为全球地址

​ 进入专用网的时候,替换目的地址,将全球地址替换为内部地址

现在有一个问题,就是我们已经知道IP了,那么计算机怎么知道对应的MAC地址呢

这就涉及到地址解析协议ARP

2.3 地址解析协议ARP

已经知道了一个机器(主机或路由器)的IP地址,如何找出其响应的硬件地址

地址解析协议ARP就是用来解决这个问题的

方法:每一个主机都设有一个ARP高速缓存(ARP cache,作用存放最近获得的IP地址绑定的MAC地址,减少ARP广播数量)这里面存有所在局域网上的各个主机和路由器IP地址到硬件地址的映射表

<IP address; MAC address; TTL> TTL:地址映射有效时间

我们可以查看自己的电脑的ARP高速缓存,命令

arp -a|more

2.3.1 解析过程

先在ARP高速缓存中查看有无主机B的IP地址

​ 如果有,就可查出对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该硬件地址写入MAC帧,然后通过局域网发往硬件地址

​ 如果没有,ARP进程在本局域网上广播发送一个ARP请求分组,收到ARP响应分组后,将得到的IP地址到硬件地址的映射写入ARP高速缓存

​ 不在同一个局域网的话,则交给一个路由器

​ 解析是自动进行的

2.4 IP数据报格式

首部和数据部组成,首部是固定长度,共20字节,是所有IP数据报必须拥有的

首部的固定部分的后面是一些可选字段,其长度是可以变的

固定字段的常见内容如下

版本,首部长度,区分服务,总长度,标识,标志

3 IP层转发分组流程

显示本机路由表 route print -4

IP层后转发分组都只找网络前缀了(这样就可以找到目的网络)因为直接如果找到主机号的地步,会需要大量的内容,主机数目实在太大了,查找过程就会非常缓慢……

所以就找前缀相同,看看是不是本网络如果不是的话则通过端口转发。如果有多个匹配的前缀,那么则选取最长的前缀

核心算法(默认前缀按长到短排序)

1 从数据报首部提取目的主机的IP地址D,得出目的网络的地址N

2 若网络N与此路由器直接相连,则把数据报直接交付目的主机D,否则是间接交付。执行3

3 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中下一跳的路由器,否则执行4

4 若路由表中有目的网络地址N的路由,则把数据报传送给路由表中下一跳的路由器,否则执行4

5 若路由表中有一个默认路由,则把数据报传送给路由表中指明的默认路由器,否则执行6

6 报告转发分组出错

特殊的路由

​ 主机路由和默认路由

而为了加快查找表的查找过程,又可以使用二叉线索查找转发表

为了更有效地转发IP数据报并且提高交付机会,使用ICMP协议

使用ICMP后,就可以运行主机或者路由器报告差错情况和提供有关异常情况的报告

4 国际控制报文协议ICMP

提高IP数据报的交付成功机会,允许主机或路由器报告差错情况和提供有关异常情况的报告,但是不是高层协议,ICMP报文是装到IP数据报的数据部分中的

是IP层协议

4.1 ICMP格式结构

在这里插入图片描述

ICMP报文的前四个字节是统一的格式,共有3个字段,即类型、代码、检验和

ICMP的应用举例

Ping

traceroute

4.2 分类

4.2.1 差错报告报文

在如下情况发送ICMP报文

​ 终点不可达

​ 源点抑制

​ 时间超过

​ 参数问题

​ 改变路由(重定向)

4.2.2 询问报文

ICMP报文的

4.3 应用

用ping命令测两个主机的连通性,其中ping是应用层直接使用网络层ICMP的一个例子

另一个例子是LInux的traceroute ,Windows下是tracert,可以知道到目的主机所经过路由器的IP地址

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速排序(一)

目录 快速排序&#xff08;hoare版本&#xff09; 初级实现 问题改进 中级实现 时空复杂度 高级实现 三数取中 快速排序&#xff08;hoare版本&#xff09; 历史背景&#xff1a;快速排序是Hoare于1962年提出的一种基于二叉树思想的交换排序方法 基本思想&#xff1a…

强制性产品认证车辆一致性证书二维码解析

目录 说明 界面 下载 强制性产品认证车辆一致性证书二维码解析 说明 二维码扫描出的信息为&#xff1a; qW0qS6aFjU50pMOqis0WupBnM21DnMxy0dGFN/2Mc9gENXhKh0qEBxFgfXSLoR qW0qS6aFjU50pMOqis0WupBnM21DnMxy0dGFN/2Mc9gENXhKh0qEBxFgfXSLoR 解析后的信息为&#xff1a…

20来岁,大专毕业,学软件测试可行吗?

转行软件测试找不到工作&#xff01; 转行软件测试找不到工作&#xff01; 转行软件测试找不到工作&#xff01; 重要的事情说三遍&#xff01;千万别听培训班咨询老师给你画饼 &#xff1b;我就是某某软件测试培训班出来的&#xff0c;大专&#xff0c;其他专业毕业&#x…

初级数据结构(六)——堆

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;五&#xff09;——树和二叉树的概念 | NULL 下一篇-> 1、堆的特性 1.1、定义 堆结构属于完全二叉树的范畴&#xff0c;除了满足完全二叉树的限制之外&#xff0c;还满…

小程序商城活动页面怎么生成二维码

背景 小程序商城某些页面需要做成活动推广页&#xff0c;或需要某一个页面做成二维码进行推广。比如某些非公开的商品做成一个活动&#xff0c;发送指定部分用户&#xff0c;这个活动页面可以做成二维码。 前提 小程序已经上线 步骤 登录微信小程序官网&#xff0c;选择工具…

数据库交付运维高级工程师-腾讯云TDSQL

数据库交付运维高级工程师-腾讯云TDSQL上机指导&#xff0c;付费指导&#xff0c;暂定99

Element 介绍

Element 介绍 Vue 快速入门 Vue 常见组件 表格 分页组件 其他自己去看吧 链接: 其他组件

【idea】解决sprintboot项目创建遇到的问题

目录 一、报错Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found 二、报错java: 错误: 无效的源发行版&#xff1a;17 三、java: 无法访问org.springframework.web.bind.annotation.CrossOrigin 四、整合mybatis的时候&#xff0c;报java.lang.Ill…

文件函数的简单介绍

1. 向文件中写入一个字符 fputc int_Ch指的是输入文件中的字符 &#xff08;int&#xff09;的原因是以ascll码值的型式输入 #include <stdio.h> #include <errno.h> #include <string.h> int main() { FILE* pf fopen("test.txt","…

再怎么“顽固”的应用程序,也很难经得住以下的卸载方法

卸载程序是我们经常尝试的事情。这可能是因为我们不再需要程序,该程序可能会导致问题等。有时,如果你试图卸载某个程序,你会收到一个错误,但卸载没有发生。在这种情况下,你可以选择强制卸载。在本教程中,我将向你展示如何在Windows 10/11计算机上强制卸载程序。 ​控制面…

西南科技大学数字电子技术实验五(用计数器设计简单秒表)FPGA部分

一、实验目的 1.进一步理解用中规模集成计数器构成任意进制计数器的原理。 2.了解计数器的简单应用。 3.进一步学习与非门和译码显示器的使用方法。 4.学会用FPGA实现本实验内容。 二、实验原理 简单秒表 可暂停、复位秒表 三、程序清单(每条语句必须包括注释或在开发…

运维开发实践 - 服务网关 - apisix部署

1. Apache Apisix Apache Apisix 是一个动态&#xff0c;实时&#xff0c;高性能的云原生API网关&#xff0c;提供负载均衡&#xff0c;动态上游&#xff0c;灰度发布&#xff0c;服务熔断&#xff0c;身份认证&#xff0c;可观测性等丰富的流量管理功能&#xff1b; 2. 如…

0x17 二叉堆

0x17 二叉堆 二叉堆是一种支持插入、删除、查询最值的数据结构。它其实是一种满足“堆性质”的完全二叉树&#xff0c;树上的每一个节点带有一个权值。若树中的任意一个节点的权值都小于等于其父节点的权值&#xff0c;则称该二叉树满足“大根堆性质”&#xff0c;称其为“大根…

olap/clickhouse-编译器优化与向量化

本文主要结合15721和clickhouse源码来聊聊向量化&#xff0c;正好我最近也在用Eigen做算子加速&#xff0c;了解下还是有好处的。 提示编译器 提示编译器而不是复杂化简单的代码 什么时候使用汇编&#xff0c;什么时候使用SIMD&#xff1f;下面有几个基本原则&#xff1a; …

一种缩小数据之间差距的算法

先上代码&#xff1a; /** * 缩小数据之间的差距&#xff0c;但是大小关系不变的方法* param {Array} features */function minMaxData(data) {for (let i 0; i < data.length; i) {const f data[i];const x f[1];const yf[2];//此处5根据实际情况设置const y2 Math.pow(…

VLAN 详解一(VLAN 基本原理及 VLAN 划分原则)

VLAN 详解一&#xff08;VLAN 基本原理及 VLAN 划分原则&#xff09; 在早期的交换网络中&#xff0c;网络中只有 PC、终端和交换机&#xff0c;当某台主机发送一个广播帧或未知单播帧时&#xff0c;该数据帧会被泛洪&#xff0c;甚至传递到整个广播域。而广播域越大&#xff…

myBatis-plus自动填充插件

在 MyBatis-Plus 3.x 中&#xff0c;自动填充的插件方式发生了变化。现在推荐使用 MetaObjectHandler 接口的实现类来定义字段的填充逻辑。以下是使用 MyBatis-Plus 3.x 自动填充的基本步骤&#xff1a; 1.基本配置 1.1添加 Maven 依赖&#xff1a; 确保你的 Maven 依赖中使…

数据结构之<图>的介绍

图&#xff08;Graph&#xff09;的概念&#xff1a; 在数据结构中&#xff0c;图是由节点&#xff08;顶点&#xff09;和边组成的非线性数据结构。图用于表示不同对象之间的关系&#xff0c;其中节点表示对象&#xff0c;边表示对象之间的连接或关系。 1.图的基本组成元素&a…

Jenkins----基于 CentOS 或 Docker 安装部署Jenkins并完成基础配置

查看原文 文章目录 基于 CentOS7 系统部署 Jenkins 环境基于 Docker 安装部署 Jenkins环境配置 Jenkins 中文模式配置用户名密码形式的 Jenkins 凭据配置 ssh 私钥形式的 Jenkins 凭据配置 Jenkins 执行任务的节点 基于 CentOS7 系统部署 Jenkins 环境 &#xff08;1&#xff…

广东高院严惩“套路贷”犯罪,保护校园安全

近日&#xff0c;广东高院发布了一批依法严惩“套路贷”犯罪的典型案例&#xff0c;其中一起涉及在校学生的“套路贷”案件引起了广泛关注。 这起案件中&#xff0c;张某等人针对在校大学生开展无抵押高息短期借款“套路贷”业务&#xff0c;通过频繁威胁恐吓、借新还旧、转单…