协议篇之以太网UDP协议
- 一、写在前面
- 二、TCP/IP协议分层
- 三、UDP协议数据报格式
- 2.1 MAC层/物理层:
- 2.2 IP层/网络层:
- 2.3 UDP层/传输层:
- 2.4 应用层:
- 四、总结
- 四、写在后面
一、写在前面
TCP/IP协议是指一个协议簇,可以理解为以太网通信协议的集合,在这个集合里面有很多种协议,比如:TCP、IP、UDP等,其中,由于TCP核IP最为常用,所以协议的集合就命名为TCP/IP协议。本文中主要学习以太网TCP/IP协议的分层与传输层协议中的UDP协议。
二、TCP/IP协议分层
在TCP/IP协议中,一般可以分为5层:应用层、传输层、网络层、数据链路层和物理层。以上五层协议构成了TCP/IP协议的基础,每一层都有其特定的功能和协议,通过不同层级的分工合作,TCP/IP协议能够实现互联网的通信。
- 应用层(Application Layer):应用层就是我们需要通过用户传输的数据;
- 传输层(Transport Layer):这一层提供端到端的通信服务。常见的传输层协议有TCP和UDP协议;
- 网络层(Network Layer):这一层负责将数据报从源主机发送到目的主机。常见的网络层协议包括IP协议和ICMP协议;
- 数据链路层(Data Link Layer):这一层将数据包转换为帧,并将它们传输到网络。常见的数据链路层协议包括以太网和Wi-Fi;
- 物理层/MAC层(Physical Layer):这一层负责在物理媒介上传输数据。常见的物理层协议包括有线电缆、光纤和无线电波;
三、UDP协议数据报格式
那么,下面,我们对网络层采用IP协议,传输层采用UDP协议的分层各层数据报格式进行讲解,分层情况概览如下图所示。
2.1 MAC层/物理层:
MAC层主要包括前导码Preamble、帧开始符SFD、以太网帧头、MAC数据段和帧校验序列FCS,其中,以太网帧头又可以分为目的MAC地址、源MAC地址和长度/类型三个部分,如下。在这里值得注意的是,
- 前导码(Preamble):前导码为7个字节的0和1交替的二进制值,即0x55-55-55-55-55-55-55;
- SFD(帧开始符):表示一帧的开始,为1字节的固定值0xd5;
- 目的MAC地址:目的主机的MAC地址,长度为6个字节。MAC地址根据目的主机的个数又分为单播地址、组播地址和广播地址;
- 源MAC地址:源主机的MAC地址,长度6个字节;
- 长度/类型:长度为2字节,当这两个字节的值小于1536(十进制)时,代表该以太网MAC帧中数据段的长度;当这两个字节的值大于1536时,则表示该以太网MAC层的上层协议是什么协议,比如:0x0800表示IP协议,0x0806表示ARP协议;
- MAC数据段:MAC数据段的数据长度在46~1500字节之间,如果MAC数据段的长度小于46字节,则补0到长度为46字节;
- FCS(帧校验序列):帧校验序列是4字节的CRC校验码,用来在接收端检测传输数据的正确性。CRC数据校验是从以太网帧头开始,到MAC数据段结束,不包含前导码Preamble和帧开始符SFD。
2.2 IP层/网络层:
MAC层数据段即IP数据报,IP数据报主要包括IP首部和IP数据段两个部分,其中,IP首部又可以分为多个部分,包括协议版本、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、首部校验和、源IP地址、目的IP地址、可选字段。IP首部如下图所示。
- 协议版本:协议版本的长度为4比特,有IPV4和IPV6两种,当值为0x4时,表示IPV4,当值为0x6时,表示IPV6;
- 首部长度:首部长度是值IP首部的长度,位宽为4比特,这里需要注意的是这里对IP首部长度的度量单位不是1字节,也不是1比特,而是4字节,比如IP首部长度是20字节时,则首部长度是5(即20/4=5),此时无可选字段;
- 服务类型:服务类型用于描述IP数据包的优先级和服务质量;
- 总长度:总长度是指IP数据报的总长度(不是指IP数据段),包括IP首部+IP数据段的长度,位宽为2字节;
- 标识:用于标识IP数据包,通常由发送方设置;
- 标志:该字段包含3个标志位,分别是MF(More Fragments)、DF(Don’t Fragment)和Reserved,用于控制IP数据包的分片和重组;
- 片偏移:该字段用于指示分片数据在原始数据中的位置;
- 生存时间:生存时间用于控制IP数据包在网络中的生存时间,以避免数据包在网络中无限循环
- 协议:协议部分是指上层协议的类型(即传输层协议的类型),常见的协议号有:0x00(IP协议)、0x01(ICMP协议)、0x06(TCP协议)、0x17(UDP协议);
- 首部校验和:首部校验和是对IP首部进行校验得到的校验和;
- 源IP地址:源主机的IP地址,4字节,比如192.168.0.2;
- 目的IP地址:目的主机的IP地址,4字节,比如192.168.1.1;
- 可选字段:可选,没有的时候长度可以为 0,该字段最大字长度40字节;
- IP数据段:IP数据报的数据段部分;
在这里,IP层的首部校验和计算步骤如下:
(1)将IP首部每16bit(2字节)看成一段数据,如果IP首部的长度不是16bit(2字节)的整数倍,则在IP首部的尾部补充0x00直到IP首部为2字节的整数倍;
(2)将IP首部的每16bit进行累加求和,得到一个32位的累加和;
(3)将32位累加和的高16位与低16位相加,直到得到一个16位的结果;
(4)对16位的结果按位取反,取反后的结果即为IP首部校验和;
需要注意的是,在计算IP首部校验和的时候,需要把IP首部中的首部校验和字段先置为0x00,在计算完IP首部校验和后,再将IP首部校验和填入到该字段。
2.3 UDP层/传输层:
IP数据段部分即UDP数据报,UDP数据报包括UDP首部和UDP数据段两个部分。其中,UDP首部又分为:源端口号、目的端口号、UDP长度、UDP校验和。UDP首部如下图所示。
- 源端口号:2字节,源端口号,需要对方回信时选用,不需要时全部置0;
- 目的端口号:2字节,目的端口号,在终点交付报文时需要用到;
- UDP长度:2字节,UDP数据报的长度,最短为8字节,即不传输数据,UDP数据段为空;
- UDP校验和:2字节,在接收端,根据UDP头部和UDP数据段进行计算得到,在接收端,利用UDP校验和;
- UDP数据段:UDP数据段即用户需要发送的数据;
在这里,对于UDP校验和计算步骤,如下:
(1)将UDP数据报的头部和数据部分看作一个连续的16位字节序列,即将UDP数据报每两个字节看成一段数据(如果UDP数据报的长度为奇数字节,则在尾部补充一个字节0x00);
(2)将这个16位字节序列按照每两个字节一组(即16位一组)进行累加,得到一个32位的累加和;
(3)将32位累加和的高16位与低16位相加,直到得到一个16位的结果;
(4)将16位的结果按位取反,按位取反后得到的值即为UD校验和;
需要注意的是,计算UDP校验和的时候,UDP头部中的校验和字段的值应该先置为0,只有在计算完检验和之后才能在校验和字段填入正确的值。
UDP校验和与IP首部校验和的区别?
UDP校验和与IP首部校验和的计算方法是一致的,区别在于UDP校验和是对UDP层(传输层)的UDP头部和UDP数据段进行校验,而IP首部校验和只是对IP层(网络层)的IP头部进行校验。
2.4 应用层:
UDP层的数据段即应用层的数据报,即用户需要发送的数据。
四、总结
从数据报的格式角度来看,TCP/IP数据包的分层更像是一层一层的包装(套外壳),如下图所示。
在发送端,就像是给一个东西“包装”的过程。如下图所示。从用户层开始,用户传输的数据作为用户层的数据包给到传输层,传输层给其加一层包装(UDP首部)后再传给网络层,网络层对传输层传来的数据包再加上一层包装(IP首部)后传给数据链路层,而数据链路层再对网络层传来的数据包加上一层包装(以太网帧头、FCS)后就可以传到物理层,物理层对数据链路层传来的数据包进行包装(加上前导码、SFD)后就是一帧完整的以太网帧了,就可以用于数据的传输了。
而在接收端,就像是一个“拆包装”的过程,如下图所示。接收到一帧完整的以太网帧,首先从物理层开始拆包装,物理层获取到物理层的包装上的信息(前导码、SFD)后,把拆除外包装的产品(物理层的数据段)丢给数据链路层。数据链路层在获取到数据链路层包装上的信息(以太网帧头、FCS)后,把数据链路层的数据段丢给网络层。然后网络层在获取到网络层的外包装上的信息(IP首部)后,再将网络层拆除包装后的产品(IP数据段)丢给传输层。传输层在获取到传输的外包装上的信息(UDP首部)后,再将传输层拆除包装后的产品(UDP数据段)丢给用户层。最后,用户层即我们最终需要获得的用户发送的数据。
四、写在后面
好了,以上就是关于以太网TCP/IP协议分层的介绍,以及对传输层采用UDP协议,网络层采用IP协议的情况下的各层数据报格式进行讲解。
以上仅为个人学习笔记,如有疑问,欢迎评论区友好交流批评指正!!!