https://blog.csdn.net/qscftqwe/article/details/157249052
上节课链接,大家可以点击观看!
一.数据链路层
引入:
数据链路层解决的是直接相连设备之间的数据帧可靠交付问题;在同一个局域网中,它通过 MAC 地址唯一标识并区分每一台设备。
1.1 以太网帧的格式和数据链路层的知识
**目的地址/源地址:**数据链路层解决的是直接相连设备之间的数据帧可靠交付问题,因此目的地址就是对方的Mac地址,源地址就是自身的Mac地址!
类型: 以太网帧中的 "类型"字段 (Type / EtherType)用于标识该帧所承载的上层协议类型,从而让接收方知道如何处理帧中的数据。
CRC(循环冗余校验码):是验证码的一种
**PAD(填充字节):**因为ARP和RARP它们的长度不符合最低46字节,因此PAD就是把缺的部分补上!
1.认识MAC:
MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19),在网卡出厂时就确定了, 不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。
2.对比理解MAC地址和IP地址
IP地址描述的是路途总体的 起点 和 终点
MAC地址描述的是路途上的每一个区间的起点和终点
**举个例子:**A要发数据到D,那么要经过B,C,IP的源地址就是A,目的地址是D,而MAC地址A------B,B------C,C------D。
3.认识MTU
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路层技术标准决定 ,而这些标准又受到受底层物理介质和硬件
以太网帧的数据字段 长度规定为 46 ~ 1500 字节 。若上层协议数据(如 ARP 报文)不足 46 字节 ,则需在末尾添加 填充字节,使总数据长度达到至少 46 字节;
1500 字节称为以太网的 MTU (最大传输单元),表示该链路能承载的上层协议数据;
不同数据链路层标准(如 PPP、Wi-Fi、FDDI)具有不同的 MTU 值。
1.2 MTU对UDP和TCP的影响
UDP:
**一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),**那么就会在网络层分成多个IP数据报
这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了。
TCP:
TCP 的单个报文段不能无限大,其大小受限于底层网络的 MTU 。 为了避免 IP 层分片 ,TCP 引入了 MSS ,表示TCP 报文段中数据部分的最大长度(不包括 TCP 和 IP 首部)。
在 TCP 三次握手建立连接时,通信双方会在 SYN 报文的 TCP 选项字段 中携带自己支持的 MSS 值:
通常,MSS = 本地 MTU − IP 首部长度 − TCP 首部长度 ; (例如以太网 MTU=1500 → MSS = 1500 − 20 − 20 = 1460 字节)
- 双方收到对方的 MSS 后,会取较小值作为本次连接的最终 MSS,确保双方发送的数据段都不会导致 IP 分片。
二.ARP协议
引入:
ARP 是网络层协议(TCP/IP可能是因为从功能上来看,OSI则认为是数据链路层可能是因为其采用帧的格式),但它不封装在 IP 数据报中,而是直接封装在数据链路层帧中 (如以太网帧),因此它"位于网络层底部,紧贴数据链路层"。
作用:ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.
在同一局域网 中进行通信时,源主机的应用程序知道目的主机的 IP 地址和端口号 ,但不知道其硬件地址 (MAC 地址)。 数据帧到达主机后,网卡首先检查目的 MAC 地址:
如果与本机 MAC 地址不匹配 (且不是广播地址),则直接丢弃,不会交给上层协议处理;
因此,在发送数据前,源主机必须通过 ARP 协议 获取目的主机的 MAC 地址,并将数据封装在以太网帧中发送。
ARP格式:
**以太网目的地址:**要发给谁(请求的时候,这个为全1)
**以太网源地址:**发送人是谁
帧类型:固定0806,其作为数据帧的类型之一
硬件类型: 指链路层网络类型,1为以太网
协议类型: 指要转换的地址类型,0x0800为IPv4
**硬件地址长度:**对于以太网地址为6字节
**协议地址长度:**对于和IP地址为4字节
**op:**字段为1表示ARP请求;op字段为2表示ARP应答
**发送端以太网地址和IP地址:**发送人的MAC地址和IP地址
**目的以太网地址和IP地址:**接收人的MAC地址和IP地址
ARP工作流程:
例子为A发给C
A 首先构造一个 ,ARP 请求报文,因为它不知道目标 IP 对应的 MAC 地址。
在以太网帧中,目的 MAC 地址字段填为全 F (即
FF:FF:FF:FF:FF:FF,广播地址),表示该帧将被局域网内所有设备接收。局域网中的每个设备收到该帧后:
首先在数据链路层检查目的 MAC 地址 ;如果是广播或本机 MAC,则上送至网络层处理;否则直接丢弃(不会进入网络层)。
对于上送的设备(如 B 和 C),会解析 ARP 报文中的操作码(op):
若 op = 1(请求),则检查 ARP 报文中"目标协议地址"(即要查询的 IP)是否等于本机 IP;
如果匹配,则构造 ARP 应答;如果不匹配(如 B 的情况),则丢弃该 ARP 请求(注意:B 是在网络层判断 IP 后丢弃,但前提是它已通过 MAC 地址过滤,进入了上层)。
3 .假设 C 的 IP 与 A 查询的目标 IP 匹配:
C 构造 ARP 应答报文 (op = 2),并将以太网帧的目的 MAC 地址设为 A 的 MAC 地址(单播,因为其他设备MAC匹配不上,因此不会进入网络层,也就不会检测ARP报文);
当 C 发送该应答帧时,B 收到后在数据链路层发现目的 MAC 不是自己也不是广播,立即丢弃,根本不会送到网络层;
A 收到后,确认目的 MAC 是自己,解析 ARP 应答,根据 op=2 判定为应答 ,于是更新本地 ARP 缓存(将 IP 与对应的 MAC 地址绑定)。
ARP周边问题:
ARP 会缓存结果
主机在收到 ARP 应答后,会把 IP → MAC 的映射存入本地 ARP 缓存表;
后续通信直接查表,不用每次都广播请求,提高效率。
多次 ARP 应答,以最新为准
ARP欺骗问题:
A :普通用户(IP=192.168.1.10);B :网关/路由器(IP=192.168.1.1);C:攻击者(IP=192.168.1.20)
C 向 A 发送伪造 ARP 应答:
"我是网关(192.168.1.1),我的 MAC 是
CC(C 的 MAC)"→ A 更新 ARP 表:192.168.1.1 → CC如果只伪造了网关,C还给他流量转发,那么A还可以上网,如果不转发那么A就上不了网这个就叫ARP 拒绝服务攻击(DoS)。
C 向 B(网关)发送伪造 ARP 应答:
"我是 A(192.168.1.10),我的 MAC 是
CC"→ 网关更新 ARP 表:192.168.1.10 → CC如果伪造了用户又伪造了网关,那么用户/网关接收到的应答都是C想给它们的,因此危险巨大,这个叫双向欺骗
三.RARP协议
RARP 的作用与 ARP 相反:
ARP :已知 IP → 查询对应的 MAC 地址(IP → MAC)
RARP :已知 MAC → 查询对应的 IP 地址(MAC → IP)
不过该协议,基本被弃用
四.DNS
DNS作用:
DNS,帮助我们输入网址的时候不需要输入IP,只需要输入一串字符串 比如:<www.baidu.com>,DNS会把这个域名转换成IP地址
域名简介:
bashwww.baidu.comcom: 一级域名,表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
baidu: 二级域名,公司名.
www: 三级域名,主机名,提供WWW服务,可以省略
五.ICMP协议
引入:
ICMP协议是一个 网络层协议
功能:
确认IP包是否成功到达目标地址。
通知在发送过程中IP包被丢弃的原因。
ICMP也是基于IP协议工作的。ICMP只能搭配IPv4使用。如果是IPv6的情况下, 需要是用ICMPv6。
IP 只管发,ICMP 负责说"到没到"和"为啥失败"。 采用ICMP,使用原始套接字实现,此时应用层直接操作 IP+ICMP,跳过 TCP/UDP。
分类:
一类是通知出错原因
一类是用于诊断查询
其中这两个的实现,就是我们常用的ping
ping命令:
注意, ping命令ping 的是域名或IP, 而不是url!
ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL**(其中时间代表的是往返延迟,TTL表示还能跳几次,一跳就是经过一个路由器)。**
ping命令会先发送一个 ICMP Echo Request给对端;
对端接收到之后, 会返回一个ICMP Echo Reply;
六.NAT技术
NAT引入:
NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。
**NAT能够将私有IP对外通信时转为公网IP。**也就是就是一种将私有IP和公网IP相互转化的技术方法
很多学校, 家庭, 公司内部每个终端设置私有IP, 而在路由器或必要的服务器上设置公网IP
NAT IP转换过程:
NAT路由器将源地址从10.0.0.10替换成公网IP 202.244.174.37;
NAT路由器收到外部的数据时, 又会把公网IP从202.244.174.37替换回10.0.0.10;
但是有这样一个问题,就是如果A,B,C都访问同一个服务器,那么路由器怎么知道这个应答,要发送给那个客户端呢,这就需要用到NAT表。
NAT表:
这个表就记录了,私有IP转公网IP,对于之前的问题即任何区分A,B,C,采用端口,这样就可以区分了!你可以把一块白色区域当作一个字符串,该字符串是唯一的,因此可以区分。
NAT缺陷:
无法从NAT外部向内部服务器建立连接。
因此服务器是不能主动和设备进行通信,必须要由设备主动访问服务器才可以
装换表的生成和销毁都需要额外开销。
通信过程中一旦NAT设备异常, 所有的TCP连接也都会断开,因此又要重新创建转换表。
内网穿透frp
首先你A设备要访问C设备是不可能的,可是你要想让A访问C中设备怎么办呢?
首先你需要frp,让服务器用frps,C设备用frpc,让frpc向frps构建TCP连接,这样就建立了一条链接,然后让A访问frps,然后frps再把数据发送给frpc
frpc在发给frps,然后frps在发给A,这样就完成了A和C的通信
七.代理服务器
代理服务器 是一个"中间人",代表客户端去访问目标服务器。它站在客户端和目标服务之间,接收你的请求,再替你转发给真正的服务器,并把结果返回给你。
图中设备用到校园网,因此会把数据发送给学校服务器,然后让学校服务器帮你访问资源,因此你用校园网访问的资源,学校是可以看到的!
代理服务器的种类:
正向代理: 对客户端,代表客户端访问外部资源
反向代理: 对服务器,代表服务器接收外部请求
因此之前的内网穿透的那个frps就是反向代理,因为A访问C,那么C(frpc)相当于服务器,而那个frps就是为了服务C,因此是反向代理!
隧道技术:
- 隧道技术通过将一种协议的报文封装到另一种协议的有效载荷中,使其能够穿越原本不支持该协议的网络(如公网)
例子:
你需要一台拥有公网 IP 的云服务器,客户端发送一个数据包,其"外层 IP 头"指向服务器(隧道出口),而"内层 IP 包"包含真正的目标地址(如
8.8.8.8或www.google.com的 IP); 公网服务器收到后,剥去外层封装,根据内层 IP 去访问外网,并将响应原路返回。还有其他的实现,这个例子只是其中一种而已
八.NAT和代理服务器的区别
从应用上讲, NAT设备是网络基础设备之一,解决的是IP不足的问题 ;代理服务器则是更贴近具体应用 ,比如:通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
从底层实现上讲, NAT是工作在网络层 ,直接对IP地址进行替换。代理服务器往往工作在应用层。
从使用范围上讲, NAT一般在局域网的出口部署 ,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上 ,代理服务器则是一个软件程序,需要部署在服务器上。
那么关于网络层和数据链路层的知识就讲到这里了!







因此服务器是不能主动和设备进行通信,必须要由设备主动访问服务器才可以

