|
JavaEE
JavaEE——No.2 套接字编程(TCP)
JavaEE——网络原理_应用层
目录
- 传输层
- UDP
传输层
端到端之间的传输, 重点关注的是起点和终点
核心的协议有两个:
UDP
: 无连接, 不可靠传输,面向数据报, 全双工
TCP
: 有链接, 可靠传输, 面向字节流, 全双工
UDP
UDP协议端格式
实际的格式是
# 注意 #
- 拆成多个 UDP 数据报, 分别传输. 开发起来会比较复杂, 测试起来也比较复杂, 风险较高
- 这时的解决方案是 直接使用 TCP, TCP 是字节流的, 没有对包的长度作出限制.
举个例子, 了解什么是校验和:
小Gujiu 让 大GUJIU 去买棒棒糖: “要一个草莓味的, 一个菠萝味的, 一个橘子味的, 一共三种味道.”
最后一句 “一共三种味道” 就相当于是 校验和, 大GUJIU 买棒棒糖的时候, 对照 “一共三种” 来检查是不是正确.
好的校验和算法, 是要能够和数据内容相关的, 不同的内容, 就会产生不同的校验和
UDP
的校验和使用一个比较常见的 CRC
算法(循环冗余校验)
把 UDP
报文种的每个字节, 都进行累加. 加和也放到一个 两个字节 的数字中.
加的过程中如果溢出了, 就溢出. 最终得到的结果, 就是校验和
.
- 发送方发送的时候, 先计算一个校验和
- 接收方按照同样的规则, 再算一遍校验和, 来看一下自己算的校验和和 发送方算二的校验和是不是一样的.
有没有可能, 数据里有个地方少1, 有个地方多1, 导致最终校验和不变呢?
理论和三个存在, 实践中概率极低, 毕竟有一个比特位发生变化, 已经是小概率事件. 恰好两个比特位, 正好在合适的位置概率太低了, 忽略不计.
|
以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!