Linux之数据链路层
一.以太网
在我们学习完了网络层后我们接下来就要进入数据链路层的学习了,在学习完网络层后我们知道网络层的作用是进行路径选择以及完成路由,但是无论是应用层,传输层还是网络层都没有完成我们数据传输中最重要的一环那就是传输数据,上三层分别提供了数据处理,可靠性保证,路径选择和完成路由而真正的数据传输环节就需要我们现在学的数据链路层来完成了。数据链路层不同于上三层可以由具体的某项协议完成而是由一系列的协议标准来实现的。例如我们今天会仔细说的以太网。我们要了解以太网不是一种具体的网络而是一种技术标准,以太网的内容结合了数据链路层和物理层。以太网是如今应用最广泛的互联网技术与其并列的有令牌环和无线LAN等。
1.1以太网帧格式
首先我们先来了解什么叫做以太网帧:把在数据报首部添加报头尾部添加检验和的新的报文整体叫做以太网帧。所以以太网帧中分为三部分:报头,正文和校验和。
- 目的地址和源地址
其中的地址代表的是网卡的硬件地址也就是MAC地址,占据了六个字节也就是48位。 - 类型
这里的类型指的是应用于帧数据字段的协议。类型占据了两个字节即8位 - 校验和
这里的校验和就和TCP协议IP协议中的校验和相同即利用CRC算法来检查数据报是否损坏。
对于数据链路层来说传输靠的就不是IP地址了而是MAC地址因为数据报是通过一个一个的子网传输到目的主机的而在一个子网中传输靠的就是MAC地址。
1.2MAC地址
对于MAC地址我们应该不陌生了在讲述协议的时候我们就提到过MAC地址的概念以及它和IP地址的区别,这里我们就来再次认识一下MAC地址。
MAC地址是来识别数据链路层中相连的节点也就是不同的主机或者路由器,MAC地址的长度是48位即6个字节,一般是用16进制以及符号:来进行分割例如:08:00:27:03:fb:19。对于MAC地址来说这是在我们电脑出厂之后就存储在网卡中的并且是唯一的。
对于MAC地址和IP地址的区别我们能理解,我们可以将IP地址当作出去旅游时的起始处和目的地例如我们要从北京到上海去,那么源IP地址就是北京目的IP地址就是上海。而MAC地址则是我们在路上具体是从哪个地方到哪个地方例如从北京到上海,最开始源MAC地址就是北京目的MAC地址是河北,到了河北后源MAC地址就是河北目的MAC地址是河南以此类推直到目的MAC地址是上海。所以IP地址是不变的,MAC地址是一直在发生变化的。
那么在了解了MAC地址后我们要知道MAC的作用就是完成局域网中的通信也就是完成一个子网中的通信,在局域网中一个主机想要发送数据给另外一个主机就必须通过MAC地址而不是IP地址。那么在这个通信的过程也会产生一些问题,我用图来给大家解释。
所以在进行局域网通信的时候局域网就相当于是一个"临界资源"因为局域网会被很多的主机来访问,那么我们就需要对这个临界资源进行保护也就是对局域网进行保护以免出现错误,例如如果局域网中同时有两台及以上的主机同时发送数据报那么这些数据报可能就会在碰撞域中发生碰撞从而造成数据报的损坏。
所以对于碰撞域也就是局域网来说任何时刻只允许一台主机向局域网中发送数据报否则就有可能产生碰撞问题。想要解决碰撞问题我们可以采用碰撞检测和碰撞避免以及划分碰撞域的方法。
1.3MTU
在讲述IP协议的分包时我们就提到过MTU即网络的最大传输单元也就相当于我们发快递时的包裹大小限制,MTU的数值是不同的数据链路层对应的物理层产生的。所以这个值是不固定的对于以太网帧来说它规定数据长度的最小值是47个字节最大值是1500个字节如果数据报的长度不够就需要往后面补充字节。MTU不仅会对IP协议产生影响也会对UDP,TCP协议产生影响。
对于UDP协议,我们需要让传输层的数据报的有效载荷不能超过1472因为UDP协议报头是8个字节,IP协议报头是20个字节这样最后刚好达到MTU。如果超过了有效载荷超过了1472那么这个数据报就会在网络层被分片。
对于TCP协议也是相同的,只是我们在讲述TCP协议时提到过TCP的数据报大小不能超过MSS也就是Max((Max Segment Size)所以这个MSS也受制于MTU的大小最好的情况就是MSS刚好是在网络层不会被分片的大小。同时我们知道TCP是有三次握手这个行为的在三次握手中双方会把自己的MSS大小写入到TCP协议的头部中从而进行协商MSS大小,在双方得到两方的MSS大小后会将较小的MSS值当作最终的MSS值。而这个协商的过程MSS大小就是存储在TCP协议那40个字节的选项中的。
如果我们想要查看自己机器的MTU大小我们可以使用ifconfig这个命令。
二.ARP协议
在知道了MAC地址是用于局域网之间通信的之后我们要思考一个问题了,在我们发送数据报时我们是用IP地址来定位目的主机的也就是说我们并不知道目的主机的MAC地址以至于我们无法完成局域网之间的通信,所以为了解决这个问题我们就要利用ARP协议。
ARP协议是一个存在于网络层和数据链路层之间的一个协议它的作用就是完成IP地址和MAC地址的映射关系从而可以让我们根据目的IP地址转换为目的MAC地址来实现局域网之间的通信。
2.1ARP协议工作流程
对于ARP协议是如何完成IP地址和MAC地址的映射的我们也需要来说道说道我们一样用图来解释
图中的这些询问以及回答MAC地址的数据报就是ARP请求和ARP响应,所以在进行局域网之间的通信时通信两方会利用ARP请求以及响应来得到双方的MAC地址从而构建出IP地址和MAC地址的映射关系。同时我们也可以从图出看出来一些细节:对于一个局域网中的主机来说它既可以接收ARP请求也可以接收ARP响应并且主机在接收到ARP结果后会将其暂时缓存起来直到超过规定的时间,在超过规定的时间后还想和ARP结果内存储的目的主机进行通信的话就需要再次发送ARP请求。
2.2ARP协议格式
ARP协议和其他协议一样也具有自己的格式,我们现在就来看看它的格式是什么样的。
对于这个数据报的格式其中很多的字段我们都是见过或者很容易就能理解的,所以我们就大致介绍并且解析其中的一些问题。
- 我们发现在以太网的头部以及ARP协议中都存在目的MAC地址和源MAC地址,这是因为以太网不是数据链路层唯一的一种方法,如果数据链路层是以太网的那么这样就是多余的但是如果数据链路层不是以太网的那么这种方法就是必须的了。
- 硬件类型是指数据链路层的网络类型,1为以太网
- 协议类型是指要转换的地址类型,0x0800为IP地址
- 硬件地址长度是数据链路层网络类型的地址长度,对于以太网来说是6字节
- 协议地址长度是转换的地址类型的地址长度,对于IP地址来说是4字节
- op字段则是标明是ARP请求还是响应,1是请求,2为响应。
三.NAT技术
在之前我们学习网络层的时候我们就提到过NAT技术,NAT技术产生的缘由就是为了解决IPv4数量不足的而NAT技术本身我们可以将其理解成一种互相转换私有IP和公有IP的方法。实现方法简单来说就是在NAT路由器有两个地址一个是私有地址也就是局域网内的IP地址一个是公有地址也就是公网内的IP地址,当局域网里有主机想要访问外网时路由器就会将其数据报中的源IP地址转换为公有IP地址,当外网服务器想要传输数据报到局域网内的主机时就会将数据报里的目的IP地址转换为对应的主机的私有地址。所有在NAT路由器中有着一张表其中存储着局域网内主机的私有IP地址和公有IP地址的映射关系来方便转换,并且这个表也是又路由器自己维护的。
这个处理逻辑只是最基础的NAT技术我们可以思考一个问题局域网内有多个主机它们的私有IP地址都不同但是路由器只有一个公有IP地址那么在外网的服务器传输数据报回来时路由器怎么知道是传输给哪个主机呢?这就要用到NAPT了也就是使用IP地址+端口号的方式,具体一点就是在路由器的地址转换表中不仅存储了局域网主机的IP地址也存储了对应的端口号。
NAT技术实实在在的缓解了IPv4地址数量不足的问题但是它也有其限制和弊端:
- 无法从NAT外部向内部服务器建立连接
- 地址转换表的创建和销毁都需要额外资源
- 通信过程中一旦NAT路由器设备出现问题那么所有的TCP连接都会出错
四.代理服务
在国内如果想要访问外网的资源我们需要进行翻墙也就是通过代理来访问外网资源。那么代理服务到底是如何实现的呢?
对于代理服务我们分为正向代理和反向代理,这两种代理方式运用场景以及原理都不同我们需要来一个一个说。
4.1正向代理
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标
服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请
求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这
种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问
控制等。
简单来说正向代理就是在客户端和网络之间插入了一个新的代理服务器,客户端会先把请求发送到代理服务器上再由代理服务器将其转发给目的服务器,响应也是先发送到代理服务器上再转发到客户端上。
正向代理的功能特点:
- 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资
源时,可以直接从缓存中获取,提高访问速度。 - 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、
阻止恶意网站等。 - 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作
时间访问娱乐网站。 - 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
- 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠
性。
应用场景:
- 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工
在工作时间内专注于工作,避免访问不良网站或泄露公司机密。 - 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以
实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。 - 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上
的不良信息影响。 - 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速
度,减少网络延迟。 - 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可
以帮助他们突破网络限制,顺畅地访问海外网站和资源。
4.2反向代理
反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收
来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回
给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。
同样简单来说反向代理是在目的服务器和网络之间插入了一个新的服务器,当我们使用客户端向目的服务器传输数据时我们无法直接访问目的服务器而是要将数据先发送到反向代理服务器中再由它将数据转发到目的服务器中,响应也是先由目的服务器传输到反向代理服务器上再传输给客户端。听着好像和正向代理服务相似都是插入一个中间服务器但是其中的功效则完全不同,正向服务是为了保护客户端而反向服务则是为了保护服务器。
功能特点:
- 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发
到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,
特别是在高并发场景下。 - 安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被
直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,
对客户端的请求进行过滤和限制,以保护后端服务器的安全。
-缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的
请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大
大减少后端服务器的负载,提升网站的响应速度。 - 内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤
和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需
求,如 URL 重写、用户认证等。 - 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静
态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,
而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
应用场景: - CDN(Content Delivery Network,内容分发网络)就是采用了反向代理的原理
五.四大层的学习总结
- 应用层
- 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
- 能够根据自己的需求, 设计应用层协议
- 了解 HTTP 协议
- 理解 DNS 的原理和工作流程
- 传输层
- 传输层的作用: 负责数据能够从发送端传输接收端.
- 理解端口号的概念.
- 认识 UDP 协议, 了解 UDP 协议的特点.
- 认识 TCP 协议, 理解 TCP 协议的可靠性. 理解 TCP 协议的状态转化.
- 掌握 TCP 的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延
迟应答, 捎带应答特性. - 理解 TCP 面向字节流, 理解粘包问题和解决方案.
- 能够基于 UDP 实现可靠传输.
- 理解 MTU 对 UDP/TCP 的影响
- 网络层
- 网络层的作用: 在复杂的网络环境中确定一个合适的路径.
- 理解 IP 地址, 理解 IP 地址和 MAC 地址的区别.
- 理解 IP 协议格式.
- 了解网段划分方法
- 理解如何解决 IP 数目不足的问题, 掌握网段划分的两种方案. 理解私有 IP 和公
网 IP - 理解网络层的 IP 地址路由过程. 理解一个数据包如何跨越网段到达最终目的地.
- 理解 IP 数据包分包的原因. • 了解 ICMP 协议. • 了解 NAT 设备的工作原理.
- 数据链路层
- 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
- 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内
容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等; - 以太网帧格式
- 理解 mac 地址
- 理解 arp 协议
- 理解 MTU