Linux网络——数据链路层
目次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. 数据链路层的主要功能
前面我们说网络层的功能是提供一种能够将数据跨网络从A主机传输到B主机的本领,而数据链路层解决的是直接相连的主机之间(如电脑与路由器)进行数据交付的问题!
2. MAC帧报文
MAC 地址用于区分在同一个局域网中的不同的主机。接下来让我们来看看 MAC 帧的报文,这里举例几种,如图所示
https://i-blog.csdnimg.cn/direct/594c825ee4a14250ae8c62767e342757.png
要学习协议我们得先搞懂几个问题
1. MAC 帧怎样解包与封装呢?——通过定长报文解决!
2. 怎样确定交给上层的哪个协议呢?——报头中有一个协议字段,如上图所示,类型为 0800 表示要交付给 IP 协议,类型为 0806 表示要交付给 ARP 协议。
3. 局域网通信原理 && 数据碰撞问题
我们先条件到过以太网通信原理(见Linux网络——网络初识),如图所示
https://i-blog.csdnimg.cn/direct/09ebe3a89cda454485584f379d030949.png
在这个局域网通信的过程中,其实有很多的主机都能收到这个报文!这样就会产生数据碰撞的问题,也就需要我们提出碰撞避免的算法,即让两边都等一等,然后重新发送。可以看到,局域网中主机越多,发生碰撞的概率就越大,那我们该怎么办呢?——划分碰撞域,减少局域网碰撞!因此出现了互换机这一装备,举个例子
假如在 H3 与 H8 之间存在一个互换机, H1 与 H7 都在互换机的左边,就会让报文不传递到互换机右边,以此来划分碰撞域从而低落碰撞概率。
4. MAC 帧的 MTU 与 TCP 协议的 MSS
从 MAC 帧的报文中我们可以看到数据的范围是 这里的 1500 实际上就是 MTU 的大小,虽然我们在 IP 层有讲太过片的概念,但是分片是一个不太好的操作(容易引起重发低落服从),因此我们在协议层应该只管减少分片,而产生分片问题的根源在 TCP 协议!因此我们从下向上推,如图所示
https://i-blog.csdnimg.cn/direct/ad0772620f7244168d2a54ce2a7b93ff.png
通过计算,我们计算出了确保发送的数据包不会超过吸取方和中间网络装备能够处理的最大尺寸(1460),从而避免在IP层进行分片,这个最大尺寸就是我们所说的 MSS(Maximum Segment Size) ,即最大报文段长度。
5. ARP 协议
所谓的将数据发送到目标网络,本质上是通过无数个连续的子网来实现的。我们来看下面这个情况
主机 A 想向网络中的主机 B 发送数据,但是主机 A 要想将数据交给主机 B,条件是要先知道主机 B 的 MAC 帧(网络协议栈是这样规定的!),那我们怎样知道主机 B 的 MAC 帧呢?——通过 ARP 协议!
ARP(Address Resolution Protocol)即地址剖析协议,它用于将网络层的IP地址剖析为数据链路层的MAC地址。
① ARP 协议的原理
如图所示
https://i-blog.csdnimg.cn/direct/445ef48a9fe2498aa1a887a08342ccdc.png
② ARP 协议的报头
https://i-blog.csdnimg.cn/direct/773d1fb4ae9741cdb05a1139ce78c52e.png
如图所示,我们可以看到
[*]源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次。对于数据链路层为以太网的情况是多余的,但如果数据链路层是其它类型的协议则有大概是须要的
[*]硬件类型指链路层的网络类型,1 为以太网
[*]协议类型指要转换的地址类型,0x0800 为 IP 地址
[*]硬件地址长度若为以太网地址则为 6 字节
[*]协议地址长度若为 IP 地址则为 4 字节
[*]op 字段为 1 表示 ARP 请求;op 字段为 2 表示 ARP 应答
别的,虽然 ARP 协议属于 MAC 帧的上层,但是我们也将其归属到数据链路层。
③ 模仿一次 ARP 过程
如图
https://i-blog.csdnimg.cn/direct/9eb5e820a2854d7f9dce5efc1d3249c6.png
此时,主机 R 想知道主机 B 的 MAC 地址,因此它发出了一个 ARP 请求报文,如图
https://i-blog.csdnimg.cn/direct/72ab61e66d7b43c1a20a101fb3ded09a.png
同时,对于任意一台主机而言,它既有大概会收到应答,也有大概对别人发起 ARP 请求,因此在吸取/发送报文时,会先看 op 字段,如果为 1 则表示这是个 ARP 请求报文;若为 2 则表示这是个 ARP 应答报文。
在局域网中,当主机 B 收到了一个 ARP 请求报文(发现 op 置为 1)时,会将目的 IP 与自己的 IP 进行对比,若雷同就会发送 ARP 应答报文,反之则丢弃。其发送的 ARP 应答报文如下
https://i-blog.csdnimg.cn/direct/6db91c2711e64fe9af094a1ec16d070b.png
然后主机 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 地址,如图所示
https://i-blog.csdnimg.cn/direct/aedff28f877f4ab9a5bbf36bad68aa13.png
这样,对于主机 M 来说,可以通过将主机 A 发出来的所有报文都丢失从而达到一种定向断网的效果。我们将这种基于 ARP 的中间人模式称为 ARP 诱骗。
6. DNS 与 ICMP
① DNS 协议
DNS(Domain Name System,域名系统)协议是互联网上用于将域名和IP地址相互映射的一个分布式数据库系统。
举个例子,当我们访问 www.qq.com 时,会发生如下所示的事
https://i-blog.csdnimg.cn/direct/9d1c8f8b90ee4b9ba363ee072bf97aef.png
浏览器一般都内置了 DNS 服务的服务器 IP 地址,因此在收到一个域名时,会先使用 DNS 服务获取域名 IP 地址,然后再直接访问!
② ICMP 协议
ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种网络层协议,用于在IP主机、路由器之间传递控制消息。ICMP消息用于提供有关网络通信的反馈,如无法到达目的地、时间超过等。
比如我们可以在应用层使用 ping 命令来进行网络诊断,如图
https://i-blog.csdnimg.cn/direct/48f3a7bd61624bafbef19359b2af34cb.png
实际上,我们使用的 ping 命令绕过了 TCP/UDP 转而直接使用 ICMP 协议,而 ICMP 获取到效果后也不向上交付,而是直接返回效果。因为 ping 命令是基于 ICMP 协议,而 ICMP 处于网络层,以是并不需要关心端口号这样的信息!
7. NAT 技术与代理服务器
① NAT 技术
之前在介绍 IP 协议时我们就曾提到过 NAT 技术(见Linux网络——网络层⑦私有子网小节),如图
https://i-blog.csdnimg.cn/direct/31097e46c34546c2a846dad8cb3eb5fa.png
我们将私有 IP 不停被更换的技术称为 NAT 技术,它是路由器的一个重要功能。那现在参加有 10.0.0.10、10.0.0.11、10.0.0.12 同时向外发送报文,那返来的时候 IP 报文雷同怎么办呢?——路由器中会构建一张映射表(NAPT 转化表),事实上, NAT 操作如图所示
https://i-blog.csdnimg.cn/direct/7518bd1e7c2040fdb52d784c93a9a234.png
也就是说,NAT 在更换的时候,不仅会更换 IP地址,也会更换端口号,从而做到一一对应转换!
那如果是公网上的两个私有子网怎样互相访问呢?
先将一个呆板借公共服务器创建 TCP 长毗连,然后把请求发给服务器,服务器通过特定映射将指令发送给该呆板
我们将从外部网络(如互联网)访问位于内网(局域网)中的资源这样的技术称为 内网穿透。比如,我们可以使用 FRP 这一反向代理应用来操作。
② 代理服务器
要讲代理服务器,我们可以使用一个最简单的例子来举例——校园网,如图所示
https://i-blog.csdnimg.cn/direct/c606d29f52ab43aeba844f574d56632a.png
我们想要使用校园网上网都要先辈行登录认证,那么登录认证是在干啥呢?——获取局域网 IP 地址!像学校服务器这种代理服务器属于正向代理,那有没有反向代理呢?有的,举个例子
https://i-blog.csdnimg.cn/direct/fd49cf0711de4d898ed78d932fac18e6.png
有些时候,主机在访问一个服务器时,只会访问一台呆板,这会导致只有一台呆板在工作,而其他呆板处于闲置状态,即会造成负载不均衡的情况,此时我们将这个服务器作为代理服务器,将任务按一定的规则分发给不同的呆板,从而达到负载均衡,这种代理服务器就属于反向代理,我们前面提到的内网穿透软件 FRP 就属于反向代理服务器!再举个例子
https://i-blog.csdnimg.cn/direct/3c355c73939c4c45af3c5f925222f92f.png
常规情况下,HTTP 默认携带的黑白 HTTP 的其他数据,但当我们使用 XX 时,就可以使用上图的方式,我们将这种技术称为 HTTP的隧道技术!
③ 两者的区别
NAT(网络地址转换)和代理服务器都是网络技术,它们都可以隐藏内部网络的细节,但它们在实现方式和用途上有所不同。它们的主要区别如下
NAT(网络地址转换)
[*] 地址转换:NAT的主要功能是将私有(内部)IP地址转换为公共(外部)IP地址,使得多个装备可以共享单个公共IP地址访问互联网。
[*] 透明性:对于终端装备来说,NAT通常是透明的,不需要对终端装备进行配置或修改应用程序。
[*] 路由器功能:NAT通常在路由器上实现,自动为经过路由器的所有出站流量进行地址转换。
[*] 一对一或一对多映射:NAT可以实现一对一或一对多的地址映射,即一个公共IP可以映射到多个私有IP。
[*] 无状态操作:NAT操作通常是无状态的,即它不维护毗连状态信息,每个数据包的地址转换是独立的。
代理服务器
[*] 中间人:代理服务器作为客户端和服务器之间的中间人,吸取客户端的请求并转发到目标服务器,然后再将服务器的响应返回给客户端。
[*] 非透明性:客户端需要知道代理服务器的存在,而且通常需要在客户端配置代理服务器的地址和端口。
[*] 应用层操作:代理服务器在应用层工作,它可以处理特定的协议,如HTTP、FTP等,并大概对数据进行缓存、过滤或修改。
[*] 一对一映射:代理服务器通常为每个客户端毗连提供一个单独的映射,而不是像NAT那样多个毗连共享一个公共IP。
[*] 有状态操作:代理服务器通常维护毗连状态信息,可以跟踪会话和变乱。
[*] 功能扩展:代理服务器可以提供额外的功能,如负载均衡、缓存、压缩、SSL加密等。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]