【网络编程·数据链路层】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一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。
相关文章:

【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议
需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。 目录 一、MAC帧 1、IP地址和MAC地址的区别 2、MAC帧协议 3、MTU对IP协议的…...

算法:移除数组中的val的所有元素---双指针[2]
文章来源: https://blog.csdn.net/weixin_45630258/article/details/132689237 欢迎各位大佬指点、三连 1、题目: 给你一个数组 nums和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用…...

Python小知识 - Python爬虫进阶:如何克服反爬虫技术
Python爬虫进阶:如何克服反爬虫技术 爬虫是一种按照一定的规则,自动抓取网页信息的程序。爬虫也叫网页蜘蛛、蚂蚁、小水滴,是一种基于特定算法的自动化程序,能够按照一定的规则自动的抓取网页中的信息。爬虫程序的主要作用就是从一…...

SAP中的新旧事务码
SAP中的新旧事务码 SAP随着新版本的发布,我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE,新TCODE有很多的新特性和新功能。在这个这种情况下,很多旧TCODE就会被废弃。我们如何查找这个替换呢? …...

day3_C++
day3_C 思维导图用C的类完成数据结构 栈的相关操作用C的类完成数据结构 循环队列的相关操作 思维导图 用C的类完成数据结构 栈的相关操作 stack.h #ifndef STACK_H #define STACK_H#include <iostream> #include <cstring>using namespace std;typedef int datat…...
力扣题解(73. 矩阵置零),带注释
题目描述 链接:点我 题解 //法一 使用hashset记录有0的横纵坐标即可 class Solution {public void setZeroes(int[][] matrix) {HashSet<Integer> row new HashSet<Integer>();HashSet<Integer> col new HashSet<Integer>();for(int i 0;i <…...

SpringMVC应用
文章目录 一、常用注解二、参数传递2.1 基础类型String2.2 复杂类型2.3 RequestParam2.4.路径传参 PathVariable2.4 Json数据传参 RequestBody2.5 RequestHeader 三、方法返回值3.1 void3.2 Stringmodel3.3 ModelAndView 一、常用注解 SpringMVC是一个基于Java的Web框架&#…...

百度输入法全面升级,打造首个基于大模型的输入法原生应用
基于文心一言,百度输入法宣布全面升级,打造行业首个“基于大模型的输入法原生应用”,从“输入工具”全面转型为“AI创作工具”。 近日,百度文心一言正式向公众开放。基于文心一言,百度输入法宣布全面升级,打…...

如何解决GitHub 访问不了?小白教程
GitHub 是全球最大的代码开源平台,小伙伴们平时都喜欢在那里找一些优质的开源项目来学习,以提升自己的编程技能。 但是很多小白初探GitHub 发现访问不了,不能访问 通过一下方法绕过这堵墙,成功下载 GitHub 上的项目。过程非常简单…...

龙芯指令集LoongArch——学习笔记(1)
1 龙芯架构 PDF下载链接: https://www.loongson.cn/download/index 1.1 龙芯架构概述 龙芯架构具有 RISC 指令架构的典型特征。 它的指令长度固定且编码格式规整, 绝大多数指令只有两个源操作数和一个目的操作数, 采用 load/store 架构&…...
ubuntu 20.04 docker安装emqx 最新版本或指定版本
要在Ubuntu 20.04上使用Docker安装EMQX(EMQ X Broker)的4.4.3版本,您可以执行以下步骤: 1.更新系统包列表: sudo apt update2.安装Docker: sudo apt install docker.io3.启动Docker服务并设置其开机自启…...

软件测试/测试开发丨学会与 AI 对话,高效提升学习效率
点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…...

CEF内核和高级爬虫知识
(转)关于MFC中如何使用CEF内核(CEF初解析) Python GUI: cefpython3的简单分析和应用 cefpython3:一款强大的Python库 开始大多数抓取尝试可以从几乎一行代码开始: fun main() PulsarContexts.createSession().scrapeOutPages(&q…...

视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…...

科技成果鉴定测试报告一般包含哪些测试内容?
软件测评报告 一、科技成果评价是需要做第三方软件测评报告,一般是证明技术指标点是否完善,覆盖主要申报内容,应用软件项目科技成果鉴定测试内容: (一)是否完成合同或计划任务书要求的指标; …...

IDEA中的“Deployment“ 将项目直接部署到服务器上
ntelliJ IDEA中的"Deployment"工具栏是一个方便的工具,用于将你的项目直接部署到服务器上。这个工具栏提供了三种部署的方式: 1.Web Server在本地电脑上,并且服务器运行目录也在项目目录下。 2.Web Server在本地电脑上,…...

密室逃脱小游戏
欢迎来到程序小院 密室逃脱 玩法: 判断可生存的空间,鼠标点击屏幕进行人物左右移动,躲避闸道进行生存,每进行一次关卡都会有分数统计,赶紧去闯关吧^^。开始游戏https://www.ormcc.com/play/gameStart/176 html <c…...
【MyBatis】MyBatis项目结构的搭建
Mybatis项目的搭建 依赖 将打包方式添加为jar包 <groupId>com.qinghe.mybatis</groupId><artifactId>Mybatis_demo3</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging>添加如下依赖 <depen…...
Vant组件库入门知识
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...

Java字符串查找
目录 1.查找字符 (1)以索引查找字符 (2)以字符查找索引 2.查找字符串 在给定的字符串中查找需要的字符或字符串是常见的操作,以下是String类中常用的查找方法。 1.查找字符 查找字符分为两种情况:一种…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...