当前位置: 首页 > news >正文

数据链路层中存在的报文ip,arp,rarp

IP数据报

ARP请求/应答报

RARP请求/应答报

IP数据报

这里的目的地址和源地址是MAC地址。

这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。

MAC 地址是一个很容易让人误解的地址。因为 MAC 地址号称全球唯一,不会存在有相同 MAC 地址的网卡。这就很容易让我们想,既然全球唯一,那网络通信直接用 MAC 地址不行吗?为什么要加个 IP 地址,多封装一层,再去通信呢?

当然是不行的。我们想把一个网络包从一个地方传到另一个地方,除了有确定的地址外,还需要有定位功能。就像你去广州找博主一样,我只告诉你我的身份证号,你能在广州找到我吗?这种寻找无异于大海捞针。但是如果我告诉你我的详细地址,你就可以直接通过导航找到对应的地址,然后再找到我。

IP 地址在一定程度上就承担了详细地址这种远程地位的功能。MAC 地址更像是身份证号,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面,不用担心冲突。

当然,MAC 地址也有一定的定位功能。就像你来到了博主所在的办公室,你可以在办公室喊身份证号是 XXX 的是哪位?博主听到了,就会站起来回答你。但是如果你在博主听不到的地方喊,那肯定不会有人应你。这就说明,MAC 地址的通信范围比较小,仅仅局限在一个子网内。

网络协议 2 - IP 地址和 MAC 地址 - 知乎 (zhihu.com)

但是我知道这个房间的所有人的身份证号(ip),但是我并不知道对应的身份证到底是谁(mac),这个时候我就需要在这房间(局域网)内,广播找到对应身份证的人。

这就需要ARP报协助ip数据报寻觅ip对应的mac。

ARP请求/响应报

在每一次通信的时候我们都需要找到下一跳路由的mac地址,才能将其报文传送出去,为什么不能直接和远程主机直接通信呢?你搁哪洲际导弹呢?

所以在网络包发送前都需要先发送ARP请求报文找到下一跳的mac地址。A主机需要B主机/路由器,根据路由表找到对应的ip号发送arp请求报文,这个报文属于广播报文,所有主机都会接收到,并且处理报文。

流程

 这是报文会被所有的主机接收到,因为arp报文的目的mac地址是0xffffffffff,所有的主机都意识到,这是个广播报文,然后接收查看帧类型,决定交给网络层还是arp处理方式。

确定是arp包,然后先查看op确定包类型,op字段为1表示ARP请求,op字段为2表示ARP应答,

如果是请求,则再去查看目的ip是否是给我发的,是则构建响应arp报文,进行响应,不是则丢弃

如果是响应,直接获取响应arp报文的源mac地址,构建对应的ip数据报。

为什么不直接看ip呢?

因为解耦,所以arp层并不知道mac层是这么收获的报文,所以先查看arp的op项,先查看op,为1是申请报文,再去查看目的端ip查看是否向我申请的报文。为2是应答报文,无需查看目的端ip,因为是对我一对一的,直接查看发送端mac地址。因为如果直接看目的ip就算是给我的,也得再看op是应答arp还是申请arp才能后后续操作。

每次发送ip报都需要arp吗?并不是的,主机和路由器会短期存储mac和ip的映射关系,后续如果再一次访问对应ip,先查看自己的arp映射表是否有该ip的映射mac,然后再决定下一步。外面的arp请求报发送给对方时候,对方也会建立源ip和源mac的映射,需要mac发送ip报的主机,接收到arp响应报,也会条件映射关系到arp映射表中。

为何不将映射关系永久呢?注意当今的ip为动态分配,你的手机链接路由器wifi的情况下,路由器给你分配的IP地址前一次和后一次是不一样的,如果永久映射了,如果A主机换一个地方链接网络,会直接使用对应的arp表中的路由地址,在当前局域网是找不到对应的mac地址路由器的,导致了A主机无法上网。

RARP请求/响应报

这个是与ip反过来的,发出mac地址获取ip地址,这个mac和ip是本机地址,一般是嵌入式设备入网时使用的,如果存在这样的设备,我们就需要架设RARP服务器(个人电脑直接链接设备,也是可以为其指定ip地址,但是使用DHCP自动分配的ip地址,有时会遇到无法知道所分配的ip是多少的情况)。

http://www.lryc.cn/news/214364.html

相关文章:

  • 【Tricks】PC端微信输入时,文本出现右对齐情况怎么恢复
  • python使用requests+excel进行接口自动化测试
  • Android NDK开发详解之调试和性能分析的ndk-gdb
  • html获取网络数据,列表展示 一
  • 配置管理工具-Confd
  • 0基础学习PyFlink——使用DataStream进行字数统计
  • OpenCV官方教程中文版 —— 图像去噪
  • AcWing 102. 最佳牛围栏(前缀和+二分+DP)
  • React-表单受控绑定和获取Dom元素
  • python hashlib模块及实例
  • 垃圾回收GC
  • kubernetes-service微服务
  • 让你笑到不行的笑话短视频接口,快来试试!
  • 系列四十五、Spring的事务传播行为案例演示(五)#MANDATORY
  • idea插件(二)-- String Manipulation(字符串处理工具)
  • HQChart实战教程67-worker批量计算股票指标
  • 博客系统自动化测试项目实践
  • 软考高级之系统架构师系列之操作系统基础
  • 制作一个可以arm架构下运行的docker镜像(for Python)
  • Goland连接服务器/虚拟机远程编译开发
  • 大数据Doris(十四):Doris表中的数据基本概念
  • 【Linux】Linux环境配置以及部署项目后端
  • RabbitMQ消费者的可靠性
  • 云计算助力史上首届“云上亚运”圆满成功!
  • 博彦科技:以金融为起点,凭借创新技术平台真打实干
  • NLP实践——中文指代消解方案
  • 【Redis】认识Redis-特点特性应用场景对比MySQL重要文件及作用
  • goland setup go env
  • 如何打造一支敏捷测试团队
  • STM32F40EZT6 PWM可控制电压原理