【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议


 需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


目录

一、MAC帧

1、IP地址和MAC地址的区别

2、MAC帧协议

3、MTU对IP协议的影响

4、MTU对UDP协议的影响

5、MTU对TCP协议的影响

二、以太网协议

1、以太网中的MAC帧如何解包、分用

1.1解包

1.2分用

2、MAC地址

3、局域网中转发的原理

三、ARP协议

1、ARP协议的介绍

2、ARP协议的格式 

3、ARP的请求和响应 

4、ARP欺骗

四、RARP协议

五、一些重要的技术或协议

1、DNS(应用层协议,用的是UDP协议)

2、ICMP(网络层协议)

3、代理服务器


路由器之间相互转发的是IP报文,而网线上跑的是MAC帧。跨网络传输的本质,是由无数个局域网(子网)转发的结果。那么在同一个局域网在中进行数据的转发,就需要依靠数据链路层的以太网协议。

一、MAC帧

1、IP地址和MAC地址的区别

IP地址描述的是路途总体的起点和终点;

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

2、MAC帧协议

数据链路层的MAC帧协议规定自己的有效载荷不能超过1500字节(MTU(最大传送单元,可以修改)),这1500个字节限制包括了上层报头+有效载荷。

数据包的大小只有传输层能控制,但有时仍会超过1500字节,只能由IP协议进行分片与组装来解决,发送端IP层进行分片,每一个分片都会有IP报头,对端IP层进行组装(字节超限并不是主流情况)。TCP和MAC帧并不关心IP对数据包进行了分片和组装,这仅仅是IP层自己的行为。

路由器也是主机,也有自己的最大MTU的限制,如果某个路由器的MTU为500字节,但是接收到了局域网内某个主机1500字节的报文,这是路由器就会对这个报文再次进行分片组装!

3、MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包:

1、将较大的IP包分成多个小包, 并给每个小包打上标签;

2、每个小包IP协议头的 16位标识(id) 都是相同的;

3、每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);

4、到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;

5、一旦这些小包中任意一个小包丢失, 接收端的重组就会失败,但是IP层不会负责重新传输数据,传输层若为TCP将超时重传,UDP将表现为丢包。

4、MTU对UDP协议的影响

1、一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报。

2、这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了。

5、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)。

二、以太网协议

1、以太网中的MAC帧如何解包、分用

1.1解包

采用定长的策略。如图,报头是6+6+2=14字节,CRC校验位是4字节,解包时掐头去尾固定字节即可,剩下的就是有效载荷。

1.2分用

如图,以太网协议的MAC帧的报头里有类型字段,这个字段包含了这个报文应该向上交付给网络层中的哪一种协议。其中0800代表上层是IP协议;0806代表上层是ARP协议;8035代表上层是RARP协议等。

2、MAC地址

MAC地址共48位。全球任意一张网卡都有唯一的MAC地址。(其实MAC地址只要保证在局域网中唯一就行了)

使用ifconfig命令查看本机的MAC地址:

3、局域网中转发的原理

1、局域网中的一台主机发送了一个MAC帧,在该局域网中所有的主机都可以收到这个MAC帧,由于MAC帧中存在目的MAC地址字段,非该IP的主机的数据链路层拿到后会丢弃该MAC帧,并不会向上交付,只有目的MAC地址的主机才会收到并向上交付MAC帧。

2、在局域网中,网卡有一种“混杂模式”(默认不开启),该模式不放弃任何数据帧,从局域网中获得的所有数据帧不管目标MAC地址是不是我,全部向上交付。这也是局域网抓包工具的原理。

3、在局域网中,如果多个主机同时进行数据传输,那么总线上的模拟信号就会互相干扰,发生碰撞冲突。所以在同一时刻,局域网中只能有一台主机发送消息。为了控制局域网中同一时刻只能由一台主机发送消息,就有了多种标准对其进行控制。例如:

令牌环:令牌环网络中有一个令牌(Token)在环路上循环传递。只有持有令牌的节点才能发送数据,其他节点则监听该链路以接收数据。当节点需要发送数据时,它会将数据附加到令牌上,并将令牌继续传递下去。每个节点在接收到令牌时检查是否有附加的数据,如果有,节点就将数据提取出来并处理。

以太网:以太网使用一种称为CSMA/CD(带冲突检测的载波侦听多路访问)的协议来管理和调度数据传输。在CSMA/CD中,每个节点都监听网络上的信道来检测是否有其他节点正在发送数据。如果检测到信道空闲,则节点可以开始发送数据;否则,节点会等待一段随机时间后再次尝试发送。

可以使用某些方法不间断的在局域网中发送垃圾数据(发送垃圾数据的主机不参与碰撞检测和碰撞避免算法,就一直发),轻则局域网内其他主机数据卡顿,重则局域网瘫痪。

4、局域网越大,局域网内主机发生碰撞的概率就会增加。可以在局域网中使用交换机。首先交换机能够对局域网进行区域分割,例如图中主机A、D之间的数据转发将不会被交换机转发至另一侧;其次交换机能够识别局部性的碰撞,如果交换机一侧发生了碰撞,那么就不会对这个碰撞数据进行转发,该次碰撞将不会影响另一侧的数据转发。

5、对于每条MAC的数据长度,数据越长,越有可能发生碰撞,这也是MAC帧协议限制有效载荷最大是1500字节的原因。

三、ARP协议

源主机只知道目的IP却不知道目标主机的MAC地址,当报文千里迢迢来到目的IP地址后,需要找到对应的主机递交报文。在局域网通信中,必须得知道目标主机的MAC地址才能将数据封装成MAC帧。

此时目的IP的路由器通过报文只知道该报文的目的IP,想知道这个IP对应的主机MAC地址是多少,路由器就需要使用ARP协议来查找IP和MAC地址的映射关系。

1、ARP协议的介绍

ARP协议是一个介于数据链路层和网络层之间的协议。

1、在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的MAC地址。

2、ARP协议对主机的IP地址和MAC地址建立了映射关系。

1、源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);

2、目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;

3、每台主机都维护一个ARP缓存表,可以用arp -a命令查看缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的MAC地址。

4、ARP收到应答的时候,会以最新的应答为准。

2、ARP协议的格式 

1、注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

2、硬件类型指链路层网络类型,1为以太网;

3、协议类型指要转换的地址类型,0x0800为IP地址;

4、硬件地址长度对于以太网地址为6字节;

5、协议地址长度对于和IP地址为4字节;

6、op字段为1表示ARP请求,op字段为2表示ARP应答

7、局域网中的主机可以通过ARP协议获取当前局域网中所有主机的MAC地址。

3、ARP的请求和响应 

1、全F表示该字段并未设置。例如ARP请求是不知道目的以太网地址的。当ARP请求在广播时(以太网目的地之为全F),局域网内的其他主机都能接收到该MAC帧并向上交付至ARP协议

2、这些主机接收到ARP类型的MAC帧时,根据op字段区分该ARP报文时应答还是请求。

3、当被请求主机发送ARP应答时,其他主机在数据链路层就可以通过以太网目的地址字段区分这个MAC帧是不是给我的。

4、ARP欺骗

底层是可以通过ARP欺骗窃取报文的,所但是报文通过HTTPS协议加密后,即便中间人拿到报文,没有秘钥也解不开报文。

窃取报文只是一方面,也可以利用ARP欺骗不断向某个主机(或者对局域网所有主机循环)发送ARP应答,应答的内容是路由器的IP+乱写的MAC地址,那么某个主机收到这个应答就会误以为路由器的MAC地址是你乱写的MAC地址,只要你的ARP应答不停,这台主机就上不了网。

四、RARP协议

只知道某台主机的MAC地址,不知道它的IP地址。发送RARP请求问一下局域网中的所有主机,指定MAC地址的主机将会把该请求数据帧向上交付给RARP协议,若非指定MAC的主机拿到该数据帧后发现MAC地址不符,这个MAC帧在数据链路层就被丢弃了。

五、一些重要的技术或协议

1、DNS(应用层协议,用的是UDP协议)

整个网络协议栈用的都是IP而不是域名,我们访问的百度的网址就是域名。这是因为IP对人的记忆及使用不友好,域名网址就比较直观了。DNS就是一套从域名映射为IP的系统。

例如百度的域名:

www.baidu.com

域名之间使用 . 连接

com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等。

baidu: 二级域名, 公司名。

www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议。在浏览器输入域名时可以省略。

目前计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容。

域名解析过程:详见《图解TCP/IP》。

2、ICMP(网络层协议)

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因。

1、确认IP包是否成功到达目标地址;

2、通知在发送过程中IP包被丢弃的原因;

3、ICMP也是基于IP协议工作的,但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;

4、ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

ping命令的底层就是通过ICMP来实现的: 

1、此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址;

2、ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期);

3、ping命令会先发送一个 ICMP Echo Request给对端;

4、对端接收到之后, 会返回一个ICMP Echo Reply;

ping命令是不关注端口的,因为ping命令是基于ICMP, 是在网络层;而端口号, 是传输层的内容。在ICMP中根本就不关注端口号这样的信息。

traceroute命令,也是基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器:

3、代理服务器

正向代理:客户端想请求目标服务器,代理服务器代理客户端的请求去目标服务器请求资源并发送给客户端称为正向代理。(收集客户端请求,对请求进行管理)

反向代理(作为机房的入口机器):客户端想从服务端请求某一资源,代理服务器将从内网服务器集群中将结果返回给客户端,客户端是不知道请求的目标服务器是谁。

负载均衡策略:客户端可能会发送大量的数据,反向代理服务器需要合理的将数据分配给服务器集群。

作为反向代理的服务器,需要配置较高,充当软件服务的可以是Nginx(Web服务器,不做业务处理,只做转发处理),当反向代理服务器中的服务器集群将请求处理完,可以通过代理服务器将结果发回给客户端,也可以直接发回给客户端。

NAT和代理服务器的区别:

1、从应用层面上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比 如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器;

2、从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换,代理服务器往往工作在应用层;

3、从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。

4、从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。

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

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

相关文章

腾讯云2核4G服务器5M带宽 218元一年 优惠价格明细表

腾讯云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G5M带宽服务器218元一年&#xff1a; 腾讯云2核4G服务器5M带宽收费 腾讯云2核4G服务器可以选择轻量应用服务器或者ECS云服务器&#xff0c;云服务器ECS是专业级云服务器&#xff0c;大多数使用…

【K8S系列】深入解析k8s网络插件—Canal

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 在现代容器化应用程序的世界中…

docker-compose安装redis

基于docker-compose快速安装redis 目录 一、目录结构 1、docker-compose.yml 2、redis.conf 二、连接使用 一、目录结构 1、docker-compose.yml version: 3 services:redis:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像red…

【性能测试】Jmeter —— jmeter计数器

jmeter计数器 如果需要引用的数据量较大&#xff0c;且要求不能重复或者需要递增&#xff0c;那么可以使用计数器来实现 如&#xff1a;新增功能&#xff0c;要求名称不能重复 1&#xff0c;新增计数器 计数器&#xff1a;允许用户创建一个在线程组之内都可以被引用的计数器…

van-list 下拉刷新 触底分页 触底分页事件只加载一次

我是 头部是筛选的条件&#xff0c;&#xff0c;更换不同的状态&#xff0c;显示不同的列表数据&#xff0c;比如 审批中数据是 对的&#xff0c;触底分页也是对的&#xff0c;如果我切换一个状态的话&#xff0c;总共是 15条数据&#xff0c;但是 切换了状态只显示第一页的数据…

8个免费的AI和LLM游乐场

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 在本文中&#xff0c;我们的目标是通过引入八个用户友好的平台来弥合这一差距&#xff0c;这些平台使任何人都可以免费测试和比较开源AI模型。此外&#xff0c;它们还提供多种更新型号&#xff0c;确保您及时了解最新进…

无涯教程-JavaScript - SLN函数

描述 SLN函数返回资产在一个期间内的直线折旧。 语法 SLN (cost, salvage, life)争论 Argument描述Required/OptionalCostThe initial cost of the asset.RequiredSalvage The value at the end of the depreciation (sometimes called the salvage value of the asset).Re…

win11本地连接没了怎么办

很多用户在使用win11系统时发现自己的网络连接没有了&#xff0c;遇到这种情况的话&#xff0c;我们应该怎么处理呢&#xff1f;我们可以尝试打开网络图标&#xff0c;下面就是小编整理出的教程&#xff0c;大家一起看看吧。 win11本地连接没了怎么办 方法一&#xff1a; 1、…

数据分享|R语言武汉流动人口趋势预测:灰色模型GM(1,1)、ARIMA时间序列、logistic逻辑回归模型...

全文链接&#xff1a;http://tecdat.cn/?p32496 人口流动与迁移&#xff0c;作为人类产生以来就存在的一种社会现象&#xff0c;伴随着人类文明的不断进步从未间断&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 人力资源是社会文明进步、人民富裕…

Redis I/O多路复用机制

一、基础回顾 1.1 多路复用要解决什么问题 并发多客户端连接场景&#xff0c;在多路复用之前最简单和典型的方案就是同步阻塞网络IO模型。 这种模式的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上…

去除pdf/word的水印艺术字

对于pdf中的水印如果无法去除水印&#xff0c;则先另存为word&#xff0c;然后再按下面办法处理即可&#xff1a; 查看宏&#xff0c;创建&#xff1a;删除艺术字 添加内容&#xff1a; Sub 删除艺术字()Dim sh As ShapeFor Each sh In ActiveDocument.ShapesIf sh.Type msoT…

HTML的段落中怎么样显示出标签要使用的尖括号<>?

很简单&#xff1a; 符号 < 用 < 替代&#xff1b; 符号 > 用 > 替代。 示例代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>HTML中怎样打出尖括号</title> </head> <b…

Android Aidl跨进程通讯(三)--进阶使用

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为2478字&#xff0c;预计阅读6分钟 前言 Android的AIDL使用和异常报错都已经介绍过了&#xff0c;今天这篇还是在原来的Demo基础上加入几个AIDL的进阶使用方法。 】 AIDL进阶使用 微卡智享 in,out,inout的使…

2022年全国研究生数学建模竞赛华为杯A题移动场景超分辨定位问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 A题 移动场景超分辨定位问题 原题再现&#xff1a; 在日常家庭生活中&#xff0c;人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品。但如果给某些重要物品贴上电路标签&#xff0c;再利用诸如扫地机器人的全屋覆盖能力&…

docker入门

弱小和无知不是生存的障碍&#xff0c;傲慢才是。 Docker 学习 Docker概述 Docker为什么出现&#xff1f; 一款产品&#xff1a; 开发–上线 两套环境&#xff01;应用环境&#xff0c;应用配置&#xff01; 开发 — 运维。 问题&#xff1a;我在我的电脑上可以允许&#…

Vuex -访问(modules)模块中的 state mutations actions getters

文章目录 四大核心复习一、获取模块内的state数据1.目标&#xff1a;2.使用模块中的数据3.代码示例 二、获取模块内的getters数据1.目标&#xff1a;2.语法&#xff1a;3.代码演示 三、获取模块内的mutations方法1.目标&#xff1a;2.注意&#xff1a;3.调用方式&#xff1a;4.…

【实例项目:基于多设计模式下的日志系统(同步异步)】

本项目涉及的到所有源码见以下链接&#xff1a; https://gitee.com/ace-zhe/wz_log 一、项目简介 1.日志的概念&#xff08;白话版&#xff09; 日志类似于日记&#xff0c;通常是指对完成某件事情的过程中状态等的记录&#xff0c;而计算机中的日志是指日志数据&#xff0c…

考研英语笔记:程序员是否勤奋就看他的英语好不好

一位大佬朋友圈写道&#xff1a;看程序员是否勤奋就看他的英语好不好&#xff0c;智商高不高就看他算法好不好。 这句话我当时看到了很触动&#xff0c;默默的记在了心底。 对我来说&#xff0c;算法就免了&#xff0c;但学英语我一直在坚持。我不敢说我是优秀的程序员&#xf…

​消费盲返模式:一种让消费者和商家都受益的新型消费返利模式

您是否想过&#xff0c;如果您的消费能够带来意想不到的回报&#xff0c;您会不会更愿意购买商品或服务呢&#xff1f;您是否想过&#xff0c;如果您的商品或服务能够吸引更多的消费者&#xff0c;并让他们成为您的忠实客户&#xff0c;您会不会更有动力经营您的业务呢&#xf…

使用maven idea环境

目录 idea三种方式执行maven命令 工程导入 生命周期lifecycle 插件和目标 常用命令 创建模块工程后 idea三种方式执行maven命令 想在哪个工程模块上执行就点开哪一个 如果觉得双击完clean再双击install麻烦&#xff0c;可以 如果有需要还可以给命令后面加参数 ​​​ 第三种…