前言

打算整理网络这一块,先把概念写完。

就是有一个问题,那就是为什么有ip地址还有mac地址呢?

原因是这样子的,我们知道ip协议是第三层,那么有一个问题了,如果只有第三层的ip是否能过识别到主机?

答案是不能的啊,第一层和第二层 分别是物理层、数据链路层,这两层的实现协议叫做以太网,以太网依靠mac地址,那么有个问题了没有以太网是否能过跑呢?答案是不能的。

这就好比火车没有铁轨能跑吗?没有网卡能联网吗?

这时候就有另外一个问题了,没有ip只有mac地址能通信吗?答案是可以的啊,以太网本身就能通信啊,但是又一个小小的问题,那就是必须在同一网段。

假设mac1、mac2在同一路由器下面,现在mac1想和mac3进行通信这时候mac1发送请求给路由器,路由器识别到mac3不在子网下,那么它是否丢弃这个请求还是继续往上一层呢?

没人知道这个问题,如何mac3是一个全世界没有的地址,那么这个请求将会一级一级向上请求,然后可以全世界轰炸了。

有ip就不一样,比如说局域网mac1地址是:192.168.1.2、mac2是 192.168.1.4,然后路由网关是192.168.1.1 子掩码是 255.255.255.0,这时候mac1请求192.168.1.10 mac3,到达网关后会返回没有。

为什么会返回没有呢?因为网关192.168.1.1,根据子掩码知道知道的管辖范围,看了一下192.168.1.10是自己管辖的电脑啊,查一下路由表,发现不对啊,没有这个地址,就把它送回去了,告诉这个192.168.1.2不要瞎搞,没有地址啊。

那么现在网络可以确定不仅需要mac地址还需要ip地址。

正文

这时候问题就来了,我一打开电脑,联网要请求192.168.1.2的地址,这时候我怎么知道这个ip的mac地址啊。

好的,这时候arp协议就来了。现在不是不知道吗?那么这个时候就发一个arp请求包给各个网络下,具体流程如下:

主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;

主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;

当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

ARP 还有一些缓存机制:

ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址-->MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。
当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。
每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;
如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。

后续讲解arp的协议部分。

arp 的基础概念的更多相关文章

  1. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  2. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  3. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  4. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  5. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  6. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  7. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

  8. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

  9. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

  10. 什么是JavaScript闭包终极全解之一——基础概念

    本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...

随机推荐

  1. C++//queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为

    1 //queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为 2 3 4 #include<iostream> 5 #include<queue> ...

  2. Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)

    @ 目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当 ...

  3. Spring事务(四)-事务失效场景

    有时候,我们明明在类或者方法上添加了@Transactional注解,却发现方法并没有按事务处理.其实,以下场景会导致事务失效. 1.事务方法所在的类没有加载到Spring IOC容器中. Sprin ...

  4. 软件推荐 Notable / 现改用 Vnote 了

    https://notable.app/#download

  5. 基于python中librosa的声音混音实例解析

    一 概念   1.一些概念 Librosa是一个用于音频.音乐分析.处理的python工具包,一些常见的时频处理.特征提取.绘制声音图形等功能应有尽有,功能十分强大.本文主要介绍libros的基本用法 ...

  6. python中把列表中的字符串转成整型的几种方法

    python中在不同类型数据转换方面是有标准库的,使用非常方便.但是在开发中,经常在list中字符转成整形的数据方便遇到问题.这里就记录一下常用的几种方法. 方法一:最基本的方法:通过轮训整个list ...

  7. 记录--开始使用Vue 3时应避免的10个错误

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Vue 3 稳定已经有一段时间了.许多代码库正在生产中使用它,其他人最终也必须进行迁移.我有机会与它一起工作,并记录了我的错误,这可能是你 ...

  8. PyQt5报错:This application failed to start because no Qt platform plugin could be initialized

    问题背景: 想使用PyQt5来创建一个可视化窗口,先在pycharm里面安装PyQt5,版本为5.14.0.之后在代码中调用此包:from PyQt5 import QtCore, QtGui, Qt ...

  9. 学习蓝图+行为树实现AI角色的跟随操作

    跟随B站视频学习 准备工作 一个角色蓝图类用来设置AI角色,一个Blackboard--AI的大脑,一个AITree--AI的行为控制,一个AIController蓝图类--定义AI的控制器. 是否发 ...

  10. archlinux启动virtualbox实例出现错误:内核驱动未安装

    参照 https://cn.linux-console.net/?p=22258 错误如下 Kernel driver not installed (rc=-1908) The VirtualBox ...