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

这篇具有很好参考价值的文章主要介绍了【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以太网的mac帧,网络编程,网络,计算机网络


 需要云服务器等云产品来学习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)。

二、以太网协议

以太网的mac帧,网络编程,网络,计算机网络

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地址:

以太网的mac帧,网络编程,网络,计算机网络

3、局域网中转发的原理

以太网的mac帧,网络编程,网络,计算机网络

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

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

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

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

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

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

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

以太网的mac帧,网络编程,网络,计算机网络

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地址建立了映射关系。

以太网的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收到应答的时候,会以最新的应答为准。

以太网的mac帧,网络编程,网络,计算机网络

2、ARP协议的格式 

以太网的mac帧,网络编程,网络,计算机网络

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欺骗

以太网的mac帧,网络编程,网络,计算机网络

底层是可以通过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文件的内容。

以太网的mac帧,网络编程,网络,计算机网络

域名解析过程:详见《图解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协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器:

以太网的mac帧,网络编程,网络,计算机网络

3、代理服务器

以太网的mac帧,网络编程,网络,计算机网络

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

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

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

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

NAT和代理服务器的区别:

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

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

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

4、从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。文章来源地址https://www.toymoban.com/news/detail-732776.html

到了这里,关于【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】以太网协议——数据链路层

    IP拥有将数据跨网络从一台主机送到另一台主机的能力,但IP并不能保证每次都能够将数据可靠的送到对端主机,因此IP需要上层TCP为其提供可靠性保证,比如数据丢包后TCP可以让IP重新发送数据,最终在TCP提供的可靠性机制下IP就能够保证将数据可靠的发送到对端主机。 TCP除

    2024年02月12日
    浏览(54)
  • 【Linux】数据链路层:以太网协议

    约束不等于压迫,冷静和理性不等于冷淡和麻木。 1. (1)IP提供了将数据包跨网络发送的能力,这种能力实际上是通过子网划分+目的ip+查询节点的路由表来实现的,但实际上数据包要先能够在局域网内部进行转发到目的主机,只有有了这个能力之后,数据包才能跨过一个个

    2024年02月11日
    浏览(44)
  • 【数通网络交换基础梳理1】二层交换机、以太网帧、MAC地址数据帧转发原理详解

    万年不变,先从模型结构分析,现在大家熟知的网络模型有两种。第一种是,OSI七层模型,第二种是TCP/IP模型。在实际运用中,参考更多的是TCP/IP模型。 OSI七层模型 TCP/IP模型 不需要全部理解,只需要明白两点:1、 数据包发送数据的过程是从上到下打包,接收数据是从下至上

    2024年02月03日
    浏览(58)
  • 实现VLAN间通信&以太网链路聚合与交换机堆叠、集群&华为ICT网络赛道

    使用路由器物理接口 路由器三层接口作为网关,转发本网段前往其它网段的流量。 路由器三层接口无法处理携带VLAN Tag的数据帧,因此交换机上联路由器的接口需配置为Access. 路由器的一个物理接口作为一个VLAN的网关,因此存在一个VLA就需要占用一个路由器物理接口。 路由

    2024年02月21日
    浏览(58)
  • UNIX网络编程卷一 学习笔记 第二十九章 数据链路访问

    目前大多操作系统都为程序提供访问数据链路层的功能,此功能可提供以下能力: 1.能监视由数据链路层接收的分组,使得tcpdump之类的程序能运行,而无需专门的硬件设备来监视分组。如果结合使用网络接口进入混杂模式(promiscuous mode)的能力,那么应用甚至能监视本地电

    2024年02月10日
    浏览(42)
  • STM32F407以太网DMA描述符和数据链路层收发数据

    本文主要介绍STM32F407单片机MAC内核的DMA描述符,以及如何实现以太网二层的数据收发。这一篇先实现数据链路层的正常收发,下一篇再去介绍如何把LWIP移植到单片机上。大部分资料都是把LWIP移植和以太网卡驱动放在一起介绍,对新手不友好。所以我在这篇文章先把网卡驱动

    2024年02月10日
    浏览(58)
  • 以太网链路聚合之静态LACP

    1,静态LACP链路聚合概念 LACP即链路聚合控制协议,(Link Aggregation Control Protocol),在IEEE803.3ad有规范定义。相比手工负载分担方式,LACP方式实现起来增加了设备本身的复杂度,但是比它自动化程度更高! LACP模式,链路两端的设备相互发送LACP报文,协商聚合参数。协商完成后

    2024年02月16日
    浏览(52)
  • 以太网链路聚合与交换机堆叠,集群

    目录 以太网链路聚合 一.链路聚合的基本概念 二.链路聚合的配置 1.手工模式 2.LACP模式 系统优先级 接口优先级 最大活动接口数 活动链路选举 负载分担 负载分担模式 三.典型使用场景 交换机之间 交换机和服务器之间 交换机和堆叠系统 防火墙双机热备心跳线 四.聚合链路的

    2024年02月08日
    浏览(52)
  • 聚焦112Gb/s SerDes芯片的AN/LT端口自协商和链路学习,评估验证高速链路的信号质量并分析调优(400/800G高速以太网互联接口,AI加速卡网络RDMA性能测试,交换背板接口性能评估)

    目录 引言 关于使用112G Serdes的100G、200G和400G以太网的简要背景 自动协商的基础知识 基础页和下一页 / Base Page and Next Pages DME基础页(IEEE802.3第73条) 下一页 (IEEE802.3) 下一页(以太网技术联盟) AN过程 优先表决 链路训练 训练帧 链路训练过程 如何使用AN和LT 结论 Freya - Xena的

    2024年02月16日
    浏览(75)
  • 【雕爷学编程】Arduino智能家居之使用以太网连接和HTTP POST上传数据

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包