0
点赞
收藏
分享

微信扫一扫

k8s部署使用有状态服务statefulset部署eureka集群,需登录认证

UDP的特点

1. 无连接
知道对服务器的端口号和 IP 即可直接进行传输, 并不需要建立连接
2. 不可靠
没有任何的安全机制, 如 TCP 的 超时重传、确认应答等等, 发送端如果发送数据报以后, 由于网络故障没有送达, UDP 协议层也不会给应用层返回任何的错误信息
3. 面向数据报
应用层交给 UDP 多长的报文, UDP 只能原样发送, 不能拆分, 不能合并
比如传输100个自己的数据:
如果发送端一次性发送 100 个字节, 接收端也必须接受100 个字节, 不可以接受 10 次, 10 个字节
4. 全双工
UDP 的 socket 既可以读也可以写

补充一个缓冲区

  1. UDP 只有接收缓冲区, 不存在发送缓冲区
    发送的数据会直接交给内核进行处理, 由内核将数据交给下面的网络层进行封装, 进行后面的发送操作
  2. UDP 的接收缓冲区不能保证收到的 UDP 数据报和发送的顺序一样, 并且如果接收缓冲区满了以后, 后来到达的数据报都会被丢弃

~

UDP 报文的格式

在这里插入图片描述
基本上所有计网的教材中都有这个图片

以下比较准确
在这里插入图片描述

端口号

  1. 每个端口号在 UDP 报文中, 占据两个字节
    端口号的取值范围是 0 - 65535
  2. 其中 < 1024 的都是一些知名的端口号, 给一些名气大的服务器预留的端口(这部分端口写代码不应该使用), 其实用了也没事, 但是需要管理员权限才能使用
  3. 例如
    http 80
    ssh 22
    ftp 21

    1 - 1023 相当于是 vip 席位, 0 虽然合法但是没有人使用

报文长度

由于其中报文长度最多为 2 个字节, 也就是最多只能表示两个字节, 0 - 65535 == 64KB
所以一个 UDP 报文的最大长度就是 64KB

所以使用 UDP 编程时, 一定要注意数据报的长度不能太长, 否则会出现问题

校验和

由于网络传输是通过电信号, 也就是高低电平表示 0 或者 1 的
如果受到了外部的环境干扰, 如强磁场、太阳黑子等一些干扰, 就有可能导致高电平 -> 低电平, 低电平 -> 高电平

也就是发生了比特翻转,数据传输就出错了

所以就诞生了校验和, 来判定一下, 当前的数据是否出错

如果校验和不对, 此时你的数据一定是错的
如果校验和对, 但是数据也有一定的概率会出错

一般校验和是通过取内容/ 内容的一部分, 通过一些数学公式变换, 算术运算, 得到一个数值.
如果内容发生变化, 校验和也会发生变化, 例如奇偶校验

例如
在这里插入图片描述
发送方, 将数据载荷带入到校验和算法中, 进行计算得到校验和的结果. 设置为 sum1

接收方收到的数据后, 可以利用同样的算法, 对载荷重新计算一遍校验和, 得到 sum2
对比 sum1 和 sum2 进行对比, 如果不相同的话,一定是数据有问题

UDP 一般使用的是 CRC 算法, 感兴趣可以去 b站上了解一下, 这是一个非常简单粗暴的算法

举报

相关推荐

0 条评论