JavaWeb UDP报文结构

        UDP协议是传输层的协议,是无连接的,不可靠传输,面向数据报,全双工的一种协议。与其相对应的,是TCP协议。这里讨论UDP协议。

UDP协议的报文格式

        这是教科书上的UDP报文结构,但是实际中的结构并不是这样的,而是如下的结构。

        源端口号相当于发件人的电话、目的端口号相当于收件人的电话、UDP报文长度,表示了一个UDP数据报有多长,单位是字节,最大两个字节、校验和对数据进行验证,相当于验货。

        使用IP地址来区分当前是哪一个主机,一个主机上可能有多个应用程序,使用端口号来区分应用程序。不同的应用程序有自己的端口号,使用端口号,就能够体现出“我是谁,从哪来到哪去,要去找谁”,网络编程需要明确这一点。

        一个UDP报文长度最大两个字节64KB,用当今的互联网的角度来看是一个比较小的数据,这就有了一个问题: 当今的互联网发展很快,数据的传输和增长是爆炸性的,如果在代码中使用UDP协议,就需要保证一个数据报不能超过64KB,否则就发不过去。为了解决这个问题,可以将数据报进行拆分传输,但是这个方案是很复杂的。网络上的通信有一个特点是后发先至,当网络发生一些状况,会导致发送的顺序和接收的顺序不一致,导致数据报的拼接出现问题;放弃使用UDP,使用TCP代替UDP,TCP没有长度的限制。

        网络传输中,传输的数据,不一定是准确无误的,本质上是使用光信号/电信号,在传输的过程中,信号是可能受到干扰的,干扰可能造成“比特反转”,尤其是无线更有可能受到干扰。接收方收到数据后,需要验证一下,看看当前的数据是否是正确的。校验和,可以认为是针对数据特征进行的“摘要”,接收方就可以根据校验和来进行检查。UDP传输数据,在发送的时候,针对需要传输的数据,计算一个校验和,把数据连带校验和发送过去,接收的时候,针对收到的数据,重新计算校验和,对比自己计算的校验和和发来的校验和是不是一样的。如果是一样的,说明数据是没设密码问题的,否则就有问题。UDP使用校验和的算法,是一种非常简单的CRC循环冗余校验和,把数据的每一个字节,往上相加,如果超出了范围,溢出的数据就舍去,所有的字节都累加完成,得到的结果就是校验和。

        校验和不能完全确保数据的发送是正确的,但是数据发生传输错误的概率是很小的,同时能够错到一块,并且校验和还没变,这种概率是非常非常小的。

UDP协议的特点

(1)无连接。如果知道通信双方的IP和端口号,就不需要建立连接。类似于发微信,不必建立连接,直接通信。

(2)不可靠传输。发送方发送的数据,接收方接收到没接收到,发送方是不知道的,也不需要管接收方是不是接收到。

(3)面向数据报。以数据报为传输通信的基本单位。

(4)全双工。通信双方双向通信,a给b发送通信和b给a发送通信是可以同时进行的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值