Linux网络基础3之数据链路层

 (。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~icon-default.png?t=N7T8https://blog.csdn.net/ky233?type=blog

点个关注不迷路⌯'▾'⌯

 ip协议通过子网划分,目的IP地址,路径查找相关的算法从逻辑上可以从A主机到B主机了!

下面就是局域网数据转发的问题!怎么实际上把报文从一个主机到另一个主机呢?

———————————————————————————————————————————

 当决定把数据交给下一跳路由器的时候,下一跳路由器绝对是和我在一个局域网!宏观来看本质上我们的网络都是由一个个子网构成的这都是子网转发!

一、链路层的数据帧格式

1.认识以太网

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

2.以太网帧格式

1.数据

这个数据就是ip报文!

2.mac地址

是链路层用来标识主机唯一性的地址!

目的地址就是代表是那个主机发送的,目的地址就是目标主机的地址!

是一个48位的整数,每台主机上都至少有一个mac地址

3.如何解包和封装

因为采用的是定长报头,所以很容易解包,直接去掉就好了

4.如何交付和分用

有类型字段,如果是0800则是ip报文直接交给ip层就行了!

二、重谈局域网通信原理

1.单个局域网中的数据转发

首先这是两个局域网,如果我们从H1转发到H6,每一个主机都收到了,但是目的地址和我的不匹配则不做处理,如果匹配则进行接收处理,进行报头和有效载荷分离!

如果双方同时想发送呢?

 如果在局域网中,同时有多台主机都在发送数据,数据之间就发生了碰撞问题!这样数据就无法使用了!

所以尽量不能发生碰撞问题!所以有了碰撞避免算法,也就是发送主机会休息随机时间,然后重新发送

在发送碰撞的时候我们是不知道的

问题一:局域网中主机越多越好还是越少越好

答案很明显是越少越好!越多就有更大的可能发生碰撞

其中我们有一个叫做交换机的东西,这个是用来划分碰撞域

问题二:局域网中数据帧是越长越好还是越短越好

答案是越短越好,因为数据帧太长了反而会容易造成碰撞问题!

所以就有了网络层的1500限制

三、汇总通信流程,发现并解决

在网络转发的过程中,目的IP是不变的,那么mac帧报头会变吗?

答案是肯定是会变的!因为每个主机都有mac地址,当跳到下一个主机的时候源地址和目的地址也变了!所以这个时候就要重新填写

也就是说有效数据没变,而mac帧一直在变,个人觉得可以想象成古代骑马送信,每经过一个驿站都要换一匹马,而信件没变!

那么假如我们的IP报文被千里迢迢的送到了路由器D,那接下来是不是就要交付给目标主机了呢?

这个时候就要封装mac报头,必须直到主机C的MAC地址!那么这个路由器D怎么直到主机C的地址呢?同理,每一跳是怎么直到下一主机的MAC的地址呢?

四.MSS

不知道是否还记的我们的滑动窗口,滑动窗口是经过一个个的小窗口在滑动,那么为什么不直接一次性的扔过去呢?

这就是因为我们的链路层不允许超过1500字节的数据发送,所以,我们在TCP的时候就要分好,避免网络层去分片,因为网络层分片的代价更大,所以我们不推荐分片!

已知MTU是1500,那么减去IP和TCP报头就剩下1460,所以MSS最大是1460!

五、arp协议

假设主机a要给主机f发送mac帧,要发送就必须要知道目标主机的mac地址,否则就无法封装mac帧!

如果我们只知道目标主机的ip地址,而不知道mac地址!所以我们就需要在同一个网段,需要通过目的ip,得知对方的mac地址的协议,这个协议就叫做arp协议,也叫做地址解析协议,arp协议是一个局域网协议!

将ip地址转化成mac地址大致的流程就是:当一个报文送来时,目的ip我们知道,我们可以查路由表,获取目标网络,然后根据当前网络的编号进行对比,来判断是否到达目标网络,到达了则根据整体的IP地址进行arp协议,获取目标mac地址!

mac帧和arp协议的关系:他们在同一个大层,但是在不同的小层,以太网协议也就是mac它的上层是网络层,arp协议在以太网的上层,但不是说在上面就网络层。

ARP协议的工作过程

1.大致流程

  1. 先广播,让在这个网络的所有人都知道我在找谁。也就是说我们发送一个mac帧,给所有人发一份,不是的人就直接丢弃,是的人就接收!
  2. 1对1进行发送,被找的人凭借我刚刚发的mac帧,对我进行回应

2.arp协议的细节

  1. 硬件类型指链路层网络类型,1为以太网;
  2. 协议类型指要转换的地址类型,0x0800为IP地址;
  3. 硬件地址长度对于以太网地址为6字节;
  4. 协议地址长度对于和IP地址为4字节;

其中前4个字段一般是固定的

发送端以太网地址,就是发送请求方的地址;

发送端IP地址,就是发送请求方的IP地址

目的以太网地址,就是目的以太网地址的,这个是不知道的,一般会设为FFFF;

目的IP地址,我们直接填写目标主机的IP

op字段:

  • 如果一台主机像另一台主机发起过ARP请求那么这台主机未来一定会收到ARP应答,如果向多台主机,则一定会收到多个应答
  • 任何一台主机,也可能向别人发起ARP请求
  • 所以在局域网中,任何一个主机收到ARP的时候,可能是一个应答,也有可能是一个球球

所以op字段为1表示ARP请求,op字段为2表示ARP应答。

3.模拟ARP过程

假设HA给HD发送mac帧,想要获取HD的mac地址,已知HD的ip地址,当我们构建了一个数据帧准备发送,主机B先收到了,这时主机B是要进行处理的,因为主机B不知道是否是找他的,每一台主机要进行报头和有效载荷分离,根据类型字段,来把有效载荷交给自己的ARP层,然后先查看对应的op类型,是否是请求,然后目的IP地址,是否是自己的,这时候就可以找到对应的主机了!

然后主机D就接着构建mac帧,将对应的mac帧一对一的发送给主机A,但这个时候其实全部都能收到,只不过不在处理了,因为大家知道了不是给自己的!所以我们两次丢弃的场景是不一样的,第一次是在ARP层,第二次是在MAC层丢的!

当主机A收到了对应的mac帧之后先看op字段是否是应答,然后再看对应的发送端以太网地址和发送端IP地址!

以上的过程就是ARP的过程!

几个问题

  1. arp看起来至少进行一个请求和一个应答,是不是每一次发送数据都要这么干呢?-----答案是不需要的,arp请求成功之后,请求方会暂时的将IP:MAC地址对应的映射保存起来,往后在一段时间中会直接发送
  2. 是不是只会在目标最终的子网中发生ARP,还是每一跳都要发生ARP呢?-----答案是并不是!arp的过程会在网络中可能随时发生

arp伪装,arp攻击,让自己成为中间人

主机A和路由器B互相发送消息所以他们知道对方的mac地址,这里有一个主机C和你们连接同一个局域网,我疯狂的给B发送arp应答,地址填写macC,IP填写IPA,我和他说我是主机A,我们的arp缓存是存新不存旧,只要有新的我就会更新,所以路由器B就直接把主机A的IP与映射主机A的mac地址替换成了主机A的IP与主机C的mac地址

同时C还给A发送arp应答,说我是B,地址填macC,IP是IPB,同样的,映射关系也改成了macC

所以主机A给B发消息就需要C来传达,也就是C获取到了发送的消息,这个时候主机C就成为了A与B的中间人

六、NAT

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

  • 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 发送数据时就会生成表中的映射关系;

NAPT

那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同 的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机? 这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

  1. 其实在进行地址转换的过程中,可能不一定只替换原IP,必要的时候,源端口也要被替换
  2. 路由器在NAT转化的过程中,除了单纯的替换,还会为我们根据报文请求的四元组(源IP,源端口,目的IP,目的端口),为我们构建一个映射关系
  3. 源IP表示唯一的一台主机,源端口表示该主机上唯一的一个进程,所以源IP+源端口就表示该主机的唯一一个进程,就可以确定自己在自己的内网中的唯一性
  4. 所以无论是从内向外,还是从外向内,都能在各自的网络中,表示唯一性,所以这个映射关系是:互为KEY值的
  5. 如果从来没有访问过外网,那么能直接访问内网吗?-----理论上是不能的,因为无法进行NAT转化,我们无法更改目的IP和端口进而访问客户端
  6. 但是又很多基于NAT原理的软件,能够帮我们进行外网访问-----内网穿透

NAT技术的缺陷

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

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

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

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

相关文章

eFuse在汽车域控制器架构中如何提供更智能的保护?

汽车应用的电气化和自动化趋势推动了域控制器的兴起,用以减轻线缆重量并将车辆架构简化为多个局部化的电源中心。设计人员可以利用这种新兴架构,将传统保险丝和机械继电器替换为更紧凑的电子保险丝 (eFuse),以提供更先进的保护功能&#xff0…

基于springboot+vue实现高校学生党员发展管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现高校学生党员发展管理系统演示 摘要 随着高校学生规模的不断扩大,高校内的党员统计及发展管理工作面临较大的压力,高校信息化建设的不断优化发展也进一步促进了系统平台的应用,借助系统平台可以实现更加高效便捷的党员信息…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统:dos win + r -》 cmd dos命令 切换盘符:直接输入对应盘符目录操作&#x…

2024护网面试题精选(二)完

0x02. 内网渗透篇 00- 内网渗透的流程 拿到跳板后,先探测一波内网存活主机,用net user /domian命令查看跳板机是否在域 内,探测存活主机、提权、提取hash、进行横向移动,定位dc位置,查看是否有能直接提权域 管的漏洞…

【微服务】SpringBoot整合Resilience4j使用详解

目录 一、前言 二、熔断器出现背景 2.1 几个核心概念 2.1.1 熔断 2.1.2 限流 2.1.3 降级 2.2 为什么会出现熔断器 2.3 断路器介绍 2.3.1 断路器原理 三、Resilience4j介绍 3.1 Resilience4j概述 3.1.1 Resilience4j是什么 3.1.2 Resilience4j功能特性 3.2 Resilie…

LeetCode59:螺旋矩阵Ⅱ

题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 代码 class Solution { public:vector…

Canal的入门操作记录

文章目录 1.主从数据库同步原理2.canal使用步骤2.1 开启binlog2.2 配置canalcanal.propertiesinstance.properties区别 3.创建Canal用户4.取信息5.SpringBoot整合 canal其实就是假装自己是从数据库,来监听主数据库的binlog得到数据的变化信息 canal 模拟 MySQL slav…

浪潮信息InManage升级发布 三大功能释放数据中心运维管理压力

近日,浪潮信息官网开放了数据中心管理平台InManage全新版本的开放体验渠道,升级后的InManage拥有更强大的功能体验,可以有效解决大模型等AIGC应用对于数据中心的运维管理压力,通过全新功能的加持,浪潮信息将让数据中心…

docker安装和使用kafka

1. 启动zookeeper Kafka依赖zookeeper, 首先安装zookeeper -p:设置映射端口(默认2181) docker run --name zookeeper \--network app-tier \-e ALLOW_ANONYMOUS_LOGINyes \--restartalways \-d bitnami/zookeeper:latest2. 启动kafka docker…

C#上位机与欧姆龙PLC的通信13----【又爆肝】上位机应用开发(云端版)

1、概念背景 随着物联网技术的快速发展,工业互联网应运而生。工业互联网云平台作为连接智能制造和智慧工厂的重要技术手段,为制造业提供了更高效、更安全、更便捷的生产模式。工业互联网是指将互联网和物联网技术应用于工业生产和制造过程中,…

软考73-上午题-【面向对象技术2-UML】-UML中的图4

一、构件图(组件图) 1-1、构件图的定义 展现了,一组构件之间的组织和依赖。 构件图专注于系统的静态实现图。 构件图与类图相关,通常把构件映射为一个、多个类、接口、协作。 【回顾】: 类图展示了一组对象、接口、…

Vue中的组件:构建现代Web应用的基石

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…