Linux知识点 -- 网络基础 -- 数据链路层

news2024/9/25 22:39:01

Linux知识点 – 网络基础 – 数据链路层

文章目录

  • Linux知识点 -- 网络基础 -- 数据链路层
  • 一、数据链路层
    • 1.以太网
    • 2.以太网帧格式
    • 3.重谈局域网原理
    • 4.MAC地址
    • 5.MTU
    • 6.查看硬件地址和MTU的命令
    • 7.ARP协议
  • 二、其他重要协议或技术
    • 1.DNS(Domain Name System)
    • 2.NAT
      • 2.1.NAT技术背景
      • 2.2.NAPT
      • 2.3.代理服务器
      • 2.4.NAT和代理服务器


一、数据链路层

1.以太网

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

2.以太网帧格式

数据链路层标识主机唯一性的方案:MAC地址(网卡地址)
在这里插入图片描述

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

数据链路层如何解包和封装?

  • 报头都是固定大小的格式,解包时只需要裁掉固定大小的报头就可以了,封装时也一样;

数据链路层如何向上交付?

  • 按类型字段的划分,表明向上交付的数据类型;

3.重谈局域网原理

  • 当一台主机在局域网中发送消息,局域网中所有的主机都会收到消息;
  • 所有的主机都会对比目的地址,如果不是自己,就直接丢弃消息,只有目的主机会保留消息;
  • 局域网本质是一个临界资源,多个主机通信时,任何时刻只能保证只有一个主机在发送;
  • 发送的时候发生了碰撞,就会等一段时间再发送;

如果局域网中,同时有多台主机在发送数据,数据之间就发生了碰撞问题;
避免碰撞的算法:发送主机会休息随机时间,然后重新发送;
局域网中还存在交换机,能够减少碰撞的发生

  • 交换机:划分碰撞域,如果识别到碰撞,就不向另一端转发,减少交换机两侧碰撞域的压力
    在这里插入图片描述

4.MAC地址

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

对比理解MAC地址和IP地址

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

5.MTU

局域网中的主机越少越好,能够减少碰撞的发生;
局域网数据帧发送的时候,数据帧不能太长,也不能太短,数据帧太长容易造成碰撞,太短携带的有效数据太少;

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充;
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的;

MTU对于TCP协议的影响:

  1. TCP的一个数据报也不能无限大,还是受制于MTU,TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
  2. TCP在建立连接的过程中,通信双方会进行MSS协商,最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU);
  3. 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值;
  4. 然后双方得知对方的MSS值之后,选择较小的作为最终MSS;
  5. MSS的值就是在TCP首部的40字节变长选项中(kind=2);
    在这里插入图片描述
    MTU = 1500
    IP有效载荷 = 1500 - 20 = TCP + 数据 = 1480
    数据 = 1480 - TCP报头的长度(20) = 1460
    因此MSS不能大于1460字节;

6.查看硬件地址和MTU的命令

使用ifconfig命令,即可查看ip地址,mac地址和MTU;
在这里插入图片描述

7.ARP协议

同一个网段中,两台主机之间进行网络通信,发送主机必须知道接收主机的MAC地址,然而,如果我们只知道目标主机的IP地址,而不知道对方的MAC地址,就需要通过目标IP地址,得知对方的MAC地址,这就是ARP协议(地址解析协议),这是一种局域网协议
在这里插入图片描述

ARP数据报格式:
在这里插入图片描述

  1. 源MAC地址、目的MAC地址在以太网首部(MAC地址)和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的;
  2. 硬件类型指链路层网络类型,1为以太网;
  3. 协议类型指要转换的地址类型,0x0800为IP地址;
  4. 硬件地址长度对于以太网地址为6字节;
  5. 协议地址长度对于和IP地址为4字节;
  6. op字段为1表示ARP请求,op字段为2表示ARP应答;
  7. 发送端IP地址填本主机的IP地址;目的以太网地址就是目标主机的MAC地址,如果不知道,一般填FFFF…(表示广播);目的IP地址填目标主机的IP地址;

ARP协议获取目标MAC地址的过程:

  • 当主机A在局域网中向获取主机D的MAC地址时,主机A的ARP数据报如下图所示:
    在这里插入图片描述
    主机A不知道主机D的MAC地址,在目的以太网地址中填的是全F,这样会对局域网中所有的主机进行广播,其他每一台主机都要对数据帧进行处理,解包并向上交付,MAC帧解包后,每一台主机都会拿到该ARP请求,拿到后先看的是op类型,判断是应答还是请求,如果是请求,再看目的IP地址并对比,如果不是自己的IP地址,就丢弃,如果是自己的IP地址,就应答;(ARP层丢弃)
  • 主机D对A的广播进行应答时,主机D发出的ARP数据报如下图所示:
    在这里插入图片描述
    对于主机D的应答,由于其目的MAC地址不是全F,因此其他主机不会处理该应答,在发现该报文的目的MAC地址是主机A后,直接将该报文丢弃 (MAC层丢弃);主机A收到该应答后,首先应该确认OP类型,再看发送端的IP地址和MAC地址,就拿到了主机D的MAC地址;

结论:

  1. 任何主机可能之前向目标主机发起过ARP请求,注定了未来会收到对应的ARP应答;
  2. 任何一台主机,也可能被别人发起ARP请求;
    因此,局域网中,任何一台主机收到ARP请求的时候,可能是一个应答,也可能是一个请求;
  3. ARP请求成功之后,请求方会暂时将IP地址和MAC地址的映射关系暂时保存下来,因此不用每次发送数据都要进行ARP协议;
  4. 不光是在目标最终子网中才会进行ARP,ARP的过程会在网络路径中随时发生,只要两台主机处于一个网段中,就有可能发生ARP;ARP在路由器到路由器之间也可能发生;
  5. arp -a命令可以获取主机所处局域网中所有主机的IP地址和MAC地址:
    6.
  6. ARP欺骗:伪装成为中间人;
    在这里插入图片描述

二、其他重要协议或技术

1.DNS(Domain Name System)

DNS是一整套从域名映射到IP的系统

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

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

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

这样就太麻烦了,于是产生了DNS系统:

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

域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称;
在这里插入图片描述
域名使用 . 连接:

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

有时候,我们的QQ,微信和游戏能够正常运行,但是网页却打不开,这是因为浏览器内置的DNS IP地址对应的服务挂掉了;

2.NAT

2.1.NAT技术背景

NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能;

  • NAT能够将私有IP对外通信时转为全局IP,也就是就是一 种将私有IP和全局IP相互转化的技术方法;
  • 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局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发送数据时就会生成表中的映射关系;

2.2.NAPT

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

  1. 其实在进行源地址转换的过程中,可能不一定只替换原IP,必要的时候,源端口也要被替换;
  2. 路由器在NAT转换的过程中,除了单纯的替换,还会为我们根据报文请求的四元组,为我们构建一个映射关系;
  3. 源IP表示唯一的一台主机,源端口表示该主机上唯一的一个进程;
    源IP + 源端口表示唯一的一个进程,自己在自己的内网中的唯一性;
  4. 无论从内向外,还是从外向内,都能在各自的网络中表示唯一性,所以,这个映射关系是互为KEY值的;
  5. 这种关联关系也是由NAT路由器自动维护的,例如在TCP的情况下,建立连接时。就会生成这个表项;在断开连接后,就会删除这个表项;
  6. 如果我从来没有访问过外网,外网能够直接访问内网吗? 理论上不能;
  7. 但是有很多基于NAT原理的软件,能够帮助我们进行从外网访问内网:内网穿透;

2.3.代理服务器

正向代理服务器:

  • 用户所有的请求都要经过代理服务器,再由代理服务器发送给公网接收端服务器,服务器端的响应也需要经过代理发到客户端;
  • 其中正向代理服务器会完成身份认证、数据缓存、内容审核、保证内网安全等功能(替用户做事情);

反向代理服务器:

  • 在公司的大型机房中,所有用户的请求都会经过一台反向代理服务器,代理服务器将用户请求均衡的分配给每一台服务端主机,保证整个集群的负载均衡;
  • 反向代理服务器不会做任何的业务处理,只负责将请求推送到后端的指定主机;

2.4.NAT和代理服务器

路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程;
代理服务器看起来和NAT设备有一点像,客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端;
那么NAT和代理服务器的区别有哪些呢?

  • 从应用上讲,NAT设备是网络基础设备之一 ,解决的是IP不足的问题;代理服务器则是更贴近具体应用,比如通过代理服务器进行f q,另外像迅游这样的加速器,也是使用代理服务器;
  • 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换;代理服务器往往工作在应用层;
  • 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网;

fq是正向代理;

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

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

相关文章

2008-2020年中国区域二氧化氮产品

简介: 针对OMI 2008-2020年数据中因行异常或者云造成缺失的对流程NO2数据进行填补,利用面积权重法将OMI和GOME数据统一重采样至0.25度的空间分辨率。前言 – 人工智能教程 二氧化氮(Nitrogen Dioxide,简称NO2)是一种…

Java每日笔试题错题分析(1)

Java每日笔试题错题分析(1) 一、错题知识点前瞻第26题第29题第34题第41题第50题 二、错题展示及其解析第26题第29题第34题第41题第50题 一、错题知识点前瞻 第26题 多个catch块中子类异常放在前面,父类异常放在后面,否则会产生编…

ssm173基于SSM的养老院老人健康监护平台设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

保姆级微服务部署教程

大家好,我是鱼皮。 项目上线是每位学编程同学必须掌握的基本技能。之前我已经给大家分享过很多种上线单体项目的方法了,今天再出一期微服务项目的部署教程,用一种最简单的方法,带大家轻松部署微服务项目。 开始之前,…

《安富莱嵌入式周报》第324期:单对以太网技术实战,IROS2023迪士尼逼真机器人展示,数百万模具CAD文件下载,闭环步进电机驱动器,CANopen全解析

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程: 第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分…

自助建站系统,一建建站系统api版,自动建站

安装推荐php7.2或7.2以下都行 可使用虚拟主机或者服务器进行搭建。 分站进入网站后台 域名/admin 初始账号123456qq.com密码123456 找到后台的网站设置 将主站域名及你在主站的通信secretId和通信secretKey填进去。 即可正常使用 通信secretId和通信secretKey在主站的【账号…

【Proteus仿真】【STM32单片机】病床呼叫系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、蜂鸣器LED、双机通信等。 主要功能: 系统运行后,LCD1602显示开机界面,当从机病床按键按…

ExoPlayer架构详解与源码分析(4)——整体架构

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

0-1背包理论基础详解

0-1背包问题:有 n 种物品,每种物品只有1个,求解将哪些物品装入背包里物品价值总和最大。 图片来自:代码随想录 0-1背包问题举例: 题目描述: 使用二维dp数组解决背包问题 动规五部曲: dp[i][j…

智能工厂MES系统,终端设备支持手机、PDA、工业平板、PC

一、开源项目简介 源计划智能工厂MES系统(开源版) 功能包括销售管理,仓库管理,生产管理,质量管理,设备管理,条码追溯,财务管理,系统集成,移动端APP。 二、开源协议 使用GPL-3.0开…

【python海洋专题十四】读取多个盐度nc数据画盐度季节变化图

本期内容 读取多个盐度文件;拼接数据在画盐度的季节分布图Part01. 使用数据 IAP 网格盐度数据集 数据详细介绍: 见文件附件: pages/file/dl?fid378649712527544320 全球温盐格点数据.pdf IAP_Global_ocean_gridded_product.pdf 全球温…

Android多线程学习:线程池(一)

一、概念 线程池:创建并维护一定数量的空闲线程,当有需要执行的任务,就交付给线程池中的一个线程,任务执行结束后,该线程也不会死亡,而是回到线程池中重新变为空闲状态。 线程池优点: 1、重用…

Linux系列---【查看mac地址】

查看mac地址命令 查看所有网卡命令 nmcli connection show 查看物理网卡mac地址 ifconfig 删除网卡 nmcli connection delete virbr0 禁用libvirtd.service systemctl disable libvirtd.service 启用libvirtd.service systemctl enable libvirtd.service

使用css 与 js 两种方式实现导航栏吸顶效果

position的属性我们一般认为有 position:absolute postion: relative position:static position:fixed position:inherit; position:initial; position:unset; 但是我最近发现了一个定位position:sticky 这个可以称为粘性定位。 这个粘性定位的元素会始终在那个位置 <st…

firefox的主题文件位置在哪?记录以防遗忘

这篇文章写点轻松的 最近找到了一个自己喜欢的firefox主题,很想把主题的背景图片找到,所以找了下主题文件所在位置 我的firefox版本:版本: 118.0.1 (64 位)主题名称: Sora Kawai 我的位置在 C:\Users\mizuhokaga\AppData\Roaming\Mozilla\Firefox\Profiles\w0e4e24v.default…

可视大盘 + 健康分机制,火山引擎 DataLeap 为企业降低资源优化门槛!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 随着数仓及研发技术团队维护的数据量大、资源使用量大、成本越高、优化压力越大。如何主动发现无效或低效使用的资源&#xff0c;并且可以周期性高效的进行主动治理…

js 气泡上升和鼠标点击事件

效果图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title><style>bod…

银河麒麟服务器x86安装ntp客户端,并配置成功可以同步时间

脚本 # 安装ntp客户端 sudo dnf install chrony # 配置 pool 2.centos.pool.ntp.org iburst给这一行加注释 sudo sed -i s/^pool 2.centos.pool.ntp.org iburst/#&/ /etc/chrony.conf # 添加3个阿里云NTP服务器 # echo -e "server ntp1.aliyun.com iburst\nserver nt…

安卓 kotlin-supportFragmentManager报红

如果你继承baseActivity 请查看 是不是继承 AppCompatActivity

全网都在找的python+requests接口自动化测试框架实例详解教程

前言 Python是一种功能强大的编程语言&#xff0c;它可以用于自动化测试&#xff0c;特别是接口自动化测试。许多Python库都可以用于接口自动化测试&#xff0c;其中requests库是其中最受欢迎的库之一。 requests库可以用于发送HTTP请求并获取服务器响应&#xff0c;从而轻松…