愿你在尘世里获得幸福,
我只愿面朝大海,春暖花开。
--- 海子 《面朝大海,春暖花开》---
传输层协议提供一种策略保证通信的稳定性;网络层协议提供一种能力保证可以进行通信。数据链路层是用于两个设备(同一种数据链路节点)之间进行传递。
网络通信中,主机A向主机B发送数据时,并不是直接将报文发送到目标主机,而是会经过很多台路由器的转发!要在一台一台路由器之间不断的跳转。跨网络转发的本质是进行多次的子网转发!所以路由器就要先保证在同一个网段中相互之间可以进行转发。
局域网中以太网是常用技术。“以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容。例如: 规定了网络拓扑结构,访问控制方式,传输速率。以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN 等。
在以太网中发送数据是以以太网帧的格式进行发送的:
对于这个以太网协议我们依然需要解决两个问题:
这里我们模拟一下局域网通信的过程:
在局域网中有若干主机ABCD...
,主机A此时向G发送信息。主机A就先把MAC帧先填好目的地址与源地址:
主机A将这个MAC帧放到网络中,其他主机的的数据链路层会先获取到MAC帧,因为报头是定长,可以快速取到报头,判断是否是发送给自己的报文。许多的MAC帧之间会发生碰撞,越长的数据越容易产生碰撞,所以数据链路层才有MTU限制一次发送的大小! 同样的也有最小数据帧限制MSS,对于不够的数据,会填充垃圾数据,那么会影响报文长度,这也就是为什么IP协议要带总长度字段!
随着主机数的增加,每台主机处理的MAC帧就会越来越多,出现大面积的碰撞。通信成功的概率就越来越小(这也是人数密集的地方网络差的原因)。这里会涉及到交换机:交换机会把不同的主机划分成不同的区域!交换机对于所有主机的数据都可以收到,其转发的数据对象就是数据帧,所以也是工作在数据链路层!
交换机会对数据帧进行分析,将数据帧发放到对应的区域,这样可以很好的优化碰撞发生的概率!有效管理数据帧的扩散范围。
这里通过MTU和MSS联系一下TCP建立连接
讲解arp协议之前,我们先来看看目前的通信过程中是否完善? 目前为止我们讲解了传输层,网络层,数据链路层。为了保证通信可靠性传输层TCP协议的超时重传机制,快重传机制,滑动窗口机制…,提供跨网络通信能力的IP协议,用于局域网两个设备之间进行通信的数据链路层协议。看似已经十分完备,实际上有一个严重问题!
IP地址和MAC地址在网络通信中有各自的重要作用。
通过ARP协议,路由器可以在目标网络中找到目标设备的MAC地址,确保数据包能够顺利传输到最终目的地。 这种机制使得IP地址和MAC地址相互配合,共同完成数据的传输和通信。
目前,在只知道目的IP的情况下,报头中带有源IP和目的IP。路由器的每一次路由转发都会改变源IP,最终到达路由器中,但是不知道目的主机的MAC地址,就不知道是子网中的哪一台主机!
所以,为了可以在局域网中进行通信,我们需要可以通过目的IP转换成MAC地址的能力。这里就需要ARP协议! arp协议是在数据链路层的,结构如下:
arp协议工作数据链路层,对于IP地址与MAC帧的转换时是在这里进行的!
新生入学第一天,每名同学都有一个学号。老师手里只有学号表,并不知道谁是谁,于是就会问:“谁是10号同学呀?”。这时张三回答是他,那么老师在心中就会记住学号与名字的映射关系,下一次就会直接叫张三而不是10号同学!
这个例子就类似arp协议工作过程:
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,不会出现横跨网络的情况!
其中关键的五元组是:oper , 源IP ,源mac,目的IP,目的MAC。arp协议层中可以对数据进行处理,建立映射…
至此,网络协议栈通信过程完成了!arp协议补全了路由过程中在不知道目的主机MAC地址应该如何处理的方法! 保证数据链路层可以生成MAC帧完成通信!