长沙网站设计公司哪家好,wordpress在页眉加载js,揭阳有哪家网站制作公司,网站建设整体策划文章目录 #x1f4d6; 前言1. 数据链路层2. MAC帧格式3. 再谈局域网4. ARP协议4.1 路由器的转发过程#xff1a;4.2 ARP协议格式#xff1a; 5. 如何获得目的MAC地址 #x1f4d6; 前言
在学完网络层IP协议之后#xff0c;本章我们将继续向下沉一层#xff0c;进入到数… 文章目录 前言1. 数据链路层2. MAC帧格式3. 再谈局域网4. ARP协议4.1 路由器的转发过程4.2 ARP协议格式 5. 如何获得目的MAC地址 前言
在学完网络层IP协议之后本章我们将继续向下沉一层进入到数据链路层的学习。 该层有两个重要的协议需要我们来学习一个是ARP协议另一个就是MAC帧协议这二者都是处于数据链路层。 ARP协议在MAC帧协议的上一层它们属于上下层的关系。老规矩我们先来认识报头的各个字段再来学习它们的作用。搬好小板凳我们马上开讲啦… 1. 数据链路层
在内网局域网当中要进行转发的时候首先要考虑的是数据怎么从A主机送到出口路由器当中这个工作就是数据链路层要解决的问题了。
IP地址的核心工作是提供一种能力将数据从A主机经过路径选择交给B主机一定是有目的IP不断地查路由表。
但是A和B根本就不在一个网段 首先要解决的是将数据先从A主机送到下一跳的能力
当数据进行转发的时候就是将数据从一个子网送到另一个子网的过程重点
因为路由器是横跨两个子网的所以只要将数据报转发到子网的路由器这个路由器集联到下个子网的话我们把这种在局域网内转发的行为也可以称之为跨网络转发。
交付到路由器是一个内网转发的行为但是逻辑上相当于将数据包从一个子网交到了下一个子网。 数据链路层能够将数据发送到内网中的任一台主机也一定能将数据送到内网当中的任意一台路由器。只要这台路由器横跨两个网段把数据交给这个路由器的过程就意味着将数据交给了另一个网段也就实现了跨网络传输的功能。 小结
数据链路层 提供了在内网中从一点到另一点的能力。网络层 提供了寻找路径的能力。
数据链路层 网络层就能提供把数据从A主机跨网络经过路径选择送到B主机的能力。
一旦此层转发有问题传输层再继续让我们重发。这几层就提供了将数据从A主机经过路径选择可靠的送到B主机的能力。只要A主机能到B主机那么就一定能从B主机到A主机。
所以传输网络链路核心解决的是数据包可靠传送的问题。 2. MAC帧格式
MAC帧Media Access Control Frame是在计算机网络中用于数据传输的基本单位。它包含了数据链路层的头部和尾部用于在物理介质上传输数据。 目的地址和源地址 目的MAC地址和源MAC地址。
每一台主机在数据链路层当中都要有自己的身份标识就是通过MAC地址标识的。MAC地址通常是48位的植入到网卡当中的具有唯一性标识的地址。虽然全球唯一但是要求在局域网内唯一就可以了。
以太网或者令牌环网是局域网当中所采用的标准
局域网转发这件事上底层网络通信的方式是有差异的我们重点讲的是以太网帧格式。底层网络有差异并不影响网络在全球的使用原因就是有IP地址的存在IP全球是唯一的。
报头和有效载荷如何分离如何解包
目的地址原地址和类型固定大小的最后有个CRC也是固定大小的。所以以太网帧格式附加的相关的报头或者校验字段一共是18Byte。在对帧格式在做提取时可以6 Byte6 Byte2 Byte提取报头再将最后4Byte扔掉剩下的就是有效载荷。所以能拆包也就一定能封装。
未来一个收到了MAC帧的主机应该如何向上进行交付如何分用
两个字节的类型我们称之为帧类型通常代表的是有效载荷应该向上交付给哪一个协议。例如如果帧类型是0800对应的有效载荷就是IP数据包。其他的类型就是对应的不同的字段。所以就能知道数据载荷字段是什么类型进一步再向上交付就可以了。
帧类型
在MAC媒体访问控制帧协议中类型字段Type Field是用来指示数据帧中所携带的上层协议类型的字段。它位于MAC帧的报头部分并占据2个字节16位。类型字段的作用是告诉接收方如何解析数据帧的有效载荷部分。通过读取类型字段的值接收方可以确定上层协议的类型并将数据帧传递给相应的协议栈进行进一步处理。
类型字段可以是
0x0800表示IPv4协议。0x86DD表示IPv6协议。0x0806表示ARP地址解析协议。0x8100表示VLAN虚拟局域网标记协议。 3. 再谈局域网
局域网内一个主机如何知道自己的报文应该交给哪台主机呢是由报文所要去的目的IP地址决定的
将报文丢在局域网当中每台主机都要收到这个报文
凡是在局域网中的所有主机无时无刻都要从局域网当中抓数据。因为随时随地都要从局域网中拿数据。主要局域网中有数据了所有的主机都必须将报文拿到自己的主机里面。因为只有拿到才能确认这个数据是不是发给自己的。不管是不是发给自己的对于这台主机来讲都是有意义的。
数据在局域网中传输
每一个主机都要获取。每一个主机的哪一层协议先获取这个数据帧呢 数据链路层不考虑物理层网络永远都是终于链路层始于链路层的。 每一个主机数据链路层协议的解析解包 分用。对比目的mac地址和自己的mac地址是否相同。 相等向上交付根据类型分用。 不相等丢弃一旦底层将数据包丢弃了上层就不知道有这个数据包的存在了。
抓包
网卡有一种模式可以被设置叫做混杂模式。网卡就不做数据筛选直接将局域网读到的数据一股脑网上交付这个就叫做抓包。
数据碰撞
当多台主机同时向局域网内发送数据时冲突吗—— 冲突因为在网络中走的都是一些光电信号会互相进行干扰那么谁发送的数据都没办法处理。所以就要让冲突的几台主机随机休眠上一段时间再进行在局域网当中对数据做重发。我们把这个局域网也叫做一个碰撞域。
交换机
因为交换机这样的设备存在将大的局域网划分成小的区域。这个小的区域当中合法请求转发再小的区域中就能完成的通信过程就不要往外面却散了。进而可以减少一个一个碰撞域的体积。交换机除了在局域网当中进行数据帧转发不转也能发送核心工作划分碰撞域。在一定程度上减缓主机之间碰撞的可能性。
要明确几点
主机越多越好还是越少越 好肯定是越少越好了发生碰撞的概率越低 交换机或网桥划分碰撞域硬件上。 网卡和交换机都是工作在数据链路层的设备。 软件上减少局域网内碰撞的概率一般MAC帧一般体积不要过大要对得上MTU的要求。
网络层IP报文分片的原因
一旦碰撞了就是否定了之前所做的工作曾经花费的成本就付之东流了。所以MAC帧的体积不要太大就要对上层提要求。要求IP层发送的数据包不要太大所以IP层才会分片才有了MTU这样的概念。MAC帧规定上层交给它的数据IP报文不能超过1500Byte。
碰撞域在物理上减少主机的个数在软件上减少报文的大小进而就可以减少碰撞还有一些碰撞避免的算法。 数据包的大小体积不由MAC帧决定它只提标准更不由网络层决定它只是个跑腿的而是由传输层TCP/UDP 决定传输层决定了IP报文要不要分片的问题。 4. ARP协议
4.1 路由器的转发过程 当路由器接收到一个数据包时它首先会解析以太网帧提取出其中的MAC地址信息。然后路由器会根据目标IP地址在路由表中查找下一跳的信息。接下来路由器会封装数据包为新的以太网帧更新目标MAC地址为下一跳的MAC地址并将数据包发送到下一个路由器。这个过程被称为数据包的转发。在下一个路由器上类似的过程会再次发生。该路由器会解析以太网帧提取出目标IP地址并根据路由表确定下一跳的信息。然后它会封装数据包为新的以太网帧更新目标MAC地址并将数据包发送到下一个路由器或目标主机。
这样数据包通过一系列的路由器转发最终到达目标主机所在的网络。每个路由器都负责解析和封装以太网帧以便在不同网络节点之间进行数据包的转发和路由选择。
4.2 ARP协议格式
当我们数据包到了对方子网入口路由器时怎么将数据包给指定主机呢 路由器D只知道它收到的报文将来是要给IP为主机C的IP的主机并不知道主机C的MAC地址所以没办法发送。
—— 所以有了ARP协议。 同层协议也有上下关系ARP协议是MAC帧协议的上层。 MAC帧协议数据除了是IP报文也可能有ARP这样的协议充当MAC帧的有效载荷。
当路由器D收到了报文之后并不知道目的主机的MAC地址
那么能否确定该要找的主机就在这个局域网里呢 能知道因为当前是根据目的IP地址来判断的。 具体来说就是根据网络号判断的。 只要判断在这个局域网那么就在通信之前先进行ARP请求得到主机C的MAC地址。然后再路上封装MAC帧将报文准确的一对一交给主机C。至此就完成了数据包转发。 假设有主机A和主机B主机A只知道主机B的IP地址但是并不知道主机B的MAC地址。
硬件类型 指链路层网络类型1为以太网。
协议类型 指要转换的地址类型0x0800为IP地址。
硬件地址长度 6个字节。
协议地址长度 4个字节IPv4。
发送端以太网地址 MAC A。
发送端IP地址 IP A。
目的以太网地址 全F。
目的IP地址 IP B。
路由器然后将整个报文封到了MAC帧的有效载荷然后将数据帧转出去。
而数据帧在转的时候也不知道要转给谁所以目的地址填的也是全F。 所以这个数据帧在转发的时候在局域网当中就全部被转发以播的形式被每个主机都收到了。 5. 如何获得目的MAC地址
路由器MAC帧将ARP封装到了自己的有有效载之后就要在局域网内广播
那么每个主机都要提取目的地址是全F每一台主机都要处理目的地址广播所有主机都要处理。每一台主机都要提取MAC帧的帧类型帧类型是0806发现是ARP。每一个主机都要将报文解开将有效载荷交给上层ARP协议。ARP层接收到了先看目的IP地址所有的主机都会拿着目的IP地址与自身的IP地址对比。如果请求不是自己的就在ARP层将数据包丢弃了。这时是在ARP层丢弃的并不是在MAC帧层丢弃的但也是在数据链路层。
op字段为1表示ARP请求op字段为2表示ARP应答。
任何一台主机可能同时在向别的主机发起ARP也在接受别的主机给他的ARP应答任何一台主机都可能被发起ARP请求。
对于任何一台主机重点
发出 一定发出的是ARP的请求。 接收 别人向我发起的ARP请求。 我向别人发起ARP请求时得到的ARP响应。
假设局域网内从A主机发送给B主机具体流程
主机A要发起ARP了填写报文的相应字段。主机A构建了一个ARP请求并不是直接发过去的而是交付给下一层。 局域网内发出去的数据包一定能被主机B收到
主机B除外的其他主机收到报文后
其他主机也能拿到这个报文因为是广播目的MAC地址全F。于是其他主机就开始处理这个报文在MAC帧层解包然后将有效载荷交付给上一层ARP层。ARP层首先要提取出op字段先根据op来判断这次的ARP报文是请求还是响应。然后立马再看目的IP一看填的是IPB和自己不一样所以其他主机直接将报文丢弃。
主机B收到报文后
与此同时主机B也要做同样的工作MAC帧层也要将报文的有效载荷交给ARP层。主机B也要先提取op发现是1那就是请求。然后立马再看目的IP一看填的是IPB和自己的一样。再看是哪个主机要请求主机B的MAC地址提取出发送端以太网地址和发送端IP地址。
主机B再下来就要构建一个ARP应答 然后MAC帧就封装好了发送到局域网里其他的主机也能收到只不过在MAC帧层提取以太网目的地址时发现和自己不一样直接就将报文丢弃了。
所以第一次丢弃发送时和第二次丢弃响应时是不一样的第一次是在ARP层丢弃的第二次是在MAC帧层丢弃的。
主机A收到报文后
于是主机A收到了报文在MAC帧层提取报头中的以太网目的地址发现数据就是发给主机A的。帧类型是0806是ARP所以解包将报文直接向上交付给自己的ARP层。接下来ARP层先看op值为2代表的是应答。就意味着主机A曾经向别的主机发起过ARP请求这个时候请求的那个主机给我应答了。这时主机A才获取发送端的以太网地址发送端的IP地址。
所以主机A就得到了主机BIP为B的主机的MAC地址。然后再将报文重新封装成MAC帧再定向的发送给主机B此时就能正常的进行通信了。
衍生问题
如果远方的发送主机非常高频的向主机B发数据的话难道每次发送每一个报文的时候都要遵守先ARP得到MAC地址然后再向主机B发送的过程吗
这是不是有点挫了这样效率太低了ARP肯定不是每一次都要发起的需要被缓存起来谁请求谁缓存缓存的是目的IP和目的MAC的映射关系。一旦经过一次ARP得到目的IP和目的MAC地址对的映射关系在系统层面上缓存起来。往后的再发的报文直接拿着目的IP去查表查到MAC地址就好了然后再将报文发过去。
万一主机B的MAC地址发生变化了
比如说这个主机不联网退出了重新又接入了一台主机。那么这个IP地址就被新主机拿到了动态分配IP。所以这个缓存是暂时缓存一般是15 ~ 20分钟可以配置。 这个缓存有个特点因为MAC地址一直在变所以就注定了这个缓存要保存最新的MAC地址。只要ARP比较新就会重新更改缓存数据。 查看ARP缓存表
Linux指令arp -a
补充 ARP的过程不是只在一个局域网内发生的 而是在每一个局域网中发生也可以在路由的路上进行ARP。