数据链路层

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

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

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

        网络层的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整…

MySQL--存储过程--详解/示例

MySQL中的存储过程详解 在MySQL数据库中,存储过程是一种预先编译好的SQL代码块,可以被重复调用。它们允许我们将常用的操作逻辑封装起来,并简化数据库交互。本文将介绍MySQL存储过程的基本语法和使用示例。 创建存储过程 使用CREATE PROCE…

前端JavaScript企业框架的全面解析

引言 在现代Web开发中,前端JavaScript框架扮演着至关重要的角色。它们提供了丰富的功能和工具,帮助开发人员构建功能强大且易于维护的企业级应用程序。本篇博客将全面解析前端JavaScript企业框架,介绍其优势、使用场景和常见的框架选择。 什…

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

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

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

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

nvm命令

1. 常见命令 1. nvm -v //查看nvm版本 nvm --version :显示 nvm 版本 2. nvm list //显示版本列表 nvm list :显示已安装的版本(同 nvm list installednvm list installed:显示已安装的版本nvm list available:显示所有…

【java】常用工具——包装类

1. Java中的数据类型 #mermaid-svg-8QZByhDXxJpYzQ8U {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8QZByhDXxJpYzQ8U .error-icon{fill:#552222;}#mermaid-svg-8QZByhDXxJpYzQ8U .error-text{fill:#552222;stroke…

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

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

【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)

【写在前面】 本文主要介绍使用API7及以下版本开发HarmonyOS应用时,通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤,注意:开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】 1、HarmonyOS应用已申请获…

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

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

centos7安装 postgresql postgis pgrouting

centos7 源码编译太烦了。直接yum install ...... 一、版本信息: CentOS版本:CentOS Linux release 7.9.2009 (Core) PostgreSQL版本: PostgreSQL 12.0 PostGIS版本:postgis31 二、PostgresSQL PostGIS 安装 1、官网安装链接&…

ue5读取外部文件

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

JAVA Bean 对象的作用域和生命周期

Bean 作用域和生命周期 1. 作用域1.1 作用域定义1.2 Bean 的 6 种作⽤域1.2.1 singleton(单例作⽤域)1.2.2 prototype (原型作⽤域 / 多例作⽤域)1.2.3 request:(请求作⽤域)1.2.4 session:(会话作⽤域)1.2.5 application:(全局作⽤域)1.2.6 …

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

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

Vector

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

Node + Express 后台开发 —— 起步

Node Express 后台开发 —— 起步 前面陆续学习了一下 node、npm、模块,也稍尝试 Express,感觉得换一个思路加快进行。 比如笔者对前端的开发已较熟悉,如果领导给一个内部小网站的需求,难道说你得给我配置一个后端?…

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):"…

六图备份 大容量图片

1.1、切割(9*16) # 参考网址:https://blog.csdn.net/weixin_42182534/article/details/125773141?ops_request_misc&request_id&biz_id102&utm_termpython%E6%88%AA%E5%8F%96%E5%9B%BE%E7%89%87%E7%9A%84%E4%B8%80%E9%83%A8%E5%…

为什么在Spring中使用@Autowired时会提示Field injection is not recommended 而@Resource不会

在使用IDEA进行开发时,在字段上使用Spring的依赖注入注解Autowired后会出现如下警告 Field injection is not recommended (字段注入是不被推荐的) 这个原因具体可以看看: 【注解使用】使用Autowired后提示:Field injection is not recomme…

【抖音小玩法-弹幕游戏】开发者功能测试报告提交模板

背景 字节有明确的要求,准入和准出更加严格,要求有明确的测试报告。格式如下: *本文参考字节wiki:开发者功能测试报告提交模板 网络兼容性 请确认在以下网络类型验证过插件功能 WIFI 4G 测试机型 请罗列验证过的双端机型 An…