网络之UDP报文

观前提示:本篇博客演示使用的 IDEA 版本为2021.3.3版本,使用的是Java8(又名jdk1.8)

电脑使用的操作系统版本为 Windows 10


目录

前言

UDP协议

UDP 特点

UDP 报文协议

校验和

校验和算法


前言

在上一篇博客中(网络初识),讲到封装的时候,提到了一个"hello"是通过层层包装,才能进行传递,里面涉及到了 UDP 报头,本篇博客将详细介绍 UDP 协议

UDP协议

UDP 特点

在学习 UDP 协议之前,先了解一下UDP 的特点

UDP 有以下四个特点

  1. 不可靠性:只管传输,不管是否成功接收

  2. 无连接:没有建立连接

  3. 面向数据报:报文

  4. 全双工:可以同时进行接收和发送

UDP 报文协议

下图为常见的 UDP 报文协议图,但是,实际上这样画不严谨,这样画是为了方便排版

 实际上的 UDP 报文协议,如下图所示

一个 UDP 报文 = UDP 报头 + UDP 载荷

UDP 就会把载荷数据(通过 UDP socket,也就是send 方法拿来的数据,基础上再在前面拼装上几个字节的报头) 

UDP 报头里面包含了一些特定的属性,携带了一些重要的信息

不同的协议,功能不同,报头中携带的属性信息就不同

对于 UDP 来说,报头一共就8个字节,分成四个部分(每个部分两个字节)

2字节 源端口 (发送方端口)

2字节目的端口 (接收方端口)

2字节 UDP 报文长度

2字节 校验和

一次网络通信,涉及到五元组

源IP,目的IP,源端口,目的端口,协议类型

UDP 报文长度,2个字节长度表示

ps:复习一下不同字节长度,表示的数据范围

2个字节表示的范围是 0 -> 65535 ,换算单位就是64 kb

一个 UDP 数据报,最大只能传输 64kb 的数据

 那么问题来了:超过 64kb ,怎么办?

有两种解决办法

1.在应用层通过代码的方式针对应用层数据报进行手动分包,拆成多个包通过多个 UDP 数据报进行传输(本来send 一次,现在send 多次)

2.不同 UDP ,换成TCP(TCP没有这个限制)

那么这两种方法,哪一个更好呢?

方法1,需要多写很多代码,进行多次测试,还需要处理很多bug

那么不言而喻,方法2,更棒

校验和

校验和:作用是验证传输的数据是否是正确的

网络传输过程中,可能会收到一些干扰,在这些干扰下可能出现"比特翻转"(0变成1,1变成0)

网络传输本质上就是光电信号,这些可能受到一些物理环境的影响(电场,磁场,高能射线)

比如:1111 0000变成了1111 0001

一旦数据变了,对于数据的含义可能是致命的

出名的事故有:

2008年10月7日,澳洲航空72号航班,一架A330于FL370高度飞行时,突然自动执行了先上升再下降等一连串“修正动作”,最后机组关闭了自动驾驶系统,成功着陆,事件导致119人受伤。

《空中浩劫》第18季第7节演绎了这个事件,澳大利亚调查机构ATSB也发布过详细的调查报告。

这样的现象是客观存在的,不可避免,我们能做的就是及时识别出,当前的数据是否出现问题

因此引入了校验和来进行鉴别

针对数据内容进行一系列数学运算,得到一个比较短的结果(比如两字节)

如果数据内容一定,得到的结果和就一定

如果数据内容变了,得到的结果就一定变了

那么是否可能出现这种情况?

假设数据传输过程出错了,但是计算得到的校验和和之前的校验恰好一样?

这种情况理论上存在,但是概率极低,因此忽略不计

校验和算法

针对网络传输的数据来说,生成校验和的算法有很多种

其中比较知名的几个:

1.CRC

循环冗余校验

简单粗暴,把数据的每个字节,循环往上累加,如果累加溢出,高位不要

优点是好算,但是校验效果不理想,万一你的数据同时变动;两个 bit 位(前一个字节少1,后一个字节多1)就会出现内容变了,但是 CRC 没变

2. MD5

MD5是一种常用的哈希(Hash)算法,它可以将任意长度的消息(message)转换为一个128位的摘要(digest),也被称为MD5值。MD5主要具有以下四个特点:

  1. 不可逆性:MD5是一种不可逆的哈希算法,这意味着无法通过MD5值反推出原始消息。对于相同的输入,MD5生成的固定长度的哈希值总是相同的,而不同的输入则会生成不同的哈希值。

  2. 独立性:MD5生成的哈希值与原始消息的长度无关,只与消息内容相关。这意味着无论输入的消息大小如何,MD5总是能够以固定长度的值来表示该消息。

  3. 低碰撞率:MD5算法在设计时考虑了尽可能降低哈希值冲突的概率。虽然MD5算法已经存在一些碰撞攻击方法,但目前在普通计算机上实现碰撞攻击仍需要较大的计算资源和时间。

3. SHA-1

SHA-1(Secure Hash Algorithm 1)是一种常用的哈希算法,它能够将任意长度的消息(message)转换为160位的摘要(digest),也被称为SHA-1值。SHA-1与MD5类似,但较之MD5更安全,具有以下特点:

  1. 碰撞概率低:SHA-1算法在设计时考虑了尽可能降低哈希值冲突的概率,比MD5等其它哈希算法碰撞率更低。虽然SHA-1算法已经出现一些破解方法,但其安全性比MD5要高。

  2. 不可逆性:SHA-1是一种不可逆的哈希算法,与MD5类似,无法通过SHA-1值反推出原始消息,只能通过再次计算哈希值来验证消息是否相同。

  3. 独立性:SHA-1生成的哈希值与原始消息的长度无关,只与消息内容相关。这意味着无论输入的消息大小如何,SHA-1总是能够以固定长度的值来表示该消息。

  4. 高效性:SHA-1算法具有高效性,能够快速地处理大量数据并生成哈希值,在网络传输中得到广泛应用。相对于其它哈希算法,如SHA-256、SHA-512等,SHA-1算法的运算速度较快。


本文完,感谢观看,有什么错误和不足的地方请在评论区指出,一起进步,谢谢 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值