IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【JokerのNote】Ethernet_Frame。 -> 正文阅读

[网络协议]【JokerのNote】Ethernet_Frame。

就是之前不是总结了下网络接口吗,这次继续顺着总结下网络帧格式。这里主要参考的是《计算机网络》这本书,书写的非常非常的好,感兴趣的朋友可以细翻一下,我这里只是当笔记做个总结。

在介绍具体以太网帧格式之前,先对网络的层级和体系结构进行简单的说明。

协议结构

书本上经常看到和平时经常听到的是OSI的七层体系模型,每层都有清楚的概念和理论,但太复杂了,实际应用的比较多的,还是TCP/IP的四层体系结构。最右侧的五层体系模型,是方便介绍网络原理使用的。

首先主机中运行不同的网络应用,需要有不同的应用层协议支持,如TELNET、FTP、HTTP、SMTP等,当需要与另一台网络主机进行通讯时,就会将应用层数据向下传递给运输层,由运输层按照应用需求,使用TCP或UDP协议进行封装;再向下传递给网络层,网络层会把运输层产生的报文封装成分组或包进行传送,由于网络层使用IP协议,因此分组也称为IP数据报,除此之外,网络层另一个任务是选择合适的路由,找到目的通信主机;IP数据报再向下传递给数据链路层,数据链路层将IP数据报封装成帧,此时,帧中除了上层的数据之外,还包含了必要的控制信息;最后,传递给物理层,发送的就都是01010101比特数据了。

帧格式

介绍完分层结构之后,接下来就可以开始说下不同层的帧格式了,常用的以太网帧格式主要由两种标准一种是DIX Ethernet V2,另一种是IEEE的802.3标准,这里以使用最多的Ethernet V2介绍。

物理层

最前面的8个字节,主要是为了实现本地适配器时钟与接收到的比特流达到位同步,前7个字节的前同步码,由10交替组成,最后1字节的帧开始界定符,为10101011,示意后方MAC帧信息到达。以太网MAC帧长度最少为64字节,最大为1518字节。

MAC层

包括6字节的目的MAC地址 + 6字节的源MAC地址 + 2字节的类型 + 46~1500字节的数据负载 + 4字节的FCS组成,当类型字段为0800时,表示本帧为IP数据报,需交上层继续处理,当类型字段为0806时,表示本帧为二层的ARP数据报,ARP数据报格式如下

硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。

协议类型:表示要映射的协议地址类型。值为 0x0800,表示 IP 地址。

硬件地址长度:指出硬件地址长度,单位字节,对于ARP请求或应答来说,值为6。

协议长度:指出协议的长度,单位字节,对于ARP请求或应答来说,值为 4。

操作类型:表示报文类型,ARP 请求为 1,ARP 响应为 2,RARP 请求为 3,RARP 响应为 4。

由于ARP所有字段总长为28字节,小于二层数据所要求的最小46字节长度,所以最后还有18字节的填充位。

另外,二层帧最后的FCS字段,用于检测该帧是否出现差错,占 4 个字节(32 比特)。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。

IP层

当二层帧类型为0800时,表示其后的数据字段是IP报文,格式如下。

?版本:4位,表示 IP 协议的版本,目前广泛使用的IPv4,值为4。

首部长度:4位,该字段值的单位是32位字长,即首部长度为4字节的多少倍,如该值为1111=15,则表示首部长度为15*4=60字节,当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。

区分服务:8位,旧标准中叫做服务类型,但实际上一直没有被使用过。

总长度:16位,首部和数据之和,因此数据报的最大长度为 2^16-1=65535 字节。

标识:16位,IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。

标志:3 位,第一位未使用,值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示这已经是若干数据报分片中的最后一个;设置为1时,表示后面还有分片的数据报。

片偏移:13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。以 8 个字节为偏移单位。除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。

生存时间:8位,即数据报在网络中的寿命TTL。路由器在转发数据报之前,先把 TTL 值减 1,若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。

协议:8位,表示该数据报文所携带的数据所使用的协议类型,方便目的主机的 IP 层知道按照什么协议来处理数据部分,其值与协议对应关系,如上图中左下方表格所示。

首部检验和:16 位,数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。

源IP地址:32位,发送端IP地址。

目的IP地址:32位,接收端IP地址。

可选字段:该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。

填充:由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。

数据部分:表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定,但需保证整个IP报文长度不超1500,否则分片。

IP层的话,以ICMP协议来举例,在这里一定记得,IP首部是固定20字节长的,到上图表格中的目的IP地址就截止了,接下来的部分,根据IP首部的协议来区分。

当类型为以下数值时,所对应的ICMP报文类型为:

03: 终点不可达。

0B:生存时间为0。

0C:参数异常。

05:改变路由(Redirect)。

08或00:回送(Echo)请求或回答。

0D或0E:时间戳(Timestamp)请求或回答。

运输层

首先是UDP报文格式。

UDP首部由8字节组成,分别是源端口、目的端口、长度、校验和,每个字段长度均为2字节。源端口和目的端口不必说了,为了指明从本地哪个端口发出,被对端的哪个端口接收。长度字段指明UDP整个数据报长度,在仅有首部的情况下,该值最小,为8。检验和字段有些特殊,是因为在计算检验和时会添加12字节长的伪首部一同计算,这12个字节分别为4字节的源IP地址、4字节目的IP地址、1字节的0x00、1字节的协议号0x11、2字节的UDP长度。?

接下来是TCP报文格式。

由于TCP首部固定20字节长,所以数据部分最长不超过1460字节,接下来对部分字段进行简单说明:

源端口:16位,发送端端口号。

目的端口:16位,接收端端口号。

序号:32位,指的是本报文段所发送的数据的第一个字节的序号。

确认号:32位,表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。

数据偏移:4位,与IP报文的“首部长度”含义类似,表示TCP首部长度,该字段值的单位是32位字长,即首部长度为4字节的多少倍,如该值为1111=15,则表示首部长度为15*4=60字节。

保留:6位,全0。

URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。

ACK(Acknowledgment):表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。

PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。

RST(Reset):表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。

SYN(Synchronization):在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接;SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。

FIN(Finish):标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。

窗口:16位,表示从本报文段首部中的确认号算起,接收方目前还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。

检验和:16位,与UDP计算校验和的方式一样,也需要额外添加12字节的伪首部,只是把其中协议号对应的0x11替换为TCP的0x06。

紧急指针:16位,仅当前面的 URG 控制位为 1 时才有意义。指出本数据段中为紧急数据的字节数。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。

选项:长度可变,最长可达40字节,但需为4字节的整数倍。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:58:43  更:2022-03-22 20:59:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:51:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码