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

文章目录

  • 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地址

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

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

相关文章

【物联网】EMQX(二)——docker快速搭建EMQX 和 MQTTX客户端使用

一、前言 在上一篇文章中&#xff0c;小编向大家介绍了物联网必然会用到的消息服务器EMQ&#xff0c;相信大家也对EMQ有了一定的了解&#xff0c;那么接下来&#xff0c;小编从这篇文章正式开始展开对EMQ的学习教程&#xff0c;本章节来记录一下如何对EMQ进行安装。 二、使用…

系列八、约束

一、约束 1.1、概述 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据&#xff0c;通过这种规则&#xff0c;可以保证数据库中数据的正确性、有效性和完整性。 1.2、分类 1.3、注意事项 约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加…

vue3的大致使用

<template><div class"login_wrap"><div class"form_wrap"> <!-- 账号输入--> <el-form ref"formRef" :model"user" class"demo-dynamic" > <!--prop要跟属性名称对应-->…

2023 OADC:开放原子云社区正式启航,Curve、Kyuubi获奖

12月16-17日&#xff0c;2023开放原子开发者大会&#xff08;OADC&#xff09;在江苏省无锡市召开。大会首日&#xff0c;由网易数帆联合发起的“开放原子云社区”宣告成立&#xff0c;随后网易数帆资深云原生专家侯诗军分享了稳定性保障的前沿实践&#xff0c;Curve、Apache K…

引领位置服务驱动:腾讯地图 WebService 服务端 API 实用指南

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Web前端-JavaScript(js表达式)

文章目录 JavaScript基础第01天1.编程语言概述1.1 编程1.2 计算机语言1.2.1 机器语言1.2.2 汇编语言1.2.3 高级语言 1.4 翻译器 2.计算机基础2.1 计算机组成2.2 数据存储2.3 数据存储单位2.4 程序运行 3.初始JavaScript3.1 JavaScript 是什么3.2 JavaScript的作用3.3 HTML/CSS/…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

大数据基础-测试过程

一、大数据&#xff1a; 大数据是一个大的数据集合&#xff0c;通过传统的计算技术无法处理。这些数据集的测试需要用各种工具、技术、框架进行处理。大数据涉及数据创建&#xff0c;存储、检索、分析&#xff0c;而且它在数量、多样性、速度都很出色。 二、大数据的测试类型…

【JAVA】CyclicBarrier源码解析以及示例

文章目录 前言CyclicBarrier源码解析以及示例主要成员变量核心方法 应用场景任务分解与合并应用示例 并行计算应用示例 游戏开发应用示例输出结果 数据加载应用示例 并发工具的协同应用示例 CyclicBarrier和CountDownLatch的区别循环性&#xff1a;计数器的变化&#xff1a;用途…

【Spark面试】Spark面试题答案

目录 1、spark的有几种部署模式&#xff0c;每种模式特点&#xff1f;&#xff08;☆☆☆☆☆&#xff09; 2、Spark为什么比MapReduce块&#xff1f;&#xff08;☆☆☆☆☆&#xff09; 3、简单说一下hadoop和spark的shuffle相同和差异&#xff1f;&#xff08;☆☆☆☆☆…

【HTML5、CSS3】新增特性总结!

文章目录 23 HTML5 新增特性23.1 语义化标签23.2 多媒体标签23.2.1 视频<video>标签23.2.2 音频<audio>标签 23.3 input属性值23.4 表单属性 24 CSS3 新增特性24.1 属性选择器24.2 结构伪类选择器24.2.1 选择第n个元素24.2.2 常用的6个结构伪类选择器 24.3 伪元素选…

Qt for Android设置安卓程序默认横屏+全屏

我的qt版本是5.14.1&#xff0c;网上查到的方法是&#xff0c;把编译出的build文件夹中的AndroidManifest.xml文件复制出来然后修改&#xff0c;然后把修改后的xml文件加入pro文件&#xff0c;语法为ANDROID_PACKAGE_SOURCE_DIR $$PWD/AndroidManifest.xml&#xff08;具体&am…

Window和Linux设置代理和取消代理(http_proxy)

前言 需要git clone下载项目的时候&#xff0c;一直clone不下来&#xff0c;则需要添加代理 特别注意&#xff0c;在图形界面中设置代理之后&#xff0c;还需要在终端命令行中设置&#xff0c;否则终端无法使用 1. Window 临时设置代理&#xff1a; export http_proxyhttp…

【运维笔记】Hyperf正常情况下Xdebug报错死循环解决办法

问题描述 在使用hyperf进行数据库迁移时&#xff0c;迁移报错&#xff1a; 查看报错信息&#xff0c;错误描述是Xdebug检测到死循环&#xff0c;可是打印的堆栈确实正常堆栈&#xff0c;没看到死循环。 寻求解决 gpt 说的跟没说一样。。 google一下 直接把报错信息粘贴上去…

LV.13 D5 uboot概述及SD卡启动盘制作 学习笔记

一、uboot概述 1.1 开发板启动过程 开发板上电后首先运行SOC内部iROM中固化的代码(BL0)&#xff0c;这段代码先对基本的软硬件环境(时钟等...)进行初始化&#xff0c;然后再检测拨码开关位置获取启动方式&#xff0c;然后再将对应存储器中的uboot搬移到内存&#xff0c;然后跳…

如何提高RAG增强的准确性

在一个典型的RAG应用开发中&#xff0c;必要的步骤为文档加载&#xff0c;文档拆分&#xff0c;向量化&#xff0c;向量存储。然后基于向量存储进行相似性查询&#xff0c;或基于向量距离的查询。这类查询就叫检索&#xff0c;LangChain所提供的对应组件就是检索器。 但这种方…

数据分析为何要学统计学(10)——如何进行比率检验

比率检验是通过样本推测某种事件的总体占比水平。要求事件仅有互斥的两种情况&#xff0c;即&#xff0c;概率分别为p与1-p。 比率检验分单样本和双样本两种情况&#xff0c;以下我们分别介绍。 1. 单样本比率检验 形如这样的问题&#xff1a;“小学生近视比例日益提高&#…

mybatis 批量新增(返回主键),批量查询,批量更新数据

1.配置连接允许批量操作 配置url后面 &allowMultiQueriestrue2.数据层 2.1 mapper // 新增void saveNewStudyPartyDatums(List<StudyDatum> list);// 查询List<Party> getParties(Param("partIds") List<Long> partIds); // 更新void updat…

惯性导航基础知识学习----惯性器件相关

&#x1f308;武汉大学惯性导航课程合集是入门惯导的精品课程~ 作为导航路上的鼠鼠我&#xff0c;要开始学习惯性导航了~ 需要达到的要求是大致了解惯导的原理等~ 后期会陆续更新惯导相关的知识和笔记等~ &#x1f42c; 本blog为 武汉大学惯性导航课程 的记录~ 感谢团队提供的开…

实验八 A/D模数转换(汇编与微机原理)

实验目的&#xff1a; 掌握ADC0809模数转换的工作原理。 掌握用ADC0809来进行电压转换的使用方法。 实验内容&#xff1a; 用模数转换器件ADC0809测量外部输入的模拟电压&#xff0c;将转换结果输出到数码管的最右边两位上显示。 实验原理&#xff1a; 0809A/D转换芯片有8…