数据链路层

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

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

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

        网络层的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.rhkb.cn/news/92119.html

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

相关文章

如何使用CSS实现一个纯CSS的滚动条样式?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现自定义滚动条样式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣…

每天一道leetcode:797. 所有可能的路径(图论中等深度优先遍历)

今日份题目: 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节…

VBA manual

VBA MACRO Debug.Print()设置Macros安全修复乱码打开VBAAlt F11File/Options/Customize Ribbon Debug.Print() How to Use Excel VBA Debug. Print? 设置Macros安全 或者 File /Options 如果还是Block,右键文件属性 修复乱码 Tools / Options Control Pann…

大数据Flink(六十一):Flink流处理程序流程和项目准备

文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

错误: java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfigurationat org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74)at org.apache.hadoop.hive.ql.e…

day 0815

计算文件有多少行? 2.文件的拷贝

21.0 CSS 介绍

1. CSS层叠样式表 1.1 CSS简介 CSS(层叠样式表): 是一种用于描述网页上元素外观和布局的样式标记语言. 它可以与HTML结合使用, 通过为HTML元素添加样式来改变其外观. CSS使用选择器来选择需要应用样式的元素, 并使用属性-值对来定义这些样式.1.2 CSS版本 CSS有多个版本, 每个…

髋关节 弹响

评估测试 https://www.bilibili.com/video/BV1A44y1j71Y/?spm_id_from333.880.my_history.page.click&vd_source3535bfaa5db8443d107998d15e88dc44 根据此视频整理所得 托马斯测试 第一种情况 如果你难于将膝关节拉到胸前,并感觉前面有骨性的挤压 说明你股…

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 🌟 leetcode链接:面试题 02.05 链表求和 ps: 首先定义一个头尾指针 head 、tail,这里的 tail 是方便我们尾插,每次不需要遍历找尾,由于这些数是反向存在的,所以我们直接加起来若…

分布式图数据库 NebulaGraph v3.6.0 正式发布,强化全文索引能力

本次 v3.6.0 版本,主要强化全文索引能力,以及优化部分场景下的 MATCH 性能。 强化 强化增强全文索引功能,具体 pr 参见:#5567、#5575、#5577、#5580、#5584、#5587 优化 支持使用 MATCH 子句检索 VID 或属性索引时使用变量&am…

概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理

Top NSD DBA DAY09 案例1:搭建redis服务器案例2:常用命令限案例3:部署LNPRedis案例4:创建redis集群 1 案例1:搭建redis服务器 1.1 具体要求如下 在主机redis64运行redis服务修改服务运行参数 ip 地址192.168.88.6…

四张图片道清AI大模型的发展史(1943-2023)

四张图片道清AI大模型的发展史(1943-2023) 现在最火的莫过于GPT了,也就是大规模语言模型(LLM)。“LLM” 是 “Large Language Model”(大语言模型)的简称,通常用来指代具有巨大规模参数和复杂架构的自然语言处理模型,…

从零开始,外贸邮件营销如何做?

邮件营销是外贸企业开发新用户和维系老客户非常有效的方法之一,因其操作方便快捷、成本低廉且精准投放的特性,已成为外贸行业的必备营销手段。但如何才能利用好邮件营销,让邮件营销的作用发挥到最大呢?今天U-Mail李工就跟大家分享…

Python Flask+Echarts+sklearn+MySQL(评论情感分析、用户推荐、BI报表)项目分享

Python FlaskEchartssklearnMySQL(评论情感分析、用户推荐、BI报表)项目分享 项目背景: 随着互联网的快速发展和智能手机的普及,人们越来越倾向于在网上查找餐厅、购物中心、酒店和旅游景点等商户的点评和评分信息,以便做出更好的消费决策。…

vue3+ts使用antv/x6 + 自定义节点

使用 2.x 版本 x6.antv 新官网: 安装 npm install antv/x6 //"antv/x6": "^2.1.6",项目结构 1、初始化画布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…

数据库概述、部署MySQL服务、必备命令、密码管理、安装图形软件、SELECT语法 、筛选条件

Top NSD DBA DAY01 案例1&#xff1a;构建MySQL服务器案例2&#xff1a;密码管理案例3&#xff1a;安装图形软件案例4&#xff1a;筛选条件 1 案例1&#xff1a;构建MySQL服务器 1.1 问题 在IP地址192.168.88.50主机和192.168.88.51主机上部署mysql服务练习必备命令的使用 …

实习笔记(一)

自定义注解&#xff1a; 自定义注解中有三个元注解Target,Retention,Document /*** 系统日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

Qt 之 QPushButton,信号与槽机制

文章目录 前言一、QPushButton二、信号与槽机制总结 前言 一、QPushButton 当我们开发基于Qt框架的图形用户界面&#xff08;GUI&#xff09;应用程序时&#xff0c;经常需要在界面上添加按钮来实现用户交互。Qt提供了一个名为 QPushButton 的类作为按钮控件的实现。QPushButt…

ML-fairness-gym入门教学

1、ML-fairness-gym简介 ML-fairness-gym是一个探索机器学习系统长期影响的工具。可以用于评估机器学习系统的公平性和评估静态数据集上针对各种输入的误差度量的差异。开源网站&#xff1a;GitHub - google/ml-fairness-gym 2、安装ML-fairness-gym&#xff08;Windows&…

强训第32

选择 D B A A 发送TCP意思应该是已经建立了连接&#xff0c;会超时重传。在未建立连接的时候&#xff0c;会放弃该链接 C A 80端口是http A 交换机攻击主要有五种&#xff1a;VLAN跳跃攻击 生成树攻击 MAC表洪水攻击 ARP攻击 VTP攻击 B A 2^(32-26)2^(32-27)2^(32-27)128 减去…