| |
|
开发:
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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |