Linux——数据链路层

devtools/2024/10/23 6:45:14/

目录

前言

理解网络转发 

一以太网 

1认识以太网 

2以太网帧格式

3认识MAC地址

4MAC 地址和 IP 地址

5理解局域网通信 

二ARP协议

1原因

2格式

3ARP过程 

​编辑

4ARP欺骗

三NAT技术 

1NAT背景

2NAT IP转化过程

3NAPT

4内网穿透

5内网打洞

四代理服务器

1正向代理

1.1工作原理

1.2功能特点

2反向代理 

2.1工作原理

2.2功能特点

3关于fq

4NAT和代理服务器

五DNS

1背景

2域名

3域名解析过程

4dig工具 

5DNS缓存

6面试题 

六ICMP协议 

1功能

2格式

3ping命令 

3.1关于ping端口

4traceroute命令

七手动部署并测试内网穿透 

1frp下载

2ssh远程登录

2nginx远程访问


前言

理解网络转发 

主机A要想把报文发送给主机B:是需要经过不同的子网和子网间转发才能实现的,不是一口气就发送给了对方的,这就是网络转发的本质~

那这样说的话,你得先解决同一个网段之间能够相互转发才行啊!能不能做到呢?

能!下面的数据链路层就是来解决这个问题的~ 

数据链路层:用于两个设备(同一种数据链路节点)之间进行传递 

一以太网 

1认识以太网 

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
例如以太网中的网线必须使用双绞线; 传输速率有 10M, 100M, 1000M 等;
以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线
LAN 等;

2以太网帧格式

源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是 48 位,是在网卡出厂时固化的;
帧协议类型字段有三种值,分别对应 IP、 ARP、 RARP;
帧末尾是 CRC 校验码。

a如何解包

通过定长报头(10字节)和结束(4字节)读取,剩下的就是有效载荷

b如何分用

通过报头的类型识别数据类型往上进行交付给指定协议

3认识MAC地址

MAC 地址用来识别数据链路层中相连的节点;
长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址)

4MAC 地址和 IP 地址

IP 地址描述的是路途总体的 起点 和 终点;
MAC 地址描述的是路途上的每一个区间的起点和终点;

5理解局域网通信 

局域网同一时刻只允许一台主机发送数据:不然所有的报文堆积在一起回发生碰撞,导致报文出现乱码的情况;如果主机间发送碰撞了,就会触发碰撞避免算法(让主机sleep 随机时间后再次发送报文),之后在进行碰撞的概率就变低了(主要是让主机间发送报文时间错开),这样就能保证在同一时刻只允许一台主机发送数据

我们也把局域网叫做碰撞域:一旦发送碰撞,主机之间会触发碰撞避免算法

只有传输层(TCP)能够重传吗?   

(数据链路层)主机进行碰撞避免算法时也是会重传的!而且数据链路层本身就是底层的硬件,重传速度甚至比TCP还要快~

那么在局域网中连接的主机是越少好还是越多好呢?

如果连接的主机越多的话,主机间发生碰撞避免的概率就越高,这就会到导致发送数据时很难成功:这就好像在家里如果连接网络的人多了,网络用起来就会很卡~(如果想让一个局域网发生瘫痪,上不了网:我们可以往局域网发送大量数据,与其他人正常数据发生碰撞)

在局域网中发送报文越长还是发送报文越短更容易发送碰撞?

发送报文越长,意味着数据越大,在局域网停留的周期越长,越容易有其它报文的到来发送碰撞,所以发送报文时尽量不能太长,那最长不能超过多少呢?在数据链路层规定了MTU(Maximum Transmission Unit):1500字节 

MTU我能理解了,但还有一个最小字节:46,如果我们在分片时报文数据小于46字节,该怎么办

这个问题就好处理了:填充一些垃圾数据在里面凑成46字节后发送出去,但接收方要怎么识别哪部分是垃圾数据呢?通过IP报头中总长度来辨别!!

为了缓解数据经常出现碰撞问题,我们引入一个新的设备——交换机

用来划分碰撞域

(工作在数据链路层)交换机的两端通过i0,i1接口来对两端的报文进行转发,如果是des是另一端的主机,它会对该报文进行转发,如果同一端的两个主机进行通信就不进行转发

这样不就缓解了网络碰撞的可能性吗!

二ARP协议

1原因

我们在网络层说过:IP有一种能力:将报文跨网络送到目标地址的能力;传输过程src和des地址是一直不变的,但src和des的mac地址是一直在发生改变的;在传输中每次经过路由器时,路由器:解包,查表,转发的工作,当到达路由器D时路由器是知道主机B(目标主机)是在同一子网(有主机B的IP地址),但mac地址路由器是不清楚的!就无法进行封包将报文下一跳传给主机B

2格式

硬件类型指链路层网络类型,1 为以太网;
协议类型指要转换的地址类型,0x0800 为 IP 地址;
硬件地址长度对于以太网地址为 6 字节;
协议地址长度对于和 IP 地址为 4 字节;
op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答

3ARP过程 

当路由器从网络里收到报文时知道目标主机在子网中,但不知道目标主机的mac地址时,它就会构建arp请求,目标主机收到后(其它主机也能收到)进行处理生成arp应答(携带者自己的mac地址),路由器收到arp应答(其它主机也能收到)时就能知道mac地址并进行下一跳啦!

那么在上面的过程会有如下细节:

arp里已经有了源mac,目的mac,为什么构建mac帧时也要有源mac,目的mac:这不是重复吗

arp与mac帧虽然是在都在数据链路层,但彼此是在不同层的;

arp里的mac地址只是仅仅是作为数据使用,而mac帧里的mac地址(报头)作为通信使用的;

重复确实是重复了,但两者在设计上是解耦的:谁也不知道对方的存在,重复只是巧合!

arp中有一个关键字段:oper来表示arp是请求还是应答收到报文的主机首先看的不是目的mac地址是不是我,而是先看oper:通过它来进行接下来我对数据要不要关心

这个道理就好比中考后家长带孩子去机构咨询:人家上来的第一件是而是问你考了多少分后来决定接下来是否继续询问:如果考太低人家可能就直接让你到别处咨询去了!

 而主机收到arp应答时会将IP地址对应的mac地址数据给暂时缓存起来:但到了一定时间后进行定期处理(有可能IP地址没变,网卡更换了)

简单示意图

4ARP欺骗

三NAT技术 

1NAT背景

之前在网络基础中,我们讨论了, IPv4 协议中, IP 地址数量不充足的问题:NAT 技术当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能

NAT 能够将私有 IP 对外通信时转为全局 IP,回来时再将全局 IP转为私有 IP
• 很多学校, 家庭, 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务器上设置全局 IP;
全局 IP 要求唯一, 但是私有 IP 不需要; 在不同的局域网中出现相同的私有 IP是完全不影响的;

2NAT IP转化过程

NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;
NAT 路由器收到外部的数据时, 又会把目标 IP 从 202.244.174.37 替换回10.0.0.10;
在 NAT 路由器内部, 有一张自动生成的, 用于地址转换的表;
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;

3NAPT

那么问题来了:如果局域网内, 有多个主机都访问同一个外网服务器,发送数据时路由器要怎么做才能让接下来服务器返回的数据能准确应答给不同的主机?

路由器通过NAPT:不同主机转化成公网IP时IP相同,port不同:从而来标识不同主机的唯一性!
 

不同子网内的主机要想通信(以qq为例):主机A要通过子网到公网的转化发送请求给qq服务器(此时NAPT表中就记录了对应键值) ,对应主机B也一样(先进行登录也是要发送请求给qq服务器),此时qq服务器就会构建应答从公网到子网(此时路由器的NAPT表是记录的)给主机B:此时主机B就收到了主机A发来的消息从而来给对方回消息啦!

这就说明不同子网的主机要想通信:唯一的方法就只有从子网到外网,再转化回来~

路由器可能同时连着几台或者十几台主机,主机内如果同时启动多个服务,那路由器的NAPT要帮助我们建立的条目就变多了,并且要帮我们维护起来:那它的内存会不会被占满呢

一般家用路由器帮助我们建立的条目能达到大几万,完全不用担心;而且一般家用路由器连接的人不会很多,太多网不好也影响用户体验;而对应不同的场景,对路由器的配置也会存在差异~

4内网穿透

通过设置在公网的云服务器来帮助在不同内网的主机进行通信

内网穿透有什么好处?

在大公司中,他们内部会组建出一个大内网:相关机器都在内网中进行;如果离家太远的人,出现问题不能立马到公司解决问题(实现员工在家办公)就可以利用内网穿透:在公网部署云服务器以及相关配置,让员工在家通过访问云服务器间接就能访问到公司机器:实现在内网访问内网!   

5内网打洞

双方第一次访问服务器,服务器会返回对方的WAN口IP回来(此时路由器NAPT会有缓存);双方主机就能拿着WAN口IP找到对方进行通信!

这样就不再通过服务器:既缓解服务器压力,又提高用户体验

目前腾讯直播,以及之前的快播就是用着这种技术的~

四代理服务器

1正向代理

正向代理(Forward Proxy) 是一种常见的网络代理方式, 它位于客户端和目标服务器之间, 代表客户端向目标服务器发送请求。 正向代理服务器接收客户端的请求, 然后将请求转发给目标服务器, 最后将目标服务器的响应返回给客户端。

1.1工作原理

客户端将请求发送给正向代理服务器。
正向代理服务器接收请求, 并根据配置进行处理, 如缓存查找、 内容过滤等。
正向代理服务器将处理后的请求转发给目标服务器。
目标服务器处理请求, 并将响应返回给正向代理服务器。
正向代理服务器将响应返回给客户端。

1.2功能特点

缓存功能: 正向代理服务器可以缓存经常访问的资源, 当客户端再次请求这些资源时, 可以直接从缓存中获取, 提高访问速度。
内容过滤: 正向代理可以根据预设的规则对请求或响应进行过滤, 如屏蔽广告、阻止恶意网站
访问控制: 通过正向代理, 可以实现对特定网站的访问控制, 如限制员工在工作时间访问娱乐网站。
隐藏客户端身份: 正向代理可以隐藏客户端的真实 IP 地址, 保护客户端的隐私。
负载均衡: 在多个目标服务器之间分配客户端请求, 提高系统的可扩展性和可靠性。

怎么做到让所有上网都要经过代理服务器?

学校(公司)在建设子网时就已经做好的相关建设代理服务器的工作:当你上网时,会弹出登录页面来进行认证才能上网(告诉代理服务器我要来访问你了)

2反向代理 

反向代理服务器是一种网络架构模式, 其作为 Web 服务器的前置服务器, 接收来自客户端的请求, 并将这些请求转发给后端服务器, 然后将后端服务器的响应返回给客户端。

2.1工作原理

反向代理服务器位于客户端和 Web 服务器之间:当客户端发起请求时, 它首先会到达反向代理服务器;反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器, 并将 Web 服务器的响应返回给客户端。

2.2功能特点

负载均衡: 反向代理服务器可以根据配置的负载均衡策略, 将客户端的请求分发到多个后端服务器上, 以实现负载均衡。 这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
安全保护: 反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址, 降低其被直接攻击的风险。 同时, 它还可以配置防火墙、 访问控制列表(ACL) 等安全策略,对客户端的请求进行过滤和限制, 以保护后端服务器的安全。
缓存加速: 反向代理服务器可以缓存后端 Web 服务器的响应内容, 对于重复的请求, 它可以直接从缓存中返回响应, 而无需再次向后端服务器发起请求。 这可以大大减少后端服务器的负载, 提升网站的响应速度。
动静分离: 在大型网站中, 通常需要将静态资源和动态资源分开处理。 通过将静态资源部署在反向代理服务器上, 可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。 这可以大大提升静态资源的访问速度。(前端开发实用技巧

CDN(Content Delivery Network) 就是采用了反向代理的原理:将服务器资源存放在网站(有CDN服务)中,客户端来访问时就通过该网站来获取资源,这样大大缓解服务器压力

3关于fq

4NAT和代理服务器

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

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

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

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

五DNS

DNS(Domain Name System)是一整套从域名映射到 IP 的系统

1背景

TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序:但是 IP 地址不方便记忆;
于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用 hosts 文件来描述主机名和 IP 地址的关系

最初, 通过互连网信息中心(SRI-NIC)来管理这个 hosts 文件的

如果一个新计算机要接入网络, 或者某个计算机 IP 变更, 都需要到信息中心申请变更 hosts 文件
其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网

• 互联网的发展产生更多的hosts文件

于是产生了 DNS 系统

一个组织的系统管理机构, 维护系统内的每个主机的 IP 和主机名的对应关系.
如果新计算机接入网络, 将这个信息注册到数据库中;
用户输入域名的时候, 会自动查询 DNS 服务器, 由 DNS 服务器检索数据库, 得到对应的 IP 地址

2域名

用来识别主机名称和主机所属的组织机构的一种分层结构的名称.

www.baidu.com

com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商),"org"(非盈利组织) 等.
baidu: 二级域名, 公司名.
www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx 这样的格式, 来表示主机支持的协议

3域名解析过程

域名分布呈现出层状结构 

4dig工具 

 安装dig工具

yum install bind-utils

 使用 dig 指令查看域名解析过程

1 开头位置是 dig 指令的版本号
2 第二部分是服务器返回的详情, 重要的是 status 参数, NOERROR 表示查询成功
3 QUESTION SECTION 表示要查询的域名是什么
4 ANSWER SECTION 表示查询结果是什么. 这个结果先将 www.baidu.com 查询成了www.a.shifen.com, 再将 www.a.shifen.com 查询成了两个 ip 地址
5 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等

5DNS缓存

在 Windows 系统中, 可以使用 ipconfig /displaydns 命令来查看系统级别的DNS 缓存

6面试题 

当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

六ICMP协议 

ICMP(Internet Control Message Protocol)是TCP/IP协议族中的一个重要组成部分,它主要用于在网络设备和路由器之间传递控制消息。这些控制消息包括网络是否通畅、主机是否可达、路由是否可用等信息。

虽然ICMP消息不传输用户数据,但它对用户数据的传输起着至关重要的作用。ICMP工作在网络,是一个无连接的协议,用于传输出错报告和控制信息

1功能

ICMP协议就是来提供各种功能来保证IP协议的可靠传输,主要功能包括:

确认 IP 包是否成功到达目标地址;
通知在发送过程中 IP 包被丢弃的原因;
ICMP 只能搭配 IPv4 使用. 如果是 IPv6 的情况下, 需要使用 ICMPv6;

例如:主机A发送给主机B正常的报文,B不工作了,主机A什么也收不到!这时离主机B最近的主机设备(路由器)返回应答

ICMP允许距离故障地最近的主机设备返回应答给发送方(告诉发送方出了什么事) 

2格式

ICMP 一共分为两类报文: 通知出错原因诊断查询

3ping命令 

注意, 此处 ping 的是域名, 而不是 url! 一个域名可以通过 DNS 解析成 IP 地址
ping 命令不光能验证网络的连通性, 同时也会统计响应时间和 TTL(IP 包中的Time To Live, 生存周期)
ping 命令会先发送一个 ICMP Echo Request 给对方
对方接收到之后, 会返回一个 ICMP Echo Reply

3.1关于ping端口

有些面试官可能会问: telnet 是 23 端口, ssh 是 22 端口, 那么 ping 是什么端口?

ping 命令基于 ICMP:是在网络;而端口号是传输层的内容:在 ICMP 中根本就不关注端口号这样的信息

4traceroute命令

也是基于 ICMP 协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器

  

七手动部署并测试内网穿透 

在上面我们已经讲了内网穿透的原理,现在来进行简单实现并测试(需要云服务器和虚拟机)

1frp下载

先下加速器:瓦特工具箱(Steam++官网)

再继续下载:frp选择Linux amd版本 不是arm! 

 

我们要做以下两个测试:

ssh 远程登录
nginx 远程访问

2ssh远程登录

前提要保证两台机器都是联网状态,不然可能会出现不同情况!

修改配置文件

启动程序

带-c进行链接编译

重新启动一个xshell进行登录

登录成功

 

2nginx远程访问

安装

sudo yum install nginx # centos 安装
sudo apt install nginx # ubuntu 安装

启动 

#启动nginx
#暂停
# nginx -s stop

 

在原来的配置文件中再添加一个服务(申请端口号) 

 

两台机器一起启动frp程序

登录浏览器进行访问(输入的是云服务器的IP和映射到云服务器的端口)

服务器和客户端这样在后台启动(守护进程)

nohup ./frpc -c ./frpc.toml &> /dev/null &
nohup ./frps -c ./frps.toml &> /dev/null &

&> /dev/null: 这是重定向操作,用于将命令的标准输出(stdout) 和标准错误(stderr) 都重定向到/dev/null。/dev/null 是一个特殊的设备文件, 向它写入的内容都会被丢弃, 读取它则会立即返回文件结束:忽略命令的所有输出信息 

以上便是全部内容,有问题欢迎在评论区指正,感谢你的观看!


http://www.ppmy.cn/devtools/128089.html

相关文章

导出问题处理

问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…

windows启动qtcreator,任务管理器有,但是界面和任务栏不显示解决方案

原因 某次启动QtCreator,发现界面不显示,点击任务管理器,看到该进程已经在工作了。 解决方案 删除C:\Users\xxx\AppData\Romaing\QtProject里面的所有QtCreator.ini文件;重新启动QtCreator即可。 有时候可能会与安装有道词典冲突&#x…

QSlider和QProgressBar进度条控件

QProgressBar支持自定义样式,以满足不同应用程序的需求。用户可以设置进度条的颜色、文本格式等,以提升用户体验。通过样式表(StyleSheet),用户可以轻松地修改QProgressBar的外观。 简易小游戏 QTimer *timer;int val…

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…

Android SELinux——上下文Context源码(十)

通过前面的文章我们知道,SELinux 中的上下文(contexts)包含很多类型,这里我们就来看看Androd 源码中 上下文 SELinux Contexts 的代码结构。 一、Contexts源码 源码位置:/system/sepolicy/private 1、file_contexts file_contexts 文件用于定义系统中各个文件和…

MySQL索引、事物与存储引擎

目录 一、MySQL索引 1.索引的概念 2.索引的作用 3.创建索引的原则依据 4.索引的分类和创建 4.1 普通索引 4.2 唯一索引 4.3 主键索引 4.4 组合索引&#xff08;单列索引与多列索引&#xff09; 4.5 全文索引&#xff08;FULLTEXT&#xff09; 5. 查看索引 6.删除索引…

awk工具的主要作用在显示数据上。

一.awk工具介绍 作用&#xff1a; 能够按照特定的条件在文件中搜索数据&#xff0c;按照特定的格式进行显示。 $0代表当前处理的整行内容&#xff0c;$1代表第一个数据 awk在处理文本数据的时候也是逐行处理数据 工作流程&#xff1a;默认按照空白字符分割文本&#xff0c…

虚拟机(VMwara Workstation17)保姆级别的安装(附软件获取途径)

文章目录 一、虚拟机的作用二、虚拟机的获取三、虚拟机的安装步骤四、总结 一、虚拟机的作用 压根不需要给自己的电脑重装系统&#xff0c;就可以使用Linux系统。简单来说就是虚拟出一个计算机&#xff0c;安装Linux系统&#xff0c;便于学习和工作 关于虚拟机的介绍&#xf…