在这一篇文章当中,我们简单提到了TCP-IP五层模型
下面,将会详细介绍一下TCP、UDP的结构等等信息
目录
UDP协议报文结构
在上一篇文章当中,也提到了UDP报文的结构,大致长这样:
UDP报头(包含源端口和目的端口) | 1234567 | 7654321 | 2023-1-14 | "hello" |
其中,黑体部分是UDP报头,黑体部分往后就是UDP载荷,载荷部分,也就是完整的应用层数据包。
下面,将重点说明一下,UDP报头当中的一些重要信息:
UDP报头结构
对于UDP报头来说,报头一共8个字节,被分成了4个部分,每一个部分都是2字节;
关于源端口和目的端口这两个概念,已经在上一篇文章当中提到了。
下面,讲一下UDP报文长度和校验和两个属性
UDP报文长度:最大只能传输64kb
UDP报文长度,在上面提到了是记录整一个UDP报文的大小的一个属性。
这个字段占了2字节,一个字节占了8个比特位,那么两个字节就占了16个比特位。
那么,范围就是(0,2^16-1),也就是(0,65535)
换算过去,也就是说,一个UDP数据报,最大只能传输64Kb的数据。也就是说,每send一次,最多只能传输64kb的数据,这一个量已经是非常小的了。
为了解决这个问题,有以下两种方案:
方案一:多次发送UDP请求。如果一个文件过大,那么一次UDP请求发送不了,可以分开多次进行发送;
方案二:改成TCP请求,因为TCP请求是面向字节流的,发送的方式是以流的方式,一次可以以流的形式,发送多个TCP段
校验和
网络信号,最终都是以电信号,也就是10000011...这样的二进制信号进行传输的。
由于传输的过程可能会受到各种各样的影响,因此肯能会出现发送和接收的数据出现差异的情况,因此需要一个校验和来校验发送和接收的情况。
ps:如果数据内容一致,那么得到的校验和也是一致的。
校验其实就是发送方和接收方根据数据的内容根据相同的算法,进行一个计算。
至于这个校验的算法,下面有常见的三种:
第一种:CRC
循环冗余校验,把传输过来的报文的每一个字节,循环往上累加;如果溢出了,那么就舍弃高位,保留低位。比较暴力:如果一个比特位从1变为0,另外一个由0变为1,那么就会出现内容变了但是校验和没有变的尴尬情况。
第二种:MD5
有一系列公式,来进行比较复杂的数学公式计算,得到的结果。
特点:
①定长的,无论原始数据多长,得到的最终结果都是固定的长度(4字节/8字节)
②冲突概论小,哪怕原来的数据只有一点点的改动,对应到加密生成的数据都变化特别大;
③不可逆,只能由明文转化为密文,不可以由密文转化为明文。
因此,MD5算法可以用作传输的校验和,也可以用作hash算法的计算。