局域网通信基石:ARP协议与MAC帧详解

一、数据链路层

假如主机B要发数据给主机C,那么就要经过路由器F,G...,那为什么要经过这些路由器呢?

因为是由目标主机的IP地址来动态的决定mac地址的

那主机B怎么把数据交给路由器F呢?

这就是局域网通信 的问题了,由数据链路层来解决。

1. 认识以太网

数据 指的就是IP报文

以前在学习各种协议时,我们都要考虑两个问题:1.如何将报头和有效载荷进行分离? 2.如何解决分用问题?在以太网这里也要解决这两个问题。

以太网的帧格式中有目的地址,源地址,类型,CRC这些字段,这就是以太网的报头,它的报头长度是固定的,是18字节

那这些字段都分别代表什么意思呢?

目的地址和源地址指的都是mac地址CRC用来做校验。那类型呢?

这就涉及到了第二个问题了,如何解决分用呢

类型就是用来解决这个问题的。类型如果是0800就代表的是IP协议,0806就代表的是ARP协议这就解决分用问题了

前面我们说过,数据链路层最多只能接收网络层传输过来的1500个字节,这里的以太网帧数据写的是46-1500字节,那也就是说,这里最小的字节应该是46个字节喽。答案是是的

那如果数据不够46个字节呢?没关系,会用填充位补上的

如果超过1500字节,那就涉及到IP分片了,但是分片会导致丢包率增加,所以分片并不是主流

2. MTU对TCP协议的影响

TCP的数据报不能无限大,会受制于MTU,TCP单个数据报的最大长度,称为MSS

既然TCP的数据报长度受制于MTU,那TCP就要知道MSS是多少,可是TCP要怎么知道呢?

TCP是面向连接的,在正式通信之前需要经历三次握手,前面我们说过,三次握手会交换双方的16位窗口,得知目标主机的接受能力,现在应该再多一件事情,三次握手还需要进行MSS协商

双方在进行SYN的时候会在TCP头部写入自己能支持的MSS值。双方在得知对方的MSS值后,选择较小的作为最终的MSS

那MSS写入到哪里了呢?前面学习TCP协议格式的时候,没看到与MSS相关的格式呀

·MSS是被写入到了TCP协议报头的40字节变长选项里面的·。

3. 理解在局域网中,如何完成mac帧数据通信

假设主机A与主机E之间通信,那么在局域网中流程是怎样的呢?

网络通信数据最后都是以mac帧的形式发送给目标主机的为什么是mac帧呢因为数据要一路向下进行封装,添加报头

所以就需要将相关数据写入到以太网帧格式里。依次填写的数据就应该是MacE,MacA,0800(简写,还有数据,CRC这些),然后将这个mac帧数据扔到以太网里,在这个局域网里不仅只有主机E会收到这个mac帧数据,主机B,C,D也会收到这个mac帧数据,但是其它主机发现不是发给自己的,所以就丢弃掉这个mac帧数据了,只有主机E收到了

那主机B可不可以给主机D发数据呢?当然可以了,其它主机之间也可以互相通信呀,过程和上面是一样的。那以太网不就是一种公共资源吗!因此要进行加锁,成为临界资源

在一个局域网里,可以有多台主机之间进行互相通信,那以太网里有多个报文就会发生碰撞 ,我们把在局域网里发生碰撞的这块区域叫做碰撞域为了避免碰撞就要进行碰撞检查和碰撞避免

这个时候就要思考两个问题了。

1.mac数据帧越长越好,还是越短越好

如果mac帧数据太长,那它在网络中滞留的时间就长(因为发送的时间长),那这也就意味着发生碰撞的概率会增加,所以mac帧不能太长

那可不可以越短呢如果mac帧数据只有一个字节呢,那它岂不是要发多次数据,这不就类似于分片吗!丢包率增加,而且效率低下

所以,就要约定有效载荷的范围了 。经过大量的实验证明,数据在46-1500字节是合适的

2.一个局域网中,主机越多越好,还是越少越好

主机太多,大家都要互相通信,就会增加碰撞概率。这就像一个班级里的许多学生一样,大家都在说话就听不清说的是什么了。

那是不是主机越少越好呢?当然了。比如你家的wifi,连接的人多了,网速就慢了,连接的人少了,网速就快了。

但是如果每个人都处于一个局域网,这也太浪费资源了,毕竟虽然局域网可以用私有IP,私有IP可以重复但是为了表示每个局域网的唯一性,还需要唯一的公网IP来标识。所以这是不可能的。那怎么办呢?有没有办法既能让多台主机处于一个局域网里,又能减少碰撞呢

所以就有了交换机。举个例子来帮助大家来理解什么是交换机。

比如主机A给主机E发送数据,假设在主机B,C,E之间的这块空白区域有一个交换机这个时候该mac帧数据就会被广播给所有主机,经过交换机的时候,交换机就相当于路由,它并不知道该mac帧数据应该给到哪里,因为它不知道主机E在哪里,但它经过这一次转发数据就知道主机A是在自己(交换机)的左边的,就可以记录下MacA地址,主机E拿到数据后对主机A进行应答,经过交换机的时候,这个时候不就拿到主机E的MacE地址了,交换机就知道主机E是在它的右边。同理,主机B想和主机D通信,过程也是类似的,数据会被所有的主机获取,包括交换机,这个时候交换机进行转发,就知道主机B是在交换机的左边,而交换机右边的主机会将这个报文丢弃,因为主机D在交换机的左边。那其它主机之间进行互相通信呢?那长此以往交换机不就拿到所有主机的mac地址了吗!

等到下一次通信的时候,主机A给主机D发送数据时,mac帧数据到达交换机时,交换机发现主机D就在自己左边,就不在进行转发到右边,这不就将局域网进一步缩小成了更小的局域网了吗!交换机右边没有报文,右边的主机要想通信,是不妨碍的,这不就减少了碰撞吗!而同处在一个局域网里的主机A和主机D可以直接进行通信啊!

当然了,交换机不一定只有左右两边,也可以有上下,左上,左下,...等等许多方向,不就可以划分成多个更小的局域网了吗!不就减少碰撞了吗!

我们把交换机进行转发到另一个方向上叫做洪泛

交换机的存在就是进行划分碰撞域,这种方式可以减少局域网中特定区域内的报文量

交换机也可以叫做网桥

那主机B与主机C之间通信,路途上要经历多个路由器呢?前面我们说过,IP地址是不会变的但是远距离通信是会根据IP地址来动态的决定mac地址的,而这一路上IP地址不会变,但是报文经历路由器时会经历数据链路层和网络层的解包和重新封装的过程,所以mac地址是会变的

在通信时,数据会经历封装的过程,在未到达目标主机之前,数据在网络里都是以mac帧形式传输的,所以传输数据必须知道mac地址

这也就意味着,主机之间进行通信,必须知道对方的mac地址。不知道,即使知道IP也无法发送数据,因为局域网通信做不到。

那主机B要想把报文发送给主机C,首先要经历路由器F,通过查找路由表 可以知道路由器F的IP地址,即使没有找到匹配的路由器,也可以缺省路由转发报文

在同一个子网中,给目标主机发送数据帧,必须知道对方主机的目的mac地址,但是通过路由表只能知道下一跳主机的IP地址,所以怎么知道下一跳主机的mac地址呢

所以,有了ARP协议,它就是将IP地址转化为mac地址的

4. ARP协议

在正式解析ARP协议格式之前,我们先解决一个问题。

在一个局域网里,主机A是可以给主机E发送ARP请求的,那么目标主机就会对源主机进行ARP应答。同理,其它主机也可以给主机A发送ARP请求呀

所以,同一台主机如果收到ARP,有可能是一个请求,也有可能是一个应答

以太网目的地址,以太网源地址,帧类型和上面讲的以太网前三个字段是一样的,我们从硬件类型开始剖析。

硬件类型指的是链路层网络类型,一般设置为1,代表以太网

协议类型代表要转化的地址类型,一般设置为0800,代表IP地址

硬件地址长度代表以太网的地址大小,为6字节

协议地址长度代表IP地址的大小,为4字节

op字段为1,代表ARP请求,op字段为2,代表ARP应答

发送端以太网地址,发送端IP地址肯定是要知道的,谁发起的ARP请求就填写谁的mac地址,IP地址,目的以太网地址代表的就是目的mac地址,目的IP地址也是要知道的。因为要得到目的mac地址就必须知道目的IP地址,通过路由表就可以得知

而目的mac地址本来就是ARP协议要得到的数据,所以这里是不知道的,一般设置为全F,即FFFFFFFFFFFF,(48个bit,6个字节)。

无论一台主机收到的是ARP请求还是应答,首先看op,请求时局域网内的所有主机都会收到ARP请求,但所有主机都需要进行ARP解析,发现不是发给自己的,于是丢弃(ARP层)。应答时,ARP所有的数据都填充完整,根据目的mac地址进行比对,发现不是发给自己的,就会在数据链路层丢弃。

那每一次都需要进行ARP请求吗 ?答案是不需要因为第一次不知道目标主机的mac地址,所以需要ARP请求,但一旦进行一次ARP请求之后,就知道目标主机的mac地址了。这样就可以将ARP的映射结果进行缓存,提高效率这个缓存是有时间限制的,一般是几十分钟,因为如果用户重新连接,那么路由器会分配一个新的ip地址

那什么是rarp协议呢?rarp协议刚好是和arp协议是相反的,arp协议是将ip地址转为mac地址,而rarp协议是将mac地址转为ip地址的

相关推荐
书唐瑞2 小时前
通过HTTPS访问子域名
网络协议·http·https
Ares-Wang2 小时前
网络》》FTP、TFTP、Telnet DHCP
运维·服务器·网络
玥轩_5212 小时前
防火墙技术-综合应用实验-2
网络·网络安全·智能路由器·防火墙·交换机·三层交换
五阿哥永琪2 小时前
Linux 常用命令
linux·服务器·网络
同聘云2 小时前
阿里云国际站高防服务器的原理是什么?高防ip怎么做??
服务器·tcp/ip·阿里云
深圳市恒讯科技2 小时前
美国原生IP服务器有什么优势?
服务器·网络协议·tcp/ip
仙俊红3 小时前
HTTPS 的加密原理
网络协议·http·https
卓豪终端管理3 小时前
从安全配置开始,构建主动防御体系
运维·网络·安全
未来之窗软件服务3 小时前
幽冥大陆(七十八)纯真IP查询封装单文件PHP5.3 —东方仙盟练气期
网络协议·仙盟创梦ide·东方仙盟·纯真ip查询