Linux【网络】数据链路层

Linux【网络】数据链路层

  • 数据链路层
  • 以太网帧格式
  • 对比理解MAC地址和IP地址
  • ARP协议--地址解析协议
    • ARP工作流程
      • ARP请求
      • ARP应答
  • 其他协议
    • DNS-域名解析协议
    • ICMP--网络层协议
    • NAT技术
      • NAPT
    • 正向代理与反向代理

数据链路层

数据链路层用于两个设备,同一数据链路节点之间的信息传输

链路:一个节点到另一个相邻节点的一段物理线路,中间没有任何其他节点。链路由传输介质和物理设备组成,传输介质主要有双绞线、光纤、微波。在两个计算机进行通信的时候,链路只是一条完整通信路径的一部分

数据链路(Data Link):把实现控制数据传输协议的硬件和软件加到链路上就构成了数据链路。

帧(frame):数据链路层把网络层交付的数据构成帧发送到链路上,把接收到的帧取出来,交给上层的网络层

IP的核心作用是提供一种跨网络传输数据的能力。数据在使用IP进行转发时,一定先要把数据交给直接相连的下一跳主机,下一次跳到哪里,由IP层决定,而怎么跳,就是数据链路层决定了。
数据链路层:解决如何从主机到路由器这个局域网中的通信问题

以太网帧格式

在这里插入图片描述
解包:MAC帧采用的分离报头的方案是定长报头,报头一共14字节,
最后两个字节包含了一个类型字段,
如果是0800,表明报文是IP数据报,
如果是0806,表明是ARP请求/应答,
如果是8035,表明是RARP请求/应答。
MAC帧对传输的数据有要求,不能太长,同时也要求数据不能太短,如果太短后面就会有PAD填充。
前面两个字段分别是目的MAC地址和源MAC地址,长度是48位,6字节,用来让主机区分报文是否是传给自己的,一般用冒号16进制的形式来表示(例如:08:00:27:03:fb:19),MAC地址出厂就确定了,不能更改。后面还会有一个CRC校验。
交付:根据2字节的帧类型

对比理解MAC地址和IP地址

实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,还有一套是源MAC地址和目的MAC地址。

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

数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的,而数据每进行一跳后其源MAC地址和目的MAC地址都会变化。

ARP协议–地址解析协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址

协议格式如下
在这里插入图片描述
在这里插入图片描述

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

从ARP的数据格式可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段对应的就是以太网首部,由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段

ARP工作流程

路由器A要将数据转发给同一局域网当中的主机F,前提是路由器A必须知道主机F的MAC地址,而现在路由器A只知道主机F的IP地址,因此路由器A现在需要向主机F发起ARP请求,然后等待主机F发送ARP应答得知主机F的MAC地址

ARP请求

第一步:构建ARP请求
第二步:封装成MAC帧
第三步:广播到局域网中
第四步:所有主机解包,往ARP层交付
在这里插入图片描述
MAC帧封装完毕后,路由器A就可以将封装好的MAC帧以广播的方式发送到局域网当中了

  1. 这个MAC帧是以广播的方式发出的,局域网当中的每台主机收到这个MAC帧后,都会对该MAC帧进行解包。当这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP层。
  2. 当ARP层收到这个数据包后,先判断ARP数据包当中的op字段,判定这是一个ARP请求,然后再提取出ARP数据包当中的目的IP地址字段。
  3. 局域网当中的所有主机都会将该数据包交给自己的ARP层,但最终只有主机F发现ARP数据包当中的目的IP地址与自己相同,因此只有主机F会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的IP地址与自己不匹配后,就会直接将这个ARP请求报文丢弃。

注意:其他主机收到MAC帧后,先判断op类型为请求,交付给ARP层之后再去判断IP是否符合,不符合的报文是在ARP层丢弃的

ARP应答

1.构建ARP应答包
2.发送到局域网中
3.所有主机解包判断
4.不符合的在MAC层丢弃
在这里插入图片描述

  1. 局域网当中的所有主机都能收到这个MAC帧,但局域网当中的不相干的主机解包后,发现该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,而不会交付给上层ARP层,最终只有路由器A会将解包后MAC帧的有效载荷向上交付给自己的ARP层
  2. 当路由器A的ARP层收到这个数据包后,先看ARP的op字段,发现是一个ARP应答,然后就会提取出ARP数据包当中的发送端以太网的地址和发送端IP地址,此时路由器A就拿到了主机F的MAC地址。

注意:局域网当中其他不相干的主机在收到这个ARP应答报文后,直接在MAC帧层就丢弃了,并没有将其交付给自己的ARP层

任何主机,无论收到ARP请求还是应答,都是先判断op字段

其他协议

DNS-域名解析协议

在这里插入图片描述

DNS是一整套从域名映射到IP的系统,网络真实的通信过程其实和域名是没有关系的,能够用域名上网,一定是把域名转换成了IP

DNS底层使用的是UDP协议,DNS是通过向域名解析服务器发起UDP请求,解析自己DNS,也就是说浏览器不考虑缓存时,要做的第一件事就是域名解析

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

以www.baidu.com为例:
com:一级域名,一般以.com结尾的表示是一个企业域名,表示该公司是一家盈利性的商业公司。同级的还有.net网提供商。.org表示开源组织或非营利性组织,比如boost.org
baidu:二级域名,一般代表公司相关名称 www是一种习惯性写法,写不写都可以访问

总结:当我们使用浏览器输入域名的时候,先把域名转化为ip地址,然后再使用ip+端口号使用特定协议向服务器发起请求

ICMP–网络层协议

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因

ICMP功能
ICMP正是提供这种功能的协议;
ICMP主要功能包括:

  • 确认IP包是否成功到达目标地址.
  • 通知在发送过程中IP包被丢弃的原因.
  • ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
  • ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6

ping命令的底层就是通过ICMP来实现的:

  1. 此处 ping 的是域名, 而不是url!,一个域名可以通过DNS解析成IP地址;

  2. ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期);

  3. ping命令会先发送一个 ICMP Echo Request给对端;

  4. 对端接收到之后, 会返回一个ICMP Echo Reply;

  5. ping命令是不关注端口的,因为ping命令是基于ICMP, 是在网络层,跳过了传输层;而端口号, 是传输层的内容。在ICMP中根本就不关注端口号这样的信息

NAT技术

NAT技术背景
之前我们讨论了, IPv4协议中, IP地址数量不充足的问题
NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
NAT能够将私有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
在NAT路由器内部, 有一张自动生成的, 用于地址转换的表
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系

NAPT

如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系<k,v>
把每一台主机看成一个客户端进程,目标主机看成服务器进程
在这里插入图片描述
客户端主机进程的ip不同,端口号相同,在经过NAT路由器的时候,NAT路由器会将端口号替换为未被使用的端口号

这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项

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

正向代理与反向代理

正向代理:正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端

  • 正向代理需要主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去访问内容并返回
  • 正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见

反向代理
反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。

  • 正向代理需要配置代理服务器,而反向代理不需要做任何设置。

  • 反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见

  • 负载均衡策略:客户端可能会发送大量的数据,反向代理服务器需要合理的将数据分配给服务器集群。

  • 作为反向代理的服务器,需要配置较高,充当软件服务的可以是Nginx,当反向代理服务器中的服务器集群将请求处理完,可以通过代理服务器将结果发回给客户端,也可以直接发回给客户端。

NAT和代理服务器的区别:

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

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

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

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

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

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

相关文章

栈和队列的实现

用栈实现队列 1.分析2.代码 1.分析 2.代码 class MyQueue {private Stack<Integer> s1;private Stack<Integer> s2;public MyQueue() {s1 new Stack<>();s2 new Stack<>();}public void push(int x) {s1.push(x);}public int pop() {if(empty()){re…

山西电力市场日前价格预测【2023-10-05】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-05&#xff09;山西电力市场全天平均日前电价为363.87元/MWh。其中&#xff0c;最高日前电价为649.89元/MWh&#xff0c;预计出现在18: 45。最低日前电价为291.58元/MWh&#xff0c;预计…

微信公众号模板消息First,Remark字段不显示,备注字段不见了

今天在开发公众号过程中有个需求发模板消息我设置的如下 成绩单打印通知&#xff01;姓名&#xff1a;{{name.DATA}} 学号&#xff1a;{{stuid.DATA}}状态&#xff1a;{{status.DATA}}时间&#xff1a;{{date.DATA}} 备注&#xff1a;{{remark.DATA}} 然后发完通知发现《…

矩阵的c++实现(2)

上一次我们了解了矩阵的运算和如何使用矩阵解决斐波那契数列&#xff0c;这一次我们多看看例题&#xff0c;了解什么情况下用矩阵比较合适。 先看例题 1.洛谷P1939 【模板】矩阵加速&#xff08;数列&#xff09; 模板题应该很简单。 补&#xff1a;1<n<10^9 10^9肯定…

成都建筑模板批发市场在哪?

成都作为中国西南地区的重要城市&#xff0c;建筑业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料之一&#xff0c;在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场&#xff0c;广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…

mysql面试题16:说说分库与分表的设计?常用的分库分表中间件有哪些?分库分表可能遇到的问题有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说说分库与分表的设计? 在MySQL中,分库与分表是常用的数据库水平扩展技术,可以提高数据库的吞吐量和扩展性。下面将具体讲解MySQL中分库与分表…

<C++> String

目录 一、标准库中的string类 1. string类 2. string类的常用接口说明 2.1 string类对象的常见构造 2.2 string类对象的容量操作 2.3 string类对象的访问及遍历操作 2.4 string类对象的修改操作 2.5 string类非成员函数 总结 前言 C语言中&#xff0c;字符串是以 \0 结尾的一些…

[软件工具]opencv-svm快速训练助手教程解决opencv C++ SVM模型训练与分类实现任务支持C# python调用

opencv中已经提供了svm算法可以对图像实现多分类&#xff0c;使用svm算法对图像分类的任务多用于场景简单且对时间有要求的场景&#xff0c;因为opencv的svm训练一般只需要很短时间就可以完成训练任务。但是目前网上没有一个工具很好解决训练问题&#xff0c;大部分需要自己编程…

AWS Lambda Golang HelloWorld 快速入门

操作步骤 以下测试基于 WSL2 Ubuntu 22.04 环境 # 下载最新 golang wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz# 解压 tar -C ~/.local/ -xzf go1.21.1.linux-amd64.tar.gz# 配置环境变量 PATH echo export PATH$PATH:~/.local/go/bin >> ~/.bashrc …

密码技术 (6) - 证书

一. 前言 前面介绍的公钥密码和数字签名&#xff0c;都无法解决一个问题&#xff0c;那就是判断自己获取的公钥是否期望的&#xff0c;不能确定公钥是否被中间攻击人掉包。所以&#xff0c;证书的作用是用来证明公钥是否合法的。本文介绍的证书就是解决证书的可靠性的技术。 二…

Python3数据科学包系列(一):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 认识下数据科学中数据处理基础包: (1)NumPy 俗话说: 要学会跑需先…

React框架核心原理

一、整体架构 三大核心库与对应的组件 history -> react-router -> react-router-dom react-router 可视为react-router-dom 的核心&#xff0c;里面封装了<Router>&#xff0c;<Route>&#xff0c;<Switch>等核心组件,实现了从路由的改变到组件的更新…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第三周测验

课程1_第3周_测验题 目录&#xff1a;目录 第一题 1.以下哪一项是正确的&#xff1f; A. 【  】 a [ 2 ] ( 12 ) a^{[2](12)} a[2](12)是第12层&#xff0c;第2个训练数据的激活向量。 B. 【  】X是一个矩阵&#xff0c;其中每个列都是一个训练示例。 C. 【  】 a 4 […

【一、灵犀考试系统项目设计、框架搭建】

一、创建数据库 1、打开power designer&#xff0c;新建数据库模型 2、新建数据表&#xff0c;以及关系 【注意】 图片的类型有两种&#xff1a;varbinary 和 image varbinary : 二进制字节流&#xff0c;可以自动控制长度 image : 最大可放2G图片 3、创建数据库&#…

国庆假期作业day2

作业&#xff1a;创建一个双向链表&#xff0c;将26个英文字母通过头插的方式插入到链表中&#xff0c;通过尾删的方式将数据读取出来并删除 #ifndef _TEXT_H #define _TEXT_H #include<myhead.h> typedef int datatype; typedef struct dblist {union {datatype data;/…

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么&#xff1f;HTTP & HTTPS 2、HTTP&#xff0c;用户后续的操作&#xff0c;服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器&#xff1f;4、hashmap是线…

[React源码解析] React的设计理念和源码架构 (一)

任务分割异步执行让出执法权 文章目录 1.React的设计理念1.1 Fiber1.2 Scheduler1.3 Lane1.4 代数效应 2.React的源码架构2.1 大概图示2.2 jsx2.3 Fiber双缓存2.4 scheduler2.5 Lane模型2.6 reconciler2.7 renderer2.8 concurrent 3.React源码调试 1.React的设计理念 Fiber: 即…

项目进展(八)-编写代码,驱动ADS1285

一、代码 根据芯片的数据手册编写部分驱动&#xff0c;首先看部分引脚的波形&#xff1a; DRDY: CS&#xff1a; 首先在代码初始化时连续写入三个寄存器&#xff1a; void WriteReg(uint8_t startAddr, uint8_t *regData, uint8_t number) {uint8_t i0;// 循环写number1次…

基于STM32 ZigBee无线远程火灾报警监控系统物联网温度烟雾

实践制作DIY- GC00168---ZigBee无线远程监控系统 一、功能说明&#xff1a; 基于STM32单片机设计---ZigBee无线远程监控系统 二、功能说明&#xff1a; 1个主机&#xff1a;STM32F103C系列单片机LCD1602显示器蜂鸣器 ZigBee无线模块3个按键&#xff08;设置、加、减&#xff0…

剑指offer——JZ77 按之字形顺序打印二叉树 解题思路与具体代码【C++】

一、题目描述与要求 按之字形顺序打印二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#x…