linux-数据链路层

目录

以太网-MAC帧

消息碰撞

碰撞避免

ARP

ARP格式

ARP欺骗

DNS

域名简介

NAT技术

技术背景

过程呈现

问题引入

NAPT

NAT技术的缺陷

代理服务器

正向代理服务器

反向代理服务器

NAT和代理服务器


以太网-MAC帧

数据链路层解决是相邻主机(电脑,路由器)间数据的交付问题。

Mac地址是区分在同一局域网区分特定主机

消息碰撞

局域网通信中实际上每台机器都能接收到发送端的数据,但是会对报文的报头部分进行检测,当发现是发送给自己的才会向上交付,否则丢失

如下图。 Mac地址m1将数据发送给mac7在对应的以太网及相同局域网内部。每一台机器实际上都能收到这一个数据,他们对这个数据进行检测,对这个目的地址进行检测,发现他要到达的的目的地址是mac7跟自身的地址及mac地址如果不相同时就会丢弃,相同就上层传递。

在同一在局域网内当自身发送消息时,别人也可能同时发送消息,这两条消息可能会发生碰撞

碰撞避免

当发生消息碰撞的时候,两台发送主机是能够得到响应的,即他们会知道发生了碰撞,此时他们就会进行碰撞避免。

说直白一些,就是两台主机需要进行等待,两者发送消息要存在间隔,同时发生碰撞后也需要进行消息的重发,如果多次重发仍然失败,如果是网络的问题,那么就会进行超时重发,会报告给上层

碰撞概率增加: 在同一局域网中主机数量越多,即发送的消息量越多,碰撞的概率就越大。
**网络崩溃诱因:**一台主机向局网内发送大量的垃圾信息进行消息碰撞。

方法(划分碰撞域):

随着局域网中主机通信设备的增多,为了碰撞避免就出现了一种新的设备及****交换机

当交换机左侧主机消息发生碰撞的时候,交换机可以不将左侧发生碰撞的爆文向右侧转发。

**当左侧的两主机或右侧的两主机进行交流的时候,交换机就不会将其报文跨界转发,**这样就降低了消息碰撞的概率。

同时在通讯过程中我们应该发送更短的数据包,因为长数据包它在通信过程中通讯时长更长,因而他发生碰撞的概率就越大,为了避免这种情况,我们就应该使用更短的数据包,通常情况下,mac帧数据包上线1500字节,这也就是我前面在网络层。为什么要设计数据包的长度限制?

通信过程

左侧主机想要将数据发送给右侧主机, 同时两主机不在同一局域网内 时,主机a需要对数据从上层向下层进行包装,最外层是mac帧,内部设置了起始的mac地址以及下它的直接相连的路由器的mac地址, 他将这个消息发送给了该局域网内直接相连的路由器,后路由器需要先解包。Mac层级数据电路层报头, 解析完毕之后,继续向上层的网络层交付,网络层会分析ip层内部的ip地址。分析他所要去的地点, 如果不在该层局网内他会向外部的路由器进行发送。,向下交付的过程中,同样涉及到了数据电路层的封装。可能mac针所用格式还是相同的,但是起始mac地址和目的i am ac地址就发生了改变,起始地址由maca变成了macr,目的地址由macr变成了macx,往后如此交替。

但是一个问题出现了,在通信过程中,设备是需要进行一个向下封装的过程,在数据链路层的mac帧上,我们知道了起始mac地址,但是我们怎么得知道吓一跳的mac地址呢?这里引入****ARP

ARP

作用:将IP地址链接转换成mac地址。

在网络层之下,mac之上。

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;

数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢

弃;

因此在通讯前必须获得目的主机的硬件地址;

过程:源主机发出ARP请求,询问"IP地址是192.168.0.1的主机的硬件地址是多少", 并将这个请求广播到本地网
段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自
己的硬件地址填写在应答包中;
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如
果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

总结:发送端会先广播一条arp请求,内部呢包含了目的ip地址,当接收端主机接收到arp请求以后,发现这个发送端发过来的ip恰恰是我这台主机的ip地址时,该接收主机就会进行arp响应,arp响应内部包含着mac地址。

ARP格式

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址;

硬件地址长度对于以太网地址为6字节;
协议地址长度对于和IP地址为4字节;
op字段为1表示ARP请求,op字段为2表示ARP应答。

当我们进行arp请求的时候,因为我们需要广播式的进行寻找,因此我们并不知道墓地以太网地址,此时墓地以太网地址可以设为ff ff ff...

注意:ARP在主机通讯后,会被暂时缓存,不需要每次通讯都申请。

ARP可以在任意两节点发生。

ARP欺骗

ARP欺骗是一种常见的网络攻击手段,利用ARP协议的漏洞,通过发送伪造的ARP报文,篡改目标设备的ARP缓存,从而实现网络流量的劫持或中断。
核心原理

ARP协议用于将IP地址转换为对应的MAC地址(网络设备的物理地址)。正常情况下,设备会通过ARP请求获取其他设备的MAC地址,并将IP与MAC的对应关系存入ARP缓存(临时记录)。

ARP欺骗的攻击者会向目标设备发送伪造的ARP应答,谎称"某个IP对应的MAC是攻击者的MAC",导致目标设备的ARP缓存被篡改,后续发往该IP的流量会被误发到攻击者的设备上。

常见攻击场景

  • 流量劫持:攻击者截获目标设备的网络流量(如账号密码、聊天内容等),甚至可以篡改数据后再转发,实现"中间人攻击"。

  • 断网攻击:攻击者伪造ARP报文,让目标设备误认为网关的MAC地址无效,导致目标无法连接互联网。

  • 局域网监听:通过欺骗同一局域网内的多台设备,让所有流量经过攻击者的设备,从而监听整个局域网的通信。

防御方法

  • 静态绑定:在设备上手动设置IP与MAC的对应关系(静态ARP表),避免被动态ARP报文篡改。

  • 启用ARP防护:部分路由器或防火墙支持ARP防火墙功能,可检测并拦截伪造的ARP报文。

  • 网络分段:将局域网划分为多个子网,限制攻击范围。

DNS

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.

于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.

域名简介

www.baidu.com

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

域名使用 . 连接

com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.

baidu: 二级域名, 公司名.

www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.

NAT技术

技术背景

NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:

很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;

全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有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 发送数据时就会生成表中的映射关系;

问题引入

通信过程中,一台主机想要与广域网中的另一台主机建立通信,首先它需要与局域网中的路由器,先进行数据的传输工作,由于私有ip,不能出现在公网通信中,因此局域网的ip地址是不可用的,它在向路由器发送的数据,路由器接收到数据以后,会将原ip地址转化为自身的wanip, 依次向上递交,直至提交至广域网中的另一台目的主机,当接收到之后,这个目的主机,可以将所返回的这个数据响应,提交到它的上一跳即路由器,可是该路由器怎么返回到该路由器的上一跳呢?

NAPT

一、核心问题引出

在局域网多主机访问同一外网服务器场景中**,因 NAT 转换后外网返回数据的目的公网 IP 相同,需解决"如何精准转发给对应内网主机"的问题,NAPT(网络地址端口转换) 应运而生,通过 IP + port 建立关联映射。**

二、NAPT 关键机制

(一)关联关系建立

NAT 路由器自动维护 "内网私有 IP + 端口 ↔ 公网 IP + 端口" 的转换表:

  • 当内网主机(如 10.0.0.10:1025)访问外网服务器时,路由器将其源 IP 替换为公网 IP(如 202.244.174.37),并分配唯一端口(如 1025),生成转换表项 10.0.0.10:1025 ↔ 202.244.174.37:1025 。

  • 多主机访问同一服务器时,路由器通过不同端口区分,如另一主机 10.0.0.11:1025 对应 202.244.174.37:1026 ,利用端口唯一性区分流量。

(二)数据转发流程

  1. 内网发往外网:

内网主机封装数据,源为 私有 IP:端口 (如 10.0.0.10:1025),经 NAT 路由器后,源被替换为 公网 IP:端口 (如 202.244.174.37:1025),目标为外网服务器 IP(如 163.221.120.9:80 ),发送至公网。

  1. 外网返回内网:

外网服务器响应数据,目标为 公网 IP:端口 (如 202.244.174.37:1025),路由器接收后,查询转换表,匹配到 10.0.0.10:1025 ,将目标替换为该内网地址,精准转发回对应主机。

  1. 表项生命周期:

基于连接状态维护,TCP 连接建立时生成表项,连接断开后自动删除 ,保证资源动态复用,避免冗余。

三、流程示意图解(结合拓扑)

  • 私有 IP 侧:多内网主机(10.0.0.10、10.0.0.11 等)以 私有 IP:端口 发起访问,目标为外网服务器 IP(163.221.120.9:80)。

  • NAT 转换层:路由器将源地址转换为 公网 IP(202.244.174.37): 动态端口(1025、1026 等) ,并记录转换表。

  • 全局 IP 侧:外网服务器接收的请求源为 公网 IP:端口 ,返回数据以此为目标,路由器再逆向转换回内网主机。

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:
无法从NAT外部向内部服务器建立连接;
装换表的生成和销毁都需要额外开销;
通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;

代理服务器

正向代理服务器

-定义:为内部网络用户(如局域网内的设备)服务,帮助用户访问外部网络资源的代理。

  • 核心特点:客户端(用户)明确知道自己在使用代理,代理服务器的"身份"对外部服务器是可见的,但外部服务器不知道实际的客户端是谁。

  • 典型用途:

  • 突破网络限制:比如校园网内用户通过正向代理访问校外受限资源(如学术数据库)。

  • 隐藏客户端身份:外部服务器只能看到代理服务器的IP,保护用户隐私。

  • 缓存加速:代理服务器缓存常用资源,减少重复请求,提升访问速度。

反向代理服务器

- 定义:为外部网络用户服务,接收外部请求并转发到内部服务器(如公司内网的Web服务器)的代理。

  • 核心特点:外部用户不知道代理的存在,以为直接在访问目标服务器,代理服务器的"身份"对客户端是隐藏的,实际的内部服务器对外部不可见。

  • 典型用途:

  • 保护内部服务器:隐藏内部服务器的真实IP,防止直接攻击。

  • 负载均衡:将大量外部请求分配到多台内部服务器,避免单台服务器过载。

  • 安全防护:过滤恶意请求(如SQL注入、XSS攻击),提升服务安全性。

简单来说,正向代理是"帮内部用户找外部资源",反向代理是"帮外部用户找内部资源",核心区别在于代理的服务对象和隐藏的主体不同。

NAT和代理服务器

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

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

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

  1. 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.
相关推荐
打不了嗝 ᥬ᭄18 小时前
传输层协议UDP
linux·网络·网络协议·udp
小涂19 小时前
在Linux(deepin-community-25)下安装MongoDB
linux·运维·mongodb
洛克大航海19 小时前
Linux 中如何查看系统的位数
linux·ubuntu
艾莉丝努力练剑19 小时前
【Linux基础开发工具 (一)】详解Linux软件生态与包管理器:从yum / apt原理到镜像源实战
linux·运维·服务器·ubuntu·centos·1024程序员节
illuspas19 小时前
Ubuntu 24.04下编译支持ROCm加速的llama.cpp
linux·ubuntu·llama
_殊途19 小时前
计算机网络-网络层
网络·计算机网络·智能路由器
七七七七0719 小时前
【计算机网络】深入理解网络层:IP地址划分、CIDR与路由机制详解
linux·服务器·计算机网络·智能路由器
敲上瘾19 小时前
Linux系统C++开发工具(四)—— jsoncpp 使用指南
linux·服务器·网络·c++·json
chalmers_151 天前
服务器启动的时候就一个对外的端口,如何同时连接多个客户端?
运维·服务器·网络
@木辛梓1 天前
linux 信号
linux·运维·服务器