计算机网络之数据链路层协议总结

2023-11-19

1.数据链路层介绍

  1. 数据链路层主要负责相邻设备之间的传输,决定传输的因素是MAC地址

MAC地址:6字节的整数,uint_8 addr[6];
MAC地址可以唯一标识一台设备和网卡设备绑定的

  1. 以太网协议:目的MAC地址(6字节) + 源MAC地址(6字节) + 类型(2字节)+数据(来源于网络层)+ CRC校验
    在这里插入图片描述

类型:标识网络层使用什么协议
数据:有效载荷,受MTU的限制
CRC校验:检验数据链路层的数据帧是否出错

2.ARP协议

  • ARP不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络层的协议

2.1 ARP的工作流程

  • ARP协议建立了主机IP地址和MAC地址的映射关系,获取相邻设备的MAC地址,目的IP—>对应的MAC地址
  • ARP是广播发送,子网当中的所有机器都会收到ARP请求,分析ARP请求当中的目的IP地址是否是自己机器所持有的IP地址,如果是则回复ARP应答,在应答当中包含自己主机的MAC地址;如果不是,则不处理
    在这里插入图片描述

主机会通过广播发送ARP请求,这个包中包含了想要知道的MAC地址的主机IP地址


当同个链路中的所有设备收到ARP请求时,会去拆开ARP请求包里的内容,如果ARP请求包中的目标IP与自己一样,那么这个设备就将自己的MAC地址塞入ARP响应包返回给主机


每台主机会维护一个ARP缓存表,缓存表中的表项有过期时间(每隔20分钟进行更新一次),如果20分钟内没有再次使用某个表项,该表项就会失效,下次还要发ARP请求来获得目的主机的硬件地址

2.2 ARP数据报格式

在这里插入图片描述
目的MAC地址:ARP请求当中,目的MAC地址全部填充为1,表示在当前子网中广播


源MAC地址:ARP请求主机的MAC地址


帧类型:以太网数据帧类型,表示上层在使用什么协议(0x0800:IP协议,0x0806:ARP请求或者应答)


2字节的硬件类型:定义运行ARP网络的类型,一般都是以太网


2字节的协议类型:表示使用什么协议,标识当前是IP地址转换MAC地址


1字节的硬件地址长度:表示MAC地址的长度(6字节)


1字节的协议地址长度:表示IP地址的长度(4字节)


op:表示当前是ARP请求还是ARP应答,1表示请求,2表示应答


发送端MAC地址:发送ARP请求主机还是ARP应答主机的MAC地址


发送端IP地址:发送ARP请求主机还是ARP应答主机的IP地址


目的MAC地址:当如果是ARP请求,填充0x000000000000;如果是ARP应答,填充ARP请求主机的MAC地址


目的IP地址:目标主机的IP地址

3.NAT技术

3.1 NAT转换过程

  • ipv4中,地址不充足,所以NAT技术解决IP地址不够用的主要手段,是路由器的一个重要功能
  • NAT可以将私有IP对外通信时转换为公网IP
  • 公网IP要求唯一,但是私有IP不需要
  • 简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址
    在这里插入图片描述
  • NAT服务对于通信双方是无感知的
  • 网络被划分为私网和公网,NAT网关通常架设在私网到公网路由出口的位置,双方的数据包都需要经过NAT网关
  • 网络的访问只能从私网一端发起,公网是无法访问到私网的主机的
  • NAT网关对于请求而言,替换源IP地址;对于应答而言,替换目的IP地址
    在这里插入图片描述
  • NAT网关实现了双向翻译的功能,所以需要在NAT网关中维护一张映射表,把替换的信息记下来

3.2 NAPT技术(动态NAT重载)

1.N个私有IP地址,难道必须要有N个公有IP地址?这如何缓解地址紧缺的问题呢?
2.绝大多数的网络应用都是使用TCP/UDP来传输数据的,所以可以把IP地址 + 端口号 一起转换,这样一个公有IP地址就够了
3.这种转换技术就叫做NAPT
在这里插入图片描述

  • NAPT理论上可以:一个公网IP可以替换2^16个私网IP(取决于端口号uint16_8)
  • 私网IP地址和公网IP地址变成了多对一的关系
  • NAPT也是动态NAT,也可以在NAT网关当中维护多个公网IP
  • NAPT很好的解决了IP地址不够用的问题,NAPT的好搭档是DHCP协议(动态主机分配协议)

4.DNS技术

  • 我们在上网的时候,通常使用的是方式是域名,而不是IP地址,因为域名方便人类记忆
  • 实现这一技术的就是DNS域名解析,DNS可以将域名网址自动转换为具体的IP地址

4.1 域名层级关系

  • 域名其实就是由" . " 分割的字符串的集合,分割出来的字符串表示公司的名称或者性质对额字符串
  • com:商业公司 cn:中国 gov:政府 edu:教育
  • 域名中越靠右的位置表示层级越高,层级关系类似一个树形结构
    在这里插入图片描述

4.2 域名解析流程

  • 浏览器的缓存当中缓存域名和IP地址对应关系
  • 本地的hosts文件当中也会缓存域名和ip地址对应关系

浏览器首先查看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件hosts,如果还是没有,就回DNS服务器进行查询,有两种查询方式:一种是递归查询;一种是迭代查询
在这里插入图片描述

5. ICMP协议

  • ICMP叫做互联网控制报文协议

5.1 ICMP功能

  • 主要功能包括:确认 IP 包是否成功送达⽬标地址报告发送过程中 IP 包被废弃的原因改善⽹络设置
  • 在IP通信中如果某个IP包因为某种原因未能达到目的地址,那么这个具体的原因将由ICMP负责通知
    在这里插入图片描述

5.2 ICMP类型

  • 第一种是用于诊断的查询消息,是查询报文类型
  • 第二种是通知出错原因的错误消息,是差错报文类型
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络之数据链路层协议总结 的相关文章

  • PHP邮件、DNS请求超时、FQDN

    我要实现mail 我的 PHP 工作Windows Server 2012 R2 为此 我首先安装了SMTP依照指示这一页 http www vsysad com 2014 09 setup and configure smtp serve
  • 如何使用移动设备访问 Apache 虚拟主机?

    设置主机名为 server1 和 server2 的 Apache 虚拟主机后 由于无法修改 iOS 或 Android 中的 etc hosts 文件 我将如何使用 iPhone 或任何移动设备 访问它们 我的理解是 您必须按名称引用虚拟
  • 端口 80 被我的 ISP 封锁,那么我的浏览器如何仍然工作?

    我知道当我请求 example com 时 我的浏览器实际上默认为 example com 80 但是 我的 ISP 阻止 80 端口侦听 那么如果端口 80 被阻止 我如何接收请求的响应 它不应该工作 不是吗 当您发出 HTTP 请求 实
  • 如何在iPhone中获取DNS服务器IP

    我尝试通过以下方式获取 etc resolv conf 打开 etc resolv conf 0644 但它返回 1并且errno是2这意味着 没有这样的文件 我能做些什么 您无法访问应用程序沙箱之外的文件
  • 有什么方法可以在免费的heroku dyno上添加免费的SSL证书吗?

    我有一个 heroku 免费计划 它在带有 PointDNS 附加组件的自定义域上运行 因此它可以为 DNS 提供商提供名称服务器 如果这很重要 我已在我的自定义域 https 上启动并运行该网站 但 ssl 证书指向 herokuapp
  • TCP打孔(NAT穿越)库什么的?

    我想用 C 进行 TCP 打洞 NAT 穿越 如果需要 可以使用集合服务器来完成 我发现http sharpstunt codeplex com http sharpstunt codeplex com 但无法让它发挥作用 理想情况下 我需
  • 没有收到所有 ICMP 超时消息:为什么?

    我正在使用 Scapy 重播一些转储的数据包 其中我更改了 TTL 值 即使 TTL 1 我也得到了非常奇怪的结果 当我分别运行测试时间时 我可以得到大约 40 到 95 的数据包回复了 ICMP 超时消息 然后 我可以递归地重放未应答的数
  • 将 Google 域链接到 Amazon ec2 服务器

    我正在使用 Amazon EC2 实例来为 node js 应用程序提供服务 我最近通过以下方式购买了域名谷歌域名 https domains google com我想使用该域名来访问我的 node js 应用程序 Google Domai
  • 告诉 urllib2 使用自定义 DNS

    我想告诉urllib2 urlopen or a 定制开瓶器 使用127 0 0 1 or 1 来解析地址 我不会改变我的 etc resolv conf 然而 一种可能的解决方案是使用类似的工具dnspython查询地址和httplib构
  • 在 Chrome 扩展程序中拦截 DNS 请求?

    如果我想测试http www domain com http www domain com 但我想通过切换 IP 来测试它的两个版本 例如 一个解析为 127 0 0 1 另一个解析为 192 168 1 200 是否可以编写 使用 Chr
  • 域名通过“dig”存在

    是否可以通过检查 dig 的输出来检查域名是否存在 在绑定源中我发现了这些常量 0 DNS R NOEROR 1 DNS R FORMERR 2 DNS R SERVFAIL 3 DNS R NXDOMAIN 4 DNS R NOTIMP
  • 使用PHP动态添加到.htaccess文件?

    我想做的是自动化网站上线的过程 这些网站都是使用htaccess动态创建的 所以这里是一个例子 RewriteCond ENV REDIRECT STATUS RewriteCond HTTP HOST www domain com NC
  • Namecheap 域名不会在没有“www”的情况下重定向

    我正在寻找将我的域连接到 heroku 应用程序 到目前为止 我读过的教程说我们希望 Namecheap 拥有以下域名记录example com CNAME Record www www example com herokudns com
  • django 在我的机器上非常慢

    我全新安装了 django 1 0 并提供了一个简单的页面 需要 5 秒才能加载 在我同事的计算机上几乎不需要时间 我使用启动服务器 python manage py testserver 我可以看到每个 GET 请求 PNG 和样式表 大
  • 可以分配给一个 Heroku 应用程序的最大域名数量?

    我正在与一位客户讨论一个项目 该客户希望他的用户可以通过自己的域名访问该应用程序 如果他们选择的话 可以分配给一个 Heroku 应用程序的自定义域数量是否有限制 The Heroku 文档 https devcenter heroku c
  • 为什么 Linux TAP 设备不处理 ARP 或 ICMPv6 数据包

    我正在使用以下命令打开 TAP 设备 p gt fd open dev net tun O RDWR skipping error handling code ifr ifr flags IFF TAP IFF ONE QUEUE IFF
  • Java 无法从 AIX 解析 DNS 地址:UnknownHostException

    我遇到了这个奇怪的错误 在 AIX 上 如果我可以从命令行访问我的服务器 使用 ping telnet 但是如果我尝试使用 java 我会遇到 UnknownHostException 这是因为 Java 无法以某种方式 使用 DNS 但我
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • MongoDB:连接到 MongoDB 的 resolv.conf 的 DNS 问题

    我想从 MongoDB Atlas 导出一些数据 如果我执行下面的命令 它会尝试连接localhost并导出数据 mongoexport uri mongodb srv
  • Laravel 白名单域认证

    我正在寻找只允许某些域访问我的 laravel 应用程序的最佳方法 我目前正在使用 Laravel 5 1 并且如果引用域不在白名单域中 则使用中间件进行重定向 class Whitelist Handle an incoming requ

随机推荐

  • join表连接的三种算法思想:Nested-Loop Join和Index Nested-Loop Join和Block Nested-Loop Join和BKA

    一 Nested Loop Join 在Mysql中 使用Nested Loop Join的算法思想去优化join Nested Loop Join翻译成中文则是 嵌套循环连接 举个例子 select from t1 inner join
  • ChatGPT能为留学生做什么?错误使用有何后果?

    随着AI人工智能行业的迅速发展 越来越多的学生开始利用ChatGPT等软件来获得更高效便利的论文和作业辅助 然而 我们需要认识到一个严肃的问题 学生是否过度依赖AI助手来完成毕业论文 近期出现的Turnitin AI Detector是一个
  • 在Windows下使用vs2019编译libjpeg库

    一 库的编译 1 下载 libjpeg 源码 这里我下载的是 jpegsr9e zip 2 解压源码 3 进入解压后的目录 找到 makefile vs 文件 用文本编辑器打开并编辑 找到 语句 include
  • 设备管理过程

    复杂度2 5 机密度2 5 最后更新2021 04 19 AIX中对设备会有如下五个操作 define aix下能看到设备的定义 但驱动程序并没有加载或初始化 该设备不可用 lsdev看到设备时defined 很多逻辑设备 vg lv等 只
  • CTF练题(5)word隐写基础题,jpg图片隐写,敲击码解密

    2022 11 2 两道misc题目 题目一 word隐写基础 题目信息如下 以及一个无法打开的word文档 解题步骤 1 将该word文档拖入010Editor中进行分析 发现文件头显示为PK 压缩文件 将该文档后缀改为 zip 保存到桌
  • go-zero使用Etcd进行服务注册代码分析

    代码分析 github com tal tech go zero v1 2 3 core discov publisher go package discov import github com tal tech go zero core
  • ld链接器的--start-group和--end-group参数说明

    start group archives end group The archives should be a list of archive files They may be either explicit file names or
  • OpenLayers与Bootstrap样式冲突的解决

    在引入Bootstrap响应式布局样式后 OpenLayers图层瓦片会显示异常 在页面中加入以下样式可以解决 参见 http openlayers org dev examples bootstrap html
  • linux网络95值工具,Linux下网络故障排查工具之ping

    服务器运维人员在日常运维服务器的过程中经常会遇到服务器网络故障 有服务器硬件造成的 也有服务商网络问题造成的 也有区域网络问题造成的 这个时候就需要用到ping traceroute mtr这三个命令 1 ping 最简单的网络请求反馈命令
  • 粒子群算法优化的最小二乘支持向量机分类代码

    粒子群算法优化的最小二乘支持向量机分类代码 在数据挖掘和机器学习领域中 分类是一个非常基础而重要的问题 其中最小二乘支持向量机 LSSVM 是一种有效的分类方法 经常被应用于实际问题中 而粒子群算法 PSO 是一种优化算法 也可以用来优化L
  • C++之函数模板

    1 什么是模板 模板有什么作用 模板分为函数模板和类模板 函数模板是对函数功能框架的描述 具体功能由实际传递的参数决定 有了函数模板 编译器就会根据模板自动生成多个函数名相同 参数列表不同的函数 不需要手动写 例 求一个矩形面积 当传入的长
  • Tensorflow之Estimator(二)实践

    1 前言 这篇文章介绍Tensorflow的高级API 模型的建立和简化过程 2 Estimator优势 本文档介绍了Estimator一种可极大地简化机器学习编程的高阶TensorFlow API 用了Estimator你会得到数不清的好
  • 一些JDK自带的性能分析利器

    有时候碰到服务器CPU飙升或者程序卡死之类的问题 一般都不太好定位 这类bug一般都隐藏的比较深并且还可能是偶发性的 比较棘手 对于此类问题 一般我们都有固定的分析流程 借助于JDK自带的一些分析工具 比如jstack jmap jstat
  • 超全汇总,性能测试常用指标大全(重要)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 三相桥式全控整流电路仿真--(Matlab仿真2)

    仿真环境 Matlab 2018a 使用模块 1 Three Phase V I Measurement1 2 Multimeter 3 Universal Bridge 4 Selector 5 Mean 测量平均电压 6 Pulse G
  • pycharm如何连接数据库并往数据库插入内容

    1 创建connection对象 2 创建cursor对象 游标对象 主要用于操作数据库 3 执行查询 4 关闭cursor对象 5 关闭connection 首先要先安装pumysql库 pip install pymysql 连接测试
  • 微服务应用大行其道,我提供一个dto和entity转换工具类,方便大家做转换,少写机械代码,多陪陪家人...

    微服务应用大行其道 我提供一个dto和entity转换工具类 方便大家做转换 少写机械代码 多陪陪家人 该工具类主要是对dozer进行了封装 使用过程代码量极少 废话少说 贴代码了 import java util ArrayList im
  • 使用vscode编辑和提交github仓库代码

    写在前面 在github上想删除仓库中的某个文件或文件夹 亦或是重命名操作都很麻烦 这里提供一种vscode的解决方案 在vscode中克隆远程github仓库 然后对代码或文件进行编辑 最后提交即可 就和管理本地文件一样方便 准备工作 下
  • react.js的介绍

    关于React React部分的内容包含了所有授课的思路 React的起源和发展 React 起源于 Facebook 的内部项目 因为该公司对市场上所有 JavaScript MVC 框架 都不满意 就决定自己写一套 用来架设Instag
  • 计算机网络之数据链路层协议总结

    数据链路层 1 数据链路层介绍 2 ARP协议 2 1 ARP的工作流程 2 2 ARP数据报格式 3 NAT技术 3 1 NAT转换过程 3 2 NAPT技术 动态NAT重载 4 DNS技术 4 1 域名层级关系 4 2 域名解析流程 5