前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【计网】从零开始认识arp协议

【计网】从零开始认识arp协议

作者头像
叫我龙翔
发布2024-10-30 08:57:34
1730
发布2024-10-30 08:57:34
举报
文章被收录于专栏:就业 C++ 综合学习

愿你在尘世里获得幸福,

我只愿面朝大海,春暖花开。

--- 海子 《面朝大海,春暖花开》---


从零开始认识数据链路层
  • 1 基础知识
  • 2 为什么需要arp协议
  • 3 arp协议工作流程
  • 4 arp协议结构

1 基础知识

传输层协议提供一种策略保证通信的稳定性;网络层协议提供一种能力保证可以进行通信。数据链路层是用于两个设备(同一种数据链路节点)之间进行传递。

网络通信中,主机A向主机B发送数据时,并不是直接将报文发送到目标主机,而是会经过很多台路由器的转发!要在一台一台路由器之间不断的跳转。跨网络转发的本质是进行多次的子网转发!所以路由器就要先保证在同一个网段中相互之间可以进行转发。

局域网中以太网是常用技术。“以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容。例如: 规定了网络拓扑结构,访问控制方式,传输速率。以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN 等。

在以太网中发送数据是以以太网帧的格式进行发送的:

  • 6字节目标地址:MAC地址是6字节,所以目标地址是6字节。
  • 6字节源地址:MAC地址是6字节,所以源地址是6字节。
  • 2字节帧协议类型:有三种值,分别对应 IP、 ARP、 RARP;
  • 4字节CRC 校验码

对于这个以太网协议我们依然需要解决两个问题:

  1. 如何解包? 以太网帧采用的是定长报头,进行解包就直接去除定长的报头与报尾结构即可
  2. 如何分用?

这里我们模拟一下局域网通信的过程: 在局域网中有若干主机ABCD...,主机A此时向G发送信息。主机A就先把MAC帧先填好目的地址与源地址:

主机A将这个MAC帧放到网络中,其他主机的的数据链路层会先获取到MAC帧,因为报头是定长,可以快速取到报头,判断是否是发送给自己的报文。许多的MAC帧之间会发生碰撞,越长的数据越容易产生碰撞,所以数据链路层才有MTU限制一次发送的大小! 同样的也有最小数据帧限制MSS,对于不够的数据,会填充垃圾数据,那么会影响报文长度,这也就是为什么IP协议要带总长度字段!

随着主机数的增加,每台主机处理的MAC帧就会越来越多,出现大面积的碰撞。通信成功的概率就越来越小(这也是人数密集的地方网络差的原因)。这里会涉及到交换机:交换机会把不同的主机划分成不同的区域!交换机对于所有主机的数据都可以收到,其转发的数据对象就是数据帧,所以也是工作在数据链路层!

交换机会对数据帧进行分析,将数据帧发放到对应的区域,这样可以很好的优化碰撞发生的概率!有效管理数据帧的扩散范围。

这里通过MTU和MSS联系一下TCP建立连接

  • TCP 的一个数据报也不能无限大,还是受制于 MTU。TCP 的单个数据报的最大消息长度,称为 MSS(Max Segment Size);
  • TCP 在建立连接的过程中,通信双方会进行 MSS 协商。
  • 最理想的情况下,MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU)。
  • 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值。然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS。
  • MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2)。

2 为什么需要arp协议

讲解arp协议之前,我们先来看看目前的通信过程中是否完善? 目前为止我们讲解了传输层,网络层,数据链路层。为了保证通信可靠性传输层TCP协议的超时重传机制,快重传机制,滑动窗口机制…,提供跨网络通信能力的IP协议,用于局域网两个设备之间进行通信的数据链路层协议。看似已经十分完备,实际上有一个严重问题!

  • 路由器中都有一个路由表,储存目的IP 与对应的子网掩码。可以找到对应的路由器!
  • 但通信时要找到下一跳的节点,必须知道吓一跳节点的MAC地址!因为要封装MAC帧
  • 那么要如何知道MAC地址呢???

IP地址和MAC地址在网络通信中有各自的重要作用。

  • IP地址用于逻辑寻址和路由选择,使数据包能够跨越多个网络到达目标设备。
  • MAC地址用于物理寻址,确保数据帧能够在同一局域网内正确传输。

通过ARP协议,路由器可以在目标网络中找到目标设备的MAC地址,确保数据包能够顺利传输到最终目的地。 这种机制使得IP地址和MAC地址相互配合,共同完成数据的传输和通信。

目前,在只知道目的IP的情况下,报头中带有源IP和目的IP。路由器的每一次路由转发都会改变源IP,最终到达路由器中,但是不知道目的主机的MAC地址,就不知道是子网中的哪一台主机!

  • 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址!

所以,为了可以在局域网中进行通信,我们需要可以通过目的IP转换成MAC地址的能力。这里就需要ARP协议! arp协议是在数据链路层的,结构如下:

arp协议工作数据链路层,对于IP地址与MAC帧的转换时是在这里进行的!

3 arp协议工作流程

新生入学第一天,每名同学都有一个学号。老师手里只有学号表,并不知道谁是谁,于是就会问:“谁是10号同学呀?”。这时张三回答是他,那么老师在心中就会记住学号与名字的映射关系,下一次就会直接叫张三而不是10号同学!

这个例子就类似arp协议工作过程:

  1. 当数据包到达目标网络的路由器时,路由器知道目标设备的IP地址,但不知道其MAC地址。路由器在目标网络中广播一个ARP请求: “谁是IP地址为172.20.1.2的设备?请告诉我你的MAC地址。”
  2. 网络中的所有设备接收到ARP请求后,只有目标设备(即IP地址为172.20.1.2的计算机B)会响应。计算机B会发送一个ARP响应包,包含其MAC地址:“我是IP地址为172.20.1.2的设备,我的MAC地址是08:00:20:74:CE:EC。”

arp协议工作流程可以总结为:先广播,再正常通信! 具体来看,主机A在发送一条广播后,可能会接收到一条arp应答。那么每一台主机都有可能收到arp应答与arp请求!所以就要求arp协议要区分自己是请求还应答!

网络层收到了一个报文 ,但是此时主机并不知道这个IP对应哪一台主机,所以就要进行广播。进行广播前,在arp协议层需要构建一份arp请求:源IP与源MAC,目的IP与未知目的MAC。然后回将报文构建mac帧。注意:arp层与mac帧层是上下层协议的关系!

所以就会对还会对arp请求进行封装,帧类型设置为0806说明是发送给arp层。目的mac地址设置为fff...表示广播

封装好就将mac帧发到局域网中,当其他主机获得到时,会分析目的mac,发现是fff...,知道是广播。然后分析到帧类型是发送给arp协议的,就将这个报文解析后发送给arp协议。然后就可以判断IP地址是否是自身,那么就丢弃(当前理解下是丢弃)。

当目标IP主机收到arp请求后,根据oper发现arp请求,那么就会生成一份arp应答!

其他主机收到这个mac帧,通过目的MAC判断进丢弃。路由器A最终就会收到这个应答!路由器A发现这个是arp应答,这时就会保留源IP与源MAC,建立了IP与MAC的映射!下一次向主机E发送报文,就可以建立mac帧进行发送了!

注意: 虽然mac帧报头中有源mac地址,但是这是mac协议层获取的信息,arp层获取不到这个信息,所以要在报文中记录源IP与源Mac!

这个IP与MAC的映射会暂时缓存起来,我们可以看看我们机器里缓存的mac地址:

arp只在局域网中有效,每个网络都是一个子网,每个网络都维护arp,不会出现横跨网络的情况!

4 arp协议结构

  • 注意到源 MAC 地址、 目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 硬件类型指链路层网络类型,1 为以太网;
  • 协议类型指要转换的地址类型,0x0800 为 IP 地址;
  • 硬件地址长度对于以太网地址为 6 字节;
  • 协议地址长度对于和 IP 地址为 4 字节;
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。

其中关键的五元组是:oper , 源IP ,源mac,目的IP,目的MAC。arp协议层中可以对数据进行处理,建立映射…

至此,网络协议栈通信过程完成了!arp协议补全了路由过程中在不知道目的主机MAC地址应该如何处理的方法! 保证数据链路层可以生成MAC帧完成通信!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从零开始认识数据链路层
  • 1 基础知识
  • 2 为什么需要arp协议
  • 3 arp协议工作流程
  • 4 arp协议结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档