目次
1. 数据链路层的主要功能
2. MAC帧报文
3. 局域网通信原理 && 数据碰撞问题
4. MAC 帧的 MTU 与 TCP 协议的 MSS
5. ARP 协议
① ARP 协议的原理
② ARP 协议的报头
③ 模仿一次 ARP 过程
④ ARP 协议的相干问题
⑤ 基于 ARP 的中间人模式
6. DNS 与 ICMP
① DNS 协议
② ICMP 协议
7. NAT 技术与代理服务器
① NAT 技术
② 代理服务器
③ 两者的区别
1. 数据链路层的主要功能
MAC 地址用于区分在同一个局域网中的不同的主机。接下来让我们来看看 MAC 帧的报文,这里举例几种,如图所示
要学习协议我们得先搞懂几个问题
1. MAC 帧怎样解包与封装呢?——通过定长报文解决!
2. 怎样确定交给上层的哪个协议呢?——报头中有一个协议字段,如上图所示,类型为 0800 表示要交付给 IP 协议,类型为 0806 表示要交付给 ARP 协议。
3. 局域网通信原理 && 数据碰撞问题
我们先条件到过以太网通信原理(见Linux网络——网络初识),如图所示
在这个局域网通信的过程中,其实有很多的主机都能收到这个报文!这样就会产生数据碰撞的问题,也就需要我们提出碰撞避免的算法,即让两边都等一等,然后重新发送。可以看到,局域网中主机越多,发生碰撞的概率就越大,那我们该怎么办呢?——划分碰撞域,减少局域网碰撞!因此出现了互换机这一装备,举个例子
假如在 H3 与 H8 之间存在一个互换机, H1 与 H7 都在互换机的左边,就会让报文不传递到互换机右边,以此来划分碰撞域从而低落碰撞概率。
4. MAC 帧的 MTU 与 TCP 协议的 MSS
从 MAC 帧的报文中我们可以看到数据的范围是 [46, 1500] 这里的 1500 实际上就是 MTU 的大小,虽然我们在 IP 层有讲太过片的概念,但是分片是一个不太好的操作(容易引起重发低落服从),因此我们在协议层应该只管减少分片,而产生分片问题的根源在 TCP 协议!因此我们从下向上推,如图所示
所谓的将数据发送到目标网络,本质上是通过无数个连续的子网来实现的。我们来看下面这个情况
主机 A 想向网络中的主机 B 发送数据,但是主机 A 要想将数据交给主机 B,条件是要先知道主机 B 的 MAC 帧(网络协议栈是这样规定的!),那我们怎样知道主机 B 的 MAC 帧呢?——通过 ARP 协议!
ARP(Address Resolution Protocol)即地址剖析协议,它用于将网络层的IP地址剖析为数据链路层的MAC地址。
① ARP 协议的原理
如图所示
② ARP 协议的报头
如图所示,我们可以看到
源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次。对于数据链路层为以太网的情况是多余的,但如果数据链路层是其它类型的协议则有大概是须要的
硬件类型指链路层的网络类型,1 为以太网
协议类型指要转换的地址类型,0x0800 为 IP 地址
硬件地址长度若为以太网地址则为 6 字节
协议地址长度若为 IP 地址则为 4 字节
op 字段为 1 表示 ARP 请求;op 字段为 2 表示 ARP 应答
别的,虽然 ARP 协议属于 MAC 帧的上层,但是我们也将其归属到数据链路层。
③ 模仿一次 ARP 过程
如图
此时,主机 R 想知道主机 B 的 MAC 地址,因此它发出了一个 ARP 请求报文,如图
同时,对于任意一台主机而言,它既有大概会收到应答,也有大概对别人发起 ARP 请求,因此在吸取/发送报文时,会先看 op 字段,如果为 1 则表示这是个 ARP 请求报文;若为 2 则表示这是个 ARP 应答报文。
在局域网中,当主机 B 收到了一个 ARP 请求报文(发现 op 置为 1)时,会将目的 IP 与自己的 IP 进行对比,若雷同就会发送 ARP 应答报文,反之则丢弃。其发送的 ARP 应答报文如下
然后主机 R 捕获到这个应答报文,ARP 完成!在 ARP 的整个过程中
1. 收到的任何 ARP 报文,都要优先看 op 字段
2. op 决定了什么东西呢?—— ARP 的类型,如果发现是请求报文就会查看它的目的 IP 和目的 MAC;如果是应答报文就会查看它的源 IP 和源 MAC。
④ ARP 协议的相干问题
ARP 后,目标主机的 MAC 地址和 IP 地址会被当前主机缓存起来,临时生存好。以是
1. ARP 并不需要每次都做,只有在缓存失效的时候才会进行
2. 可以通过自己的 IP 和 子网掩码得到自己的网络号,然后拼接 IP 地址,ping 所有的主机,从而得到所有主机的 IP 地址和 MAC 地址
3. 如果收到多次同样的 ARP 应答,会以最新的应答报文为准
除了 ARP 协议外,另有一种 RARP 协议,它与 ARP 协议雷同,只不过它的功能是根据 MAC 地址来找 IP地址。
⑤ 基于 ARP 的中间人模式
如果主机 A 想给路由 R 发送 ARP 请求,但在这个过程中请求报文被主机 M 拦截并更换成 自己的 IP 地址与 MAC 地址,如图所示
这样,对于主机 M 来说,可以通过将主机 A 发出来的所有报文都丢失从而达到一种定向断网的效果。我们将这种基于 ARP 的中间人模式称为 ARP 诱骗。
6. DNS 与 ICMP
① DNS 协议
DNS(Domain Name System,域名系统)协议是互联网上用于将域名和IP地址相互映射的一个分布式数据库系统。
举个例子,当我们访问 www.qq.com 时,会发生如下所示的事
浏览器一般都内置了 DNS 服务的服务器 IP 地址,因此在收到一个域名时,会先使用 DNS 服务获取域名 IP 地址,然后再直接访问!
② ICMP 协议
ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种网络层协议,用于在IP主机、路由器之间传递控制消息。ICMP消息用于提供有关网络通信的反馈,如无法到达目的地、时间超过等。
比如我们可以在应用层使用 ping 命令来进行网络诊断,如图