1、UDP(User Datagram Protocol,用户数据报协议)
1.1、UDP提供的服务
- 在IP层基础上添加多路复用解复用、差错控制;
- 没有握手(没有建立连接),无建立延时;
- 头部小仅8字节,开销小;
- 可能丢失、可能乱序;
既使用UDP又想可靠传输:在应用层实现可靠性;
1.2、UDP的应用场景
- 流媒体(丢失不敏感、速率敏感、应用可控制传输速率);
- DNS 域名解析、SNMP 简单网络管理协议; (快速、一次性传输少量数据的网络应用);
1.3、用户数据报的含义
UDP(User Datagram Protocol)是面向报文的,对应用层交下来的报文,添加首部后直接向下交付给IP层,既不合并,也不拆分,保留这些报文的边界。
对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。
正是因为这样,UDP不能控制读写数据的次数和数量。比如调用一次sendto函数就会发送100字节,对端也需要用recvfrom函数一次性接收100字节,不能使用循环每次获取10个字节,获取10次这样的做法。
2、UDP报文格式
UDP数据报分为:UDP首部、UDP数据部分;
UDP首部
- 源端口: 需要对方回信时选用,不需要时置0;
- 目的端口:在终点交付报文的时候需要用到;
- 长度:UDP的数据报的长度(包括首部和数据),其最小值为8(只有首部);
- 校验和:检测UDP数据报在传输中是否有错,有错则丢弃;
3、校验和
计算校验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。
伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。
计算方法:
发送端:将伪首部、首部、数据三部分,求和(进位回卷),然后取反,即为校验和EDC;
接收端:也将这三部分求和(进位回卷),然后与EDC相加,全1则正确;否则丢弃该报文,并由ICMP发送“端口不可达”;
参考链接:大同小异,这两篇都是搜索时靠前的;