Linux——数据链路层

1. 认识以太网

认知:以太网是用于局域网数据通信的协议标准,定义了同一局域网内通过电缆/无线怎么在设备之间传输数据帧。

:整个网络世界可以具象看出由许许多多的局域网组成,

**•**家庭中的设备A and 家庭中的设备B and 家庭路由器(出入口)

**•**家庭A的路由器 and 家庭B的路由器 and 社区路由器(出入口)

**•**社区A的路由器 and 社区B的路由器 and 市区路由器(出入口)

**•**A省的路由器 and B省路由器 and 国家路由器(出入口)

**•**A国路由器 and B国路由器 and C国路由器.......

路由器构成了每个局域网的出入口

注:把链路层发送的数据叫做数据帧!

• 6位目的地址 and 6位源地址:目的Mac地址 and 源Mac地址

• 类型:上层传递下来有效载荷的协议类型,字段对应 IP、ARP、RARP;

:0800对应IP,0806对应ARP,0835对应RARP,后续两个稍后再说

:以太网协议怎么分离报头和有效载荷?

:报头为固定长度
认知:网络中传输的报文带两个地址,一个是MAC地址一个是IP地址,IP地址决定了下一目的地的Mac地址的选择,IP地址是你的最终目的地,MAC地址是中途的临时地址。

2. 局域网的通信过程

假设同一局域网内,主机A发送报文给主机E,主机A会将报文发送到当前局域网中,所有的主机收到该报文时,会将自己的Mac地址和该条报文的前6位字节进行比较,发现不合符目标Mac地址,于是丢弃,上层意识不到下层已经接受过报文了。主机E发现自己的Mac地址和报文中的目的Mac地址相同,于是开始向上层层交付。

认知:局域网就是一个碰撞域,一次只能发送一个数据帧,如果同时发送多个数据,就会出现碰撞问题,导致数据丢失。因此在局域网通信时,单个数据帧要有下限和上限(46~1500)

:这个是硬件工程师规定的。
思考 :在网络通信的过程中,对于访问者个人而言,他是知道目的主机的IP的,想想socket通信时,我们需要输入对端的IP+端口号才能够访问,所以知道对端的IP对于主机A不是问题,但是!主机A是怎么知道主机E的Mac地址的?

答: ARP协议**!**


3. 认识ARP协议

ARP协议属于数据链路层协议之一,他位于网络层协议和以太网协议的中间,结构如图,属于定长协议

以太网首部、以太网源地址、发送端以太网地址、发送端IP地址、目的IP地址 不过多介绍

• 硬件类型:1代表以太网

• 协议类型:0800代表IP协议

• op:1表示ARP请求,2表示ARP应答

• 目的以太网地址:初始情况下为 FFFFFF

:前面说了,数据帧的下限为46字节,为什么ARP请求只有28?

:末尾的PAD用于填充垃圾数据(0or1),来保证满足数据帧长度的下限,读取的时候不会出问题。

3.1 通过ARP协议如何得知目的IP的Mac地址?

:假设还是主机A发送报文给主机E

因为主机A不知道主机E的Mac地址,所以起初他会发送ARP协议数据帧,该帧中将op设置为1,表示为请求ARP,将该数据帧在局域网内广播(对应先前讲的广播IP),局域网内所有的主机都会收到该条数据帧,并对其进行ARP协议解析,当发现其目的IP地址与当前主机的IP地址不对应时,就丢弃该条报文。

主机E做解析后 发现 op字段为1 是请求,并且目的IP地址与自己的IP地址对应,并且为请求, 主机E需要做应答处理,将op设置为2,并且此时ARP协议中的目的以太网地址为主机A的地址,源以太网地址为主机E的Mac地址,将该数据帧再次发送到局域网内,非相关的主机仍然收到了这条数据帧,只不过这次因为目的Mac已知,非相关的主机直接丢弃数据帧

对于主机A,先看op字段为2 表示应答,得到了主机E的Mac地址,后续就可以将带数据的数据帧发给主机E了

细节1:主机都会在一段时间内(分钟级别),记录下来当前局域网中各个IP对应的Mac地址的映射关系

:为什么不永久记录下来?

:IP是变化的,MAC地址换了网口后也是变化的

细节2:相同局域网内的两台主机会通过上述方法得知目标Mac地址,对于不同局域网内的两台主机,通信时,会先通过上述方法,知道当前局域网内路由器的Mac地址,然后发送报文,报文到达了新的路由器时,他得找下一个路由器的Mac地址,就会重复上述过程,直至发给目标主机。目标IP不会变,但是Mac地址一直会变,所以路由器中只需要记录IP地址,可以通过ARP协议的请求与应答去查下一目的地的Mac地址


4. NAT技术的相关问题

问题先前讲述了NAT技术的含义,报文从主机A通过公网传到服务器的过程大致理解了,那么服务器的应答怎么通过公网传给主机A?

:借助NAPT转换表

NAPT转换表 :记录 源IP+port /目的IP+端口NAT路由器wan口IP 地址 + 端口 /目的IP+端口 的映射关系 当外部服务器发送回应时,他的 目的 IP+端口 是NAT路由器的WAN口IP+端口,他会查表做对应替换,更改目标ip+端口、

**•**这张表是路由器自己维护的

**•**除了ip会替换,必要的时候NAT路由器内的端口号也会替换,为了避免冲突(多个主机访问同一个服务器的时候)

**•**私有IP在不同内网中可以重复,同一个内网中不可以重复

**•**这张表从内到外,从外到内都是唯一键值对wan口ip+端口是唯一的,多个主机访问同一路由器,wan口ip相同,但是端口是不同的(IP相同不要紧,端口不同就可以)

从内往外访问服务器时,途径的每个由路由器都会构建NAPT表,回来的时候就可以做内网穿透

内网穿透: 借助NAPT转换表 内网设备能够被外网访问,
认知1:NAT就是这个世界网络的真相

认知2:上述路由表内的键值关系越多,路由器越好也越贵,所以就区分了家用路由器和企业路由器

认知3:外网无法直接到内部,这就是为什么所有的服务器你得必须登录后才能访问,用户得先做些什么,服务器才能够给你回应。用户访问服务器的过程就是在建表的过程。


5. 正向代理

正向代理:(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等
工作原理:
客户端将请求发送给正向代理服务器。
正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
正向代理服务器将处理后的请求转发给目标服务器。
目标服务器处理请求,并将响应返回给正向代理服务器。
**•**正向代理服务器将响应返回给客户端。
缓存功能 :正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资
源时,可以直接从缓存中获取,提高访问速度。
内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、
阻止恶意网站等。
访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作
时间访问娱乐网站。
隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠
性。


6. 反向代理

反向代理: 服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收

来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回

给客户端。这种架构模式可以提升网站性能、安全性和可维护性等
基本原理: 反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先

会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web

服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际

与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。


7. NAT和代理服务器

路由器往往都具备 NAT 设备的功能, 通过 NAT 设备进行中转, 完成子网设备和其他子

网设备的通信过程

代理服务器看起来和 NAT 设备有一点像. 客户端像代理服务器发送请求, 代理服务器将

请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户

:代理服务器和NAT有何区别?

从应用上讲, NAT 设备 是网络基础设备之一, 解决的是 IP 不足 的问题 、代理服务器 则是更贴近具体应用 , 比如通过代理服务器进行科学上网 , 另外像迅游这样的加速器, 也是使用代理服务器.

从底层实现上讲, NAT 是工作在网络层 , 直接对 IP 地址进行替换. 代理服务器 往往工作在应用层.

从使用范围上讲, NAT 一般在局域网的出口 部署, 代理服务器 可以在局域网做 , 也可以在广域网 做, 也可以跨网

从部署位置上看, NAT 一般集成在防火墙 , 路由器硬件设备 上, 代理服务器 则是一个软件程序 , 需要部署在服务器上.


8. 内网打洞

内网打洞: 是指通过 NAT 穿透 技术,使得 两个内网设备(或一个内网设备和外网设备)之间能够直接通信,而不需要借助中介服务器。内网打洞一般用于 P2P(对等)通信,使得两台设备可以通过直接连接互相通信。


9. 交换机

交换机:如果一个局域网内的主机数量过多,就需要用到交换机,交换机工作在数据链路层

交换机的核心作用:划分碰撞域

主机A如果想把数据发给主机D,交换机识别到主机A和主机D在一个碰撞域中,就不会做转发,减小另一个碰撞域的碰撞概率。


10. 回顾TCP/IP网络的四层结构体系

• 应用层 :解决 业务处理 ,如Web游浏览、电子邮件、文件传输

回答了我收到报文该怎么处理的问题。
• 传输层 :解决 通信可靠性、数据传输的完整性、流量控制等问题

回答了我该如何将报文有效传给对方的问题。
• 网络层 :解决 长距离通信 的问题

回答了我该将报文传给谁的问题。
• 链路层 :解决子网内通信问题

回答了同一局域网内,报文怎么传给对方的问题

网络四层从下到上:怎么传 → 传给谁 → 怎么可靠的传 → 传过去后怎么处理的?

问题:描述一下浏览器从发起http到得到网页的整个过程,越详细越好

①. 解析URL,获得域名、参数、路径、协议

②. 解析域名获得 IP地址 and 端口号

③. connect 发起三次握手请求,该过程不会传输有效载荷,只含报头

:三次请求的过程中,确定了双方接收缓冲区的大小从而确定了内部滑动窗口的大小,确定了传输层每次发送最大报文的大小

④. 该报文通过网络层做路径选择,根据目的IP确定下一跳IP地址,链路层获得下一跳的Mac地址,将报文路由给下一跳

:这里涉及了一个网络IP的划分,从公网到内网的一个转换,内网ip是怎么转到公网的,公网ip又是怎么把回应发到内网的(内网发送报文时,会在各个路由器内将源IP和路由器的WAN口ip做转换,转换时会维护一张NAPT表,好做后续的内网穿透,当WAN口IP是公网IP时,不再转换)

⑤. 三次握手成功,客户端发送请求

⑥. 服务端回复相应

⑦. 客户端渲染界面

相关推荐
528302 小时前
python网络编程
网络
wxjlkh2 小时前
vSphere 7.0 client 提示HTTP状态 500- 内部服务器错误
服务器·windows·http
努力学习的小廉4 小时前
深入了解linux系统—— 库的制作和使用
linux·运维·单片机
444A4E5 小时前
深入解析 Linux 进程状态:从 task_struct 双链表到 R/S/D/Z 状态的内核奥秘
linux·操作系统
国际云5 小时前
腾讯云国际站性能调优
运维·服务器·数据库·云计算·腾讯云
黑风风6 小时前
Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源)
linux·ubuntu·postgresql
行星0086 小时前
Ubuntu 中安装 PostgreSQL 及常规操作指南
linux·ubuntu·postgresql
奋斗者1号6 小时前
提升WSL中Ubuntu编译速度的完整指南
linux·运维·ubuntu
玄德公笔记6 小时前
ubuntu 22.04安装k8s高可用集群
linux·ubuntu·kubernetes·k8s·containerd·高可用集群·ubuntu 22.04
ZHOU_WUYI6 小时前
在 Ubuntu 上安装 NVM (Node Version Manager) 的步骤
linux·运维·ubuntu