数据链路层
是OSI参考模型中的第二层,介乎于物理层和网络层
之间。
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
以太网帧
在以太网链路上的数据包称作以太帧
。
以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。
- 协议格式
目的MAC地址(6字节)+ 源MAC地址(6字节)+ 类型(2字节) + 数据 + CRC校验
- 类型:标识着网络层中所使用的协议
- 数据:有效载荷
- CRC校验:检测数据链路层中的数据帧是否出错
ARP 协议
他的用途就是,可以通过ip地址获取相邻设备的MAC地址,他只在子网的内部有效
协议的格式
ARP协议格式 = 以太网首部
+ 28字节ARP请求或者应答首部
以太网首部:
- 6字节
以太网目的地址
:ARP请求的目的MAC地址。如果全为1,则表示为广播地址 - 6字节
以太网源地址
:ARP请求的主机的MAC地址 - 2字节
帧类型
:以太网数据帧类型,表名了上层使用的什么协议。(ARP协议是介于网络层 和 数据链路层之间的协议)
IP 协议: 0x0800
ARP 请求或者应答: 0x0806
28字节ARP请求或者应答
- 2字节
硬件地址类型
:表示ARP网络的类型。以太网类型等等 - 2字节
协议类型
:表示使用什么协议。ip地址转换MAC地址 - 1字节
硬件地址长度
:MAC地址的长度 - 1字节
协议地址长度
:ip地址长度 op
:标识ARP请求和ARP应答。
1 --> 请求
2 --> 应答
- 6字节
发送端以太网地址
:发送ARP请求或者应答主机的MAC地址 - 4字节
发送端ip地址
:发送ARP请求或者应答主机的ip地址 - 6字节
目的以太网地址
:表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。
ARP 请求 : 0x0000 0000 0000
ARP 应答 : 所填充的内容是ARP请求中的 源MAC地址
- 4字节
目的ip地址
:目标主机的ip地址
使用arping 命令发送数据
arping -I [网卡类型,ens32,ens33] -c 2 192.168.75.128
进行抓包分析
sudo tcpdump -i any -s 0 -w 1.dat
ARP 缓存表
- 每台机器会定时获取相邻设备的
MAC地址
,时间为20Min
,20min
也是ARP缓存老化的时间 - 如果数据在数据链路层没有在缓存表中发现相邻设备的
MAC地址
时,则发送ARP请求
获取;
否则就会直接从缓存表中获取,组织数据链路层的以太网数据帧
ARP 请求是广播发送,如果目标主机收到则进行处理;不是目标主机收到就会丢弃
NAT协议
当我们需要用虚拟机访问外网时,首先得让虚拟机处于NAT模式
,因为桥接模式下我们的虚拟机是没有自己的ip地址的,使用NAT模式和主机共享一个私网ip地址。
NAT协议是一个地址转换协议
- 请求:将网络数据中的私网的源ip地址(私网ip)转换为 公网的ip地址
- 应答:将网络数据中的目的ip地址(公网ip)转换为 私网ip
NAT 模式的特点:
- 网络被划分为私网和公网,NAT网关设置在私网到公网的路由出口位置,双方的流量都是需要经过NAT网关的
- 网络通信只能存私网访问公网,公网是不能直接访问私网主机
- NAT网关对于请求而言,是替换源ip地址;对于应答而言,是替换目的ip地址
- NAT网关对于双方都是透明的,双方在网络传输的过程中是无感知的。(双方通信都是直接到位,感觉不到NAT的存在)
- NAT网关为了实现双向翻译功能,需要在NAT服务器中维护一张映射表,把对应ip替换的信息记录下来
静态NAT
在NAT网络转换的时候,私网ip唯一对应一个公网ip,两者是1对1的关系
一般用于想要隐藏自己的ip地址
动态NAT
动态NAT,在私网到公网进行映射的时候,不是给一个私网ip唯一映射一个公网ip,而是进行动态分配
NAT网关中维护的映射表中的ip地址之间是动态变化的,但是表的内部还是一个私网ip对应一个公网ip。
这对于ipv4地址枯竭的问题没有有效的解决
NAPT(NAT重载)
NAPT,当一个私网ip地址经过NAT网关后,在网关中映射的时候,给私网ip地址 加了一个端口号,这样就可以区分不同的私网ip地址了
再使用这个公网ip + 端口号,去访问对应的公网ip地址
这样使得,NAT网关中可以转换 2^16 个私网ip地址去访问公网
NAPT
- 私网和NAT中可以是多对一的关系,通过不同的端口进行标识
- NAPT中的公网ip,最多可以映射2^16个端口
- NAPT是一个动态NAT,可以维护多个公网ip
- NAPT很好的解决了ip地址不够用的问题
DNS协议
DNS协议,也就是域名解析协议
域名就相当于我们的ip地址,当我们使用baidu.com
去访问百度的时候可以访问的。同时,如果我们使用百度的ip地址去访问百度界面,也是可以的。
但是ip地址不容易进行记忆,所以说就有了用域名来表示ip地址
- 域名:域名就是由
.
进行分割的字符串的集合,所分割的字符串都是有着特殊的意义。比如:baidu.com,taobao.com
.com --》 商业公司
.cn --》 中国
.us --》 美国
.edu --》 教育
.gov --》 政府
-
作用:将域名转化为ip地址
-
域名服务器(DNS服务器):保存了域名和ip的对应关系,用来处理DNS请求,将域名对应的ip地址应答给请求的浏览器。
一般使用UDP协议来处理这样的请求,使用TCP协议的话在不停的连接过程中,时间上很浪费,还不安全 -
域名服务器是一种层级管理的方式,不同的域名服务器所管理的域名都是不同的
- 域名解析流程
递归查询
递归查询,就是一级一级的向下查找,直到找到需要的数据才会返回,或者全部找完了没有找到也会返回。
迭代查询
迭代查询的都是从本地DNS服务器开始,依次查询其他域名服务器,只要没有找到数据,就返回信息给本地DNS服务器,然后本地DNS服务器再查找下一个级别的服务器