网络通信协议-ARP协议

news2024/11/27 2:35:36

目录

一、ARP协议

二、ARP协议通信过程

应用情景一:同一广播域内通信

(1)第一步:ARP协议通信

1.交换机接受消息

2.电脑2接收到广播消息

3.电脑2回复

4.交换机转发回复给电脑1

5.电脑1记录

(2)第二步:二层网络设备通信

应用情景二:跨广播域内通信

三、ARP协议对ICMP协议的影响


一、ARP协议

ARP是TCP/IP模型中的三层(网络层)通信协议

ARP协议即地址解析协议,可以通过IP地址找到MAC地址;

ARP协议的作用:第1次发消息给陌生设备时,借助ARP协议,能通过陌生设备的IP地址,找到陌生设备MAC地址。

二、ARP协议通信过程

应用情景一:同一广播域内通信

电脑1和电脑2从未发过消息,彼此是陌生设备。在电脑1上ping电脑2的ip地址,电脑1怎么就通过ip地址找到电脑2呢?

(1)第一步:ARP协议通信

  电脑1想发送消息给电脑2

消息包含:电脑1mac地址、电脑1ip地址、电脑2ip地址、电脑2临时MAC地址(因为不知道电脑2mac地址,所以全部用F填充,FFFFFFFFFFFFFFFFF)

1.交换机接受消息

泛洪

2.电脑2接收到广播消息

第1步:记录“电脑1mac地址、电脑1ip地址”到ARP表中。ARP表如下,cmd中输入arp -a也能看到

第2步:记录自己mac地址到回复消息里

先核对消息中“电脑2ip地址”是否是自己的ip地址(internet)。如果是,就去查ARP表,找到自己的mac地址(物理),然后记录到回复消息里。

3.电脑2回复

回复消息包含:电脑2mac地址、电脑2ip地址、电脑1ip地址、电脑1mac地址

4.交换机转发回复给电脑1

单播,通过mac地址找到电脑2

5.电脑1记录

记录电脑2mac地址和电脑2ip地址,到本地的arp表里。记录内容如下:

internet地址物理地址类型
电脑2ip地址电脑2mac地址动态/静态

(2)第二步:二层网络设备通信

第一步只是ICMP检测。那后面电脑1和电脑2再通信,交换机真正转发有正文的消息时,又怎么知道该发给哪个设备呢?

电脑1发消息给设备电脑2:


  1. 电脑1先发消息给交换机    ###消息包含“发件者-电脑1”和“收件者-电脑2”的mac地址
  2. 交换机记录电脑1,关联"电脑1的mac地址"和其连接到交换机的接口1    ###mac地址组成:24位“生产厂家标识码”+24位“设备自定义标识码”。每1位都是十六进制,十六进制数字是0~9、a、b、c、d、e、f
  3. 交换机泛洪,发广播消息    ###因为交换机不知道电脑2是哪个设备,只有这样了
  4. 电脑2收到并回复,其他设备收到不回复

电脑2回复消息给电脑1:


  1. 电脑2先发消息给交换机    ###消息包含“发件者-电脑2”和“收件者-电脑1”的mac地址
  2. 交换机记录电脑2,关联"电脑2的mac地址"和其连接到交换机的接口2   
  3. 交换机查看记录信息,找到电脑1关联的接口1,转发消息给电脑1

交换机现在记录了电脑1、电脑2,下次他们之间通信,直接就找到了,不再用广播

应用情景二:跨广播域内通信

 和应用情景一是一样的原理,只不过中间多了个三层通信设备路由器。路由器转发后,也是再利用交换机泛洪

三、ARP协议对ICMP协议的影响

对使用ICMP协议与一个陌生设备通信时有影响。比如ping www.xxxhub.com,之前我从未访问过这个网站。ping了会通信4次,前面1、2次可能回复“无法连接目标主机”,第2或3次才正常回复。

为啥呢?

因为一开始不知道www.xxxhub.com的mac地址,会先进行ARP协议通信,解析到mac地址;

而前面1、2次ICMP通信时,可能ARP通信还没完成,本机还不知道www.xxxhub.com的mac地址,所以找不到目标主机;

第2或3次ICMP通信时,ARP协议通信已经完成了,就ok了。

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

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

相关文章

Go快速上手之基础语法 | 青训营笔记

Go快速上手之基础语法 | 青训营笔记 文章目录 Go快速上手之基础语法 | 青训营笔记系列介绍本文摘要1. Go 介绍2. Go 的环境配置2.1 :sparkles: IDE2.2 Gitpod 和 Jetbrians Gateway 的使用 3. Go的基础语法3.1 Hello World3.2 变量与常量3.3 条件控制语句…

Linux(进程间通信)

目录: 1.进程间通信的介绍 2.管道通信 3.管道的原理 ------------------------------------------------------------------------------------------------------------------------------- 1.进程间通信的介绍 2.管道通信 当我们在创建子进程时,我们的…

chatgpt赋能python:Python生成pyc文件的介绍

Python生成pyc文件的介绍 Python是一种解释型语言,但是在执行某些操作时,它会生成缓存文件,以便提高执行效率。这些缓存文件以 .pyc 扩展名保存在同一目录中。 在本文中,我们将重点介绍Python生成pyc文件,并探讨它们…

使用Python绘制M2货币供应率曲线

M2广义货币供应量:流通于银行体系之外的现金加上企业存款、居民储蓄存款以及其他存款,它包括了一切可能成为现实购买力的货币形式,通常反映的是社会总需求变化和未来通胀的压力状态。近年来,很多国家都把M2作为货币供应量的调控目…

Fedora安装并配置开启SSH服务相关命令

Ubuntu参考我这篇:虚拟机里安装ubuntu-23.04-beta-desktop-amd64,开启SSH(换源、备份),配置中文以及中文输入法等 一、过程 1、检测是否安装了openssh-server $ rpm -qa | grep openssh-serveropenssh-server-7.9p1-5.fc30.x86_642、如果上…

【web框架】——Django——如桃花来

目录索引 web框架介绍:常见软件的架构:*CS架构:**BS架构:* 网络通信:socket知识复习:*服务端代码逻辑:**客户端代码逻辑:* socket代码演示:*服务端代码演示:*…

chatgpt赋能python:Python生成:深入了解Python编程中的生成

Python 生成:深入了解Python编程中的生成 简介 Python是一门多用途编程语言,广泛应用于 Web 开发,数据分析,人工智能和科学计算等领域。在Python编程中,生成是一个强大而又常用的概念。本文将介绍Python编程中的生成…

如何在华为OD机试中获得满分?Java实现【输入n个整数,输出其中最小的k个】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

Java 的 String、StringBuffer 和 StringBuilder(一文讲透)

提到 String、StringBuffer 和 StringBuilder,就不得不谈及它们的历史,在了解它们的历史之后,我们对它们的理解将更上一级台阶! 发展历史 String 与 StringBuffer 的出现 String 和 StringBuffer 在 Java1.0 中就已经有了&…

chatgpt赋能python:Python自动操作软件:提高工作效率和节省时间的利器

Python自动操作软件:提高工作效率和节省时间的利器 Python是一种高级编程语言,具有易读易用、快速开发、可移植性好、跨平台兼容等优点。它在自动化操作方面具有很大的优势,可以帮助用户实现各种自动化操作,从而为我们的工作提供…

有哪些信息安全/网络安全/渗透测试/众测/CTF/红蓝攻防/漏洞测试等前沿技术/研究/技巧获取渠道?

​前言 护网的定义是以国家组织组织事业单位、国企单位、名企单位等开展攻防两方的网络安全演习。进攻方一个月内采取不限方式对防守方展开进攻,不管任何手段只要攻破防守方的网络并且留下标记即成功,直接冲到防守方的办公大楼,然后物理攻破…

第2章 Class

Point结构体 //C语言写法 typedef struct point{float x;float y; }Point;Point a; a.x 1; a.y 2; //const表示p指向的对象里的值不能由p指针修改 void print(const Point* p){printf("%d %d\n", p -> x, p -> y); } print(&a);//想实现点的移动&#x…

深入解析OSI七层协议:实现网络通信的基石

目录 引言:详细介绍1. 物理层(Physical Layer)2. 数据链路层(Data Link Layer)3. 网络层(Network Layer)4. 传输层(Transport Layer)5. 会话层(Session Layer…

【章节1】git commit规范 + husky + lint-staged实现commit的时候格式化代码

创建项目我们不多说,可以选择默认的,也可以用你们现有的项目。 前言: git commit 的时候总有人填写一堆花里胡哨乱写的内容,甚至看了commit 的描述都不知道他这次提交到底做了个啥,那我们有没有办法规范大家的commit提…

chatgpt赋能python:Python中的绝对值函数:abs()

Python中的绝对值函数:abs() 在Python中,绝对值函数可以用来计算一个数的绝对值。这个函数名为abs(),它的语法为: abs(x)其中x为需要计算绝对值的数字。 abs()的用法 abs()函数可以计算传入参数的绝对值,并返回一个…

JavaScript实现使用js外链的方式输出一个5行6列的长方形的代码

以下为实现使用js外链的方式输出一个5行6列的长方形的程序代码和运行截图 目录 前言 一、使用js外链的方式输出一个5行6列的长方形(HTML部分) 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 二、使用js外链的方式输出一个5行6列的长方形&…

Solidity基础七

无论风暴将我带到什么岸边,我都将以主人的身份上岸 目录 一、Solidity的单位 1. 货币Ether 2. 时间单位Time 二、地址的形成 三、以太坊的账户 1.内部账户(简称CA) 2.外部账户(简称EOA) 3.内部账户和外部账户…

dom中的事件处理

事件参考 | MDN (mozilla.org) 什么是事件 事件监听方式 直接在html中编写JavaScript代码(了解) <button οnclick"console.log(按钮1发生了点击~);">按钮1</button> DOM属性&#xff0c;通过元素的on.....来监听事件 // 2.onclick属性// function h…

如何在华为OD机试中获得满分?Java实现【任务总执行时长】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

Visual Studio2022编译器实用调试技巧

目录 1.什么是bug 2.调试是什么&#xff1f; 3.debug和release的介绍 4.windows环境调试介绍 4.1 调试环境的准备 4.2 学会快捷键 4.3 调试的时候查看程序当前信息 4.4 查看内存信息 5.如果写出好&#xff08;易于调试&#xff09;的代码 7.编程常见的错误 1.什么是b…