每日激励:【无限进步】"梦想可以大,但第一步总是小"
**绪论:
本章将开始到达TCP/IP协议中的最后一层数据链路层,本章将会写到我们日常中常见的局域网以及认识数据链路层中非常重要的协议ARP协议,后续还将进行更新网络,敬请期待!早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。**
数据链路层
用于两个设备(同一种数据链路节点)之间进行传递,对于数据链路层来说它是用来具体实现传输层的下一跳这个功能,当传输层选择了下一跳的路由或主机后,由数据链路层来完成下一跳功能。
认识以太网
- "以太网" 不是一种具体的网络,而是一种技术标准 ;既包含了数据链路层 的内容,也包含 了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;
- 例如以太网中的网线必须使用双绞线;传输速率有10M、100M、1000M等
- 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等;
- 总结来说:以太网就是一种局域网技术,它包含了数据链路层和一些物理层内容。规定了在以太网内部的运行规则,在这些规则的基础上才能进行以太网中的局域网通信。
MAC地址
每台主机都有mac地址,并且它是全球唯一的(局域网中通信的时候用的就是MAC地址)
上图具体如下:
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
- 帧末尾是CRC校验码
-
在一个局域网中一个报文数据有两套地址的,一套是ip地址、一套是Mac地址,ip地址始终保持不变,而mac地址是在局域网中使用(它的使用方法和ip地址一样),所以当从一个局域网跳到另一个局域网时(路由转发)就会发生改变(因为mac地址存的是源Mac地址和目的MAC地址,随着跳转Mac地址也会随之)。
-
当一台主机发送报文时,同一个局域网内的所有主机都会收到数据,其中所有主机都会判断是否是发给自己的若是则接受后再向上交付到网络层根据目的IP和查路由表确定下一跳的,并重新封装然后继续在链路层传输(目的ip不变,mac地址发送改变),反之直接丢弃(将网卡设置混杂模式则不会丢弃所有都接收)。
-
上述过程具体如下图局域网:
附:常见的ether表示的就是Mac地址
局域网
局域网的特性:
- 局域网中,任何时刻只允许一台主机在局域网发送数据
- 同时发送的话,会发生局域网数据碰撞问题
- 也就有:碰撞检测 碰撞避免问题
- 碰撞避免问题:当主机间发生了数据碰撞的话就会让主机先休眠一段时间后再发送
所以局域网其实就像一个多台主机的临界区(划分出一个个区域)
数据链路层中常见的的设备:网桥、交换机
交换机
交换机作用:
将一个子网在划分成更小的子区域,从而缓解网络的压力(信号量划分资源让多个线程使用)
应用于一些较大的子网中
同一个局域网资源,主机越多碰撞概率越大,通过不断的数据传输,自我学习构建映射关系,确定主机的位置,进行划分碰撞域:
例:
- A向E发送时,A就会被映射为在左边,E就会被确定为右边
- 当A再向C发送报文后,C又会被确定在右边,通过不断的学习就能划分碰撞域
从而:- 当C要向E发送时,通过交换机就能知道他们都在右边建立映射这样就不向左边发送报文了
- 起到类似隔离的效果,一定的防止影响到局部的主机通信
如下图:
这样当把一个局域网通过交换机再次的划分成多个"小局域网",这样就能允许多个主机在同一个 "大局域网" 同时通信了。
认识MTU
以太网帧中的数据长度规定数据大小是46~1500,这个就表示这该数据最大的大小为1500byte,其中这1500是由MTU设置而成,MTU限制了数据的大小。
因为:
- 若数据太大则在局域网中通信的时候发生碰撞的概率就会变的更大
- 查看硬件地址和MTU:使用shell指令:ifconfig命令。即可查看ip地址,mac地址,和MTU;
所以限制一定的大小这样就能:
- 减少碰撞的概率
- 碰撞后重发的成本消耗
所以:
- TCP的一个数据报也不能无限大, 还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
- 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
ARP协议
虽然我们在这里介绍ARP协议,但是需要强调,ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议;
ARP协议的作用:
地址解析协议(属于数据链路层中的管理类协议,网络协议栈在局部上(某一层上)也是分层的)根据对方的目的IP地址,得到目标主机的Mac地址。因为其实我们在数据中只有对方目的ip,最终也只能找到对方的所在的子网,而没有mac地址,就无法再局域网中通信。
ARP的工作步骤:
- 在局域网中发送广播信息(目标mac地址全F)信息内容:我是macA,你的ip是否为目标ip,若是请告诉我你的mac地址。
- 向macA发送:我是目标地址,我的mac地址是macE。
- 这样主机A就拿到了他的mac地址,然后再把数据封装上目标ip的mac地址(mac帧报头),就能发送找到目标ip的mac地址。
细节:
- 主机得到arp结果,会将结果缓存起来,这样能减少arp请求次数(每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址)
- 任何一台主机都可能受到arp请求(别人问我),又收到arp应答(我问别人)
ARP协议的字段结构:
- 硬件类型指链路层网络类型,1为以太网;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度:以太网地址为6字节(mac地址,一般固定写);
- 协议地址长度:IP地址为4字节(ip转mac,一般固定写);
- op字段为1表示ARP请求,op字段为2表示ARP应答。
- 发送端以太网地址:也就是发送端的mac地址
- 发送端IP地址:...
- 目的以太网地址:发送端(ARP请求)不知道时:填全F(FF FF FF FF)表示广播、ARP应答时就会填上(表示要发送到的主机)。
- 目的IP地址
此时前面的帧类型就要填充为表示:ARP请求/应答 和 类型 0806
例:若要从ipA所在的局域网中找目的ipH,那么填充的报头应该是:
ARP请求时:
当发生ARP请求报文时,填写目的ip为ipH的主机,它接受到这个请求报文后
- 先看op(查看是请求还是应答),
- 若是请求就看其报文内的目的ip和自身ip是否相等(在ARP层判断)
- 相等就会构建ARP应答返回给请求的主机
- 反之若不是则丢弃。
ARP应答时:
- 当收到ARP应答时判断以太网首部中的以太网的目的地址(在数据链路层的最底层mac帧中判断的)
- 若是发给自己的,同样是先看op,发现为2(表示为应答),就提取发送方的mac地址
- 这样就成功的获取到了目的ip的Mac地址
- 也就完成了ARP协议的全过程
其中请求和应答是在不同层中判断的,因为:检查应答中的源IP地址和源MAC地址是否与请求中的目标IP地址和期望的MAC地址匹配,是在网络层中的。
ARP欺骗(如何成为中间人)
前提知识:
arp缓存时,如果收到了很多同类型的arp应答,它会将最新的arp记录下来
通过自己的主机向所要攻击的主机和该主机发送的arp请求对应的主机,发送大量的自己虚构的arp应答 ,假装自己为该主机之前发送的arp请求的应答,从而让他的arp缓存记录为自己主机的mac地址,这样后面当攻击主机要发送数据给路由(或主机)时,实际上是发给我们这台主机,我们就能进行篡改数据,然后在我们在发出去。
本章完。预知后事如何,暂听下回分解。
如果有任何问题欢迎讨论哈!
如果觉得这篇文章对你有所帮助的话点点赞吧!
持续更新大量计算机网络细致内容,早关注不迷路。