UDP-Lite
来源:互联网 发布:surge mac 下载 编辑:程序博客网 时间:2024/04/30 18:05
http://blog.chinaunix.net/uid-9863638-id-1996362.html
http://www.erg.abdn.ac.uk/~gerrit/udp-lite/ ----- 说白了,就是只计算部分内容的checksum,而不是计算全部。
UDP-Lite协议相对来说是较新的,和UDP协议有些类似,但是它更加适应于网络的差错率比较大,但是应用对轻微差错不敏感的情况,例如实时视频的播放等。
那么它与传统的UDP协议有什么不同呢?
传统的UDP协议是对其载荷(Payload)进行完整的校验的,如果其中的一些位(哪怕只有一位)发生了变化,那么整个数据包都有可能被丢弃,在某些情况下,丢掉这个包的代价是非常大的,尤其当包比较大的时候。在UDP-Lite协议中,一个数据包到底需不需要对其载荷进行校验,或者是校验多少位都是由用户控制的(leeming注释:这是这种可选择性,其实udp_lite的代码实现是比udp复杂的,though 字面上有个lite),并且UDP-Lite协议就是用UDP协议的Length字段来表示其Checksum Coverage的,所以当UDP-Lite协议的Checksum Coverage字段等于整个UDP数据包(包括UDP头和载荷)的长度时,UDP-Lite产生的包也将和传统的UDP包一模一样。事实上,Linux对UDP-Lite协议的支持也是通过在原来的UDP协议的基础上添加了一个setsockopt选项来实现控制发送和接受的checksum coverage的:
int val = 20;
setsockopt(s, SOL_UDPLITE, UDPLITE_SEND_CSCOV, &val, sizeof(int));
int min = 20;
setsockopt(s, SOL_UDPLITE, UDPLITE_RECV_CSCOV, &min, sizeof(int));
创建一个UDP-Lite套接字也是很简单的:
s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE);
所以将一个UDP程序移植到UDP-Lite是相当得简单。
需要注意的是Checksum Coverage的范围为:
- 当其值为0时,表示对整个UDP-Lite数据包进行校验。
- 当其值>=8时,表示对UDP-Lite包的前Checksum Coverage个字节进行校验。
- 其他值是非法的,包括超过了UDP-Lite数据包大小的Checksum Coverage值。
- UDP-Lite
- ISAPI_Rewrite Lite
- SOAP::Lite
- firebug lite
- SQL Lite
- DIDL-Lite
- jCarousel Lite
- IRC lite
- iconv-lite
- Sql Lite
- lite-server
- TensorFlow Lite
- Photon官方Lite类中Lite Concepts
- UDP
- UDP
- udp
- UDP
- UDP
- 状态模式
- JSONObject对象使用
- 日志打印到屏幕同时保存到文件及获取管道返回状态
- 多个版本Unity4.x并存的解决方案
- stl priority_queue
- UDP-Lite
- mutable_C++关键字
- BLA、CRA、IDR、GOP、RAP
- 性能测试工具sysbench简介
- zoj 2478 Encoding
- C 语言中的数据类型
- V5复杂同期比
- mysql使用mysqldump进行数据库备份
- 命令者模式