数据链路层

数据链路层和网络层的对比

        如果说网络层实现的是路由的功能,那么数据链路层就是实打实的实现具体的传输

        就像导航,网络层告诉我们下一步该去哪个主机,而数据链路层则是实现去下一个主机的方法。

        网络层的IP地址告诉我们目的地在哪里,而数据链路层则告诉我们下一步去哪里。

        而想了解数据链路层是如何做到的,就必须了解数据链路的以太网协议。

以太网

        以太网是一种技术标准,涵盖了数据链路层的内容,也包括物理层的内容。

        但是数据链路层并非只有以太网,还有令牌环网和无线LAN等,不过这里就了解以太网。

以太网协议格式

        

  • 以太网中的目的地址实际上是指目的主机的MAC地址
  • MAC地址:用来识别数据链路层中相连的节点,长度为 48 位,及6个字节,一般用 16 进制数字加冒号的形式,一般在网卡出厂的时候就确定了,具有唯一性
  • 类型分为 IP,ARP,RARP三种
  • 帧末尾是CRC校验码

碰撞

        一般来说,一个局域网内在同一时间只能有一个主机在局域网内部发数据,不能同时出现多台主机发消息,因为数据之间会发生碰撞。

        我们可以将局域网看成是一个临界资源,同一时间只能有一台主机访问。

        正是因为有碰撞的风险,因此局域网不可太大,同时主机也不能过多,会增加碰撞概率。

        局域网同时有多个节点相连,其中这些节点的集合就是碰撞域和广播域

        一个局域网之间的节点发消息会有碰撞的风险,而为了避免碰撞,大佬们提出了各种各样的方法,比如交换机,在一个局域网内控制碰撞的数据不传播给局域网内的其他节点。

碰撞域:连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合。

广播域:接收同样广播消息的节点的集合。       

        而为了防止碰撞的发送,以太网协议也有自己的办法,那就是MTU。 

认识MTU

        MTU是针对不同数据链路层对应的物理层而提出的限制。

  • 以太网中的数据长度规定最小46字节,最大1500字节,不够46字节的要填充,超过1500字节的则分片
  • 最大值为1500称为以太网的最大传输单元,不同网络类型有不同的MTU
  • 一个数据包从以太网到拨号链路上,长度大于拨号链路的MTU则需要分片
  • 不同的数据链路层的标准MTU不同

        至于分片和组装的过程则由网络层自己分片组装。

MSS

        MSS是TCP协议的概念,标识TCP能够承载的最大的应用数据段长度,一般为 MTU-20字节TCP报头-20字节IP报头,以太网下为1460字节。

MTU对UDP的影响

        UDP报头时间8字节,IP报头是20字节,那么由于MTU的原因,UDP能携带的数据不能超过1472字节,否则就需要分片。

        而UDP又是不可靠的协议,若是一个数据报分片了,那么它在网络中丢包的概率就更大了。

MTU对TCP的影响

        一个TCP的数据报的长度也不是无限大的,限制于MTU,其中TCP协议单个数据报的最大长度称为MTU。

        TCP是面向连接的,在连接过程中,双方会进行MSS协商。

        最好情况下,MSS的值是正好在IP协议都不会被分片的大小,不过任然受制于数据链路层的MTU。

        当双方进行连接确认时,会在发送SYN的同时发送自己的MSS值,然后取小值作为最终的MSS值。

        这个MSS值就藏在TCP首部的40字节变长选项中(kind = 2)。

        这个MTU我们可以通过ifconfig命令来查看,IP地址和MAC地址也可以通过这个命令查看。

ARP协议

        在数据链路层通过以太网协议发送数据之前,有一个问题需要解决。

        那就是一般我们通过IP地址找到了对应的局域网,但是我们却不知道该主机的硬件地址,也就是MAC地址。

        因为IP地址和MAC地址并非一对一的,IP地址是能够改变的,因此我们想要两台主机进行通信,仅知道一个IP地址是无法成功通信的,还必须知道对应的MAC地址。

        而ARP协议就是用来解决这个问题的。

        

  •  当一个局域网内有一台主机需要跟局域网内的另一台主机通信时,它会先发送一个ARP请求包,并广播到局域网内的所有主机上。
  • 当对应主机收到后检查IP地址,发现这个请求是给自己的,它就通过请求上的地址返回一个ARP响应包,并告诉对方自己的MAC地址。
  • 发送端收到响应后,就会将对方的IP地址和MAC地址维护在一个ARP缓存表中,形成一对一的映射关系,这个表的生命周期是20分钟,若20分钟内没使用某一项,该项目就会失效,需要重新请求。
  • 正是由于主机的IP地址是会变化的,所以这个ARP缓存表有生命周期,而非永久存在。
  • ARP缓存表可以通过 arp -a 命令查看。

ARP协议格式

  • 这里的目的地址和源地址在首尾各出现了一次,在以太网协议里来说是多余的,但是其他协议需要
  • 硬件类型是固定的字段,硬件类型为1
  • 协议类型一般也是固定字段,表明需要通过IP协议来获得MAC地址,此处填 0x0800。
  • 硬件地址长度填6字节。
  • 协议地址长度对于IP为4字节
  • op为 1 表示请求, 2 表示应答。

ARP广播过程

        当一个ARP请求广播在局域网内时,它会将目的地址全部填 0x FFFFFF 的字段,并且op填1,其它选项正常填写。

        当局域网内其它主机接收到广播后,先看以太网首部报头,发现目的地址是 0xFFFFFF,就知道这是一个广播,然后根据ARP请求的op,发现是请求后,再看目的 IP 地址若是自己,则自己返回应答,否则丢弃。

        当对应主机收到请求后,就返回一个ARP应答,填好 目的地址和其他选项,然后再 填 op 为2 ,表示是响应。

        之后广播到局域网内,其他主机收到广播后会发现目的地址不是自己,就会丢弃报文,而对应的主机则会收到报文,并且发现这是一个ARP应答,就会将 IP 地址 和 MAC 地址维护在自己的ARP缓存表。

DNS

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

        虽然IP对于机器来说,很好用,但是对应人来说,复杂而难记,因此出现了DNS系统。

        最开始的时候,人们通过hosts文件来描述主机名和IP地址的关系,由互联网信息中心来管理这个hosts文件,但是这个十分麻烦。

        每次计算机要接入网络或者计算机IP变更,都需要去信息中心申请变更hosts文件,而其他主机也要定期下载更新新版本的hosts文件才能正确上网。

        于是就产生了DNS系统。

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

        我们可以通过 cat /etc/hosts 命令来查看hosts文件,域名解析的时候会优先查找hosts的内容。

域名的格式

        我们以百度的域名来理解域名格式。

                                                www.baidu.com

  • com:一级域名,表示这是一个企业域名,同级的还有 "net"(网络提供商),"org"(非盈利组织),"edu"(教育机构)等。
  • baidu:二级域名,公司的名称
  • www:一种习惯用法。

        我们可以下载 dig 工具,来查看域名解析过程。

        先使用 "yum install bind-utils"命令来安装工具。 

        就能够查看了。

  • 开头是dig指令的版本号
  • 第二部分表示服务器返回的详情,status:NOERROR 表示查询成功
  • QUESTION SECTION 表明查询的是什么域名
  • ANSWER SECTION 表示查询的结果,这里先将 www.baidu.com 表示成 www.a.shifen.com,然后再查询了两个ip地址
  • 最下面是一个结果统计,包含查询时间和DNS服务器的地址等 

ICMP协议

        这是一个网络层的协议,用来测试网络是否通畅,若丢包了还会通知传输层丢包原因。

        ICMP主要功能包括

  1. 确认IP包是否成功发送给对方
  2. 通知发送过程中,IP包被丢弃的原因
  3. ICMP基于IP协议工作,但是它是网络层的协议
  4. ICMP搭配 IPv4 工作,ICMPv6 搭配 IPv6工作

ICMP报文

        

  • ICMP报文分为通知出错原因和用于诊断查询两类

其中,ICMP类型分为这么几类。

 ping命令

        可以用来验证网络的连通性,还会统计响应时间和IP包的 TTL(生存周期)。

        ping命令就是通过发送 ICMP Echo Request 给对端,然后接收对方的 ICMP Echo Reply来工作的。

        不过有一点需要注意的是,ping的是域名而非url。

        而且ping命令是基于ICMP,是在网络层的,没有端口。        

traceroute命令

        该命令基于ICMP协议实现,可以打印出去到目标主机之前要经历的路由器。 

总结

        本篇博客讲述了以太网如何实现同一个局域网内的主机互相通信的原理,并且了解了为什么IP层需要进行分片。

        然后还知道主机之间通信必须要先通过ARP协议来保存IP地址对应MAC地址的映射关系。

        还了解了DNS和ICMP两个小玩意。

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

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

相关文章

Spring 框架入门介绍及IoC的三种注入方式

目录 一、Spring 简介 1. 简介 2. spring 的核心模块 ⭐ 二、IoC 的概念 2.1 IoC 详解 2.2 IoC的好处 2.3 谈谈你对IoC的理解 三、IoC的三种注入方式 3.1 构造方法注入 3.2 setter方法注入 3.3 接口注入(自动分配) 3.4 spring上下文与tomcat整…

第三届OceanBase数据库大赛启动,升级为国家级竞赛

近日,第三届OceanBase数据库大赛启动报名。本届大赛进一步升级为全国大学生计算机系统能力大赛,由系统能力培养研究专家组发起,全国高等学校计算机教育研究会、系统能力培养研究项目发起高校主办,OceanBase承办,旨在培…

【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛹Linux 🛸C 📕 学习格言:博观而约取&#xff…

图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009

首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性

搭载KaihongOS的工业平板、机器人、无人机等产品通过3.2版本兼容性测评,持续繁荣OpenHarmony生态

近日,搭载深圳开鸿数字产业发展有限公司(简称“深开鸿”)KaihongOS软件发行版的工业平板、机器人、无人机等商用产品均通过OpenAtom OpenHarmony(以下简称“OpenHarmony”)3.2 Release版本兼容性测评,获颁O…

ue5读取外部文件

准备环境 我的环境是win10,ue5.1.1,cpux86。 创建工程时,需要选择C模式 这样在Content Browser中会出现C Classes文件夹,下面有一个本项目命名的文件夹,鼠标右键可以看到New C Class选项。 新建类的时候选择父类Blue…

【Redis】Redis 的学习教程(五)之 SpringBoot 集成 Redis

在前几篇文章中,我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下,Redis 的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几…

Vector

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析2 目录 👉🏻vector概念👉🏻vector constr…

selenium 选定ul-li下拉选项中某个指定选项

场景:selenium的下拉选项是ul-li模式,选定某个指定的选项。 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显示等待def select_li(self, text, *ul_locator):"…

python+django+mysql高校校园外卖点餐系统--计算机毕设项目

本文的研究目标是以高校校园外卖点餐为对象,使其高校校园外卖点餐为目标,使得高校校园外卖点餐的信息化体系发展水平提高。论文的研究内容包括对个人中心、美食分类管理、用户管理、商家管理、美食信息管理、工作人员管理、安全检查管理、系统管理、订单…

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现GRU门控循环单元时间序列预测未…

复数混频器、零中频架构和高级算法开发

文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术,全都是干货!其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解,知其然不知其所以然。好好研读这篇文章,相信会让你有种恍然大悟的感觉。 RF工程常被视为…

Shell学习笔记之基础部分

Shell基础: 查看操作系统支持的shell: [rootrhel9 ansible]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bashShell的基本元素: 声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的…

大语言模型与语义搜索;钉钉个人版启动内测,提供多项AI服务

🦉 AI新闻 🚀 钉钉个人版启动内测,提供多项AI服务 摘要:钉钉个人版正式开始内测,面向小团队、个人用户、高校大学生等人群。该版本具有AI为核心的功能,包括文生文AI、文生图AI和角色化对话等。用户可通过…

【IEEE会议】第二届IEEE云计算、大数据应用与软件工程国际学术会议 (CBASE2023)

第二届IEEE云计算、大数据应用与软件工程国际学术会议 (CBASE2023) 随着大数据时代的到来,对数据获取的随时性和对计算的需求也在逐渐增长。为推动大数据时代的云计算与软件工程的发展,促进该领域学术交流,在CBASE 2022成功举办的…

基于docker搭建pytest自动化测试环境(docker+pytest+jenkins+allure)

pytest搭建自动化测试环境(dockerpytestjenkinsallure) 这里我以ubuntu18为例 如果有docker环境,可以直接拉取我打包好的镜像docker pull ziyigun/jenkins:v1.0 1 搭建Docker 1.1 安装docker # 配置docker安装环境 sudo apt-get install ap…

润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店

近日,润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店。 随着科技的发展,云服务成为现代社会信息和资讯的交换、共享、存储、检索、应用等重要方式。阿里云、华为云、腾讯云作为我国云服务市场三巨头,其云商店产品全面覆盖云、…

Nvidia Jetson 编解码开发(1)介绍

前言 由于项目需要,需要开发Jetson平台的硬件编解码; 优化CPU带宽,后续主要以介绍硬件编解码为主 1.Jetson各平台编解码性能说明 如下是拿了Jetson nano/tx2/Xavier等几个平台做对比; 这里说明的编解码性能主要是对硬件来说的 2. 编解码实现说明 2.1 软件编解码 优点:…

Idea中隐藏指定文件或指定类型文件

Setting ->Editor ->Code Style->File Types → Ignored Files and Folders输入要隐藏的文件名,支持*号通配符回车确认添加

Windows权限维持—自启动映像劫持粘滞键辅助屏保后门WinLogon

Windows权限维持—自启动&映像劫持&粘滞键&辅助屏保后门&WinLogon 1. 前置2. 自启动2.1. 路径加载2.1.1. 放置文件2.1.2. 重启主机 2.2. 服务加载2.2.1. 创建服务2.2.2. 查看服务2.2.3. 重启主机 2.3. 注册表加载2.3.1. 添加启动项2.3.2. 查看注册表2.3.3. 重启…