UDP的报文结构

UDP 报文结构

UDP的报文结构_第1张图片
基本上所有的教科书上都是这样画的图, 但实际上 UDP 报文结构不是这样的, 这样显示应该是容易排版.
正确应该如下图 :

UDP的报文结构_第2张图片

  1. 端口号 :
    每个端口号在 UDP 报文里占两个字节, 取值范围就是: 0 ~ 65535
    源 ip 和源端口描述了数据从哪里来, 目的 ip 和目的端口描述了数据去哪里.

补充 : 小于 1024 的端口称为 “知名端口”, 是给一些名气比较大的服务器预留的端口, 这部分端口在我们写代码时, 不应该使用. (如果某个知名端口没有被使用, 那么使用这个端口也没关系)

  1. 报文长度 :
    就是整个报文(报头加载荷)多大, 两字节也就是 64kb 大小, 也就是说一个 UDP 报文最大长度就是 64kb.

那如果要传输一个比较大的数据咋办呢?

  1. 可以对大的数据进行拆分, 使用多个数据报来传输. (涉及到数据的拆分,比较复杂)
  2. 不用 UDP 了, 直接用 TCP, TCP 没有限制.

总结 : 使用 UDP 编程的时候, 要注意 UDP 的数据报不能太长, 否则会出问题.

  1. 校验和 :
    网络传输其实并非是很稳定的, 经常会出错的. 在数据传输过程中, UDP 报头和载荷都可能出错. 校验和就是用来检查当前传输的载荷是否出错的.

校验和其实就是用载荷内容进行某种算术运算后得到的数据, 在 UDP 报文发出前计算一次校验和, 然后接收方收到后也根据载荷内容计算一次, 根据是否相同来判断数据是否出错了.

如果校验和不对, 那么数据一定出错了; 如果校验和对了, 数据也是有一定的概率出错的.
为了让校验和能够识别率高一点, 计算的时候通常会以数据的内容作为参数进行计算, 数据内容发生变化, 校验和也就发生变化.

你可能感兴趣的:(JavaEE,udp,网络,javaee)