【Linux 网络】链路层

news2025/1/12 19:53:37

文章目录

  • 链路层
    • 1 以太网
      • 1.1 以太网帧格式
      • 1.2 MAC地址
      • 1.3 MTU
    • 2. ARP协议
      • 2.1 ARP协议的作用
      • 2.2 ARP数据报格式
      • 2.3 ARP的流程
  • 其他协议
    • 3. DNS协议
      • 3.1 域名
      • 3.2 输入URL后的事情
    • 4. ICMP协议
      • 4.1 ICMP 功能都有啥?
      • 4.2 基于ICMP的命令
        • ping命令
    • 5. NAT协议
      • 5.1 NAT技术背景
      • 5.2 NAT IP转换过程
        • NATP转化表
      • 5.3 NAT技术的缺陷
      • 5.4 代理服务器
        • 正向代理和反向代理
        • NAT和代理的区别


 

链路层

IP路径选择的能力是建立在链路层节点之间跳转的功能的基础上。凡是能够进行跳转的节点,一定在同一个网段内是直接相连的节点。

为什么IP地址和MAC地址缺一不可?

首先要充分了解网络分层的作用。网络层使用Ip协议将不同数据链路类型(以太网,3g,LAN)的数据报文统一成相同的形式在网络层中可以互相传播,达到任意具有IP地址的主机。但是数据传输总要经过底层,经过线路传输。这时候就是数据链路层起到了作用,不同链路类型所使用的协议方案都不尽相同,但是在链路层不能使用IP地址了,这时候要找到相对应的主机我就需要MAC地址的作用。

第二若是只使用MAC进行通信,那么一个路由表就要维护差不多2的48次方数据,大约256TB的内存,这样存储和通信效率严重降低。

1 以太网

以太网是一种技术标准。包含链路层和物理层的内容。以太网是应用最广泛的局域网技术,还有令牌环、无线LAN等。

局域网通信的方式就是一个节点将数据放到网络里,所有节点都能拿到并对比MAC地址,是给自己的就接收,不是就抛弃。

1.1 以太网帧格式

在这里插入图片描述

字段解释
目的地址目的MAC地址
源地址源MAC地址
类型有效载荷的类型,0800表示IP数据报,0806表示ARP请求应答,0835表示RARP请求应答
PAD以太网帧数据不能少于46不能大于1500字节,否则就要添加PAD就是随机值

如何进行封装和解包呢?

  1. 类型决定报文的有效载荷要交付给上层那一个协议;
  2. 具体类型报文的报头都是定长的,按其规则封装和解包即可。

1.2 MAC地址

MAC地址用来标识链路层中节点,长度为6字节48位。一般表示形式:08:00:27:03:fb:19。MAC地址随网卡绑定,一般不支持修改。

1.3 MTU

MTU是MAC帧的大小上限,以太网帧中的数据长度规定最小46字节,最大1500字节。ARP数据包的长度不够46字节,要在后面补填充PAD。

不同的数据链路层标准的MTU是不同的,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片。

既然 IP 层会分片,为什么 TCP 层还需要 MSS 呢?

当 IP 层有⼀个超过 MTU大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,保证每⼀个分片都小于 MTU。把⼀份 IP 数据报进行分片以后,由目标主机的 IP 层来进行重新组装后再交给上⼀层 TCP传输层。那么当如果⼀个 IP 分片丢失,整个 IP 报文的所有分片都得重传。这是因为IP层本身没有重传机制,他只是高效的发送数据而已,没有协议来保证完整性。当接收方TCP报文不完整后不会响应ACK的,那么TCP发送方就会触发超时重传,重发整个TCP报文段。这样做就非常没有效率可言。

所以为了提高效率,在建立连接的时候会剔除IPHeader和TCPHeader,剩下的就是协商的MSS值,当TCP发现超过MSS后就会分片,这样形成的IP包长度也就不会大于MTU了,也就不用IP分片了。

 

2. ARP协议

2.1 ARP协议的作用

路由器想将外界数据包转发进局域网,需要先对数据报封装MAC帧。就需要通过目的IP获得目的MAC地址,该工作由ARP协议负责。

在这里插入图片描述

简单地说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。

RARP 协议你知道是什么吗?

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

2.2 ARP数据报格式

在这里插入图片描述

加粗部分是ARP协议报文格式,将ARP协议报文部分替换成有效载荷就是MAC帧协议报文格式。

字段解释
硬件类型1表示以太网
协议类型0x0800为IP地址
硬件地址长度6为以太网MAC地址,不变
协议地址长度4为IP协议地址,不变
op1表示ARP请求,2表示ARP应答
发送端MAC地址,发送端IP地址请求方或者响应方填写自身的MAC地址和IP地址,接收方提取以待后用
接收端MAC地址,接收端IP地址请求方填写接收方的IP地址,接收方MAC地址全F表示未知

2.3 ARP的流程

如果路由器知道IP对应的MAC地址,那就可以直接发送,如果不知道,就要使用ARP协议获取目的MAC。

  • 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
  • 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

在这里插入图片描述

操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。

一般主机会缓存子网内其他主机IP和MAC地址。由于IP是动态分配的,缓存的生命周期一般不长。可以使用arp -a查看:

在这里插入图片描述

 

其他协议

3. DNS协议

3.1 域名

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

性质内容解释
一级域名com表示这是一个企业域名,同级的还有"net"网络提供商),“org”(非盈利组织)等
二级域名baidu域名
前缀www只是一种习惯用法,来表示主机支持的协议

DNS 树状结构

域名解析的工作流程:

浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:

  1. 客户机向其本地域名服务器发出DNS请求报文。
  2. 本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS客户的身份向根域名服务器发出解析请求。
  3. 根域名服务器收到请求后,判断该域名属于.com域,将对应的顶级域名服务器dns.com的IP地址返回给本地域名服务器。
  4. 本地域名服务器向顶级域名服务器dns.com发出解析请求报文。
  5. 顶级域名服务器dns.com收到请求后,判断该域名属于abc.com域,因此将对应的授权域名服务器dns.abc.com的IP地址返回给本地域名服务器。
  6. 本地域名服务器向授权域名服务器dns.abc.com发起解析请求报文。
  7. 授权域名服务器dns.abc.com收到请求后,将查询结果返回给本地域名服务器。
  8. 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。

在这里插入图片描述

3.2 输入URL后的事情

这是一个经典的面试题,能牵扯到所有网络知识点,没有固定答案越细越好,可以参考:https://blog.csdn.net/wuhenliushui/article/details/20038819/

  1. 有知识框架,有条理
  2. 组织语言,清晰表达
  3. 掌握细节程度

针对这个问题我想分成如下三步去谈:
第一层:在应用层,将一个URL请求一直到浏览器返回,把这个过程给你详细的表述一下。
第二层:应用层谈完之后,再谈谈细节问题,因为细节太多了,所以我只能以关键字的方式给你呈现。
第三层:当把前面的两个大步骤讲完,然后还会再补充一些细节,那么这个问题呢一个大思路。

  1. 第一个就是应用层,首先输入URL之后点击回车,先域名解析拿到IP地址,紧接着浏览器会发起HTTP请求,服务器会收到HTTP请求,然后读取请求,进而进行分析HTTP请求。分析完之后,根据分析字段得到要求的资源,上传的参数等等。然后构建HTTP响应,如响应行、属性、正文等等,再发送给浏览器,浏览器拿到HTTP响应要对HTTP响应做分析,更重要的是提取相应的正文比如网页,然后浏览器会解释网页的这些标签语言,同步的也要对浏览器界面进行相关的渲染,把我们所需要的网页内容给展示出来。如此就完成一整个HTTP请求和响应,这是我回答问的第一阶段。那么上面实际上是一个整体的过程,也是用户最能感知到的,也是一般程序员最清楚的。
  2. 第二、那么下面要谈的就是细节,当我们实际发起一个HTTP的时候,底层其实使用的是TCP套接字编程。底层实际上将我们的数据以字节流的方式拷贝并发送过去。然后TCP协议经过自己的流量控制、拥塞控制,确认应当、链接管理、超时重传、延迟应答等各种机制来保证自己的数据报被对方可靠高效地获取。
  3. 第三、TCP将数据交给IP层,存在各种路径选择、子网划分、查找路由表等过程,IP数据报分片组装等特殊情况,到链路层会有局域网转发、ARP协议等相关细节。当然过程中也会存在各种异常情况。
  4.  

4. ICMP协议

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议,它主要用于在IP网络中传递控制消息和错误报告。

ICMP 大致可以分为两大类:

  • 一类是用于诊断的查询消息,也就是「查询报文类型
  • 另一类是通知出错原因的错误消息,也就是「差错报文类型

4.1 ICMP 功能都有啥?

ICMP本质就相当于IP层的“调试接口”,可从应用层直接访问IP层的功能,测试IP层代码的准确性。主要功能包括:

  1. 确认IP包是否成功到达目标主机。
  2. 返回IP包被丢弃的原因。

ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归为网络层。

ICMP只能搭配IPv4使用,IPv6需要用ICMPv6。

IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知

在这里插入图片描述

如上图例子,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明发往主机 B 的包未能成功。

ICMP 的这种通知消息会使用 IP 进行发送 。

因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP 包的主机 A 则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。

4.2 基于ICMP的命令

ping命令
$ ping localhost
PING localhost (127.0.0.1):56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 tt1=64 time=0.086 ms 
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.183 ms 
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.143 ms 
--- Localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 0.086/0.150/0.187/0.041 ms

ping的是域名。ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL。

ping命令会先发送一个ICMP Echo Request 给对端,对端接收到之后会返回一个 ICMP Echo Reply。

telnet是23端口, ssh是22端口, 那么ping是什么端口?

ping 命令基于网络层的ICMP,而端口号是传输层的概念,网络层中根本就没有端口号。

 

5. NAT协议

5.1 NAT技术背景

NAT技术是解决IP地址不足的主要手段,是路由器的一个重要功能。

NAT能够将私有IP对外通信时转为全局IP,是一种将私有IP和全局IP相互转化的技术。

5.2 NAT IP转换过程

  • 私有网络中的数据经路由器转发到服务器时,路由器会将IP报文中源IP替换成路由器的WAN口IP。
  • 公共网络中的数据经路由器转进私有网络时,路由器会将IP报文中目的IP替换回发起请求的主机IP。
NATP转化表

在NAT路由器内部,有一张自动生成的用于地址转换的表。两边可以互为键值,数据出去时“向外”转换,数据进来时“向内”转换。

这种映射关系是由路由器自动维护的,第一次发送报文时就会生成这个表项。

不同主机访问同一个公网服务,或者主机的多个进程访问同一个公网服务时。报文中的源端口号会被路由器用来区分不同进程。

在这里插入图片描述

5.3 NAT技术的缺陷

由于NAT依赖这个转换表,所以有诸多限制:

  • 路由器外部主机无法向内部主机建立连接;
  • 转换表的生成和销毁都需要额外开销;
  • 通信过程中一旦路由器异常,即使存在热备所有的TCP连接也都会断开。

5.4 代理服务器

正向代理和反向代理

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

代理服务器看起来和NAT设备有点像:

  1. 客户端向代理服务器发送请求,代理服务器将请求转发给服务器;
  2. 服务器返回结果给代理服务器,然后又把结果回传给客户端。

在这里插入图片描述

如图所示,靠近用户的代理服务器,叫做正向代理。优点有:

  1. 身份认证。
  2. 加速内网服务。
  3. 筛查非法请求。

如图所示,靠近服务器的代理服务器,叫做反向代理。优点有:

  1. 进行业务转发,实现负载均衡。
  2. 防止恶意攻击服务器。
NAT和代理的区别
角度NAT代理服务器
应用网络基础设备,解决的是IP不足的问题贴近具体应用,比如通过代理进行加速或翻墙
底层工作在网络层,直接替换IP地址工作在应用层
使用一般部署在局域网的出口可以在局域网,也可以在广域网,也可以跨网
位置一般集成在路由器等设备上需要部署在服务器上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android13关机按钮 去掉长按事件 去掉启动到安全模式 删除关机长按

总纲 android13 rom 开发总纲说明 目录 1.前言 2.界面效果 3.问题分析 4.代码修改 5.编译替换运行 6.彩蛋 1.前言 在Android操作系统中,关机按钮通常具有多种功能,包括短按关机、长按启动语音助手或重启设备等。在某些情况下,用户或设备管理员可能希望自定义关机按…

爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(一)

目录 基础常识 Base64伪加密 python代码实现 摘要算法 1. MD5 1.1 JavaScript 实现 1.2 Python 实现 2. SHA 2.1 JavaScript 实现 2.2 Python 实现 2.3 sha系列特征 3. HMAC 3.1 JavaScript 实现 3.2 Python 实现 对称加密 一. 常见算法归纳 1. 工作模式归纳 …

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南:《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南,提供了从职前…

使用Python实现栅格划分(渔网)

在QGIS中,“渔网”(Fishnet)是指一种创建规则网格(通常是矩形或正方形)的工具,这些网格可以用于空间数据的采样、分区或作为其他地理空间分析的基础。渔网工具可以生成一个由多边形组成的图层,每…

文件解析漏洞—IIS解析漏洞—IIS7.X

在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文件路径/xx.jpg后面加上/xx.php会将 “/xx.jpg/xx.php” 解析为 php 文件 利用条件 php.ini里的cgi.fix_pathinfo1 开启IIS7在Fast-CGI运行模式下 在 phpstudy2018 根目录创建…

4、postgresql拓展表空间

base是数据保存目录, OID:对象标识符,无符号4字节整数, 数据库的oid在pg_database中,表,索引,序列等OID存储在pg_class中 表空间:pg最大的逻辑存储单元,表索引数据库都…

Linux安装Zabbix7.0并且使用外置Mysql数据库

MySQL 数据库服务版本。必须至少为 8.00.30 # rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm # dnf clean all #安装zabbix # dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts za…

【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景

反向代理 vs API网关 vs 负载均衡 一、概念 ​ 🌏反向代理(Reverse Proxy)是一种位于服务器和客户端之间的代理服务器。 ​ 它接收来自客户端的请求,并将其转发给后端服务器,然后将后端服务器的响应返回给客户端。客…

dfs,CF 196B - Infinite Maze

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://codeforces.com/problemset/problem/196/B 二、解题报告 1、思路分析 考虑如何判断一条路径可以无限走? 我们对朴素的网格dfs改进,改进为可以dfs网格外的区域 如果存在某个…

Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记

概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…

大模型下的视频理解video understanding

数据集 Learning Video Context as Interleaved Multimodal Sequences Motivation: 针对Narrative videos, like movie clips, TV series, etc.:因为比较复杂 most top-performing video perception models 都是研究那种原子动作or人or物 understandin…

C++ 布隆过滤器

1. 布隆过滤器提出 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉 那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的? 用服务器记录了用 户看过的所有历史…

OpenStack——存储服务

存储侧: 块存储 文件存储 对象存储 存储简介 特点: 1、OS盘只能使用块存储 2、不能实现共享【不能解决两个主机同时去读写同一个block的问题】 3、性能最优 filesystem——文件存储 VIMS:高可用文件系统 ——提供了锁机制 对象存储 ——解…

MySQL搭建主从复制和读写分离(数据库管理与高可用)

集群: 高可用; 负载均衡; 高性能 1、MySQL主库在事务提交时把数据变更(insert、delet、update)作为事件日志记录在二进制日志表(binlog)里面。 2、主库上有一个工作线程 binlog dump thread…

蓝桥杯 DNA序列修正

今天再刷蓝桥的题目时,发现这道题目的第二种更为简洁的做法; 首先题目描述如下: 样例输入 5 ACGTG ACGTC 样例输出 2 对于这道题目,我们想的是用两个数组将其分别存储下来,然后再根据A-T、G-C的配对关系将数组二&a…

【C语言】堆排序

堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 升序:建大堆 降序:建小堆 原因分析: 若升序建小堆时间复杂度是O(N^2) 升序建大堆,时间复杂度O(N*logN) 所以升序建大堆…

记一次对HTB:Carpediem的渗透测试

信息收集 端口扫描 通过nmap对靶机端口进行探测,发现存在22和80端口。 访问web页面。发现是一个静态页面,没有可利用的部分。 目录扫描 子域枚举 通过对域名进行fuzz子域名,发现存在portal一级域名。 将它加入/etc/hosts,访问之…

vue3+gsap实现圆形路径动画

同学们可以私信我加入学习群! 正文开始 前言一、引入并使用gsap二、详解gsap.to的各参数三、路径svg四、其他路径文字路径动画总结 前言 我开发的桌面端软件最近增加了在线更新功能,其中更新动画部分是由gsap实现的,整体实现思路已经在elect…

用Python打造精彩动画与视频,3.2 基本的剪辑和合并操作

3.2 基本的剪辑和合并操作 在这一节中,我们将学习如何使用 MoviePy 库对视频进行基本的剪辑和合并操作。MoviePy 是一个用于视频编辑的 Python 库,可以轻松地实现视频的剪辑、合并、添加音频等操作。 准备工作 首先,确保你已经安装了 Movi…